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