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