Вступить в клуб →
средняявопросЗапросы, СКД и производительность

Запрос внутри цикла по строкам табличной части документа

Заполнение цен в документе реализовано так:

Для Каждого Строка Из Объект.Товары Цикл
    Запрос.УстановитьПараметр("Номенклатура", Строка.Номенклатура);
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        Строка.Цена = Выборка.Цена;
    КонецЕсли;
КонецЦикла;

В документах закупки бывает до 2000 строк, заполнение занимает несколько минут и подвешивает сеанс.

Что нужно изменить в первую очередь?

  • Обернуть цикл в явную транзакцию: обращения к базе тогда уйдут одним пакетом, и накладные расходы на каждый отдельный запрос исчезнут
  • Выполнить один запрос: передать в него табличную часть параметром, получить цены для всех строк сразу и разложить результат по строкам
  • Отсортировать табличную часть по номенклатуре, чтобы сервер переиспользовал план запроса
  • Перенести цикл на клиент, чтобы разгрузить сервер приложений

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела