Как в отчете на СКД сделать фильтры опциональными?

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

При создании отчетов на платформе 1С:Предприятие часто возникает задача: сделать параметры отбора необязательными для заполнения пользователем. В стандартном режиме, если вы добавляете условие в секцию ГДЕ запроса, система воспринимает его как обязательное. Если пользователь оставляет поле пустым, отчет либо выдает ошибку, либо фильтрует данные по «пустому» значению. Рассмотрим, как правильно настроить отчет, чтобы фильтры стали опциональными.

Понимание механизма работы СКД

Когда мы прописываем условие в запросе напрямую, например: ГДЕ Поле = &Параметр, мы жестко задаем логику выполнения. СКД пытается подставить значение параметра в условие при каждом формировании отчета. Даже если мы снимем флажок «Запрещать незаполненные значения» в настройках параметров, запрос все равно будет требовать либо валидное значение, либо корректную обработку NULL или пустых ссылок.

Для создания гибких фильтров разработчики платформы 1С предусмотрели механизм расширения языка запросов. Он позволяет системе «понимать», какие поля пользователь может захотеть использовать для отбора, а какие — проигнорировать.

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

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

Давайте разберем на примере, как преобразовать ваш запрос. Предположим, у нас есть документ Бюджет и мы хотим фильтровать его по ряду реквизитов.

Шаг 1: Подготовка кода запроса

В тексте запроса в СКД оставьте обязательные условия (например, проверку на пометку удаления или период) в обычном блоке ГДЕ, а опциональные поля перенесите в блок {ГДЕ ...}.


ВЫБРАТЬ
    Бюджет.Ссылка,
    Бюджет.Автор,
    Бюджет.Фирма,
    Бюджет.Проект
ИЗ
    Документ.Бюджет КАК Бюджет
ГДЕ
    Бюджет.ПометкаУдаления = ЛОЖЬ
{ГДЕ
    Бюджет.Автор,
    Бюджет.Фирма,
    Бюджет.Проект,
    Бюджет.Контрагент
}

Обратите внимание: мы не используем здесь = &Автор. Система сама создаст нужные параметры в настройках, когда вы добавите поля в список отборов.

Настройка отбора в СКД

После изменения текста запроса нам необходимо активировать эти поля в настройках самой схемы компоновки данных. Выполним следующие действия:

  1. Откройте вкладку Настройки в схеме компоновки данных.
  2. Перейдите в настройки Отчета (или конкретной группировки).
  3. Найдите вкладку Отбор.
  4. В списке доступных полей вы увидите все поля, которые вы перечислили в блоке {ГДЕ ...}.
  5. Перенесите нужные поля в список выбранных полей отбора.

Теперь поведение отчета изменится. В режиме «1С:Предприятие» пользователь увидит список доступных фильтров. Если флажок напротив поля в отборе не установлен, система полностью исключит это условие из текста запроса, который отправляется к базе данных. Если флажок установлен, пользователь выбирает значение, и СКД автоматически сформирует условие вида ГДЕ Бюджет.Автор = &Автор.

Почему это лучший способ?

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

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

← На главную