Почему не работает условное оформление цвета фона для поля ввода на управляемой форме 1С

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

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

Причины и платформенные ограничения

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

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

Способ 1. Программное изменение цвета фона элемента формы

Рассмотрим основной способ решения задачи — прямое управление свойством ЦветФона элемента формы через встроенный язык. Для этого нам не требуется условное оформление, изменение цвета выполняется непосредственно в событиях формы.

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

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

Посмотрим на пример программной реализации:


&НаКлиенте
Процедура ОбновитьЦветПоля(ИмяПоля, ЗначениеПоля)
    
    Элемент = Элементы[ИмяПоля];
    
    Если ПустаяСтрока(ЗначениеПоля) Тогда
        // Подсвечиваем незаполненное поле светло-красным цветом
        Элемент.ЦветФона = Новый Цвет(255, 200, 200);
    Иначе
        // Подсвечиваем заполненное поле светло-зеленым цветом
        Элемент.ЦветФона = Новый Цвет(200, 255, 200);
    КонецЕсли;
    
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Первичная инициализация цвета фона при открытии формы
    ОбновитьЦветПоля("ПолеВвода1", Объект.ПолеВвода1);
    ОбновитьЦветПоля("ПолеВвода2", Объект.ПолеВвода2);
    
КонецПроцедуры

&НаКлиенте
Процедура ПолеВвода1ПриИзменении(Элемент)
    
    ОбновитьЦветПоля("ПолеВвода1", Объект.ПолеВвода1);
    
КонецПроцедуры

Если требуется вернуть стандартный системный цвет элемента формы, свойству ЦветФона можно присвоить значение по умолчанию: Элементы.ИмяПоля.ЦветФона = Новый Цвет; или использовать системный цвет ЦветаСтиля.ЦветФонаПоля.

Способ 2. Использование поддерживаемых свойств условного оформления

Если необходимо сохранить декларативную настройку без написания программного кода, проанализируем альтернативные параметры оформления, которые гарантированно поддерживаются для полей ввода:

  1. Цвет текста: зададим красный цвет текста для пустого значения или серый курсивный текст подсказки.
  2. Шрифт: выделим незаполненное или ошибочное значение полужирным начертанием через свойство Шрифт.
  3. Текст: выведем динамический текст-заполнитель при отсутствии данных.

Способ 3. Штатные механизмы контроля заполнения платформы

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

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