Как подсветить строку в табличном документе 1С при наведении мыши без клика?

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

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

Ограничения платформы 1С при работе с мышью

В платформе 1С:Предприятие объект ТабличныйДокумент и элемент формы Поле табличного документа не имеют встроенных событий движения или наведения курсора (таких как OnMouseMove или OnHover). Все штатные события — ПриАктивизацииОбласти, Выбор или ОбработкаРасшифровки — срабатывают исключительно при явных действиях пользователя: нажатии клавиш мыши, переходе стрелками с клавиатуры или перетаскивании объектов.

Поэтому подсветить строку в стандартном табличном документе только за счет перемещения мыши без дополнительного инструментария штатно невозможно. Однако существует несколько эффективных способов обхода этого ограничения.

Способ 1. Использование «Поля HTML-документа» (Рекомендуемый)

Разберем наиболее универсальный способ, который отлично работает во всех типах клиентов (тонкий, веб-клиент, толстый клиент) и на любых операционных системах (Windows, Linux, macOS).

Вместо вывода данных в обычный табличный документ сформируем таблицу в виде HTML-кода и отобразим ее в элементе формы Поле HTML-документа. Подсветка строки при наведении реализуется средствами CSS с помощью псевдокласса :hover.

Посмотрим на пример оформления CSS-стилей для HTML-таблицы:


tr:hover {
    background-color: #f0f0f0; /* Цвет подсветки строки при наведении */
    cursor: pointer;
}

Пример формирования HTML-кода в 1С:


HTMLТекст = "
|<html>
|<head>
|<style>
|   table { width: 100%; border-collapse: collapse; }
|   td, th { border: 1px solid #ccc; padding: 4px; }
|   tr:hover { background-color: #e2edf7; }
|</style>
|</head>
|<body>
|   <table>
|       <tr><th>Код</th><th>Наименование</th><th>Цена</th></tr>
|       <tr><td>0001</td><td>Товар 1</td><td>100.00</td></tr>
|       <tr><td>0002</td><td>Товар 2</td><td>200.00</td></tr>
|   </table>
|</body>
|</html>";

Элементы.ПолеHTML.Документ.write(HTMLТекст);

При таком подходе браузерный движок платформы сам мгновенно подсвечивает нужную строку без отправки серверных вызовов и задержек интерфейса.

Способ 2. Использование параметров оформления в СКД

Если табличный документ формируется с помощью Системы компоновки данных (СКД), подсвечивание ячеек при наведении мыши можно включить штатными средствами отчета.

Проанализируем по шагам настройку в СКД:

  1. Откроем схему компоновки данных и перейдем на вкладку Настройки.
  2. В окне параметров оформления выберем пункт Режим подсветки.
  3. Установим значение РежимПодсветкиЯчейкиТабличногоДокумента.Строка (или Ячейка, если требуется выделять только одну ячейку).

При таком режиме платформа в окне просмотра отчета самостоятельно обрабатывает наведение мыши и подсвечивает всю текущую строку.

Способ 3. Компромиссное решение через событие «ПриАктивизацииОбласти»

Если отказаться от динамического наведения мыши и выполнять выделение по клику или переходу клавишами, можно использовать стандартное событие табличного документа ПриАктивизацииОбласти.

Рассмотрим пример кода обработчика, который подсвечивает выделенную строку фоновым цветом:


&НаКлиенте
Процедура ТабличныйДокументПриАктивизацииОбласти(Элемент)
    
    // Получаем текущую выделенную область
    ТекущаяОбласть = Элемент.ТекущаяОбласть;
    Если ТекущаяОбласть = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    // Определяем номер активной строки
    НомерСтроки = ТекущаяОбласть.Верх;
    
    // Сбрасываем цвет выделения у всего документа (или ранее сохраненной строки)
    Элемент.Область().ЦветФона = Новый Цвет();
    
    // Задаем цвет фона для всей активной строки
    ОбластьСтроки = Элемент.Область("R" + Формат(НомерСтроки, "ЧГ=0"));
    ОбластьСтроки.ЦветФона = WebЦвета.СветлоЖелтый;
    
КонецПроцедуры

Способ 4. Использование внешних компонент (WinAPI / Native API)

Для толстого или тонкого клиента под управлением ОС Windows отслеживание физического положения курсора мыши над окном формы возможно с помощью внешних компонент (с использованием системных хуков WinAPI).

Однако следует учитывать существенные недостатки этого метода:

Итоги

Выяснив особенности платформы, сделаем вывод: для полноценного отклика на простое перемещение мыши наиболее оптимальным и быстродействующим решением является вывод данных через Поле HTML-документа с применением CSS-стилей :hover. Если же задача решается в рамках стандартного отчета, достаточно настроить свойство Режим подсветки в СКД.

← На главную