К статье
Практический материал

Разработка и Конфигурация · 8 мин

Как раскрасить ячейку табличного документа в 1С

Как программно и вручную раскрасить ячейку табличного документа в 1С: свойство ЦветФона, условное оформление, примеры кода, типичные ошибки и ответы на вопросы.

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

Выбор способа зависит от того, где формируется документ. Если вы пишете код в модуле объекта или внешней обработки — удобнее задавать цвет напрямую через свойство ЦветФона. Если документ строится по макету — цвет можно задать один раз в макете и не трогать код. Для отчётов на системе компоновки данных правильнее использовать условное оформление, чтобы не вмешиваться в программный вывод.

Способы раскраски ячеек: какой выбрать

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

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

Сравнение вариантов

Программная установка ЦветФона

Подходит для динамической раскраски по условиям; требует изменения кода

Цвет в макете

Подходит для статичного оформления шапок и итогов; не работает для условий по данным

Условное оформление СКД

Подходит для отчётов на компоновке; недоступно для произвольных табличных документов

Программная раскраска ячейки через ЦветФона

Основное свойство — ЦветФона у объекта «ОбластьЯчеекТабличногоДокумента». Сначала получаем область через метод Область(), затем присваиваем цвет. Область можно адресовать по имени, по координатам в формате R1C1 или по номерам строк и колонок.

ТабДок = Новый ТабличныйДокумент;

ТабДок.Область("R1C1").Текст = "Товар";

ТабДок.Область("R1C1").ЦветФона = WebЦвета.СветлоСерый;

// Адресация по номерам строки и колонки

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

ОбластьЯчейки.ЦветФона = Новый Цвет(255, 230, 230);

Цвет можно задавать тремя способами: через перечисление WebЦвета (готовые именованные цвета), через конструктор Новый Цвет(Красный, Зелёный, Синий) со значениями от 0 до 255, либо через системные цвета стиля — например, ЦветаСтиля.ЦветФонаПоля. Системные цвета предпочтительнее, если документ должен выглядеть одинаково при разных темах интерфейса.

Помимо ЦветФона полезны смежные свойства: ЦветТекста меняет цвет шрифта ячейки, ЦветРамки и ЦветГраницы — цвет обводки. Для тёмного фона обязательно подбирайте контрастный ЦветТекста, иначе содержимое станет нечитаемым.

bsl
ТабДок.Область("R2C3").ЦветФона = WebЦвета.СветлоЖелтый;

Раскраска по условию в цикле

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

НомерСтроки = 1;

Для Каждого СтрокаОстатка Из ТаблицаОстатков Цикл

НомерСтроки = НомерСтроки + 1;

ОбластьОстаток = ТабДок.Область(НомерСтроки, 3, НомерСтроки, 3);

ОбластьОстаток.Текст = СтрокаОстатка.Остаток;

Если СтрокаОстатка.Остаток < 0 Тогда

ОбластьОстаток.ЦветФона = Новый Цвет(255, 200, 200);

ОбластьОстаток.ЦветТекста = WebЦвета.ТемноКрасный;

КонецЕсли;

КонецЦикла;

Если нужно закрасить всю строку целиком, а не одну ячейку, укажите диапазон колонок: ТабДок.Область(НомерСтроки, 1, НомерСтроки, 5). Учитывайте, что повторное присвоение цвета перезаписывает предыдущий — порядок операций имеет значение.

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

Раскраска через макет

Если оформление статично, проще задать цвет прямо в макете табличного документа. Откройте макет в конфигураторе, выделите ячейку или диапазон, в палитре свойств найдите «Цвет фона» и выберите значение. При выводе области через методы ПолучитьОбласть() и Вывести() цвет применится автоматически.

Этот подход снижает объём кода и упрощает сопровождение: дизайнерские правки вносятся в макет без перекомпиляции логики. Ограничение очевидно — цвет фиксирован и не может меняться по данным. Комбинированный вариант тоже допустим: базовое оформление в макете, а точечная подсветка — кодом после вывода области.

Условное оформление в отчётах на СКД

Для отчётов, построенных на системе компоновки данных, прямой доступ к ячейкам результата неудобен и ненадёжен. Вместо этого используется условное оформление: в настройках отчёта на закладке «Условное оформление» добавьте элемент, задайте условие отбора (например, «Остаток Меньше 0»), укажите оформляемые поля и в параметре «Цвет фона» выберите нужный цвет.

Условное оформление можно добавлять и программно через коллекцию Настройки.УсловноеОформление.Элементы. Это удобно, когда набор правил формируется динамически. Плюс подхода в том, что оформление применяется компоновщиком при каждом формировании отчёта и не ломается при изменении структуры вывода.

Проверка результата и типичные ошибки

После вывода документа проверьте: цвет виден на экране, текст читаем, при выгрузке в Excel цвета сохраняются. Табличный документ при сохранении в формате MXL или Excel обычно переносит цвет фона корректно, но при выгрузке в HTML или PDF оттенки могут незначительно отличаться.

Типичные ошибки
01
Обращение к области после добавления новых строк: координаты сдвигаются, красится не та ячейка — пересчитывайте номера строк
02
Использование тёмного фона без смены ЦветТекста: текст становится нечитаемым
03
Попытка красить ячейки результата СКД напрямую: оформление теряется при перестроении отчёта — используйте условное оформление
04
Присвоение цвета до вывода области в документ: свойство применяется к пустой области и эффект пропадает

Ещё одна частая проблема — производительность. Если раскрашивать тысячи ячеек по одной через Область(), формирование замедлится. Для массовой раскраски красьте целые строки одним обращением к диапазону, а не перебирайте ячейки по отдельности.

Итог

Что важно запомнить

Ячейка табличного документа красится через свойство ЦветФона области. Для статичного оформления используйте макет, для отчётов на СКД — условное оформление. Всегда проверяйте контрастность текста и корректность координат области.

Частые вопросы

Как убрать цвет ячейки обратно?

Присвойте свойству ЦветФона значение Новый Цвет() без параметров — это «авто», то есть прозрачный фон по умолчанию. Либо установите белый цвет: WebЦвета.Белый, если нужен именно белый фон.

Можно ли раскрасить ячейку градиентом или картинкой?

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

Почему цвет не сохраняется при выгрузке в Excel?

Проверьте, что выгрузка выполняется методом Записать() с типом файла XLSX или XLS, а не через текстовый формат. Также убедитесь, что цвет задан после вывода области, а не до него.

Как раскрасить чередующиеся строки таблицы?

В цикле вывода проверяйте чётность номера строки: если НомерСтроки % 2 = 0, задавайте светлый фон диапазону строки. В отчётах на СКД для этого есть готовая настройка «Вариант чередования» у макета поля.

Работает ли раскраска в управляемых и обычных формах одинаково?

Да, объект ТабличныйДокумент и свойство ЦветФона работают одинаково в обоих режимах и в веб-клиенте. Различия возможны только в отображении оттенков в зависимости от темы интерфейса.