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