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