Как программно раскрасить строки и ячейки в отчете 1С?

Программист 1С v8.3 (Обычные формы) Управленческий учет Торговля и дистрибуция
← На главную

При разработке отчетов на платформе 1С:Предприятие 8, особенно для конфигураций на обычных формах (таких как «Управление торговлей 10.3», «CRM 1.1» или «Бухгалтерия предприятия 2.0»), часто возникает задача визуального выделения данных. Раскраска строк помогает пользователю быстрее ориентироваться в отчете, выделяя критические показатели, отрицательные значения или просто разделяя логические блоки.

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

Способ 1: Установка цвета при выводе секции макета

Это классический метод, который используется в отчетах, строящихся на основе макета и ручного обхода выборки запроса. Основная идея заключается в том, чтобы получить область из макета, изменить ее свойство ЦветФона и только после этого вывести ее в результирующий табличный документ.

Рассмотрим пошагово этот алгоритм:

  1. Получаем макет отчета.
  2. Формируем запрос и начинаем обход его результата.
  3. Для каждой итерации получаем нужную область (например, строку).
  4. Проверяем условие и устанавливаем цвет.
  5. Выводим область в итоговый документ.

Проанализируем пример кода, реализующий этот подход:


Макет = ПолучитьМакет("Макет");
ВыборкаЗапроса = Запрос.Выполнить().Выбрать();

Пока ВыборкаЗапроса.Следующий() Цикл
    // Получаем область строки из макета
    ТекОбласть = Макет.ПолучитьОбласть("Строка");
    
    // Заполняем параметры области данными из выборки
    ТекОбласть.Параметры.Заполнить(ВыборкаЗапроса);
    
    // Условие для раскраски: например, если количество больше 100
    Если ВыборкаЗапроса.Количество > 100 Тогда
        ТекОбласть.ЦветФона = WebЦвета.БледноЗеленый;
    Иначе
        // Важно: всегда сбрасывайте цвет для строк, не подходящих под условие
        ТекОбласть.ЦветФона = WebЦвета.Белый;
    КонецЕсли;
    
    // Выводим подготовленную область в ТабличныйДокумент
    ТабДок.Вывести(ТекОбласть);
КонецЦикла;

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

Способ 2: Раскраска конкретной ячейки вместо всей строки

Иногда требуется выделить не всю строку целиком, а только одну конкретную ячейку (например, только колонку «Сумма», если она превышает лимит). Для этого нам нужно обратиться к конкретной области внутри полученной секции.

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


// Допустим, в макете ячейка в строке имеет имя "СуммаЯчейка"
Если ВыборкаЗапроса.Сумма > 10000 Тогда
    ТекОбласть.Области.СуммаЯчейка.ЦветФона = WebЦвета.Кирпичный;
КонецЕсли;
ТабДок.Вывести(ТекОбласть);

Этот метод позволяет гибко управлять оформлением каждого отдельного поля в зависимости от бизнес-логики.

Способ 3: Использование RGB-цветов и стилей

Стандартные WebЦвета удобны, но они не всегда позволяют добиться нужного эстетического эффекта. Если вам требуется специфический оттенок, используйте конструктор Новый Цвет(R, G, B). Параметры принимают значения от 0 до 255.

Рассмотрим пример создания мягкого пастельного фона:


ПроизвольныйЦвет = Новый Цвет(240, 255, 240); // Очень светло-зеленый
ТекОбласть.ЦветФона = ПроизвольныйЦвет;

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

Способ 4: Реализация эффекта «Зебры»

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


НомерСтроки = 0;
Пока ВыборкаЗапроса.Следующий() Цикл
    НомерСтроки = НомерСтроки + 1;
    ТекОбласть = Макет.ПолучитьОбласть("Строка");
    
    Если НомерСтроки % 2 = 0 Тогда
        ТекОбласть.ЦветФона = Новый Цвет(245, 245, 245); // Светло-серый
    Иначе
        ТекОбласть.ЦветФона = WebЦвета.Белый;
    КонецЕсли;
    
    ТабДок.Вывести(ТекОбласть);
КонецЦикла;

Способ 5: Раскраска уже сформированного документа

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

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


// Закрасим область с 5-й по 10-ю строку, в колонках с 1-й по 4-ю
ОбластьДляРаскраски = ТабДок.Область(5, 1, 10, 4);
ОбластьДляРаскраски.ЦветФона = WebЦвета.Золотистый;

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

Современная альтернатива: Система компоновки данных (СКД)

Нельзя не упомянуть, что в современных редакциях 1С (и даже в старых, начиная с версии 8.1) для раскраски отчетов лучше всего использовать СКД. В системе компоновки данных реализован механизм «Условного оформления», который позволяет задавать цвета фона, текста, шрифты и форматы чисел вообще без написания кода.

Преимущества СКД:

Если вы все же работаете с самописным отчетом на макете, используйте советы выше. Но для новых задач мы рекомендуем осваивать СКД, так как это промышленный стандарт разработки в 1С.

Типичные ошибки при раскраске

  1. Забытый сброс цвета: Если вы установили ТекОбласть.ЦветФона = Цвет1 внутри условия Если, но не прописали Иначе со сбросом в белый цвет, то после первого срабатывания условия все последующие строки отчета будут окрашены в Цвет1. Это происходит потому, что область макета сохраняет свое состояние в памяти.
  2. Производительность: В очень больших отчетах (десятки тысяч строк) сложная логика раскраски каждой ячейки может замедлить формирование. В таких случаях старайтесь красить всю строку целиком.
  3. Сетка: При интенсивной заливке фоном сетка табличного документа может смотреться некрасиво. Ее можно отключить свойством ТабДок.ОтображатьСетку = Ложь;.

Мы разобрали основные методы программного управления цветом в отчетах 1С. Используйте ручное управление областями макета для простых задач на обычных формах и переходите к условному оформлению в СКД для создания профессиональных и гибких отчетов.

← На главную