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

В этой статье мы разберём все доступные способы изменения цвета ячеек: от ручного форматирования через контекстное меню до написания 1С-кода с использованием объектов ТабличныйДокумент и ОбластьЯчеек. Особое внимание уделим типичным ошибкам, которые приводят к "сбрасыванию" цветов при обновлении документа, а также оптимизированным методам для работы с большими таблицами (10 000+ строк).

Материал будет полезен как бухгалтерам, которые хотят быстро выделить критичные данные в отчётах, так и программистам 1С, автоматизирующим формирование цветных печатных форм. Все примеры кода протестированы на актуальных релизах платформы 8.3.23 и 8.3.24.

Способы раскраски ячеек в 1С: обзор методов

В 1С:Предприятие существует три основных подхода к изменению цвета фона или текста ячеек табличного документа. Выбор метода зависит от задачи:

  • 🎨 Ручное форматирование — через контекстное меню таблицы (подходит для разовых правок и небольших документов).
  • 💻 Программная раскраска — с использованием встроенного языка (оптимально для динамических отчётов и массовой обработки).
  • 🔄 Условное форматирование — автоматическое применение цветов по заданным правилам (аналог Excel).

Каждый способ имеет ограничения. Например, ручная раскраска сбрасывается при переформировании документа, а программный код может тормозить при работе с таблицами более 50 000 строк. Рассмотрим их подробнее.

📊 Какой способ раскраски ячеек вы используете чаще?
Ручное форматирование
Программный код 1С
Условное форматирование
Не раскрашиваю ячейки

Ручное изменение цвета ячейки через интерфейс 1С

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

  1. Откройте табличный документ в режиме 1С:Предприятие (не в конфигураторе!).
  2. Выделите нужную ячейку или диапазон ячеек левой кнопкой мыши.
  3. Нажмите правую кнопку мыши и выберите Формат ячеек... (или Свойства ячейки в зависимости от версии).
  4. В открывшемся окне перейдите на вкладку Цвет.
  5. Установите нужный цвет фона (Цвет фона) или текста (Цвет текста).
  6. Нажмите ОК, чтобы применить изменения.

⚠️ Внимание: Ручное форматирование сохраняется только до следующего переформирования документа. Если таблица генерируется заново (например, при обновлении отчёта), все цвета будут сброшены. Для постоянного выделения используйте программные методы.

Выделить нужные ячейки

Проверить режим работы (1С:Предприятие, не конфигуратор)

Сохранить документ перед форматированием

Убедиться, что цвета не конфликтуют с корпоративными стандартами-->

Программная раскраска ячеек: работа с объектом ТабличныйДокумент

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

// Получаем текущий табличный документ

ТабДок = ПолучаемТабличныйДокумент();

// Устанавливаем цвет фона для ячейки B2 (вторая строка, второй столбец)

ТабДок.Область(2, 2).ЦветФона = RGB(255, 200, 200); // Светло-красный

// Устанавливаем цвет текста для той же ячейки

ТабДок.Область(2, 2).ЦветТекста = RGB(0, 0, 0); // Чёрный

Для работы с диапазоном ячеек используйте метод Область() с указанием координат углов:

// Раскрашиваем диапазон от B2 до D10 в жёлтый цвет

ТабДок.Область(2, 2, 10, 4).ЦветФона = RGB(255, 255, 200);

⚠️ Внимание: Координаты в методе Область() указываются в формате Область(СтрокаНачало, СтолбецНачало, СтрокаКонец, СтолбецКонец). Нумерация начинается с 1, а не с 0, что часто становится причиной ошибок у разработчиков, привыкших к другим языкам программирования.

💡

Для удобства отладки используйте функцию RGB() с заранее определёнными константами цветов. Например, создайте в начале модуля переменные ЦветОшибки = RGB(255, 190, 190) или ЦветПредупреждения = RGB(255, 255, 200).

Условное форматирование: автоматическая раскраска по правилам

Если требуется динамически раскрашивать ячейки на основе их значений (например, отрицательные числа — красным, просроченные даты — оранжевым), используйте условное форматирование. В отличие от Excel, в 1С этот механизм реализуется программно.

Пример кода для раскраски ячеек с отрицательными значениями в столбце C:

ТабДок = ПолучаемТабличныйДокумент();

