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