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