v8cs:query-in-loop¶
Запрос в цикле (query-in-loop)¶
- Категория:
bsl
Рекомендуется получать все необходимые однотипные данные одним запросом, вместо выполнения серии запросов.
Неправильно¶
// БанкиДляОбработки - содержит массив банков, счета в которых необходимо обработать
ЧастныйЗапрос = Новый Запрос;
ЧастныйЗапрос.Текст =
"ВЫБРАТЬ
| БанковскиеСчета.Ссылка КАК Счет
|ИЗ
| Справочник.БанковскиеСчета КАК БанковскиеСчета
|ГДЕ
| БанковскиеСчета.Банк = &Банк";
Для Каждого Банк Из БанкиДляОбработки Цикл
ЧастныйЗапрос.УстановитьПараметр("Банк", Банк);
ВыборкаСчетов = ЧастныйЗапрос.Выполнить().Выбрать();
Пока ВыборкаСчетов.Следующий() Цикл
ОбработатьСчетаВБанке(ВыборкаСчетов.Счет);
КонецЦикла;
КонецЦикла;
Правильно¶
// БанкиДляОбработки - содержит массив банков, счета в которых необходимо обработать
ОбщийЗапрос = Новый Запрос;
ОбщийЗапрос.Текст =
"ВЫБРАТЬ
| БанковскиеСчета.Ссылка КАК Счет
|ИЗ
| Справочник.БанковскиеСчета КАК БанковскиеСчета
|ГДЕ
| БанковскиеСчета.Банк В(&БанкиДляОбработки)";
ОбщийЗапрос.УстановитьПараметр("БанкиДляОбработки", БанкиДляОбработки);
ВыборкаСчетов = ОбщийЗапрос.Выполнить().Выбрать();
Пока ВыборкаСчетов.Следующий() Цикл
ОбработатьСчетаВБанке(ВыборкаСчетов.Счет);
КонецЦикла;
См.¶
https://its.1c.ru/db/v8std/content/436/hdoc
https://its.1c.ru/db/pubqlang#content:150:hdoc
Соответствие стандартам¶
- #std436, п. 1: Многократное выполнение однотипных запросов — Диагностика v8cs:query-in-loop проверяет требование пункта 1 стандарта std436.
Источник диагностики¶
- Исходная статья
- Ревизия:
c8fe7932babf718c0ace3cf836a99d6a3b98d098 - Лицензия:
EPL-2.0