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

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

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

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

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

Ключевой объект здесь — ОбластьЯчеекТабличногоДокумента. У неё есть свойства ЦветФона, ЦветТекста, ЦветРамки и другие. Цвет задаётся либо как элемент коллекции WebЦвета, либо конструкцией Новый Цвет(R, G, B) с компонентами от 0 до 255.

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

Что такое табличный документ и где задаётся цвет ячейки

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

В макете конфигуратора цвет ячейки — статическое свойство: вы выделяете ячейку и в палитре свойств устанавливаете «Цвет фона». Этот цвет унаследуют все области, выведенные из макета, если программно его не переопределить.

Программно цвет меняется у уже существующей области. При этом важно помнить: если область получена из макета методом ПолучитьОбласть и ещё не выведена в итоговый документ, изменять цвет нужно у области макета; если область уже выведена — у области результирующего документа.

Закрашивание ячейки в конфигураторе без программирования

Самый простой сценарий — задать фон ячейки прямо в макете. Откройте макет табличного документа (например, макет печатной формы объекта), выделите нужную ячейку или диапазон и в палитре свойств найдите пункт «Цвет фона». Выберите цвет из палитры или задайте произвольный по компонентам RGB.

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

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

Порядок действий в конфигураторе
  1. 1
    Откройте макет табличного документа двойным щелчком
  2. 2
    Выделите ячейку или диапазон мышью
  3. 3
    В палитре свойств найдите «Цвет фона» и выберите цвет
  4. 4
    Сохраните макет и проверьте вывод печатной формы

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

Базовый приём — обращение к области по координатам и установка свойства ЦветФона. Координаты записываются в формате R<номер строки>C<номер колонки>:

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

ТабДок.Область("R2C3").Текст = "Итого";

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

Если нужен нестандартный цвет, используйте конструктор: Новый Цвет(255, 200, 100). Компоненты задаются в диапазоне 0–255. Через WebЦвета доступны предопределённые именованные цвета — WebЦвета.СветлоЗеленый, WebЦвета.Красный и т.д.

Для диапазона ячеек укажите прямоугольник: ТабДок.Область("R2C1:R2C5").ЦветФона = ... — закрасит всю строку от первой до пятой колонки. Также можно обратиться к именованной области, заданной в макете: ТабДок.Область("Шапка").ЦветФона = ....

bsl
ТабДок = Новый ТабличныйДокумент;
Область = ТабДок.Область("R3C2");
Область.Текст = "Просрочено";
Область.ЦветФона = Новый Цвет(255, 180, 180);
ТабДок.Показать();

Закрашивание по условию при выводе данных

Типовая задача — подсветить строки или ячейки в зависимости от значений: отрицательные остатки красным, просроченные документы жёлтым. Реализуется это в цикле вывода данных, после записи значения в ячейку.

Для Каждого Строка Из ТаблицаДанных Цикл

ТабДок.Область("R" + НомерСтроки + "C3").Текст = Строка.Остаток;

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

ТабДок.Область("R" + НомерСтроки + "C3").ЦветФона = WebЦвета.Красный;

КонецЕсли;

КонецЦикла;

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

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

Сравнение способов

Макет в конфигураторе

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

Программно через ЦветФона

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

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

Лучший вариант для отчётов на СКД; не применимо к произвольным табличным документам

Закрашивание в режиме предприятия и на форме

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

На управляемой форме табличный документ размещается как реквизит типа ТабличныйДокумент с элементом «Поле табличного документа». Программное закрашивание работает так же: меняете свойства области реквизита — форма отображает результат. Учитывайте, что массивные перекраски больших документов на тонком клиенте могут ощутимо тормозить отрисовку.

Типичные ошибки и как их избежать

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

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

Третья группа проблем — цвет «не виден» при печати или выгрузке. При сохранении в Excel цвета фона переносятся, но некоторые оттенки могут отображаться иначе. При печати на чёрно-белом принтере цвета превращаются в оттенки серого — для печатных форм выбирайте достаточно контрастные сочетания или дублируйте подсветку жирным шрифтом.

Типичные ошибки
01
Закрашивание области макета после Вывести() — изменения не попадают в итоговый документ
02
Обращение к ячейке за пределами выведенных строк — цвет применяется в никуда
03
Использование ярких цветов для печатных форм — на ч/б печати подсветка теряется
04
Перекраска тысяч ячеек по одной в цикле на форме — заметное падение скорости отрисовки

Проверка результата и ограничения

Проверить, что цвет применился, проще всего визуально: выведите документ методом Показать() или откройте форму. Программно убедиться можно, прочитав свойство обратно: ТекущийЦвет = ТабДок.Область("R2C3").ЦветФона; — и сравнив компоненты RGB.

Помните про границы подхода. Табличный документ — не Excel: здесь нет формул условного форматирования, автообновления подсветки при изменении данных и тем оформления. Вся логика подсветки — ответственность вашего кода. Если данные в ячейке изменились программно после закрашивания, цвет сам не пересчитается.

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

Контрольные точки

Как проверить результат

Визуальный вывод
Норма

Ячейка окрашена ожидаемым цветом после Показать()

Тревожный признак

Цвет не изменился — область не существует или изменена не та область

Чтение свойства ЦветФона
Норма

Возвращает цвет с ожидаемыми компонентами RGB

Тревожный признак

Возвращает автоцвет — установка не сработала

Выгрузка в Excel
Норма

Фон ячеек сохранён в файле

Тревожный признак

Цвета потеряны — проверьте формат сохранения

Итог

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

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

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

Как закрасить всю строку табличного документа?

Укажите диапазон от первой до последней колонки: ТабДок.Область("R5C1:R5C10").ЦветФона = WebЦвета.СветлоЖелтый. Если число колонок заранее неизвестно, используйте ширину таблицы: ТабДок.Область("R5C1:R5C" + ТабДок.ШиринаТаблицы).

Как убрать закрашивание и вернуть цвет по умолчанию?

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

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

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

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

Да, при сохранении табличного документа в формат MXL, XLS или XLSX цвета фона ячеек переносятся. Однако оттенки могут незначительно отличаться из-за особенностей палитры целевого формата.

Почему цвет не меняется, хотя код выполняется без ошибок?

Чаще всего вы изменяете область макета после её вывода в документ либо обращаетесь к ячейке, которой ещё нет в документе. Проверьте ВысотуТаблицы и перенесите установку цвета до метода Вывести() или применяйте её к области результирующего документа.

Как закрасить ячейку в отчёте на СКД без кода?

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