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