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