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