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