Код-ревью Middle Язык запросов обновлено

Ревью запроса

Вопрос

Запрос строит отчёт о продажах по контрагентам за период. Найдите проблемы.

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

Коротко

Хороший вариант: ВЫБРАТЬ П.Контрагент, СУММА(П.СуммаОборот) ИЗ РегистрНакопления.Продажи.Обороты(&Начало, &Конец, , ) КАК П СГРУППИРОВАТЬ ПО П.Контрагент, с отбором по нужному реквизиту контрагента в условии виртуальной таблицы.

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

  1. Ошибкастрока 1
    РАЗЛИЧНЫЕ схлопывает разные продажи с одинаковой суммой: часть сумм пропадёт. Дубли надо не маскировать, а не создавать.
  2. Производительностьстрока 2
    Регистратор составного типа: точка порождает соединения со всеми таблицами документов. У регистра есть своё измерение Контрагент, им и пользоваться.
  3. Ошибкастрока 3
    Нет группировки и суммирования: отчёт по контрагентам должен быть СУММА с СГРУППИРОВАТЬ ПО.
  4. Ошибкастрока 6
    Соединение с контактными лицами размножает строки продаж и ничего не добавляет в результат.
  5. Производительностьстрока 9
    Для регистра оборотов эффективнее виртуальная таблица Обороты(&Начало, &Конец) с условием в параметрах, чем отбор физической таблицы.
  6. Производительностьстрока 10
    ПОДОБНО с % в начале не использует индекс; отбор по виду контрагента лучше делать реквизитом, а не по тексту наименования.

Разбор

Хороший вариант: ВЫБРАТЬ П.Контрагент, СУММА(П.СуммаОборот) ИЗ РегистрНакопления.Продажи.Обороты(&Начало, &Конец, , ) КАК П СГРУППИРОВАТЬ ПО П.Контрагент, с отбором по нужному реквизиту контрагента в условии виртуальной таблицы.

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

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