Перейти к содержанию
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

Соответствие стандартам

Источник диагностики