Как управлять видимостью элементов формы с помощью константы в 1С?

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

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

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

Вариант 1. Прямое управление свойством видимости в обычных формах

Проанализируем базовый способ, который часто применяется в обычном приложении. В процедуре при открытии формы или инициализации интерфейса считывается значение константы и передается в свойство элемента управления.

Посмотрим на пример прямой установки свойства Видимость:


Процедура ПриОткрытии()
    // Устанавливаем видимость элемента напрямую из значения константы
    ЭлементыФормы.ПолеДоработки.Видимость = Константы.ИспользоватьДоработку.Получить();
КонецПроцедуры

Для сокращения кода можно передавать значение константы напрямую, так как метод Получить() для булевой константы возвращает значение типа Булево (Истина или Ложь). Использование тернарного оператора ?(Константы.Имя.Получить(), Истина, Ложь) или явного сравнения Если ... = Истина в данном случае является избыточным.

Вариант 2. Оптимизация обращений к базе данных через кэширование

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

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

Посмотрим на пример реализации кэширующей функции:


// В общем модуле с повторным использованием на время сеанса
Функция ИспользоватьДоработку() Экспорт
    Возврат Константы.ИспользоватьДоработку.Получить();
КонецФункции

Теперь в модуле формы вызов будет обращаться к кэшу сеанса, не нагружая базу данных:


Процедура ПриОткрытии()
    ЭлементыФормы.ПолеДоработки.Видимость = МойОбщийМодульПовтИсп.ИспользоватьДоработку();
КонецПроцедуры
  1. Использование параметров сеанса. Другой классический способ — инициализация параметра сеанса при запуске или первом обращении.

Разберем по шагам реализацию через параметр сеанса:


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

// В модуле формы
Процедура ПриОткрытии()
    ЭлементыФормы.ПолеДоработки.Видимость = ПараметрыСеанса.ИспользоватьДоработку;
КонецПроцедуры

Вариант 3. Использование механизма функциональных опций

Если разработка ведется на управляемых формах или в конфигурации активно задействованы механизмы платформы 1С:Предприятие 8.3, наиболее правильным архитектурным решением является использование Функциональных опций.

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

  1. Создаем объект метаданных Константа (тип Булево).
  2. Создаем объект метаданных Функциональная опция, привязываем ее к созданной константе в свойстве Хранилище.
  3. В составе функциональной опции отмечаем нужные реквизиты, команды или объекты метаданных.
  4. Если необходимо управлять конкретным элементом на управляемой форме, в свойствах элемента формы заполняем свойство ИспользованиеФункциональныхОпций.

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

Особенности компоновки элементов в обычных формах

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

Для красивого оформления интерфейса применяют следующие приемы:

  1. Размещение на панели: дорабатываемые элементы группируются на отдельной панели (Панель) или дополнительной вкладке. Скрывается или показывается панель целиком.
  2. Управление доступностью вместо видимости: если смещение элементов нежелательно, поле оставляют видимым, но блокируют изменение через свойство Доступность = Ложь.

Контроль прав доступа и сброс кэша

При работе с константами важно учитывать два технических нюанса:

  1. Ограничение прав: если у пользователя нет роли с правом на чтение созданной константы, прямой вызов Константы.Имя.Получить() вызовет ошибку доступа. Чтобы избежать этого, чтение константы следует выполнять в Привилегированном общем модуле либо использовать конструкцию УстановитьПривилегированныйРежим(Истина).
  2. Актуализация настроек: если значение константы кэшируется в модуле с повторным использованием, при изменении настройки администратором в режиме 1С:Предприятие значение у пользователей не обновится до перезапуска сеанса. Для принудительного сброса кэша платформы в коде записи константы вызывается процедура ОсвежитьПовторноИспользуемыеЗначения().
← На главную