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