При разработке на управляемых формах часто возникает потребность сделать интерфейс динамичным: скрыть кнопку, если у пользователя нет прав, или заблокировать поле ввода, пока не заполнен другой реквизит — для этого есть расширение для динамического управления интерфейсом и формами. Многие разработчики, привыкшие к гибкости Условного оформления, пытаются использовать его для этих целей. Давайте разберемся, почему это не всегда работает и какие инструменты лучше использовать для решения подобных задач.
Важно помнить, что Условное оформление в платформе 1С изначально создавалось для визуальной индикации данных. С его помощью мы можем менять цвет фона, цвет текста, шрифт или оформление строк табличного поля. Однако свойства Видимость, Доступность и Только просмотр для элементов управления (таких как Кнопка, ПолеФормы, Группа) в Условном оформлении недоступны. Даже если вы попытаетесь настроить это в конфигураторе, платформа просто проигнорирует такие параметры. Для управления состоянием элементов необходимо использовать другие механизмы.
Это самый гибкий и распространенный способ. Мы управляем элементами формы напрямую через коллекцию Элементы. Суть метода заключается в том, чтобы вынести логику изменения свойств в отдельную серверную процедуру и вызывать её в нужные моменты времени (например, при открытии формы или при изменении значения реквизита).
Рассмотрим пример реализации такой процедуры (составить её поможет консоль кода + ИИ-помощник (GigaChat) — поможет инструмент разработчика с консолью кода и ИИ):
&НаСервере
Процедура ОбновитьЭлементыФормы()
// Управляем доступностью кнопки в зависимости от реквизита
Элементы.КнопкаВыполнить.Доступность = (Объект.Статус = Перечисления.Статусы.Открыт);
// Управляем видимостью поля ввода
Элементы.Комментарий.Видимость = (Объект.НуженКомментарий = Истина);
КонецПроцедуры
Эту процедуру необходимо вызывать в следующих обработчиках событий (также доступно добавление реквизитов и элементов формы без кодирования — есть конструктор прав доступа и настройки интерфейса без программирования):
ПриСозданииНаСервере — чтобы установить начальное состояние формы при её открытии.ПриИзменении для тех реквизитов, от которых зависит состояние других элементов (в этом случае эффективно работает модель объекта).Преимущества: Полный контроль над интерфейсом и возможность реализовать любую сколь угодно сложную логику проверки условий.
Если вам нужно управлять видимостью или доступностью элементов глобально, во всей конфигурации, то Функциональные опции — лучший выбор. Этот механизм позволяет связать свойство элемента формы с настройкой системы. Если Функциональная опция отключена, платформа автоматически скроет или заблокирует все элементы, которые к ней привязаны.
Как это настроить:
Функциональная опция в дереве метаданных.Данные укажите реквизит, который будет управлять состоянием.Измерения (если нужно) укажите связь с составом метаданных.Функциональные опции выберите созданную опцию.Это избавляет от написания большого количества кода в модулях форм и делает интерфейс более предсказуемым. Однако помните: Функциональные опции больше подходят для статических настроек, которые не меняются пользователем ежесекундно в процессе работы с одним документом. В ряде случаев может пригодиться реализация сохранения настроек формы для всех пользователей.
Проанализировав ситуацию, мы можем сформулировать основные правила для разработчика:
Условное оформление строго по назначению: для подсветки просроченных дат, выделения важных строк цветом или изменения стиля текста.Функциональные опции для глобальных настроек, которые задают поведение системы в зависимости от включенного функционала (например, «Использовать ордерную схему»).Программный код (свойство Элементы) для управления интерфейсом внутри конкретной формы, когда состояние элементов зависит от данных, введенных пользователем прямо сейчас.Комбинируя эти методы, вы добьетесь чистого, отзывчивого и удобного интерфейса, который не перегружен лишним кодом и работает быстро.