Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Виконання запиту в циклі... в яких випадках можна ?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
alex-l1904
Доброго дня,
всім відомо, що запит в циклі це погано...

Але... якщо обробка результату кожного запиту триває по кілька хвилин,
то можна вважати, що це просто послідовне виконання запитів?

Як вважаєте ?
Vofka
Цитата(alex-l1904 @ 12.05.23, 9:46) необходимо зарегистрироваться для просмотра ссылки
то можна вважати, що це просто послідовне виконання запитів?

Я так не вважаю. Але якщо
Цитата(alex-l1904 @ 12.05.23, 9:46) необходимо зарегистрироваться для просмотра ссылки
обробка результату кожного запиту триває по кілька хвилин

То пофігу. Але за можливості слід намагатися робити меншу кількість запитів в будь-якому випадку.
andr_andrey
alex-l1904 @ Сегодня, 9:46 необходимо зарегистрироваться для просмотра ссылки ,
Завжди зважають на ситуацію, мислити догматами шкідливо для результату.
Результат майже завжди - компроміс.
Moloko
А що заважає поставити в самому запиті необхідне додаткове групування?
zay
alex-l1904 @ Сегодня, 9:46 необходимо зарегистрироваться для просмотра ссылки ,
Вважаю так: якщо ви бачите, що с самого початку запит виходить занадто складний, а у майбутньому може бути змінена бізнес логіка і це повністю поламає запит, то краще одразу розбивайте заповнення даних на окремі запити/функції
Вносити зміни в окремі функції потребує меньше часу ніж переписувати складні запити
Batchir
Цитата
Виконання запиту в циклі... в яких випадках можна ?

Запрос в цикле всегда зло. Если есть возможность вынести запрос за рамки цикла (не важно это будет одни запрос или как описали выше блоки), то всегда это нужно делать.
Например (сугубо в качестве кейса),
ТекстЗапроса = 
"
|Выбрать Н.Ссылка Из Справочник.Номенклатура КАК Н";
Пока Выборка.Следующий() Цикл
Сообщить(""+Выборка.Ссылка + " "+Выборка.Ссылка.Артикул);
КонецЦикла;


является ошибкой, т.к. обращение через точку к ссылке является неявным запросом к базе.
Будет выполнены неявные запросы на получение представления ссылки и получения артикула по ссылке чтобы выдать в Сообщить
Представление ссылки и артикул в данном кейсе нужно выносить в запрос.

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


2. Построение отчета ПНЛ, цифры (формулы, источники и прочее) которого определялись настройками справочника, но там по сути такой же подход был как и в 1 кейсе. Каждая следующая строка ПНЛ имела свою логику, которая могла (или не могла) зависеть от данных предыдущих строк.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.