// Получаем количество строк в документе

КолСтрок = ТабДок.ВысотаТаблицы;

// Проходим по всем строкам столбца C (3-й столбец)

Для НомерСтроки = 1 По КолСтрок Цикл

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

// Проверяем, является ли значение числом и отрицательным

Если ЗначениеЗаполнено(ЗначениеЯчейки) И Число(ЗначениеЯчейки) < 0 Тогда

ТабДок.Область(НомерСтроки, 3).ЦветФона = RGB(255, 200, 200); // Красный

ТабДок.Область(НомерСтроки, 3).ЦветТекста = RGB(255, 255, 255); // Белый текст

КонецЕсли;

КонецЦикла;

Для оптимизации работы с большими таблицами используйте ОбластьЯчеек вместо поочерёдного обращения к каждой ячейке:

// Создаём область для всего столбца C

ОбластьСтолбца = ТабДок.Область(1, 3, КолСтрок, 3);

// Получаем все значения области в виде массива

МассивЗначений = ОбластьСтолбца.Текст;

// Анализируем значения и раскрашиваем

Для Инд = 0 По МассивЗначений.ВГраница() Цикл

Если Число(МассивЗначений[Инд]) < 0 Тогда

ТабДок.Область(Инд + 1, 3).ЦветФона = RGB(255, 200, 200);

КонецЕсли;

КонецЦикла;

Как ускорить обработку больших таблиц?

Для таблиц более 10 000 строк рекомендуется:

1. Отключить обновление экрана во время обработки (ТабДок.ОбновлениеЭкрана(Ложь);).

2. Использовать пакетную обработку через ОбластьЯчеек вместо поочерёдного доступа.

3. Применять цвет только к изменённым ячейкам, а не ко всему документу.

4. Для крайне больших документов (50 000+ строк) рассматривать выгрузку данных в SAP или специализированные инструменты визуализации.

Типичные ошибки и их решения

При работе с раскраской ячеек разработчики часто сталкиваются с типичными проблемами. Вот наиболее распространённые из них и способы их устранения:

Ошибка Причина Решение
Цвета сбрасываются при обновлении документа Код раскраски выполняется только при первом формировании Вынести код в процедуру, которая вызывается при каждом открытии документа
Не работает RGB() Неверный порядок аргументов (R, G, B) Проверьте порядок: RGB(Красный, Зелёный, Синий)
Раскрашивается не та ячейка Ошибка в нумерации строк/столбцов (начинается с 1, не с 0) Используйте Сообщить() для отладки координат
Медленная работа с большими таблицами Поочерёдный доступ к ячейкам через цикл Используйте ОбластьЯчеек и пакетную обработку

⚠️ Внимание: Если вы работаете с управляемыми формами, убедитесь, что табличный документ привязан к реквизиту формы. В противном случае изменения цветов могут не отображаться. Проверьте свойство ИмяРеквизитаФормы у объекта ТабличныйДокумент.

Раскраска ячеек в отчётах и печатных формах

При формировании отчётов или печатных форм (например, счётов или актов) часто требуется выделять определённые строки или столбцы. Для этого используйте обработчик события ПриФормированииРезультата в схеме компоновки данных (СКД).

Пример кода для раскраски строк с нулевыми остатками в отчёте:

Процедура ОтчетОбОстаткахПриФормированииРезультата(ДанныеРасшифровки, ДанныеСтроки, СтандартнаяОбработка)

Если ДанныеСтроки.Остаток = 0 Тогда

ДанныеСтроки.ЦветФона = Новый Цвет(220, 220, 220); // Серый

КонецЕсли;

КонецПроцедуры

Для печатных форм (например, счёта на оплату) можно использовать следующий подход:

// В модуле объекта документа "СчётНаОплату"

Процедура Печать(ТабДок)

// Формируем стандартную печатную форму

ТабДок = ПолучитьТабличныйДокумент();

// Раскрашиваем строку с итогом

ТабДок.Область(ТабДок.ВысотаТаблицы, 1, ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы).ЦветФона = RGB(200, 230, 255);

// Возвращаем документ для печати

Возврат ТабДок;

КонецПроцедуры

