Как разукрасить строку таблицы значений на управляемой форме 1С 8.3?

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

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

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

Первое и самое важное, что нам необходимо усвоить: в управляемом приложении 1С визуальное отображение отделено от данных. Вы не можете просто обратиться к ячейке таблицы на клиенте и сказать ей Ячейка.Цвет = Красный, как это делалось в обычных формах. Вместо этого используется декларативный механизм — Условное оформление.

Многие начинающие разработчики пытаются использовать события ПриИзменении или ПриОкончанииРедактирования для программной раскраски, но это ошибочный путь. Условное оформление работает автоматически: как только данные в реквизите формы (таблице значений) меняются, платформа сама перерисовывает интерфейс в соответствии с заданными правилами.

Способ 1: Настройка через конфигуратор (Статическое оформление)

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

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

Проанализируем ситуацию: когда вы на клиенте используете метод Добавить() для таблицы значений и устанавливаете значение в колонке External, платформа мгновенно применяет созданное правило, и строка окрашивается без вызова серверных процедур.

Способ 2: Программное управление оформлением

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

Рассмотрим пример кода для программного добавления правила:


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

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

Использование скрытых служебных реквизитов

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

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

Решение: Добавьте в таблицу значений скрытую колонку, например, ИндексЦвета (тип Число). При заполнении таблицы на клиенте или сервере сразу рассчитайте значение этого поля (0 — обычный, 1 — критичный, 2 — внимание). А в условном оформлении создайте простые правила: если ИндексЦвета равен 1, то фон — красный.

Особенности обновления данных на клиенте

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

Посмотрим на пример: Если вы добавляете строку методом НоваяСтрока = Объект.ТЗ.Добавить(), а затем заполняете реквизит НоваяСтрока.Статус = "Ошибка", то в ту же секунду, как фокус уйдет из ячейки (или значение будет присвоено программно), платформа применит оформление. Никакие методы типа ОбновитьОтображениеДанных() в стандартных ситуациях вызывать не требуется.

Приоритеты и дополнительные возможности

Проанализируем еще несколько важных аспектов, которые помогут сделать ваши таблицы более профессиональными:

Важное замечание по производительности: Старайтесь минимизировать количество правил оформления для таблиц, содержащих более 10 000 строк. Для больших списков лучше использовать расчетные колонки, как мы разобрали выше, чтобы условия внутри самого оформления оставались максимально простыми (сравнение с числом или булево).

Таким образом, использование условного оформления — это единственный верный и наиболее эффективный способ управления визуальным состоянием строк в 1С 8.3 на управляемых формах. Он обеспечивает чистоту кода, высокую скорость работы интерфейса и автоматическую синхронизацию данных с их представлением на экране.

← На главную