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

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

При формировании отчетов или печатных форм в системе 1С:Предприятие часто возникает задача выделить определенные данные визуально. Чаще всего это требуется для акцентирования внимания на важных показателях, таких как задолженность, отрицательные остатки или выполнение плана. В данной статье мы подробно разберем, как программно управлять цветом фона ячеек в объекте ТабличныйДокумент.

Основы работы с областью табличного документа

Прежде чем менять оформление, нам необходимо определить область, к которой будет применено форматирование. В 1С для этого используется метод Область(). Мы можем обратиться к конкретной ячейке по её адресу (например, "R1C1") или по координатам (номер строки и номер колонки). Разберем стандартный подход к получению области ячейки.

Проанализируем пример кода, в котором мы получаем доступ к ячейке и готовимся изменить её свойства:


// Создаем или получаем существующий табличный документ
ТабДок = Новый ТабличныйДокумент;

// Получаем область конкретной ячейки (строка 2, колонка 3)
ОбластьЯчейки = ТабДок.Область(2, 3, 2, 3);

Важно понимать, что объект ОбластьТабличногоДокумента обладает свойством ЦветФона. Именно это свойство отвечает за визуальное отображение заливки. Данное свойство принимает объект типа Цвет, который можно создать несколькими способами.

Способ 1: Использование абсолютных цветов (RGB)

Наиболее точный способ задать конкретный оттенок — это использование модели RGB (Red, Green, Blue). Этот метод позволяет программно вычислить нужный цвет в зависимости от бизнес-логики. Рассмотрим, как это реализовать по шагам.

Для создания цвета по модели RGB используется конструктор объекта Цвет с тремя параметрами. Выясним, как применить красный цвет фона для ячейки с отрицательным значением:


// Задаем цвет: Красный = 255, Зеленый = 0, Синий = 0
НужныйЦвет = Новый Цвет(255, 0, 0);

// Применяем к области
ОбластьЯчейки.ЦветФона = НужныйЦвет;

Этот метод удобен тем, что вы можете динамически вычислять интенсивность цвета. Например, чем больше сумма долга, тем насыщеннее может быть оттенок красного. Проанализируем ситуацию, когда нам нужно сделать "градиентную" закраску в зависимости от значения переменной СтепеньРиска:


Если СтепеньРиска > 80 Тогда
    ОбластьЯчейки.ЦветФона = Новый Цвет(255, 0, 0); // Ярко-красный
ИначеЕсли СтепеньРиска > 50 Тогда
    ОбластьЯчейки.ЦветФона = Новый Цвет(255, 165, 0); // Оранжевый
КонецЕсли;

Способ 2: Использование Web-цветов

В платформе 1С предусмотрена коллекция стандартных веб-цветов, которые имеют понятные названия (например, WebColors.Gold или WebColors.LightGreen). Это избавляет разработчика от необходимости подбирать RGB-коды вручную. Посмотрим на пример использования этого метода:


// Используем стандартный светло-зеленый цвет из коллекции WebColors
ОбластьЯчейки.ЦветФона = WebColors.СветлоЗеленый;

Использование WebColors делает код более читаемым и понятным для других разработчиков. Рекомендуется использовать этот способ для стандартных элементов интерфейса, где не требуется уникальный корпоративный брендинг.

Способ 3: Использование цветов стиля и системных цветов

Если вы хотите, чтобы ваш отчет гармонично смотрелся в интерфейсе программы и учитывал текущую тему оформления пользователя, следует использовать ЦветаСтиля. Это гарантирует, что при смене цветовой схемы платформы (например, при переходе на темную тему в будущем), ваш отчет останется читабельным.

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


// Применяем цвет из метаданных конфигурации (Стили)
ОбластьЯчейки.ЦветФона = ЦветаСтиля.ЦветОтрицательногоИтога;

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

Комплексный пример: Оформление строки по условию

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

  1. Создаем макет или используем существующий.
  2. Выводим область в табличный документ.
  3. Если условие выполняется, получаем доступ к только что выведенной строке.
  4. Меняем цвет фона всей строки.

Посмотрим на практическую реализацию этого алгоритма:


ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетОтчета");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл
    // Заполняем параметры области
    ОбластьСтрока.Параметры.Заполнить(Выборка);
    
    // Выводим область в документ
    ТабДок.Вывести(ОбластьСтрока);
    
    // Проверяем условие для закраски
    Если Выборка.Остаток < 0 Тогда
        // Определяем номер последней выведенной строки
        НомерСтроки = ТабДок.ВысотаТаблицы;
        // Получаем область всей строки (от первой до последней колонки)
        ОбластьДляЗакраски = ТабДок.Область(НомерСтроки, 1, НомерСтроки, );
        // Устанавливаем бледно-красный фон
        ОбластьДляЗакраски.ЦветФона = Новый Цвет(255, 230, 230);
    КонецЕсли;
КонецЦикла;

Оптимизация и важные нюансы

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

Во-первых, старайтесь избегать создания новых объектов Цвет внутри цикла. Лучше создать нужные цвета заранее в переменных и использовать их повторно.


ЦветКритический = Новый Цвет(255, 0, 0);
ЦветНормальный = WebColors.Белый;

Пока Выборка.Следующий() Цикл
    // Используем уже созданный объект, а не создаем "Новый Цвет" каждый раз
    Область.ЦветФона = ?(Выборка.Ошибка, ЦветКритический, ЦветНормальный);
КонецЦикла;

Во-вторых, помните о свойстве Узор. Если вы установите цвет фона, но при этом свойство Узор будет установлено в значение ТипУзораТабличногоДокумента.БезУзора (что является значением по умолчанию для пустых областей), цвет может не отобразиться. Обычно платформа корректно обрабатывает это автоматически при программной установке ЦветФона, но в сложных макетах стоит проверить этот параметр.

В-третьих, учитывайте приоритеты оформления. Если вы используете Систему Компоновки Данных (СКД), то программное изменение цвета в уже сформированном документе может быть перекрыто настройками условного оформления самой компоновки. Если задача позволяет, лучше настраивать цвета через УсловноеОформление в схеме компоновки данных, так как это работает быстрее и легче масштабируется.

Таким образом, мы рассмотрели все основные способы управления цветом фона в 1С. Выбор конкретного метода зависит от ваших задач: используйте RGB для динамических расчетов, WebColors для быстрой разработки и ЦветаСтиля для соблюдения корпоративного стандарта интерфейса.

← На главную