Как раскрасить строку на форме в Таблице Значений?

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

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

Механизм Условного оформления в Управляемых формах

Начиная с версии 8.2, в 1С основным инструментом для изменения внешнего вида ячеек и строк является механизм Условного оформления. В отличие от старых методов, этот подход работает декларативно: мы описываем условие, при котором должно примениться оформление, и система сама перерисовывает интерфейс при изменении данных.

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

Шаг 1: Подготовка данных

Прежде всего, нам нужно понять, по какому признаку система узнает, что строку пора красить. Использовать сложные условия в реальном времени может быть накладно для производительности, поэтому разберем самый надежный способ:

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

Теперь нам нужно взводить этот флаг. Рассмотрим два варианта установки значения Истина в колонку Изменена:

Вариант А: При изменении конкретного поля


&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
    Если ТекущиеДанные <> Неопределено Тогда
        ТекущиеДанные.Изменена = Истина;
    КонецЕсли;
КонецПроцедуры

Вариант Б: Универсальный способ при окончании редактирования строки


&НаКлиенте
Процедура ТоварыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
    Если Не ОтменаРедактирования Тогда
        Элементы.Товары.ТекущиеДанные.Изменена = Истина;
    КонецЕсли;
КонецПроцедуры

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

Если структура таблицы статична, проще всего настроить правила прямо в конфигураторе, а редактор форм в режиме предприятия позволит проверить свойства элементов «на лету»:

  1. Откроем форму и перейдем на закладку «Условное оформление» (находится в свойствах самой формы, а не таблицы).
  2. Добавим новый элемент оформления.
  3. В поле «Оформление» выберем нужный цвет, например, Цвет фона — WebЦвета.СветлоЗеленый.
  4. В поле «Условие» укажем: Объект.Товары.Изменена Равно Истина.
  5. В поле «Оформляемые поля» выберем все колонки таблицы, которые должны окраситься (или оставим пустым, чтобы красилась вся строка).

Шаг 3: Настройка оформления (Программно)

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

Разберем правильный пример программной настройки в процедуре ПриСозданииНаСервере, используя конструктор управляемых форм:


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

Почему код может «не красить»? Разбор типичных ошибок

Рассмотрим причины, по которым оформление может не работать, даже если код написан без ошибок компиляции:

Особенности раскраски в Обычных формах

Если вы работаете в старом интерфейсе (толстый клиент, обычные формы), механизм условного оформления там отсутствует в привычном виде. Проанализируем, как решить задачу в этом случае. Основным событием здесь является ПриВыводеСтроки.

Рассмотрим пример кода для обычной формы:


Процедура ТаблицаТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    
    // Проверяем условие непосредственно в момент отрисовки
    Если ДанныеСтроки.Изменена = Истина Тогда
        // Устанавливаем цвет всей строки
        ОформлениеСтроки.ЦветФона = Новый Цвет(255, 250, 205); // Светло-желтый
        
        // Можно также выделить конкретную ячейку или изменить шрифт
        ОформлениеСтроки.Ячейки.Номенклатура.Шрифт = Новый Шрифт(,,Истина); // Жирный
    КонецЕсли;
    
КонецПроцедуры

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

Рекомендации по выбору цветов

Выясним, какие цвета лучше использовать, чтобы интерфейс оставался приятным для пользователя. Вместо ярких «кислотных» цветов (красный, синий), лучше использовать мягкие пастельные тона из коллекции WebЦвета или системные стили платформы:

Таким образом, мы рассмотрели комплексный подход к раскраске строк. Помните: в управляемых формах залог успеха — это создание технического флага в данных и однократная настройка УсловногоОформления на сервере.

← На главную