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