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