Почему не работает условное оформление видимости элементов на форме в 1С?

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

Разберем ситуацию, с которой часто сталкиваются разработчики при проектировании управляемых форм в 1С:Предприятие 8.3. Задача кажется простой: необходимо скрыть или отобразить определенные поля формы в зависимости от значения булевого реквизита (например, «Упрощенный вариант»). Казалось бы, для этого идеально подходит штатный механизм Условное оформление. Однако на практике установка галочки не приводит к изменению видимости элементов.

Разбор причин некорректной работы

Важно понимать, что архитектурно механизм Условное оформление в управляемых формах 1С спроектирован для изменения визуального стиля (цвета текста, фона, шрифта), а также для динамической настройки оформления строк в табличных полях. Хотя интерфейс конфигуратора позволяет выбрать «Видимость» для элементов формы, платформа часто игнорирует эту настройку, так как она конфликтует с внутренними циклами обновления интерфейса. Попытка управлять структурой формы (показывать или скрывать элементы) через условное оформление является архитектурно неверным подходом, который не гарантирует стабильного поведения.

Решение задачи: использование обработчика «ПриИзменении»

Наиболее надежным, предсказуемым и производительным способом является программное управление свойством Видимость элементов формы. Для этого мы используем событие ПриИзменении для элемента-триггера, в данном случае — нашего булевого реквизита.

  1. Откройте форму справочника или документа в конфигураторе.
  2. Перейдите к элементу формы, который отвечает за управление видимостью (в нашем случае это «Упрощенный вариант»).
  3. В свойствах элемента найдите событие ПриИзменении и создайте обработчик на клиенте.
  4. В процедуре обработчика пропишите логику управления видимостью для необходимых полей.

Давайте рассмотрим пример реализации такой логики в коде:


&НаКлиенте
Процедура УпрощенныйВариантПриИзменении(Элемент)
    УстановитьВидимостьЭлементов();
КонецПроцедуры

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

Почему лучше использовать группы элементов?

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

Важные рекомендации при реализации

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

Для исправления этой ситуации вызовите процедуру настройки видимости в обработчике ПриЧтенииНаСервере или ПриОткрытии:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    УстановитьВидимостьЭлементов();
КонецПроцедуры

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

← На главную