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

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

При разработке на управляемых формах часто возникает потребность сделать интерфейс динамичным: скрыть кнопку, если у пользователя нет прав, или заблокировать поле ввода, пока не заполнен другой реквизит — для этого есть расширение для динамического управления интерфейсом и формами. Многие разработчики, привыкшие к гибкости Условного оформления, пытаются использовать его для этих целей. Давайте разберемся, почему это не всегда работает и какие инструменты лучше использовать для решения подобных задач.

Почему Условное оформление не подходит для изменения видимости?

Важно помнить, что Условное оформление в платформе 1С изначально создавалось для визуальной индикации данных. С его помощью мы можем менять цвет фона, цвет текста, шрифт или оформление строк табличного поля. Однако свойства Видимость, Доступность и Только просмотр для элементов управления (таких как Кнопка, ПолеФормы, Группа) в Условном оформлении недоступны. Даже если вы попытаетесь настроить это в конфигураторе, платформа просто проигнорирует такие параметры. Для управления состоянием элементов необходимо использовать другие механизмы.

Способ №1: Программное управление через модуль формы

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

Рассмотрим пример реализации такой процедуры (составить её поможет консоль кода + ИИ-помощник (GigaChat) — поможет инструмент разработчика с консолью кода и ИИ):


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

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

  1. ПриСозданииНаСервере — чтобы установить начальное состояние формы при её открытии.
  2. ПриИзменении для тех реквизитов, от которых зависит состояние других элементов (в этом случае эффективно работает модель объекта).

Преимущества: Полный контроль над интерфейсом и возможность реализовать любую сколь угодно сложную логику проверки условий.

Способ №2: Использование функциональных опций (ФО)

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

Как это настроить:

  1. Создайте объект Функциональная опция в дереве метаданных.
  2. В свойстве Данные укажите реквизит, который будет управлять состоянием.
  3. В свойстве Измерения (если нужно) укажите связь с составом метаданных.
  4. В форме у нужного элемента (кнопки или поля) в свойстве Функциональные опции выберите созданную опцию.

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

Рекомендации по выбору подхода

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

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

← На главную