При разработке отчетов на базе Системы компоновки данных (СКД) часто возникает ситуация, когда в рамках одной схемы создается несколько вариантов отчета. При этом один из вариантов требует заполнения специфического параметра (например, контрольной даты или расчетного коэффициента), а в других вариантах этот параметр не используется и только перегружает интерфейс пользователя.
Попытка просто установить флаг Ограничение доступности на вкладке Параметры схемы не решает задачу разделения по вариантам: такой параметр либо блокируется глобально для всех вариантов, либо остается обязательным для заполнения.
Выясним причину такого поведения платформы и разберем практические способы настройки схемы компоновки, позволяющие скрыть или отключить параметры для отдельных вариантов отчета.
Проанализируем архитектуру работы СКД. В схеме компоновки список параметров формируется глобально на уровне всего источника данных. Если в тексте запроса жестко прописано условие с обращением к параметру (например, в блоке ВЫБОР КОГДА ...):
ВЫБОР
КОГДА Бонусы.Период < &ДоДаты
ТОГДА Бонусы.НомерЧека
КОНЕЦ КАК ЧековДоДаты,
ВЫБОР
КОГДА Бонусы.Период >= &ДоДаты
ТОГДА Бонусы.НомерЧека
КОНЕЦ КАК ЧековПослеДаты
СКД автоматически определяет &ДоДаты как обязательный параметр набора данных. Даже если в структуре определенного варианта поля ЧековДоДаты и ЧековПослеДаты не выбраны, сам параметр остается в списке доступных параметров схемы.
Рассмотрим несколько способов разделения параметров по вариантам отчета.
Самый эффективный и чистый способ исключить зависимость схемы от параметра во всех вариантах — убрать обращение к параметру из текста запроса и перенести его на уровень Вычисляемых полей.
Разберем по шагам, как это реализовать:
Период и НомерЧека).ЧековДоДаты) и в колонке Выражение указываем условие:
Выбор Когда Период < &ДоДаты Тогда НомерЧека Иначе NULL Конец
&ДоДаты не нужен, просто не добавляем это вычисляемое поле в список выбранных полей.Особенность оптимизации СКД заключается в том, что если вычисляемое поле не выводится в выбранных полях, группировках или отборах варианта, платформа не вычисляет его формулу и не требует инициализации задействованного в ней параметра.
Если параметры задаются для управления фильтрацией или отображением, их видимость можно настроить индивидуально для каждого варианта через Пользовательские настройки.
Разберем порядок действий в конструкторе схемы:
Быстрый доступ или Обычный).КомпоновщикНастроек.ПользовательскиеНастройки). В этом случае каждый вариант будет показывать пользователю только свой собственный набор параметров.Если требуется управлять доступностью и использованием параметра программно, можно обратиться к коллекции параметров компоновщика настроек в модуле отчета или форме.
Посмотрим на пример кода, отключающего обязательность использования параметра:
ЭлементПараметра = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДоДаты");
Если ЭлементПараметра <> Неопределено Тогда
ЭлементПараметра.Использование = Ложь;
КонецЕсли;
Данный код можно вызывать в обработчике смены варианта отчета или в предопределенной процедуре ПриКомпоновкеРезультата модуля отчета, предварительно проверив имя текущего выбранного варианта.
Если варианты отчета существенно отличаются по структуре получаемых данных, рекомендуется разделить их на два отдельных набора данных-запроса внутри одной схемы: