Как выделить цветом строку в таблице управляемой формы после перетаскивания?

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

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

Многие разработчики, особенно перешедшие с обычных форм или других языков программирования, пытаются менять оформление напрямую, обращаясь к свойствам элементов, например: Элементы.Таблица.ТекущийЭлемент.ЦветТекста = WebЦвет.Зеленый. Однако в управляемых формах такой подход не работает должным образом, так как он затрагивает все элементы колонки и нарушает идеологию платформы, где интерфейс является лишь отображением состояния данных.

Правильный подход: декларативное условное оформление

Чтобы выделить строку, мы не должны «красить» элемент напрямую. Нам необходимо изменить состояние данных, которые отображаются в таблице, и позволить системе автоматически применить стиль. Рассмотрим пошаговый алгоритм решения этой задачи.

Шаг 1: Добавление флага в данные

Так как платформа ориентирована на работу с данными, нам нужно добавить в табличную часть (ТЧ), в которую происходит перетаскивание, новый реквизит. Назовем его, например, ВыделитьСтроку. Тип этого реквизита — Булево. Это поле не обязательно выводить на форму, оно может быть скрытым и служить исключительно для передачи сигнала системе о необходимости изменения стиля.

Шаг 2: Настройка условного оформления

Теперь перейдем к настройке правил, по которым 1С будет «красить» строки:

  1. Откройте форму в Конфигураторе.
  2. Перейдите на вкладку Условное оформление в свойствах формы или непосредственно в свойствах элемента Таблица.
  3. Создайте новый элемент.
  4. В поле Оформление установите свойство Цвет текста или Цвет фона в нужное вам значение (например, красный для предупреждения о дублях).
  5. В поле Условие добавьте правило: ВыделитьСтроку равно Истина.
  6. В разделе Оформляемые поля выберите те колонки, которые должны быть окрашены. Если вы оставите этот список пустым, система автоматически окрасит всю строку целиком.

Шаг 3: Логика обработки перетаскивания

Теперь реализуем программную часть. В модуле формы обработайте событие ОбработкаПеретаскивания для вашей таблицы-приемника. Рассмотрим пример того, как это должно выглядеть:


// В обработчике перетаскивания анализируем перенесенные данные
Процедура ТаблицаПриемникОбработкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
    
    СтандартнаяОбработка = Ложь; // Отключаем стандартное поведение для ручного управления
    
    // Получаем данные из перетаскиваемого объекта
    ДанныеПеретаскивания = ПараметрыПеретаскивания.Значение;
    
    // Добавляем новую строку в ТЧ
    НоваяСтрока = Объект.ТаблицаПриемник.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, ДанныеПеретаскивания);
    
    // Выполняем проверку на наличие данных в другом регистре или списке
    Если ПроверитьНаличиеДубля(НоваяСтрока) Тогда
        // Если дубль найден, ставим наш флаг
        НоваяСтрока.ВыделитьСтроку = Истина;
    Иначе
        НоваяСтрока.ВыделитьСтроку = Ложь;
    КонецЕсли;

КонецПроцедуры

Как только вы установите НоваяСтрока.ВыделитьСтроку = Истина, платформа 1С автоматически «увидит» изменение данных, проверит установленное вами правило условного оформления и перерисует строку в нужный цвет. Это самый быстрый, надежный и архитектурно правильный способ.

Почему не стоит управлять цветом напрямую?

Важно понимать, что прямое обращение к свойству ЦветТекста в управляемых формах:

Практические советы

Используйте этот же механизм Булево-флага для управления состоянием строки. Например, вы можете добавить не только цвет, но и изменить Картинку в колонке с помощью того же условного оформления. Это значительно улучшит эргономику интерфейса: пользователь сразу увидит не просто «странный цвет», а иконку с предупреждением, что данные уже существуют в системе.

Не забывайте, что при выполнении дальнейших действий (например, записи данных или подтверждения пользователем), вам нужно принудительно сбросить значение ВыделитьСтроку = Ложь, чтобы визуальное выделение исчезло и не вводило пользователя в заблуждение.

Таким образом, мы разобрали с вами, как, добавив всего один технический реквизит, превратить сложную задачу манипуляции интерфейсом в простую настройку правил отображения данных. Это позволит вашему коду оставаться чистым, а форме — работать стабильно в любых условиях.

← На главную