Как программно раскрасить строки в таблице на управляемой форме 1С

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

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

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

Для начала выясним причину, по которой перебор строк в цикле для прямой установки цвета ячеек не работает. В управляемом приложении форма — это лишь описание интерфейса, а отрисовкой занимается платформа (или браузер в случае web-клиента). Мы не можем напрямую обратиться к объекту "строка таблицы" и сказать ему: "стань красным". Вместо этого мы должны создать правило, согласно которому платформа сама раскрасит данные. Это делается через механизм УсловноеОформление.

Вариант 1: Настройка в конфигураторе (статическая)

Если условий немного (например, как в запросе автора: тип значения — число или значение больше нуля), проще всего настроить это визуально. Разберем по шагам:

  1. Откроем форму документа и перейдем на закладку "Условное оформление".
  2. Добавим новый элемент оформления.
  3. В поле "Оформление" выберем нужный Цвет фона (например, зеленый).
  4. В поле "Условие" добавим наше правило: Объект.Товары.Количество Больше 0.
  5. В поле "Оформляемые поля" укажем колонки, которые должны окраситься, или оставим пустым для окрашивания всей строки.

Вариант 2: Программное создание правил (для 100+ условий)

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


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

Вариант 3: Оптимальный метод «Индекс оформления» (Скрытая колонка)

Если логика раскраски слишком сложная (например, требует обращения к остаткам на складах или сложной проверки типов данных), расчет условий непосредственно в Условном оформлении может замедлить работу формы. Рассмотрим наиболее профессиональный подход: использование вспомогательной колонки.

Шаг 1. Добавим в табличную часть (или в реквизиты формы, если это динамический список) скрытую колонку ИндексОформления с типом Число.

Шаг 2. Проанализируем данные и заполним эту колонку программно при открытии или изменении данных. Выясним причину выбора конкретного цвета заранее:


&НаСервере
Процедура РассчитатьИндексыОформления()
    
    Для Каждого СтрокаТЧ Из Объект.Товары Цикл
        Если СтрокаТЧ.Количество > 100 Тогда
            СтрокаТЧ.ИндексОформления = 1; // Оптовик (например, синий)
        ИначеЕсли СтрокаТЧ.Цена < 10 Тогда
            СтрокаТЧ.ИндексОформления = 2; // Дешевый товар (например, красный)
        Иначе
            СтрокаТЧ.ИндексОформления = 0; // Стандарт
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Шаг 3. Настроим УсловноеОформление один раз, опираясь только на значение колонки ИндексОформления. Например: если ИндексОформления = 1, то фон синий. Платформе гораздо проще сравнивать числа, чем выполнять сложные логические цепочки для каждой строки при каждом скроллинге.

Особенности работы в Web-клиенте

Поскольку планируется работа через Web-клиент, важно учитывать производительность. Большое количество правил условного оформления может привести к визуальным задержкам. Старайтесь объединять условия и минимизировать количество "Оформляемых полей". Важный момент: используйте системные цвета (например, ЦветаСтиля), так как они гарантированно корректно отображаются в разных браузерах и темах оформления.

Динамическое обновление оформления

Если пользователь меняет значения в таблице прямо на форме, и нам нужно мгновенно перекрасить строку, мы должны вызвать пересчет индекса в событии ПриИзменении соответствующей колонки. Как только значение в ИндексОформления изменится, УсловноеОформление сработает автоматически без перезагрузки всей формы.

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

← На главную