Как правильно реализовать динамический отбор в запросе СКД с помощью конструкции ГДЕ?

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

В процессе разработки отчетов на системе компоновки данных СКД часто возникает необходимость передать условие, которое будет применяться только в том случае, если пользователь заполнил соответствующий параметр на форме. Разберем, как сделать это правильно, используя штатную конструкцию {ГДЕ}, и как избежать типичных ошибок при отладке.

Принцип работы конструкции {ГДЕ}

Конструкция {ГДЕ} — это специальный синтаксис СКД, который позволяет системе самостоятельно определять, нужно ли включать фрагмент кода запроса в итоговое выполнение. Основная магия заключается в том, что если параметр, указанный внутри фигурных скобок, не заполнен (например, содержит пустую дату или число 0), система просто «вырезает» это условие из текста запроса, отправляемого к базе данных.

Чтобы воспользоваться этим механизмом, в тексте вашего запроса СКД добавьте конструкцию в конец запроса:


ВЫБРАТЬ
    Доки.Ссылка КАК Документ,
    Доки.Дата КАК ДатаДокумента
ИЗ
    Документ.РеализацияТоваровУслуг КАК Доки
{ГДЕ
    Доки.Дата >= &НачалоПериода}

Обратите внимание: конструкция {ГДЕ ...} должна содержать фигурные скобки. Если вы их пропустите, СКД воспримет это как обычный текст, и условие будет применяться всегда, даже при пустом параметре.

Пошаговое решение проблем, когда отчет не реагирует на параметр

Часто бывает, что вы добавили условие, но отчет продолжает выводить все данные, игнорируя заполненную дату. Рассмотрим шаги для диагностики и устранения такой ситуации:

  1. Проверка имен параметров: Убедитесь, что имя параметра в запросе (например, &НачалоПериода) в точности совпадает с именем параметра, объявленным на вкладке «Параметры» в схеме компоновки данных. Даже лишний пробел или разница в регистре может привести к тому, что СКД не свяжет значение с формой.
  2. Очистка кэша: Это самая частая причина, почему изменения в схеме не «подхватываются» системой. СКД агрессивно кэширует настройки отчета. Попробуйте создать копию отчета или полностью очистить кэш 1С, чтобы увидеть актуальное поведение кода.
  3. Доступность поля в настройках: Перейдите на вкладку «Настройки» в редакторе схемы. Убедитесь, что поле, используемое в условии, добавлено в доступные поля отбора. Если вы не видите параметр в пользовательских настройках, СКД не сможет передать введенное значение из формы в запрос.
  4. Соответствие типов данных: Проверьте, что параметр &НачалоПериода в схеме имеет тип Дата. Если тип не указан или задан неверно, сравнение с полем Доки.Дата не даст результата.

Рекомендации по реализации на форме

При использовании КомпоновщикаНастроек в программном коде, помните, что установка параметра напрямую в настройки может быть перекрыта пользовательскими настройками. Если вы управляете отчетом программно, работайте с коллекцией ПользовательскиеНастройки.

Рассмотрим, как правильно убедиться в работоспособности: если вы изменили условие в запросе, но не видите реакции отчета, сделайте следующее:

После выполнения этих действий система СКД «увидит» привязку, и условие начнет корректно фильтровать результат запроса в зависимости от того, заполнено значение параметра или нет.

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

← На главную