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

Условие по реквизиту номенклатуры через точку в запросе к оборотам

На большой базе этот запрос выполняется в разы дольше, чем такой же запрос без условия:

ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    Продажи.СуммаОборот КАК Сумма
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи
ГДЕ
    Продажи.Номенклатура.ВидНоменклатуры = &ВидНоменклатуры

По виду номенклатуры отбирается небольшая часть ассортимента. Что происходит и как это чинить?

  • Условие по реквизиту перечислимого типа всегда проверяется построчно, поэтому его нужно заменить соединением со списком нужных видов номенклатуры по условию ИЛИ
  • Виртуальная таблица оборотов не поддерживает условия в секции ГДЕ и пересчитывает итоги на каждую строку результата
  • Не указана периодичность в параметрах виртуальной таблицы: без неё платформа игнорирует границы периода и читает движения за всю историю регистра, отсюда и разница во времени
  • Точка разворачивается в соединение со справочником, а отбор применяется уже после расчёта оборотов: номенклатуру нужно отобрать во временную таблицу и передать в параметр виртуальной таблицы

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

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

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

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