Многие разработчики, начиная работу с расширениями в конфигурациях уровня УТ 11 или ERP, сталкиваются с тем, что привычное «кликами мышки» настроенное условное оформление формы просто игнорируется системой. Давайте вместе разберем, почему это происходит и как правильно реализовать эту задачу с помощью программного кода.
Первое, с чем мы сталкиваемся — это архитектура типовых конфигураций. Добавление реквизитов и элементов формы в них часто требует программного подхода. В таких решениях разработчики 1С практически всегда используют процедуру УстановитьУсловноеОформление, которая вызывается в обработчике ПриСозданииНаСервере. Важная особенность этой процедуры в том, что в самом её начале часто выполняется команда УсловноеОформление.Очистить(), что отменяет даже универсальную раскраску журналов документов. Это означает, что любые настройки, которые вы сделали в свойствах формы в конфигураторе, будут принудительно удалены при открытии формы.
Вторая причина — это пользовательские настройки. Если вы уже заходили в форму или список в режиме Предприятие, система сохраняет состояние колонок и настроек оформления в информационной базе для конкретного пользователя. В результате «свежие» изменения из конфигуратора могут не применяться, так как сохраненная настройка пользователя имеет приоритет. В этом случае помогает выполнение команды Установить стандартные настройки в меню формы.
Чтобы гарантированно добиться нужного результата, мы будем использовать расширение процедуры УстановитьУсловноеОформление с аннотацией &После. Это позволит нам не ломать типовую логику, а дополнить её нашими собственными правилами.
УстановитьУсловноеОформление в модуле формы. Если её нет, добавьте её и используйте аннотацию &После.УсловноеОформление.Элементы.ПолеКомпоновкиДанных.Отбор, чтобы задать условие срабатывания, и укажите параметры оформления (цвет фона или текста).Рассмотрим пример, когда нам нужно подсветить определенные ячейки таблицы Товары, если в строке установлен флаг ЗапретПроведения. Вставим этот код в нашу процедуру:
// Добавляем элемент оформления
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Использование = Истина;
// Добавляем поля, которые нужно подсветить
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Использование = Истина;
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыДатаОтгрузки.Имя);
// Аналогично добавляем другие поля
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Использование = Истина;
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыВидЦены.Имя);
// Настраиваем отбор
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ЗапретПроведения");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента.Использование = Истина;
// Задаем визуальные параметры
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Новый Цвет(175, 0, 0));
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255, 235, 222));
Если после внесения программных изменений пользователи не видят результат, это означает, что их персональные настройки «перебивают» изменения разработчика. Чтобы исправить это массово, мы можем выполнить очистку пользовательских настроек форм. Для этого в типовых конфигурациях существует специальный инструмент: Настройки пользователей и прав -> Настройки пользователей. С помощью этой обработки можно сбросить настройки форм для конкретных пользователей, после чего при следующем входе в систему их Динамический список или Форма документа подхватят обновленные настройки, заложенные в конфигураторе.
Использование метода &После для процедуры УстановитьУсловноеОформление является наиболее надежным и профессиональным способом, так как он обеспечивает корректную работу расширения без конфликтов с типовым кодом и гарантирует, что оформление будет работать у всех пользователей.