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