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

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

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

Анализ проблемы: ограничения механизма условного оформления

Для начала выясним причину, по которой условное оформление игнорирует настройки видимости для обычных реквизитов. В платформе «1С:Предприятие» механизм условного оформления имеет строго разграниченные области применения в зависимости от типа оформляемого элемента:

  1. Обычные элементы формы (поля ввода шапки, группы, кнопки, декорации): Для этих объектов через механизм условного оформления допускается изменять исключительно визуальные свойства отображения данных. К ним относятся Цвет фона, Цвет текста и Шрифт. Любые попытки настроить параметры Видимость, Доступность, ТолькоПросмотр или Отображать для нетабличных элементов платформой игнорируются.
  2. Элементы таблиц (ячейки, колонки табличных частей, динамических списков, таблиц значений): Именно для них проектировались свойства Видимость и Отображать в условном оформлении. В табличных верстках эти свойства позволяют динамически скрывать значения в конкретных строках или ячейках, перераспределяя экранное пространство.

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

Решение задачи: правильное программное управление видимостью

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

Рассмотрим по шагам правильную программную реализацию этой логики в модуле управляемой формы.

Шаг 1. Настройка при инициализации формы

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


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

Шаг 2. Обновление видимости после записи документа

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


&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
    
    // Документ гарантированно записан, делаем элемент "История" видимым
    Элементы.История.Видимость = Истина;
    
КонецПроцедуры

Этот метод лаконичен, полностью соответствует стандартам разработки фирмы «1С» и работает мгновенно без лишних клиент-серверных вызовов.

Альтернативные и продвинутые сценарии управления интерфейсом

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

Метод 1. Шаблон «Переключение страниц» (Page-swap)

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

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

  1. Создайте на форме группу с типом Группа - Страницы и отключите отображение закладок, установив свойство ОтображениеСтраниц в значение Нет.
  2. Внутри этой группы создайте две страницы: например, СтраницаНовыйОбъект (где будут находиться поля для заполнения нового документа) и СтраницаЗаписан (где будут выводиться полные данные, включая историю и системные отчеты).
  3. Переключайте активную страницу программно одной строкой кода в зависимости от состояния объекта:

&НаСервере
Процедура ОбновитьСостояниеИнтерфейса()
    
    Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
        Элементы.ГруппаСтраницыИстория.ТекущаяСтраница = Элементы.СтраницаЗаписан;
    Иначе
        Элементы.ГруппаСтраницыИстория.ТекущаяСтраница = Элементы.СтраницаНовыйОбъект;
    КонецЕсли;
    
КонецПроцедуры

Метод 2. Использование Функциональных Опций (ФО)

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

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

Метод 3. Механизмы Библиотеки стандартных подсистем (БСП)

Если вы ведете разработку в типовых конфигурациях (ERP, КА, УТ, ЗУП, БП), в вашем распоряжении находится встроенная подсистема «Свойства» и механизмы управления доступностью. Вы можете настраивать видимость и обязательность заполнения реквизитов динамически через пользовательский режим (например, используя регистр сведений Настройки доступности элементов форм), избегая изменения кода конфигурации и упрощая процесс последующего обновления системы.

Стандарты разработки «1С» при работе с Условным Оформлением

Чтобы разрабатываемые вами формы работали быстро и без сбоев, необходимо соблюдать стандарты разработки фирмы «1С» относительно механизмов оформления:

← На главную