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

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

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

Способ 1: Оформление через получение секции до её вывода

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

Рассмотрим пример кода, в котором мы проверяем условие и раскрашиваем конкретную ячейку в секции:


// Создаем объект Таблица
Таб = СоздатьОбъект("Таблица");
// Получаем секцию "Строка" из макета
Секция = Таб.ПолучитьСекцию("Строка");

// Проверяем условие (например, если сумма меньше нуля)
Если СуммаДолга > 0 Тогда
    // Обращаемся к области внутри полученной секции
    // Область(R1, C1, R2, C2) - координаты внутри секции
    Секция.Область(1, 3, 1, 3).ЦветФона(255, 0, 0); // Красный цвет
Иначе
    // Возвращаем цвет по умолчанию (параметр -1)
    Секция.Область(1, 3, 1, 3).ЦветФона(-1);
КонецЕсли;

// Выводим модифицированную секцию в итоговый документ
Таб.ВывестиСекцию(Секция);

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

Способ 2: Раскрашивание ячеек в уже сформированном документе

Иногда требуется изменить цвет ячеек после того, как секция уже была выведена в таблицу. В этом случае нам необходимо знать координаты выведенной области. Для этого удобно использовать метод ВысотаТаблицы(), который возвращает номер последней выведенной строки.

Разберем, как это работает на практике:


// Выводим секцию обычным способом
Таб.ВывестиСекцию("Строка|Данные");

// Получаем номер строки, которая только что была добавлена
НомСтр = Таб.ВысотаТаблицы();

// Если условие выполняется, красим ячейку в колонке №5
Если ТекОстаток < 0 Тогда
    // Используем метод Область напрямую у объекта Таблица
    Таб.Область(НомСтр, 5, НомСтр, 5).ЦветФона(0, 255, 0); // Зеленый
КонецЕсли;

Этот подход удобен, когда структура отчета сложная, и вы предпочитаете манипулировать уже готовым полотном документа.

Работа с цветом: Формула RGB

Методы ЦветФона(), ЦветТекста() и ЦветРамки() в 1С 7.7 принимают либо три параметра (Красный, Зеленый, Синий), либо одно совокупное числовое значение. Если вы хотите использовать произвольный цвет, его можно вычислить по следующей формуле:

Цвет = Red + (Green * 256) + (Blue * 65536)

Рассмотрим несколько популярных сочетаний:

Дополнительные параметры оформления

Покраска фона — это лишь часть возможностей. Чтобы сделать отчет по-настоящему профессиональным, проанализируем методы управления шрифтами и рамками.

1. Управление шрифтом:

Для выделения итогов часто используются следующие методы объекта Область:

2. Управление рамками:

Если нужно программно обвести ячейку или группу ячеек, используйте метод Рамка(). Значения параметра определяют тип линии (например, 1 — тонкая, 2 — жирная, 4 — пунктирная). Метод ЦветРамки() позволяет задать цвет этих линий.


// Пример создания выделенной области с рамкой и жирным шрифтом
Обл = Таб.Область(НомСтр, 1, НомСтр, 10);
Обл.Рамка(2); // Жирная рамка вокруг всей области
Обл.Полужирный(1);
Обл.ЦветТекста(0, 0, 255); // Синий текст

Оптимизация при работе с большими таблицами

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

  1. Подготовка нескольких секций: Создайте в макете две строки — "СтрокаОбычная" и "СтрокаКрасная". В коде просто выбирайте, какую из них вывести. Это работает в разы быстрее, чем программное изменение свойств каждой ячейки.
  2. Копирование параметров: Если у вас есть эталонная ячейка с нужным оформлением, можно использовать метод КопироватьПараметры(ОбластьИсточник).
  3. Групповое выделение: Старайтесь обращаться не к каждой ячейке по отдельности, а к целым строкам или диапазонам, если это возможно.

Использование системных цветов Windows

В 1С 7.7 существует интересная возможность использовать цвета, заданные в настройках операционной системы пользователя. Для этого в методах установки цвета используются отрицательные числа от -2 до -25. Например:

Это позволяет вашему отчету гармонично вписываться в цветовую схему, выбранную пользователем в Windows. Для интерактивного подбора оттенков и их числовых кодов можно использовать обработку для выбора цвета в 1С 7.7.

Резюме: Мы рассмотрели основные способы программного управления оформлением табличного документа. Наиболее эффективным является комбинированный подход: использование заранее подготовленных секций макета для стандартных ситуаций и точечное применение метода Область().ЦветФона() для реализации сложной логики раскраски. При необходимости автоматизировать оформление данных подойдёт подсистема универсальной раскраски таблиц.

← На главную