Цитата
Виконання запиту в циклі... в яких випадках можна ?
Запрос в цикле всегда зло. Если есть возможность вынести запрос за рамки цикла (не важно это будет одни запрос или как описали выше блоки), то всегда это нужно делать.
Например (сугубо в качестве кейса),
ТекстЗапроса =
"
|Выбрать Н.Ссылка Из Справочник.Номенклатура КАК Н";
Пока Выборка.Следующий() Цикл
Сообщить(""+Выборка.Ссылка + " "+Выборка.Ссылка.Артикул);
КонецЦикла;
является ошибкой, т.к. обращение через точку к ссылке является неявным запросом к базе.
Будет выполнены неявные запросы на получение представления ссылки и получения артикула по ссылке чтобы выдать в Сообщить
Представление ссылки и артикул в данном кейсе нужно выносить в запрос.
Из практики вспомнил несколько кейсов использования запроса в цикле:
1. Запрос в цикле у меня использовался когда результат следующего запроса зависел от предыдущего.
Например (опять сугубо в качестве кейса),
Запросом формировалась первичная ВТ
Затем шел какой-то цикл
Пока Истина Цикл
// Выбрать * ПОМЕСТИТЬ ВТ_1 из ВТ
//
// Изменяем данные ВТ_1 в запросе по какой-то логике, которая определяется циклом
//
// - Уничтожить ВТ
// Выбрать * ПОМЕСТИТЬ ВТ из ВТ_1
// - Уничтожить ВТ_1
//
// в следующей итерации цикла используем обновленные данные ВТ
КонецЦикла;
2. Построение отчета ПНЛ, цифры (формулы, источники и прочее) которого определялись настройками справочника, но там по сути такой же подход был как и в 1 кейсе. Каждая следующая строка ПНЛ имела свою логику, которая могла (или не могла) зависеть от данных предыдущих строк.