Как изменить цвет рамки и сетки в табличной части документа 1С

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

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

Различие между ЦветРамки и ЦветГраницы

Для начала проанализируем ситуацию: почему простая установка свойства ЦветРамки в палитре свойств или программно через Элементы.ИмяТаблицы.ЦветРамки часто не дает ожидаемого эффекта? Дело в том, что в управляемом приложении (интерфейс «Такси») это свойство отвечает только за внешний контур всего элемента управления. Оно не влияет на линии внутри самой таблицы.

Рассмотрим два разных подхода к решению задачи:

  1. Свойство элемента: ЦветРамки — только внешняя окантовка таблицы.
  2. Параметр условного оформления: ЦветГраницы — позволяет раскрасить линии между ячейками и строками (сетку).

Способ 1: Изменение цвета внешней рамки программно

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

Посмотрим на пример кода:


&НаСервере
Процедура УстановитьЦветРамкиТаблицы()
    // Устанавливаем черный цвет для внешней границы таблицы
    Элементы.АОСотрудники.ЦветРамки = WebЦвета.Черный;
    
    // Важно: чтобы цвет отобразился, у таблицы в конфигураторе 
    // должно быть установлено свойство Рамка (например, Одинарная линия)
КонецПроцедуры

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

Способ 2: Полное расчерчивание таблицы (сетка) через Условное Оформление

Выясним причину, по которой цикл по строкам таблицы с попыткой установить цвет рамки каждой ячейке (как в Сообщении 25) не работает. В управляемых формах Элементы.ИмяКолонки — это описание метаданных элемента формы, а не конкретная ячейка в строке. Чтобы изменить оформление ячеек динамически, нужно использовать Условное оформление формы.

Разберем по шагам, как программно задать цвет сетки (границ) для всей таблицы:


&НаСервере
Процедура НастроитьЦветСеткиТаблицы()
    
    // 1. Создаем новый элемент условного оформления
    ЭлементОформления = УсловноеОформление.Элементы.Добавить();
    
    // 2. Указываем, какой параметр мы хотим изменить. 
    // Для сетки используется "ЦветГраницы" (BorderColor)
    ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветГраницы", WebЦвета.Малиновый);
    
    // 3. Указываем поля (колонки), к которым применится оформление
    // Если нужно раскрасить всю таблицу, добавляем все колонки
    ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
    ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("АОСотрудники"); 
    
    // 4. Условие применения (если нужно для всех строк - оставляем отбор пустым)
    // В данном примере оформление применится ко всей таблице
    
КонецПроцедуры

Нюансы работы с параметром ЦветГраницы

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

Сложные случаи: Раскраска по условию

Проанализируем ситуацию, когда нам нужно выделить границы только у определенных строк (например, у сотрудников с задолженностью). В этом случае мы дополняем наш код элементом отбора.


&НаСервере
Процедура ВыделитьГраницыПросроченныхСтрок()
    
    Элемент = УсловноеОформление.Элементы.Добавить();
    
    // Устанавливаем цвет
    Элемент.Оформление.УстановитьЗначениеПараметра("ЦветГраницы", WebЦвета.Красный);
    
    // Добавляем оформляемые поля
    Поле = Элемент.Поля.Элементы.Добавить();
    Поле.Поле = Новый ПолеКомпоновкиДанных("АОСотрудникиСотрудник");
    
    // Настраиваем отбор: только если сумма больше 1000
    ЭлементОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.АОСотрудники.Сумма");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
    ЭлементОтбора.ПравоеЗначение = 1000;
    
КонецПроцедуры

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

Рекомендации по отладке

Если вы установили ЦветГраницы, но визуально ничего не изменилось, попробуйте следующее:

  1. Проверьте в конфигураторе свойство таблицы СтильЛинийКлеток. Если там стоит «Нет линий», цвет не поможет.
  2. Убедитесь, что вы не пытаетесь менять цвет ячейки в цикле через Элементы на сервере. Это самая частая ошибка. Элементы формы на сервере — это только описание их структуры, а не данные строк.
  3. Используйте яркие цвета (например, WebЦвета.Красный) для тестов, так как серые или черные оттенки могут сливаться со стандартной темой «Такси».

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

← На главную