Перейти к содержанию

Выполнение запроса в цикле (CreateQueryInCycle)

Тип Поддерживаются
языки
Важность Включена
по умолчанию
Время на
исправление (мин)
Теги
Ошибка BSL
OS
Критичный Да 20 performance

Описание диагностики

Исполнение запроса в цикле.

Примеры

Неправильно

СписокДокументов = Новый Массив;    
СуммаДокументов = 0;
Для индекс = 0 По СписокДокументов.ВГраница() Цикл
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ПоступлениеТоваровУслуг.СуммаДокумента
        |ИЗ
        |   Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        |ГДЕ
        |   ПоступлениеТоваровУслуг.Ссылка = &Ссылка";

    Запрос.УстановитьПараметр("Ссылка", СписокДокументов[индекс]);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        СуммаДокументов = СуммаДокументов + ВыборкаДетальныеЗаписи.СуммаДокумента;
    КонецЦикла;
КонецЦикла;

Правильно

СписокДокументов = Новый Массив;    
СуммаДокументов = 0;

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   СУММА(ПоступлениеТоваровУслуг.СуммаДокумента) КАК СуммаДокумента
    |ИЗ
    |   Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    |ГДЕ
    |   ПоступлениеТоваровУслуг.Ссылка В(&СписокДокументов)";

Запрос.УстановитьПараметр("Ссылка", СписокДокументов);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    СуммаДокументов = ВыборкаДетальныеЗаписи.СуммаДокумента;
КонецЦикла;

Сниппеты

Экранирование кода

// BSLLS:CreateQueryInCycle-off
// BSLLS:CreateQueryInCycle-on

Параметр конфигурационного файла

"CreateQueryInCycle": false