Как предотвратить перекрытие условного оформления стандартным выделением строки в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Каждый разработчик 1С при проектировании интерфейсов в управляемых формах рано или поздно сталкивается с неприятной особенностью платформы: стандартное синее (или желтое) выделение активной строки полностью перекрывает цвета фонового условного оформления. Пользователи часто жалуются, что при выборе строки они перестают видеть важные цветовые статусы — например, подсветку просроченных документов красным цветом или успешно проведенных зеленым. В результате теряется весь смысл оперативной цветовой индикации.

Давайте подробно разберем, почему так происходит, и проанализируем четыре практических метода решения этой проблемы — от современных платформенных механизмов до надежных программных обходных путей для более ранних версий платформы.

Выясняем причину: почему платформа перекрывает цвета?

В управляемом интерфейсе 1С дизайн табличных частей и динамических списков жестко стандартизирован. Разработчик лишен прямого доступа к CSS-стилям или глубоким настройкам рендеринга таблиц. Когда строка таблицы становится активной, платформа накладывает поверх всех настроек цвета ячеек свой собственный системный слой выделения. Изменение свойства режима выделения в значение РежимВыделенияСтрокиТабличногоПоля.Ячейка (или аналогичных свойств на клиенте) не решает проблему полностью: хотя фокус смещается на ячейку, вся остальная строка все равно подсвечивается системным цветом, скрывая условное оформление (УО).

Ниже мы подробно рассмотрим современные и классические способы обхода этого ограничения.

Решение 1: Современный подход платформы — отметки ячеек (Интерфейс «Версия 8.5»)

Если ваша конфигурация работает на современных версиях платформы 1С:Предприятие 8.3 (с использованием интерфейса «Версия 8.5»), фирма «1С» предлагает элегантное штатное решение. В этом интерфейсе полностью переработан визуальный стиль выделения строк.

Во-первых, текущая строка больше не закрашивается сплошным ярким цветом. Вместо этого используется деликатный маркер-маяк (тонкая полоска на левом поле таблицы), а множественный выбор реализуется с помощью аккуратных флажков. Это сразу решает проблему видимости фоновых цветов.

Во-вторых, в условном оформлении появился мощный инструмент — свойство Отметка ячейки. Вместо того чтобы красить весь фон ячейки свойством ЦветФона, мы можем настроить специальный маркер. Выполним настройку по шагам:

  1. Откроем форму списка и перейдем на вкладку «Условное оформление».
  2. Добавим новое правило оформления.
  3. В поле «Оформление» найдем параметр Тип отметки (ТипОтметкиЯчейкиТаблицы) и выберем один из вариантов:
    • Фигура под текстом овальная — создает вокруг текста аккуратную цветную подложку в виде «пилюли», которая отлично контрастирует с любым системным фоном.
    • Значок круг — выводит яркую цветную точку слева от основного текста в ячейке.
  4. В параметре Цвет отметки ячейки зададим нужный нам цвет (например, красный для ошибок или зеленый для нормального статуса).
  5. В условиях оформления укажем наше бизнес-правило (например, Проведен = Ложь).

Такой индикатор физически не может быть перекрыт стандартным выделением, так как рендерится поверх него и выглядит очень современно.

Решение 2: Программная эмуляция выделения через Условное Оформление

Что делать, если конфигурация работает на старых версиях платформы или использует интерфейс «Такси», где синее выделение все еще доминирует? Мы можем обмануть платформу, отключив ее стандартное выделение и реализовав собственную мягкую подсветку строки с помощью кода и механизмов Условного Оформления.

Разберем этот алгоритм по шагам:

Шаг 1. Создание вспомогательного реквизита. Добавим в реквизиты нашей управляемой формы новый элемент. Назовем его ТекущаяСтрокаID. Тип этого реквизита должен соответствовать типу ключа строки нашей таблицы (например, ДокументСсылка.РеализацияТоваровУслуг для динамического списка документов или Число для табличной части).

Шаг 2. Написание обработчика на клиенте. Перейдем к событиям нашей таблицы (списка) и создадим обработчик события ПриАктивизацииСтроки. Нам необходимо очищать коллекцию стандартно выделенных строк и записывать идентификатор текущей строки в наш реквизит:


&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
    
    // Предотвращаем стандартное синее окрашивание строки платформой
    Элементы.Список.ВыделенныеСтроки.Очистить();
    
    // Фиксируем идентификатор текущей активной строки
    ТекущаяСтрокаID = Элемент.ТекущаяСтрока;
    
КонецПроцедуры

Шаг 3. Настройка мягкой подсветки в Условном Оформлении. Теперь настроим правила отображения нашей активной строки, чтобы пользователь понимал, где находится фокус:

  1. В настройках Условного Оформления формы добавим новое правило.
  2. В оформлении выберем мягкий, неагрессивный цвет фона, например, очень светло-серый (WebЦвета.СветлоСерый) или специальный цвет рамки.
  3. В условиях укажем: Ссылка Равно ТекущаяСтрокаID (для динамического списка).
  4. Оформим этим правилом всю строку.

Благодаря этому приему системное синее выделение исчезнет, строка будет подсвечиваться вашим мягким серым цветом, а другие правила условного оформления (например, раскрашивание конкретных колонок в красный или зеленый) останутся полностью видимыми поверх этой серой подложки.

Решение 3: Использование графических индикаторов (Колонки с картинками)

Если вы не хотите усложнять форму программным кодом, можно применить классический и очень надежный метод — использование картинок-индикаторов вместо заливки фона ячейки.

Изображения (иконки) в элементах управления управляемых форм отрисовываются на самом верхнем слое и никогда не блекнут при синем выделении строки. Посмотрим, как это реализовать:

  1. Подготовим или выберем из стандартной библиотеки картинок коллекцию иконок (например, зеленый кружок для проведенного документа, красный крестик для помеченного на удаление и серый для черновика).
  2. Добавим в динамический список или таблицу новую колонку (например, с именем СтатусКартинка), установив для нее вид Поле картинки.
  3. В свойствах пути данных этой колонки укажем числовое поле, которое будет возвращать индекс картинки из нашей коллекции (0, 1, 2 и т.д.). Получить этот индекс можно прямо в запросе динамического списка с помощью конструкции ВЫБОР КОГДА....
  4. Свяжем поле с нашей коллекцией картинок через свойство Картинки строк.

Теперь, даже когда пользователь выделит строку целиком и она окрасится в стандартный синий цвет, яркая картинка-иконка останется абсолютно четкой и понятной без потери информативности.

Решение 4: Изменение цвета текста вместо фона

Рассмотрим еще один простой, но действенный лайфхак. Если у вас нет возможности перестраивать логику таблицы или внедрять графику, измените само условное оформление.

Вместо использования параметра ЦветФона настраивайте параметр Цвет текста. Платформа 1С устроена так, что при наложении синего выделения она автоматически инвертирует или пытается сохранить контрастность шрифтов. Жирный красный шрифт на синем фоне считывается пользователем значительно лучше, чем полностью залитая синевой ячейка, в которой исходный цвет фона пропадает полностью.

Используйте этот метод как самый быстрый вариант «первой помощи» при жалобах пользователей.

← На главную