You've already forked v8-code-style
mirror of
https://github.com/1C-Company/v8-code-style.git
synced 2025-12-01 17:10:47 +02:00
Включение проверки запросов в цикле, так как найден стандарт (#844)
* Включение проверки запросов в цикле, так как найден стандарт * Описание проверки по стандарту 436
This commit is contained in:
committed by
GitHub
parent
a447dbd8b8
commit
5f736c7f8e
@@ -1,8 +1,54 @@
|
||||
# Query in loop
|
||||
|
||||
It is recommended that you merge queries that address related data into a single query.
|
||||
|
||||
## Noncompliant Code Example
|
||||
|
||||
```bsl
|
||||
// BanksToProcessing - contains an array of banks
|
||||
|
||||
InidividualQuery = New Query;
|
||||
InidividualQuery.Text =
|
||||
"SELECT
|
||||
| BankAccounts.Ref AS Account
|
||||
|FROM
|
||||
| Catalog.BankAccounts AS BankAccounts
|
||||
|WHERE
|
||||
| BankAccounts.Bank = &Bank");
|
||||
|
||||
For Each Bank From BanksToProcess Do
|
||||
InidividualQuery .SetParameter("Bank", Bank);
|
||||
AccountsSelection = InidividualQuery .Execute().Select();
|
||||
While AccountsSelection.Next() Do
|
||||
ProcessBankAccounts(AccountsSelection.Account);
|
||||
EndDo;
|
||||
EndDo;
|
||||
```
|
||||
|
||||
## Compliant Solution
|
||||
|
||||
```bsl
|
||||
// BanksToProcess - contains an array of banks
|
||||
|
||||
MergedQuery = New Query;
|
||||
MergedQuery.Text =
|
||||
"SELECT
|
||||
| BankAccounts.Ref AS Account
|
||||
|FROM
|
||||
| Catalog.BankAccounts AS BankAccounts
|
||||
|WHERE
|
||||
| BankAccounts.Bank B(&BanksToProcess)";
|
||||
|
||||
MergedQuery.SetParameter("BanksToProcess", BanksToProcess);
|
||||
|
||||
AccountsSelection = MergedQuery.Execute().Select();
|
||||
While AccountsSelection.Next() Do
|
||||
ProcessBankAccounts(AccountsSelection.Account);
|
||||
EndDo;
|
||||
```
|
||||
|
||||
## See
|
||||
|
||||
https://support.1ci.com/hc/en-us/articles/360011001620-Multiple-execution-of-the-similar-queries
|
||||
|
||||
https://support.1ci.com/hc/en-us/articles/360011001540-Rounding-arithmetic-results-in-queries
|
||||
|
||||
@@ -1,9 +1,54 @@
|
||||
# Запрос в цикле
|
||||
|
||||
Рекомендуется получать все необходимые однотипные данные одним запросом, вместо выполнения серии запросов.
|
||||
|
||||
## Неправильно
|
||||
|
||||
```bsl
|
||||
// БанкиДляОбработки - содержит массив банков, счета в которых необходимо обработать
|
||||
|
||||
ЧастныйЗапрос = Новый Запрос;
|
||||
ЧастныйЗапрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| БанковскиеСчета.Ссылка КАК Счет
|
||||
|ИЗ
|
||||
| Справочник.БанковскиеСчета КАК БанковскиеСчета
|
||||
|ГДЕ
|
||||
| БанковскиеСчета.Банк = &Банк";
|
||||
|
||||
Для Каждого Банк Из БанкиДляОбработки Цикл
|
||||
ЧастныйЗапрос.УстановитьПараметр("Банк", Банк);
|
||||
ВыборкаСчетов = ЧастныйЗапрос.Выполнить().Выбрать();
|
||||
Пока ВыборкаСчетов.Следующий() Цикл
|
||||
ОбработатьСчетаВБанке(ВыборкаСчетов.Счет);
|
||||
КонецЦикла;
|
||||
КонецЦикла;
|
||||
```
|
||||
|
||||
## Правильно
|
||||
|
||||
```bsl
|
||||
// БанкиДляОбработки - содержит массив банков, счета в которых необходимо обработать
|
||||
|
||||
ОбщийЗапрос = Новый Запрос;
|
||||
ОбщийЗапрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| БанковскиеСчета.Ссылка КАК Счет
|
||||
|ИЗ
|
||||
| Справочник.БанковскиеСчета КАК БанковскиеСчета
|
||||
|ГДЕ
|
||||
| БанковскиеСчета.Банк В(&БанкиДляОбработки)";
|
||||
|
||||
ОбщийЗапрос.УстановитьПараметр("БанкиДляОбработки", БанкиДляОбработки);
|
||||
|
||||
ВыборкаСчетов = ОбщийЗапрос.Выполнить().Выбрать();
|
||||
Пока ВыборкаСчетов.Следующий() Цикл
|
||||
ОбработатьСчетаВБанке(ВыборкаСчетов.Счет);
|
||||
КонецЦикла;
|
||||
```
|
||||
|
||||
## См.
|
||||
|
||||
https://its.1c.ru/db/pubqlang#content:150:hdoc
|
||||
https://its.1c.ru/db/v8std/content/436/hdoc
|
||||
|
||||
https://its.1c.ru/db/pubqlang#content:150:hdoc
|
||||
|
||||
@@ -112,7 +112,6 @@ public class QueryInLoopCheck
|
||||
//@formatter:off
|
||||
builder.title(Messages.QueryInLoop_title)
|
||||
.description(Messages.QueryInLoop_description)
|
||||
.disable()
|
||||
.complexity(CheckComplexity.NORMAL)
|
||||
.severity(IssueSeverity.CRITICAL)
|
||||
.issueType(IssueType.PERFORMANCE)
|
||||
|
||||
Reference in New Issue
Block a user