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