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