Каждый разработчик 1С при проектировании интерфейсов в управляемых формах рано или поздно сталкивается с неприятной особенностью платформы: стандартное синее (или желтое) выделение активной строки полностью перекрывает цвета фонового условного оформления. Пользователи часто жалуются, что при выборе строки они перестают видеть важные цветовые статусы — например, подсветку просроченных документов красным цветом или успешно проведенных зеленым. В результате теряется весь смысл оперативной цветовой индикации.
Давайте подробно разберем, почему так происходит, и проанализируем четыре практических метода решения этой проблемы — от современных платформенных механизмов до надежных программных обходных путей для более ранних версий платформы.
В управляемом интерфейсе 1С дизайн табличных частей и динамических списков жестко стандартизирован. Разработчик лишен прямого доступа к CSS-стилям или глубоким настройкам рендеринга таблиц. Когда строка таблицы становится активной, платформа накладывает поверх всех настроек цвета ячеек свой собственный системный слой выделения. Изменение свойства режима выделения в значение РежимВыделенияСтрокиТабличногоПоля.Ячейка (или аналогичных свойств на клиенте) не решает проблему полностью: хотя фокус смещается на ячейку, вся остальная строка все равно подсвечивается системным цветом, скрывая условное оформление (УО).
Ниже мы подробно рассмотрим современные и классические способы обхода этого ограничения.
Если ваша конфигурация работает на современных версиях платформы 1С:Предприятие 8.3 (с использованием интерфейса «Версия 8.5»), фирма «1С» предлагает элегантное штатное решение. В этом интерфейсе полностью переработан визуальный стиль выделения строк.
Во-первых, текущая строка больше не закрашивается сплошным ярким цветом. Вместо этого используется деликатный маркер-маяк (тонкая полоска на левом поле таблицы), а множественный выбор реализуется с помощью аккуратных флажков. Это сразу решает проблему видимости фоновых цветов.
Во-вторых, в условном оформлении появился мощный инструмент — свойство Отметка ячейки. Вместо того чтобы красить весь фон ячейки свойством ЦветФона, мы можем настроить специальный маркер. Выполним настройку по шагам:
ТипОтметкиЯчейкиТаблицы) и выберем один из вариантов:
Проведен = Ложь).Такой индикатор физически не может быть перекрыт стандартным выделением, так как рендерится поверх него и выглядит очень современно.
Что делать, если конфигурация работает на старых версиях платформы или использует интерфейс «Такси», где синее выделение все еще доминирует? Мы можем обмануть платформу, отключив ее стандартное выделение и реализовав собственную мягкую подсветку строки с помощью кода и механизмов Условного Оформления.
Разберем этот алгоритм по шагам:
Шаг 1. Создание вспомогательного реквизита. Добавим в реквизиты нашей управляемой формы новый элемент. Назовем его ТекущаяСтрокаID. Тип этого реквизита должен соответствовать типу ключа строки нашей таблицы (например, ДокументСсылка.РеализацияТоваровУслуг для динамического списка документов или Число для табличной части).
Шаг 2. Написание обработчика на клиенте. Перейдем к событиям нашей таблицы (списка) и создадим обработчик события ПриАктивизацииСтроки. Нам необходимо очищать коллекцию стандартно выделенных строк и записывать идентификатор текущей строки в наш реквизит:
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
// Предотвращаем стандартное синее окрашивание строки платформой
Элементы.Список.ВыделенныеСтроки.Очистить();
// Фиксируем идентификатор текущей активной строки
ТекущаяСтрокаID = Элемент.ТекущаяСтрока;
КонецПроцедуры
Шаг 3. Настройка мягкой подсветки в Условном Оформлении. Теперь настроим правила отображения нашей активной строки, чтобы пользователь понимал, где находится фокус:
WebЦвета.СветлоСерый) или специальный цвет рамки.Ссылка Равно ТекущаяСтрокаID (для динамического списка).Благодаря этому приему системное синее выделение исчезнет, строка будет подсвечиваться вашим мягким серым цветом, а другие правила условного оформления (например, раскрашивание конкретных колонок в красный или зеленый) останутся полностью видимыми поверх этой серой подложки.
Если вы не хотите усложнять форму программным кодом, можно применить классический и очень надежный метод — использование картинок-индикаторов вместо заливки фона ячейки.
Изображения (иконки) в элементах управления управляемых форм отрисовываются на самом верхнем слое и никогда не блекнут при синем выделении строки. Посмотрим, как это реализовать:
СтатусКартинка), установив для нее вид Поле картинки.ВЫБОР КОГДА....Теперь, даже когда пользователь выделит строку целиком и она окрасится в стандартный синий цвет, яркая картинка-иконка останется абсолютно четкой и понятной без потери информативности.
Рассмотрим еще один простой, но действенный лайфхак. Если у вас нет возможности перестраивать логику таблицы или внедрять графику, измените само условное оформление.
Вместо использования параметра ЦветФона настраивайте параметр Цвет текста. Платформа 1С устроена так, что при наложении синего выделения она автоматически инвертирует или пытается сохранить контрастность шрифтов. Жирный красный шрифт на синем фоне считывается пользователем значительно лучше, чем полностью залитая синевой ячейка, в которой исходный цвет фона пропадает полностью.
Используйте этот метод как самый быстрый вариант «первой помощи» при жалобах пользователей.