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

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

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

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

Причина неработоспособности условного оформления в Конфигураторе

Выясним, почему visual-настройки, заданные в Конфигураторе, игнорируются при открытии формы:

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

Варианты решения проблемы

Способ 1. Использование коллекции ФиксированныеНастройки

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

Разберем по шагам создание условного оформления в модуле формы в событии ПриСозданииНаСервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Получаем коллекцию фиксированных настроек списка
    ЭлементОформления = Список.КомпоновщикНастроек.ФиксированныеНастройки.УсловноеОформление.Элементы.Добавить();
    
    // Настраиваем условие
    ОтборЭлемента = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Проведен");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ОтборЭлемента.ПравоеЗначение = Ложь;
    ОтборЭлемента.Использование = Истина;
    
    // Указываем оформляемые поля
    ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Номер");
    ОформляемоеПоле.Использование = Истина;
    
    // Задаем параметры оформления (например, цвет текста)
    ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
    
КонецПроцедуры

Элементы из коллекции ФиксированныеНастройки не затираются при стандартной очистке пользовательских настроек и не могут быть случайно удалены пользователями в режиме Предприятия.

Способ 2. Доработка через расширение конфигурации

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

Посмотрим на пример добавления кода в обработчик события с помощью аннотации &После:


&После("УстановитьУсловноеОформление")
Процедура Расш1_УстановитьУсловноеОформление()
    
    // Добавляем свое условное оформление после того, 
    // как типовой код завершил очистку и формирование стандартных правил
    ЭлементОформления = УсловноеОформление.Элементы.Добавить();
    
    // Настройка оформления
    ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоЗеленый);
    
    // Настройка отбора
    ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.СуммаДокумента");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
    ЭлементОтбора.ПравоеЗначение = 100000;
    
    // Добавление оформляемого поля
    ПолеФормы = ЭлементОформления.Поля.Элементы.Добавить();
    ПолеФормы.Поле = Новый ПолеКомпоновкиДанных("СуммаДокумента");
    
КонецПроцедуры

Способ 3. Сброс настроек формы в режиме «1С:Предприятие»

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

  1. Откроем форму списка документа.
  2. Перейдем в командную панель таблицы динамического списка и нажмем кнопку Ещё.
  3. Выберите пункт Установить стандартные настройки.

Это сбросит сохраненные пользовательские настройки формы и применит актуальные правила компоновки данных.

← На главную