Код-ревью Senior Виртуальные таблицы регистров обновлено

Ревью: цена на дату каждого документа

Вопрос

Нужна цена каждого товара на дату каждого документа реализации за месяц. Найдите ошибки в запросе.

ВЫБРАТЬ
	Т.Ссылка КАК Документ,
	Т.Номенклатура,
	Цены.Цена
ИЗ
	Документ.Реализация.Товары КАК Т
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&Дата) КАК Цены
		ПО Т.Номенклатура = Цены.Номенклатура
ГДЕ
	Т.Ссылка.Дата МЕЖДУ &Начало И &Конец

Коротко

Классическое решение «срез на дату документа»: временная таблица товаров с датами документов, затем для каждой пары МАКСИМУМ(Цены.Период) с условием Период <= ДатаДокумента и соединение с регистром по найденному периоду. Срез одной датой подходит только для отчёта на одну дату.

Что должен найти ревьюер

  1. Ошибкастрока 7
    Срез на одну дату &Дата, а нужен на дату каждого документа: цены будут неверны для документов с другими датами. Нужна схема с МАКСИМУМ(Период) не позже даты документа и соединением с физической таблицей регистра.
  2. Производительностьстрока 7
    Срез строится по всем товарам базы: нет условия в параметрах (товары из документов во временной таблице).
  3. Производительностьстрока 10
    Т.Ссылка.Дата неявное соединение с шапкой документа; лучше отобрать документы во временную таблицу по диапазону дат.

Разбор

Классическое решение «срез на дату документа»: временная таблица товаров с датами документов, затем для каждой пары МАКСИМУМ(Цены.Период) с условием Период <= ДатаДокумента и соединение с регистром по найденному периоду. Срез одной датой подходит только для отчёта на одну дату.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.