Переход с обычных форм на управляемые в 1С:Предприятии 8 принес значительные изменения в работе с интерфейсом. Одним из самых частых вопросов разработчиков стал вопрос визуального оформления списков и таблиц. Если в обычных формах мы привыкли использовать событие ПриВыводеСтроки, то в управляемом интерфейсе подход стал декларативным, а для глобальных визуальных изменений можно применить готовый набор из 30 тем для интерфейса. Давайте подробно разберем, как правильно и эффективно раскрашивать таблицу значений (ТЗ) на управляемой форме, используя механизм условного оформления.
Прежде всего, проанализируем ситуацию: в управляемых формах оформление данных отделено от самих данных. Система сама решает, когда и как отрисовать строку, основываясь на правилах, которые мы задаем заранее. Эти правила хранятся в свойстве формы УсловноеОформление. Проанализировать их в реальном времени поможет редактор форм в режиме предприятия. Важно помнить, что это свойство принадлежит именно всей форме, а не конкретному элементу управления «Таблица». Это часто сбивает с толку начинающих разработчиков, которые пытаются найти настройки цвета в свойствах самой таблицы.
Рассмотрим два основных способа настройки: интерактивный (через конфигуратор) и программный (с помощью встроенного языка).
Этот метод наиболее прост и подходит для статичных правил оформления, которые не меняются в процессе работы программы. Разберем его по шагам:
ЦветФона или ЦветТекста). Чтобы подобрать гармоничные цвета, можно использовать менеджер цветовых схем.Объект.Товары.Количество > 100.Часто условия оформления зависят от внешних факторов или должны создаваться динамически. В этом случае мы используем программный подход. Давайте выясним причину популярности этого метода: он позволяет гибко управлять интерфейсом в зависимости от прав пользователя или сложных расчетов — для этого подойдёт расширение настройки видимости и доступности реквизитов.
Рассмотрим пример кода, который можно разместить в процедуре ПриСозданииНаСервере. Допустим, у нас есть таблица значений ТЗ_Данные, и мы хотим выделить красным цветом строки, где сумма превышает 1000.
// Создаем новый элемент условного оформления
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
// 1. Устанавливаем, ЧТО мы меняем (Оформление)
ЦветКрасный = Новый Цвет(255, 0, 0);
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветКрасный);
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
// 2. Устанавливаем условие, КОГДА это работает (Отбор)
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТЗ_Данные.Сумма");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементОтбора.ПравоеЗначение = 1000;
// 3. Указываем, КАКИЕ поля оформлять
// Если хотим раскрасить всю строку, добавляем саму таблицу как поле
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ТЗ_Данные");
Проанализируем этот код: мы использовали объект ПолеКомпоновкиДанных. Это важно, так как условное оформление работает на механизмах системы компоновки данных (СКД), даже если вы не строите сложный отчет.
Иногда условие раскраски настолько сложное, что его невозможно описать простым сравнением в Отбор.Элементы. Например, если цвет строки зависит от результата функции, работающей с внешними данными или сложными математическими вычислениями.
В такой ситуации мы рекомендуем следующий алгоритм:
ИндексЦвета с типом Число).УсловноеОформление, ориентируясь на значение этой невидимой колонки.Посмотрим на пример настройки такого условия:
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ОсобыйТекст);
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТЗ_Данные.ИндексЦвета");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = 1;
// Саму колонку "ИндексЦвета" на форме можно скрыть,
// сняв галочку "Видимость" у элемента формы.
Важно понимать, как система обрабатывает несколько правил оформления. Если для одной и той же ячейки срабатывают два разных правила (например, одно красит фон в желтый, а другое текст в красный), они будут применены совместно. Однако, если оба правила меняют один и тот же параметр (например, ЦветФона), то приоритет имеет то правило, которое находится ниже в списке коллекции УсловноеОформление.
Это позволяет нам создавать иерархию правил: сначала задавать общие правила для всей таблицы, а затем — более специфичные, которые будут «перекрывать» общие настройки при определенных условиях.
Давайте разберем, почему в управляемых формах нет события ПриВыводеСтроки. В веб-клиенте или при работе через медленное соединение постоянная пересылка данных о цвете каждой ячейки между сервером и клиентом сильно замедлила бы работу. Декларативное условное оформление передается на клиент один раз (как правило) и исполняется платформой локально. Это значительно повышает отзывчивость интерфейса.
Полезный совет: Условное оформление позволяет менять не только цвета. С его помощью можно управлять видимостью кнопок внутри строк таблицы, доступностью отдельных ячеек для редактирования и даже подменять отображаемый текст (параметр Текст), не меняя реального значения в данных — для этого подойдёт расширение настройки видимости и доступности полей.
Таким образом, использование УсловноеОформление — это не просто способ «раскрасить» таблицу, а мощный инструмент управления пользовательским интерфейсом в 1С 8.3. Для этой задачи есть конструктор произвольных интерфейсов и рабочих столов.