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