Как исключить параметр из определенного варианта отчета в СКД

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

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

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

Выясним причину такого поведения платформы и разберем практические способы настройки схемы компоновки, позволяющие скрыть или отключить параметры для отдельных вариантов отчета.

Почему параметр отображается во всех вариантах

Проанализируем архитектуру работы СКД. В схеме компоновки список параметров формируется глобально на уровне всего источника данных. Если в тексте запроса жестко прописано условие с обращением к параметру (например, в блоке ВЫБОР КОГДА ...):


ВЫБОР
    КОГДА Бонусы.Период < &ДоДаты
        ТОГДА Бонусы.НомерЧека
КОНЕЦ КАК ЧековДоДаты,
ВЫБОР
    КОГДА Бонусы.Период >= &ДоДаты
        ТОГДА Бонусы.НомерЧека
КОНЕЦ КАК ЧековПослеДаты

СКД автоматически определяет &ДоДаты как обязательный параметр набора данных. Даже если в структуре определенного варианта поля ЧековДоДаты и ЧековПослеДаты не выбраны, сам параметр остается в списке доступных параметров схемы.

Рассмотрим несколько способов разделения параметров по вариантам отчета.

Способ 1. Перенос логики с параметром в вычисляемые поля

Самый эффективный и чистый способ исключить зависимость схемы от параметра во всех вариантах — убрать обращение к параметру из текста запроса и перенести его на уровень Вычисляемых полей.

Разберем по шагам, как это реализовать:

  1. В тексте запроса набора данных убираем вычисляемые блоки с параметрами. Оставляем только исходные поля базы данных (например, Период и НомерЧека).
  2. Переходим на вкладку Вычисляемые поля схемы компоновки.
  3. Добавляем новое вычисляемое поле (например, ЧековДоДаты) и в колонке Выражение указываем условие: Выбор Когда Период < &ДоДаты Тогда НомерЧека Иначе NULL Конец
  4. В тех вариантах отчета, где параметр &ДоДаты не нужен, просто не добавляем это вычисляемое поле в список выбранных полей.

Особенность оптимизации СКД заключается в том, что если вычисляемое поле не выводится в выбранных полях, группировках или отборах варианта, платформа не вычисляет его формулу и не требует инициализации задействованного в ней параметра.

Способ 2. Использование механизма пользовательских настроек

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

Разберем порядок действий в конструкторе схемы:

  1. Переходим на вкладку Настройки и выбираем нужный вариант отчета.
  2. В нижней части переходим на вкладку Параметры.
  3. Выделяем параметр и нажимаем кнопку Свойства элемента пользовательских настроек (пиктограмма с ключом).
  4. Для варианта, в котором параметр должен отображаться, устанавливаем флаг Включать в пользовательские настройки и выбираем режим редактирования (например, Быстрый доступ или Обычный).
  5. Переключаемся на другой вариант отчета, где этот параметр не требуется, и снимаем флаг Включать в пользовательские настройки.
  6. В обычной форме отчета выводим на форму табличное поле пользовательских настроек (связанное с КомпоновщикНастроек.ПользовательскиеНастройки). В этом случае каждый вариант будет показывать пользователю только свой собственный набор параметров.

Способ 3. Программное отключение параметра при смене варианта

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

Посмотрим на пример кода, отключающего обязательность использования параметра:


ЭлементПараметра = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДоДаты");
Если ЭлементПараметра <> Неопределено Тогда
    ЭлементПараметра.Использование = Ложь;
КонецЕсли;

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

Способ 4. Разделение запросов на несколько наборов данных

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

  1. Первый набор данных содержит запрос с использованием специфических параметров.
  2. Второй набор данных содержит упрощенный запрос без лишних параметров.
  3. В настройках каждого варианта отчета выбираются поля только из соответствующего набора данных. СКД выполняет обращение к СУБД только по тем наборам данных, поля которых задействованы в текущем формируемом варианте.
← На главную