Как выделить цветом строки в таблице отчета 1С по условию?

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

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

Способ 1: Программное управление через результат метода Вывести()

Это один из самых гибких и профессиональных способов. Когда мы вызываем метод Вывести() у объекта ТабличныйДокумент, система не просто копирует данные из макета, но и возвращает нам объект типа ОбластьТабличногоДокумента. Эта область соответствует именно той строке, которую мы только что добавили в отчет.

Рассмотрим ситуацию: нам нужно окрасить всю строку, если остаток товара превышает 10 единиц. Давайте проанализируем следующий код:


// Создаем новый табличный документ и получаем макет
НовТабДок = Новый ТабличныйДокумент;
Макет = Объект.МакетОтчета;
Шапка = Макет.ПолучитьОбласть("Шапка"); 
НовТабДок.Вывести(Шапка);

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

Пока Выборка.Следующий() Цикл
    // Получаем область строки из макета
    СтрокаТЧ = Макет.ПолучитьОбласть("СтрокаТЧ");
    СтрокаТЧ.Параметры.Заполнить(Выборка);
    
    // Выводим строку и получаем ссылку на выведенную область
    ТекущаяСтрока = НовТабДок.Вывести(СтрокаТЧ);
    
    // Проверяем условие и устанавливаем цвет фона для всей выведенной строки
    Если Выборка.Остаток > 10 Тогда
        ТекущаяСтрока.ЦветФона = WebЦвета.ЖелтоЗеленый;
    КонецЕсли;
КонецЦикла;

Преимущество этого метода: нам не нужно знать точные координаты ячеек (строк и колонок). Объект ТекущаяСтрока охватывает ровно те ячейки, которые были определены в области "СтрокаТЧ" макета. Это защищает ваш код от поломок при добавлении новых колонок в макет.

Способ 2: Использование метода Область() внутри области макета

Если по каким-то причинам нам нужно раскрасить не всю выведенную область, а только определенный диапазон колонок внутри строки еще до того, как она попала в итоговый документ, мы можем обратиться к методу Область() самой переменной СтрокаТЧ. Разберем, как это работает на практике.

Важно понимать, что внутри полученной области СтрокаТЧ отсчет координат начинается заново (с первой строки и первой колонки). Поэтому, даже если в основном отчете это 100-я строка, для объекта СтрокаТЧ это будет "R1".


Если ВыборкаДетальныеЗаписи.Остаток > 10 Тогда
    // Красим ячейки с 1 по 12 в первой строке полученной области
    СтрокаТЧ.Область("R1C1:R1C12").ЦветФона = WebЦвета.ЖелтоЗеленый;
Иначе
    // Важно сбросить цвет, если область используется повторно в цикле
    СтрокаТЧ.Область("R1C1:R1C12").ЦветФона = WebЦвета.Авто;
КонецЕсли;

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

Способ 3: Подготовка нескольких вариантов строк в макете

Иногда визуальное оформление строки включает в себя не только цвет фона, но и особые границы, жирный шрифт или специфические цвета текста. В таких случаях проще подготовить в макете две (или более) именованные области. Например, "СтрокаОбычная" и "СтрокаВыделенная".

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


Пока Выборка.Следующий() Цикл
    Если Выборка.Остаток > 10 Тогда
        ОбластьДляВывода = Макет.ПолучитьОбласть("СтрокаВыделенная");
    Иначе
        ОбластьДляВывода = Макет.ПолучитьОбласть("СтрокаОбычная");
    КонецЕсли;
    
    ОбластьДляВывода.Параметры.Заполнить(Выборка);
    НовТабДок.Вывести(ОбластьДляВывода);
КонецЦикла;

Почему это эффективно? Платформе 1С проще вывести готовую отформатированную область, чем программно менять свойства каждой ячейки в цикле. Это существенно ускоряет формирование отчетов с десятками тысяч строк.

Способ 4: Использование Системы компоновки данных (СКД)

Если ваш отчет строится с использованием СКД, то писать код для раскраски строк вообще не требуется. Для этого существует механизм Условного оформления. Проанализируем алгоритм настройки:

  1. Перейдем на закладку Настройки в схеме компоновки данных.
  2. Выберем вкладку Условное оформление.
  3. Добавим новый элемент оформления.
  4. В поле Оформление выберем Цвет фона.
  5. В поле Условие укажем: Остаток Больше 10.
  6. В поле Оформляемые поля можно ничего не выбирать (тогда покрасится вся строка) или выбрать конкретные поля.

Совет: В СКД старайтесь использовать "Цвета стиля" вместо конкретных RGB-значений. Например, выбрав ЦветФонаОсобогоТекста, вы гарантируете, что отчет будет выглядеть корректно как в светлой, так и в темной теме оформления интерфейса "Такси".

Дополнительные параметры визуализации

Помимо свойства ЦветФона, мы можем управлять и другими характеристиками области для достижения лучшего визуального эффекта:

1. Изменение шрифта. Выделение жирным шрифтом часто более информативно, чем заливка цветом. Рассмотрим пример:


ТекущаяСтрока.Шрифт = Новый Шрифт(ТекущаяСтрока.Шрифт, , , Истина); // Устанавливаем жирное начертание

2. Узоры. Если отчет предназначен для печати на черно-белом принтере, цветовое выделение может стать нечитаемым. В этом случае используйте свойство Узор:

ТекущаяСтрока.Узор = ТипУзораТабличногоДокумента.ДиагональнаяСетка;

3. Границы. Для акцентирования внимания на строке можно обвести ее жирной рамкой, используя метод ОбвестиГраницей().

Оптимизация производительности

При работе с большими объемами данных (от 50 000 строк и выше) программная раскраска может замедлить работу системы. Проанализируем рекомендации по ускорению:

Таким образом, выбор метода зависит от архитектуры вашего отчета. Для простых отчетов на макетах оптимален Способ 1, для высокопроизводительных систем — Способ 3, а для современных отчетов на управляемых формах идеальным выбором станет СКД.

← На главную