Разработка и Конфигурация · 10 мин
Как закрасить ячейку табличного документа в 1С
Способы закрасить ячейку табличного документа 1С: через конфигуратор, программно на встроенном языке, условное оформление. Примеры кода и типичные ошибки.
Закрасить ячейку табличного документа в 1С можно двумя принципиально разными способами: вручную через редактор табличного документа в конфигураторе (или в режиме предприятия, если документ редактируемый) и программно — через свойство ЦветФона области ячеек. Выбор зависит от задачи: статическое оформление макета проще задать в конфигураторе, а динамическую подсветку по условиям — только кодом.
Ключевой объект здесь — ОбластьЯчеекТабличногоДокумента. У неё есть свойства ЦветФона, ЦветТекста, ЦветРамки и другие. Цвет задаётся либо как элемент коллекции WebЦвета, либо конструкцией Новый Цвет(R, G, B) с компонентами от 0 до 255.
Важно понимать: изменения, внесённые программно в табличный документ, живут только в памяти до сохранения или вывода. Если вы раскрасили ячейки в объекте ТабличныйДокумент, но не вывели его на форму или не записали в файл, пользователь ничего не увидит.
Что такое табличный документ и где задаётся цвет ячейки
Табличный документ в 1С — это универсальный объект для печатных форм, отчётов и табличных данных. Он существует в трёх контекстах: как макет в конфигураторе, как объект встроенного языка ТабличныйДокумент и как поле табличного документа на форме. В каждом из них цвет задаётся по-разному.
В макете конфигуратора цвет ячейки — статическое свойство: вы выделяете ячейку и в палитре свойств устанавливаете «Цвет фона». Этот цвет унаследуют все области, выведенные из макета, если программно его не переопределить.
Программно цвет меняется у уже существующей области. При этом важно помнить: если область получена из макета методом ПолучитьОбласть и ещё не выведена в итоговый документ, изменять цвет нужно у области макета; если область уже выведена — у области результирующего документа.
Закрашивание ячейки в конфигураторе без программирования
Самый простой сценарий — задать фон ячейки прямо в макете. Откройте макет табличного документа (например, макет печатной формы объекта), выделите нужную ячейку или диапазон и в палитре свойств найдите пункт «Цвет фона». Выберите цвет из палитры или задайте произвольный по компонентам RGB.
Альтернатива палитре свойств — кнопка цвета фона на панели инструментов редактора табличного документа. Она работает быстрее, когда нужно раскрасить несколько несвязанных диапазонов одним цветом: выделяете диапазон, нажимаете кнопку, выбираете цвет.
Этот способ подходит для шапок отчётов, строк итогов, фиксированных колонтитулов — всего, что не зависит от данных. Ограничение очевидно: цвет «зашит» в макет и не может реагировать на значения ячеек.
- 1Откройте макет табличного документа двойным щелчком
- 2Выделите ячейку или диапазон мышью
- 3В палитре свойств найдите «Цвет фона» и выберите цвет
- 4Сохраните макет и проверьте вывод печатной формы
Программное закрашивание ячейки на встроенном языке
Базовый приём — обращение к области по координатам и установка свойства ЦветФона. Координаты записываются в формате R<номер строки>C<номер колонки>:
ТабДок = Новый ТабличныйДокумент;
ТабДок.Область("R2C3").Текст = "Итого";
ТабДок.Область("R2C3").ЦветФона = WebЦвета.Желтый;
Если нужен нестандартный цвет, используйте конструктор: Новый Цвет(255, 200, 100). Компоненты задаются в диапазоне 0–255. Через WebЦвета доступны предопределённые именованные цвета — WebЦвета.СветлоЗеленый, WebЦвета.Красный и т.д.
Для диапазона ячеек укажите прямоугольник: ТабДок.Область("R2C1:R2C5").ЦветФона = ... — закрасит всю строку от первой до пятой колонки. Также можно обратиться к именованной области, заданной в макете: ТабДок.Область("Шапка").ЦветФона = ....
ТабДок = Новый ТабличныйДокумент;
Область = ТабДок.Область("R3C2");
Область.Текст = "Просрочено";
Область.ЦветФона = Новый Цвет(255, 180, 180);
ТабДок.Показать();Закрашивание по условию при выводе данных
Типовая задача — подсветить строки или ячейки в зависимости от значений: отрицательные остатки красным, просроченные документы жёлтым. Реализуется это в цикле вывода данных, после записи значения в ячейку.
Для Каждого Строка Из ТаблицаДанных Цикл
ТабДок.Область("R" + НомерСтроки + "C3").Текст = Строка.Остаток;
Если Строка.Остаток < 0 Тогда
ТабДок.Область("R" + НомерСтроки + "C3").ЦветФона = WebЦвета.Красный;
КонецЕсли;
КонецЦикла;
Более аккуратный подход — работать с областью, полученной из макета, до её вывода. Вы получаете область строки, заполняете параметры, меняете цвет фона у нужной ячейки внутри области и только потом выводите её в результирующий документ методом Вывести или Присоединить.
Если речь идёт о динамическом списке или отчёте на СКД, табличный документ здесь не нужен вовсе: используйте условное оформление. В СКД оно настраивается на закладке «Условное оформление» настроек отчёта — там можно задать условие (например, «Остаток меньше 0») и оформление (цвет фона) без единой строки кода.
Сравнение способов
Подходит для статичного оформления шапок и итогов; не реагирует на данные
Полный контроль и любые условия; требует кода и ручного управления областями
Лучший вариант для отчётов на СКД; не применимо к произвольным табличным документам
Закрашивание в режиме предприятия и на форме
Если табличный документ открыт пользователю в режиме предприятия как редактируемый (например, через ТабДок.Показать() с разрешённым редактированием), пользователь может закрасить ячейки сам: выделить диапазон и выбрать цвет фона кнопкой на панели инструментов, как в электронных таблицах. Это удобно для ручной разметки, но результат сохранится только при записи документа в файл.
На управляемой форме табличный документ размещается как реквизит типа ТабличныйДокумент с элементом «Поле табличного документа». Программное закрашивание работает так же: меняете свойства области реквизита — форма отображает результат. Учитывайте, что массивные перекраски больших документов на тонком клиенте могут ощутимо тормозить отрисовку.
Типичные ошибки и как их избежать
Самая частая ошибка — обращение к несуществующей области. Если ячейка с координатами R5C2 ещё не создана (в документ выведено меньше строк), обращение вернёт пустую область, и установка цвета ни к чему не приведёт. Сначала убедитесь, что область существует, проверив высоту таблицы (ТабДок.ВысотаТаблицы).
Вторая ошибка — попытка изменить цвет у области макета после её вывода. Метод Вывести копирует содержимое области в документ; изменения исходной области после этого на результат не влияют. Меняйте оформление либо до вывода, либо у области результирующего документа.
Третья группа проблем — цвет «не виден» при печати или выгрузке. При сохранении в Excel цвета фона переносятся, но некоторые оттенки могут отображаться иначе. При печати на чёрно-белом принтере цвета превращаются в оттенки серого — для печатных форм выбирайте достаточно контрастные сочетания или дублируйте подсветку жирным шрифтом.
Проверка результата и ограничения
Проверить, что цвет применился, проще всего визуально: выведите документ методом Показать() или откройте форму. Программно убедиться можно, прочитав свойство обратно: ТекущийЦвет = ТабДок.Область("R2C3").ЦветФона; — и сравнив компоненты RGB.
Помните про границы подхода. Табличный документ — не Excel: здесь нет формул условного форматирования, автообновления подсветки при изменении данных и тем оформления. Вся логика подсветки — ответственность вашего кода. Если данные в ячейке изменились программно после закрашивания, цвет сам не пересчитается.
Для отчётов, где подсветка должна реагировать на отборы и настройки пользователя, правильнее использовать СКД с условным оформлением. Табличный документ оставьте для печатных форм и фиксированных отчётов, где структура известна заранее.
Как проверить результат
Ячейка окрашена ожидаемым цветом после Показать()
Цвет не изменился — область не существует или изменена не та область
Возвращает цвет с ожидаемыми компонентами RGB
Возвращает автоцвет — установка не сработала
Фон ячеек сохранён в файле
Цвета потеряны — проверьте формат сохранения
Что важно запомнить
Цвет ячейки задаётся свойством ЦветФона области: статика — в макете конфигуратора, динамика — кодом до вывода области или у области результата. Для отчётов на СКД вместо ручного закрашивания используйте условное оформление.
Частые вопросы
Как закрасить всю строку табличного документа?
Укажите диапазон от первой до последней колонки: ТабДок.Область("R5C1:R5C10").ЦветФона = WebЦвета.СветлоЖелтый. Если число колонок заранее неизвестно, используйте ширину таблицы: ТабДок.Область("R5C1:R5C" + ТабДок.ШиринаТаблицы).
Как убрать закрашивание и вернуть цвет по умолчанию?
Присвойте свойству ЦветФона значение автоцвета: Новый Цвет(-1, -1, -1) либо используйте предопределённый автоцвет из соответствующей коллекции. После этого ячейка вернётся к стандартному фону.
Можно ли закрасить ячейку градиентом или узором?
Нет, табличный документ 1С поддерживает только сплошную заливку одним цветом. Градиенты, текстуры и штриховки недоступны — это ограничение самого объекта.
Сохранится ли цвет при выгрузке в Excel?
Да, при сохранении табличного документа в формат MXL, XLS или XLSX цвета фона ячеек переносятся. Однако оттенки могут незначительно отличаться из-за особенностей палитры целевого формата.
Почему цвет не меняется, хотя код выполняется без ошибок?
Чаще всего вы изменяете область макета после её вывода в документ либо обращаетесь к ячейке, которой ещё нет в документе. Проверьте ВысотуТаблицы и перенесите установку цвета до метода Вывести() или применяйте её к области результирующего документа.
Как закрасить ячейку в отчёте на СКД без кода?
Откройте настройки отчёта, перейдите на закладку «Условное оформление», добавьте элемент, задайте условие отбора (например, поле меньше нуля), в оформлении выберите цвет фона и укажите оформляемые поля. Код не требуется.