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