Часто при разработке отчетов на базе Системы Компоновки Данных (СКД) возникает задача: сделать отбор по параметру необязательным. Мы хотим, чтобы, если пользователь оставил поле выбора (например, контрагента) пустым, система выводила в отчет весь список данных, а не пустую выборку. В обычном запросе мы привыкли использовать конструкцию ВЫБОР КОГДА ... ТОГДА ... КОНЕЦ, однако в СКД существуют более элегантные и производительные способы решения этой задачи. Давайте разберем их подробно.
Это самый эффективный и «родной» для СКД способ. Фигурные скобки сообщают системе, что содержащееся внутри условие является необязательным. Если значение параметра не задано (равно NULL или пустой ссылке), СКД просто исключает это условие из текста запроса, который отправляется к базе данных.
Рассмотрим, как изменить текст запроса. Допустим, у нас есть стандартная выборка контрагентов:
ВЫБРАТЬ
Контрагенты.Ссылка КАК Ссылка,
Контрагенты.Наименование КАК Наименование,
Контрагенты.ИНН КАК ИНН
ИЗ
Справочник.Контрагенты КАК Контрагенты
{ГДЕ
Контрагенты.Ссылка В (&Контрагенты)}
Почему это работает лучше всего?
1С:Предприятия. Это позволяет оптимизатору СУБД работать максимально быстро.ВЫБОР КОГДА внутри самого запроса.В позволяет пользователю выбирать как одного контрагента, так и целый список, если в настройках параметра Контрагенты разрешено множественное значение.Если вы хотите избежать написания кода в тексте запроса, можно использовать стандартные возможности Настроек в СКД. Этот метод удобен тем, что позволяет менять условия без правки запроса.
ВЫБРАТЬ
Контрагенты.Ссылка,
Контрагенты.Наименование,
Контрагенты.ИНН
ИЗ
Справочник.Контрагенты КАК Контрагенты
Ссылка доступно для отбора.Ссылка в отбор. При этом СКД автоматически предложит пользователю удобный интерфейс, где можно выбрать вид сравнения: «Равно», «В списке», «Заполнено» и так далее.Преимущества этого подхода:
Этот способ предоставляет пользователю максимум свободы. Он может не просто выбирать контрагента, но и использовать другие операторы сравнения (например, «Не равно» или «Не в списке»), не обращаясь к программисту за изменением кода.
Давайте подведем итог, чтобы выбрать оптимальный вариант для вашей задачи:
ГДЕ. Это стандарт де-факто для высокопроизводительных отчетов 1С.Использование конструкции {ГДЕ ...} — это рекомендуемая практика, так как она избавляет систему от избыточных вычислений и делает запрос понятным для платформы. Надеемся, что эти советы помогут вам оптимизировать разработку отчетов в 1С:Предприятии!