Как сделать параметр в СКД необязательным, чтобы при пустом значении выводились все данные?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Часто при разработке отчетов на базе Системы Компоновки Данных (СКД) возникает задача: сделать отбор по параметру необязательным. Мы хотим, чтобы, если пользователь оставил поле выбора (например, контрагента) пустым, система выводила в отчет весь список данных, а не пустую выборку. В обычном запросе мы привыкли использовать конструкцию ВЫБОР КОГДА ... ТОГДА ... КОНЕЦ, однако в СКД существуют более элегантные и производительные способы решения этой задачи. Давайте разберем их подробно.

Решение 1: Использование фигурных скобок в языке запросов

Это самый эффективный и «родной» для СКД способ. Фигурные скобки сообщают системе, что содержащееся внутри условие является необязательным. Если значение параметра не задано (равно NULL или пустой ссылке), СКД просто исключает это условие из текста запроса, который отправляется к базе данных.

Рассмотрим, как изменить текст запроса. Допустим, у нас есть стандартная выборка контрагентов:


ВЫБРАТЬ
    Контрагенты.Ссылка КАК Ссылка,
    Контрагенты.Наименование КАК Наименование,
    Контрагенты.ИНН КАК ИНН
ИЗ
    Справочник.Контрагенты КАК Контрагенты
{ГДЕ
    Контрагенты.Ссылка В (&Контрагенты)}

Почему это работает лучше всего?

  1. Производительность: Когда параметр не заполнен, условие физически исчезает из текста SQL-запроса, который исполняет сервер 1С:Предприятия. Это позволяет оптимизатору СУБД работать максимально быстро.
  2. Лаконичность: Вам не нужно прописывать сложную логику ВЫБОР КОГДА внутри самого запроса.
  3. Гибкость: Использование оператора В позволяет пользователю выбирать как одного контрагента, так и целый список, если в настройках параметра Контрагенты разрешено множественное значение.

Решение 2: Перенос логики в настройки отбора СКД

Если вы хотите избежать написания кода в тексте запроса, можно использовать стандартные возможности Настроек в СКД. Этот метод удобен тем, что позволяет менять условия без правки запроса.

  1. В тексте запроса оставляем только простую выборку:
    
    ВЫБРАТЬ
        Контрагенты.Ссылка,
        Контрагенты.Наименование,
        Контрагенты.ИНН
    ИЗ
        Справочник.Контрагенты КАК Контрагенты
    
  2. Переходим на вкладку Наборы данных и проверяем, что поле Ссылка доступно для отбора.
  3. Переходим на вкладку Настройки, выбираем дерево настроек и переходим в раздел Отбор.
  4. Добавляем поле Ссылка в отбор. При этом СКД автоматически предложит пользователю удобный интерфейс, где можно выбрать вид сравнения: «Равно», «В списке», «Заполнено» и так далее.

Преимущества этого подхода:

Этот способ предоставляет пользователю максимум свободы. Он может не просто выбирать контрагента, но и использовать другие операторы сравнения (например, «Не равно» или «Не в списке»), не обращаясь к программисту за изменением кода.

Какой метод выбрать?

Давайте подведем итог, чтобы выбрать оптимальный вариант для вашей задачи:

Использование конструкции {ГДЕ ...} — это рекомендуемая практика, так как она избавляет систему от избыточных вычислений и делает запрос понятным для платформы. Надеемся, что эти советы помогут вам оптимизировать разработку отчетов в 1С:Предприятии!

← На главную