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