Почему не работает условное оформление динамического списка в Управляемых формах при использовании расширений?

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

Разбор проблемы

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

Давайте разберем причины по порядку, чтобы понимать, как бороться с каждой из них.

Влияние пользовательских настроек

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

Как это исправить:

  1. Попросите пользователя выполнить команду «Установить стандартные настройки» в меню формы. Это очистит персональные изменения и вернет настройки, заложенные разработчиками.
  2. Если необходимо перенести удачную настройку от одного пользователя другому, используйте типовой механизм «Копирование настроек», который обычно доступен в разделе «Администрирование» -> «Настройки пользователей и прав».

Конфликт нескольких расширений

Если в системе подключено несколько расширений, которые заимствуют одну и ту же форму, возникает конфликт при попытке настроить Условное оформление через свойства Динамического списка в Конфигураторе. Платформа не всегда может корректно объединить коллекции элементов оформления из разных расширений, и в итоге работает только одно из них (обычно то, которое имеет высший приоритет в списке расширений).

Чтобы победить эту ситуацию, раз и навсегда откажитесь от настройки оформления через свойства объекта в Конфигураторе для сложных случаев. Рассмотрим, как это сделать программно.

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

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

Разберем по шагам, как реализовать программное добавление оформления:

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

Посмотрим на пример кода:


// Получаем доступ к динамическому списку на форме
ЭлементСписок = Элементы.Список;

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

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

// Настраиваем сам цвет фона
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоЗеленый);

// Указываем поля, к которым применить оформление
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Контрагент");

Почему это лучшее решение?

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

← На главную