Как программно раскрасить строки в табличной части документа 1С по условию?

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

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

Постановка задачи

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

Разбор типичной ошибки: Объект против Имени

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


// Ошибочный подход
МассивИменКолонокДляПодсветки = Новый Массив;
МассивИменКолонокДляПодсветки.Добавить(Элементы.Состав.ПодчиненныеЭлементы.СоставНомерЛицевогоСчета);

Для каждого ТекЭлемент из МассивИменКолонокДляПодсветки Цикл
    ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ТекЭлемент); 
КонецЦикла;

Выясним причину неудачи. В данном случае в конструктор ПолеКомпоновкиДанных передается сам объект элемента формы (колонка таблицы). Однако система ожидает на вход строковое имя элемента формы, которое задано в дереве элементов. Это критически важный момент: оформление привязывается к визуальному элементу по его уникальному имени в контексте формы.

Решение №1: Правильная программная настройка

Теперь составим корректный алгоритм настройки условного оформления (вы также можете автоматически генерировать код условного оформления). Мы будем использовать событие формы ПриСозданииНаСервере. Разберем процесс по шагам:

  1. Создаем новый элемент условного оформления в коллекции УсловноеОформление.Элементы.
  2. Устанавливаем параметры оформления (в нашем примере — ЦветТекста).
  3. Настраиваем отбор (условие), по которому будет срабатывать подсветка.
  4. Указываем поля, которые должны изменить свой вид.

Посмотрим на пример правильного кода:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // 1. Создаем новый элемент оформления
    ЭлементОформления = УсловноеОформление.Элементы.Добавить();
    ЭлементОформления.Использование = Истина;

    // 2. Устанавливаем цвет (например, красный)
    ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);

    // 3. Настраиваем условие (отбор)
    // Важно: ЛевоеЗначение — это ПУТЬ К ДАННЫМ реквизита
    ЭлементУсловия = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементУсловия.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Объект.Состав.НомерЛицевогоСчета");
    ЭлементУсловия.ВидСравнения   = ВидСравненияКомпоновкиДанных.НачинаетсяС;
    ЭлементУсловия.ПравоеЗначение = "4082";
    ЭлементУсловия.Использование  = Истина;

    // 4. Указываем оформляемое поле (колонку)
    // Важно: Поле — это ИМЯ ЭЛЕМЕНТА ФОРМЫ (строка)
    ОформляемоеПоле      = ЭлементОформления.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("СоставНомерЛицевогоСчета");

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

Обратите внимание на использование ВидСравненияКомпоновкиДанных.НачинаетсяС. Если мы будем использовать Содержит, то система подсветит и те счета, где 4082 встречается в середине, что может не соответствовать бизнес-логике, аналогично тому, как работает сравнение строковых представлений данных в запросах.

Решение №2: Подсветка всей строки (Оптимизация)

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

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

Решение №3: Интерактивная настройка в Конфигураторе

Для многих задач написание кода не требуется вовсе. Платформа позволяет настроить условное оформление визуально. Рассмотрим, как это сделать:

  1. Откройте форму нужного документа в конфигураторе.
  2. В окне свойств формы (справа внизу) перейдите на закладку «Условное оформление».
  3. Нажмите кнопку «Добавить».
  4. В появившемся окне укажите:
    • Оформление: выберите цвет текста или фона.
    • Условие: выберите поле Объект.Состав.НомерЛицевогоСчета, вид сравнения Начинается с и значение 4082.
    • Оформляемые поля: оставьте пустым (для всей строки) или выберите конкретную колонку.

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

Важные нюансы и рекомендации

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

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

2. Приоритеты. Помните, что если к одной строке применимы сразу несколько правил оформления, система применит их последовательно (сверху вниз по списку элементов оформления). Последнее правило может перекрыть настройки предыдущих.

3. Динамическое изменение. Огромный плюс механизма УсловноеОформление заключается в том, что он работает «на лету». Если пользователь изменит номер лицевого счета прямо в открытой форме, и новый номер будет начинаться на 4082, строка мгновенно изменит цвет без вызова дополнительных серверных процедур со стороны разработчика.

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

← На главную