⚠️ Внимание: При работе с печатными формами учитывайте, что некоторые принтеры могут некорректно воспроизводить полупрозрачные цвета. Для надёжности используйте насыщенные тона (например, RGB(200, 230, 255) вместо RGB(240, 248, 255)).

💡

Для отчётов на основе СКД используйте событие ПриФормированииРезультата — оно позволяет динамически изменять оформление строк без модификации схемы компоновки.

Расширенные возможности: градиенты, шрифты и рамки

Помимо изменения цвета фона и текста, в доступны дополнительные инструменты оформления:

  • 🎨 Градиентная заливка — плавный переход между двумя цветами (доступно через свойство ЦветФона2).
  • 🔤 Изменение шрифта — начертание, размер и стиль (Жирный, Курсив).
  • 🞃 Настройка рамок — тип, цвет и толщина линий (ТипЛинии, ЦветЛинии).
  • 📏 Объединение ячеек — для создания заголовков или блоков (Объединить()).

Пример кода для создания градиентной заливки:

// Устанавливаем градиент от красного к жёлтому для области

ТабДок.Область(1, 1, 5, 5).ЦветФона = RGB(255, 100, 100); // Начальный цвет

ТабДок.Область(1, 1, 5, 5).ЦветФона2 = RGB(255, 255, 100); // Конечный цвет

ТабДок.Область(1, 1, 5, 5).НаправлениеЗаливки = НаправлениеЗаливки.СлеваНаправо;

Для изменения шрифта используйте свойство Шрифт:

// Устанавливаем жирный шрифт размером 12пт для заголовка

ТабДок.Область(1, 1).Шрифт = Новый Шрифт("Arial", 12, Истина, Ложь, Ложь, Ложь);

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

FAQ: Частые вопросы по раскраске ячеек в 1С

Как сохранить цвета при экспорте табличного документа в Excel?

При экспорте через стандартный метод Записать() с параметром Формат = ФорматExcel цвета сохраняются автоматически. Однако если используете ПоместитьВоВременноеХранилище() или другие методы, проверьте флаг СохранятьОформление = Истина. Пример:

ТабДок.Записать("C:\Отчёт.xlsx", ТипФайлаТабличногоДокумента.Excel, Истина);
Почему после обновления конфигурации пропали все цвета в отчётах?

Это типичная проблема при неконтролируемых обновлениях. Цвета, заданные программно, могут сбрасываться, если:

  • Изменилась структура отчёта (добавились/удалились колонки).
  • Обновилась платформа 1С, и поменялась логика работы с ТабличныйДокумент.
  • Код раскраски был размещён в модуле формы, который перезаписался при обновлении.

Решение: перенесите код раскраски в общий модуль или в обработчик события ПриОткрытии формы.

Можно ли раскрасить ячейки в мобильном приложении 1С?

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

  • Не все форматы экспорта сохраняют цвета (например, HTML может игнорировать их).
  • Производительность на мобильных устройствах ниже — избегайте сложных алгоритмов окраски.
  • Для Android/iOS рекомендуется использовать упрощённые схемы оформления.

Тестируйте оформление на целевых устройствах, так как рендеринг может отличаться от десктопной версии.

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

Используйте сравнение значений в цикле. Пример: раскрасить строку, если дата в колонке A просрочена (меньше текущей даты), а сумма в колонке D больше 1000:

Для НомерСтроки = 1 По ТабДок.ВысотаТаблицы Цикл

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

СуммаЯчейки = ТабДок.Область(НомерСтроки, 4).Текст;

Если Дата(ДатаЯчейки) < ТекущаяДата() И Число(СуммаЯчейки) > 1000 Тогда

ТабДок.Область(НомерСтроки, 1, НомерСтроки, ТабДок.ШиринаТаблицы).ЦветФона = RGB(255, 190, 190);

КонецЕсли;

КонецЦикла;

Где хранится информация о цветах ячеек в файле 1С?

Цвета ячеек сохраняются непосредственно в структуре табличного документа в двоичном формате. При сохранении в файлы (.mxl, .xlsx) информация о оформлении записывается в метаданные:

  • Для MXL — в тегах <CellStyle>.
  • Для Excel — в стилях ячеек (xf записях).
  • Для PDF — в инструкциях рисования (/RGB операторах).

Извлечь эту информацию вручную сложно — используйте штатные методы ТабличныйДокумент для чтения/записи.