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

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

Многие разработчики, начиная работу с расширениями в конфигурациях уровня УТ 11 или ERP, сталкиваются с тем, что привычное «кликами мышки» настроенное условное оформление формы просто игнорируется системой. Давайте вместе разберем, почему это происходит и как правильно реализовать эту задачу с помощью программного кода.

Разбор причин: почему настройки «слетают»

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

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

Решение через расширение: программный метод

Чтобы гарантированно добиться нужного результата, мы будем использовать расширение процедуры УстановитьУсловноеОформление с аннотацией &После. Это позволит нам не ломать типовую логику, а дополнить её нашими собственными правилами.

Пошаговое руководство по настройке программного УО

  1. Откройте форму в расширении.
  2. Найдите процедуру УстановитьУсловноеОформление в модуле формы. Если её нет, добавьте её и используйте аннотацию &После.
  3. Внутри процедуры добавьте код, который создает новый элемент в коллекции УсловноеОформление.Элементы.
  4. Определите поля, которые должны подпадать под оформление, используя тип ПолеКомпоновкиДанных.
  5. Настройте Отбор, чтобы задать условие срабатывания, и укажите параметры оформления (цвет фона или текста).

Пример кода для реализации условного оформления

Рассмотрим пример, когда нам нужно подсветить определенные ячейки таблицы Товары, если в строке установлен флаг ЗапретПроведения. Вставим этот код в нашу процедуру:


// Добавляем элемент оформления
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Использование = Истина;

// Добавляем поля, которые нужно подсветить
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Использование = Истина;
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыДатаОтгрузки.Имя);

// Аналогично добавляем другие поля
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Использование = Истина;
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыВидЦены.Имя);

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

// Задаем визуальные параметры
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Новый Цвет(175, 0, 0));
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255, 235, 222));

Как обеспечить применение настроек у пользователей

Если после внесения программных изменений пользователи не видят результат, это означает, что их персональные настройки «перебивают» изменения разработчика. Чтобы исправить это массово, мы можем выполнить очистку пользовательских настроек форм. Для этого в типовых конфигурациях существует специальный инструмент: Настройки пользователей и прав -> Настройки пользователей. С помощью этой обработки можно сбросить настройки форм для конкретных пользователей, после чего при следующем входе в систему их Динамический список или Форма документа подхватят обновленные настройки, заложенные в конфигураторе.

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

← На главную