Как запретить пользователю снимать галочку «Использование» для параметра в СКД?

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

При настройке отчетов на системе компоновки данных (СКД) часто возникает задача сделать определенный параметр обязательным для заполнения. Пользователи могут случайно или намеренно снять галочку «Использование» в настройках отчета, что приводит либо к ошибкам в запросе, либо к нежелательному выводу всех данных системы. Рассмотрим подробнее, как ограничить такую возможность и обеспечить стабильную работу отчета.

Метод 1: Настройка параметра на уровне схемы компоновки

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

  1. Откройте схему компоновки данных.
  2. Перейдите на вкладку «Параметры».
  3. Найдите нужный параметр (например, Касса).
  4. В колонке «Использование» вместо значения Авто установите значение Всегда.

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

Метод 2: Ограничение доступности параметра

Если вам нужно оставить параметр видимым, но лишить пользователя возможности изменять его статус, обратите внимание на настройки доступности.

Во вкладке «Параметры» схемы СКД обратите внимание на колонку «Ограничение доступности». Установка флажка в этой колонке позволяет скрыть параметр из пользовательских настроек полностью. Однако, если пользователю необходимо выбирать значение кассы, но нельзя менять статус использования, используйте комбинацию настроек: параметр должен иметь статус Всегда в колонке Использование, а поле Ограничение доступности должно оставаться пустым.

Метод 3: Использование логики отборов для гибкости

Если бизнес-задача требует, чтобы отчет выводил данные «по всем кассам», если параметр не заполнен, использование жесткого условия = &Касса в разделе ГДЕ не подходит. В таком случае рекомендуем пересмотреть логику запроса, используя более гибкие конструкции.

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


// В тексте запроса используем логическое «ИЛИ»
(
    &Касса ЕСТЬ NULL 
    ИЛИ 
    ДенежныеСредства.Касса = &Касса
)

В этом примере, если параметр Касса не заполнен (равен NULL), условие вернет ИСТИНА для всех записей, тем самым включая их в результат отчета. Это избавляет от необходимости принудительно устанавливать галочку «Использование» и позволяет пользователю гибко управлять выводом данных без риска получить пустой отчет или ошибку выполнения запроса.

Метод 4: Программная установка параметров

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


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    ПараметрКасса = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Касса"));
    
    Если ПараметрКасса <> Неопределено Тогда
        ПараметрКасса.Использование = Истина;
        ПараметрКасса.Значение = ПолучитьКассуПользователя(); // Ваша функция получения данных
    КонецЕсли;
КонецПроцедуры

Этот подход гарантирует, что даже если пользователь попытается изменить параметры в окне настроек, при выполнении отчета система принудительно переопределит их согласно заданному вами алгоритму.

Таким образом, мы выяснили, что для предотвращения снятия галочки «Использование» достаточно перевести настройку параметра в режим Всегда на уровне схемы. Если же отчет должен быть гибким, лучше использовать конструкцию ЕСТЬ NULL в запросе. Выбирайте метод в зависимости от требований безопасности и удобства ваших пользователей.

← На главную