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