Условие по реквизиту номенклатуры через точку в запросе к оборотам
На большой базе этот запрос выполняется в разы дольше, чем такой же запрос без условия:
ВЫБРАТЬ
Продажи.Номенклатура КАК Номенклатура,
Продажи.СуммаОборот КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи
ГДЕ
Продажи.Номенклатура.ВидНоменклатуры = &ВидНоменклатуры
По виду номенклатуры отбирается небольшая часть ассортимента. Что происходит и как это чинить?
- Условие по реквизиту перечислимого типа всегда проверяется построчно, поэтому его нужно заменить соединением со списком нужных видов номенклатуры по условию ИЛИ
- Виртуальная таблица оборотов не поддерживает условия в секции ГДЕ и пересчитывает итоги на каждую строку результата
- Не указана периодичность в параметрах виртуальной таблицы: без неё платформа игнорирует границы периода и читает движения за всю историю регистра, отсюда и разница во времени
- Точка разворачивается в соединение со справочником, а отбор применяется уже после расчёта оборотов: номенклатуру нужно отобрать во временную таблицу и передать в параметр виртуальной таблицы
