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

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

Важно: если вы работаете с 1С:ERP или отраслевыми решениями (например, 1С:УТ 11, 1С:Бухгалтерия 3.0), некоторые методы могут требовать адаптации из-за особенностей конфигураций. В таких случаях рекомендуем сначала протестировать изменения на копии базы.

1. Условное оформление без программирования (для управляемых форм)

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

Чтобы настроить условное оформление:

  • 🔹 Откройте нужную форму в Конфигураторе (или через Все функции в пользовательском режиме, если у вас есть права).
  • 🔹 Выделите табличную часть на форме и в палитре свойств найдите раздел Условное оформление.
  • 🔹 Нажмите Добавить и задайте условие (например, Сумма > 10000).
  • 🔹 В настройках оформления выберите Цвет фона или Цвет текста и укажите нужный оттенок.

Ограничения метода:

  • ⚠️ Работает только в управляемых формах (не доступно для обычных форм 8.2).
  • ⚠️ Не позволяет менять цвет отдельных ячеек — только целых строк или колонок по условию.
  • ⚠️ Цвета ограничены палитрой, предложенной платформой (нет возможности указать HEX-код).
📊 Какую версию 1С вы используете?
1С:Предприятие 8.3 (управляемые формы)
1С:Предприятие 8.2 (обычные формы)
1С:ERP или отраслевое решение
Не знаю версию

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

2. Изменение цвета ячейки через код (управляемые формы)

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

&НаСервере

Процедура ТабличнаяЧастьТоварыПриАктивизацииСтроки(Элемент, СтандартнаяОбработка)

Если Элемент.ТекущиеДанные.Количество < 0 Тогда

Элемент.ЭлементыФормы.Количество.ЦветФона = ВебЦвета.Красный;

Иначе

Элемент.ЭлементыФормы.Количество.ЦветФона = ВебЦвета.НетЦвета;

КонецЕсли;

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

Ключевые моменты:

  • 🔹 ВебЦвета — встроенный перечисление платформы с основными цветами. Полный список можно увидеть в синтакс-помощнике (F1 на слове ВебЦвета).
  • 🔹 Для сброса цвета используйте ВебЦвета.НетЦвета.
  • 🔹 Если нужно покрасить всю строку, перечислите все колонки: Элемент.ЭлементыФормы.Наименование.ЦветФона = ВебЦвета.Желтый;

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

&НаСервере

Процедура ТабличнаяЧастьТоварыПриИзменении(Элемент)

Если НЕ ОстаткиТоваров.НайтиСтроки(Новый Структура("Товар", Элемент.ТекущиеДанные.Товар)).Количество() > 0 Тогда

Элемент.ЭлементыФормы.Количество.ЦветФона = ВебЦвета.Оранжевый;

КонецЕсли;

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

💡

Чтобы увидеть все доступные элементы формы (например, для обращения к Элемент.ЭлементыФормы.ИмяКолонки), включите отладку (Ctrl+Alt+Shift+F12) и введите в консоли Элемент.ЭлементыФормы. Платформа покажет полный список дочерних элементов.

3. Работа с обычными формами (1С 8.2 и ранее)

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

Пример кода для покраски ячейки в обычной форме:

Процедура ТабличноеПолеОбработкаЯчейки(Элемент, Колонка, Строка, Состояние)

Если Колонка.Имя = "Количество" И Таблица[Строка].Количество < 0 Тогда

Состояние.ЦветФона = RGB(255, 200, 200); // Светло-красный

КонецЕсли;

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

Особенности работы с обычными формами:

  • 🔹 Цвет задаётся через функцию RGB(красный, зелёный, синий), где каждый параметр — число от 0 до 255.
  • 🔹 Для доступа к данным строки используйте Таблица[Строка], где Таблица — это источник данных табличного поля.
  • 🔹 Чтобы покрасить текст (а не фон), используйте Состояние.ЦветТекста.
⚠️ Внимание: В обычных формах изменение цвета ячеек может приводить к замедлению отображения при большом количестве строк (более 1000). В таких случаях рекомендуется использовать условное оформление на уровне СКД (см. раздел 5).

4. Динамическая покраска ячеек в отчётах (СКД)

Если вам нужно изменить цвет ячеек в отчёте, созданном на основе Системы Компоновки Данных (СКД), используйте механизм Условное оформление в настройках схемы. Этот метод работает как в управляемых, так и в обычных формах.

Пошаговая инструкция:

  1. Откройте отчёт в Конфигураторе и перейдите на вкладку Настройки.
  2. В дереве настроек выберите колонку, которую нужно оформить, и нажмите Условное оформление.
  3. Добавьте новое правило, укажите условие (например, [Сумма] < 0) и выберите цвет.
  4. Для применения оформления ко всей строке используйте Группа полей.

Пример условного оформления в СКД для подсветки просроченных документов:

УсловиеЦвет фонаЦвет текстаПрименяется к
[Дата] < ТекущаяДата()КрасныйБелыйСтрока
[Сумма] > 100000ЖёлтыйЧёрныйЯчейка "Сумма"
[Статус] = "Отменён"СерыйТёмно-серыйВся строка

Для динамического изменения цветов прямо в коде отчёта используйте обработчик ПриКомпоновкеРезультата:

Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, Результат)

Для Каждого Строка Из Результат.Выборка() Цикл

Если Строка.Дата < ТекущаяДата() Тогда

Строка.Оформление.ЦветФона = ВебЦвета.Красный;

КонецЕсли;

КонецЦикла;

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

5. Покраска ячеек в печатных формах

В печатных формах (например, в документах Счёт-фактура или Торг-12) цвет ячеек меняется через настройки табличного документа. Здесь доступны два подхода:

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

Пример динамической покраски строк в печатной форме:

Процедура ПечатнаяФормаПриФормировании(ТабличныйДокумент, Объект)

Область = ТабличныйДокумент.Область("Товары");

Для НомСтр = 1 По Объект.Товары.Количество() Цикл

Если Объект.Товары[НомСтр-1].Количество < 0 Тогда

Область.Строка(НомСтр).ЦветФона = RGB(255, 200, 200);

КонецЕсли;

КонецЦикла;

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

Важные нюансы:

  • 🔹 В печатных формах цвета задаются через RGB(), а не ВебЦвета.
  • 🔹 Для доступа к строке таблицы используйте Область.Строка(НомерСтроки).
  • 🔹 Изменение цвета в печатной форме не влияет на экранное отображение документа — только на экспортируемый PDF/Excel.

6. Расширенные сценарии: градиенты, чередование цветов, картинки

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

6.1. Чередование цветов строк (эффект "зебра")

Добавляем в обработчик формы:

&НаКлиенте

Процедура ТабличнаяЧастьТоварыПриАктивизацииСтроки(Элемент)

Если Элемент.ТекущаяСтрока % 2 = 0 Тогда

Элемент.ЦветФона = ВебЦвета.СветлоСерый;

Иначе

Элемент.ЦветФона = ВебЦвета.Белый;

КонецЕсли;

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

6.2. Градиентная заливка

В управляемых формах градиент реализуется через CSS-стили. Пример для веб-клиента:

&НаКлиенте

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ЭлементыФормы.ТабличнаяЧастьТовары.СтильЭлемента = ?

|background: linear-gradient(to right, #ffcccc, #ffffff);

|";

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

⚠️ Внимание: Градиенты и CSS-стили работают только в веб-клиенте и тонком клиенте. В толстом клиенте такие настройки будут проигнорированы.

6.3. Вставка иконок в ячейки

Для отображения иконок (например, галочки или крестика) используйте колонку типа ПолеКартинки:

ЭлементыФормы.ТабличнаяЧастьТовары.Колонки.Добавить("СтатусИконка", Тип("ПолеКартинки"));

ЭлементыФормы.ТабличнаяЧастьТовары.Колонки.СтатусИконка.Картинка = Новый Картинка(ПутьКФайлуИконки);

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

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

  • 🔸 Цвет не применяется:
    • Проверьте, что событие (ПриАктивизацииСтроки, ПриИзменении) действительно срабатывает. Добавьте Сообщить("Тест"); в начало процедуры для отладки.
    • Убедитесь, что имя колонки указано правильно (регистр имеет значение!).
  • 🔸 Цвет сбрасывается при обновлении формы:
    • Используйте событие ПриОбновленииОтображения для повторного применения оформления.
  • 🔸 Медленная работа формы:
    • Для больших таблиц (>500 строк) избегайте покраски каждой ячейки отдельно. Лучше использовать условное оформление на уровне СКД или групповую покраску строк.

Ещё одна частая проблема — несоответствие цветов в разных клиентах (тонкий/толстый/веб). Например, ВебЦвета.Красный в толстом клиенте может выглядеть как ярко-красный, а в веб-клиенте — как бордовый. Чтобы унифицировать отображение, используйте RGB() с фиксированными значениями.

Убедиться, что событие срабатывает (добавить Сообщить())

Проверить регистр имён колонок

Тестировать в разных клиентах (толстый/тонкий/веб)

Сделать резервную копию конфигурации-->

8. Альтернативные подходы: внешние компоненты и расширения

Если стандартных средств недостаточно, можно использовать внешние компоненты или расширения конфигурации. Например:

  • 🔹 1С:EnterpriseDevelopmentTools (EDT) — позволяет гибко настраивать стили через CSS.
  • 🔹 Библиотека "Универсальные таблицы" (от 1С-Битрикс) — добавляет расширенные возможности оформления.
  • 🔹 Компонента "FlexTable" — поддерживает динамическую покраску ячеек с анимацией.

Пример подключения внешней компоненты для покраски:

&НаКлиенте

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ВнешняяКомпонента = Новый COMОбъект("FlexTable.Table");

ВнешняяКомпонента.Initialize(ЭтотОбъект.ТабличнаяЧастьТовары);

ВнешняяКомпонента.SetCellColor(1, 2, RGB(255, 0, 0)); // Строка 1, Колонка 2, Красный

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

⚠️ Внимание: Использование внешних компонент требует лицензии и может конфликтовать с обновлениями платформы. Перед внедрением протестируйте решение на копии базы.

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

FAQ: Частые вопросы по изменению цвета ячеек в 1С

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

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

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

Для этого нужно в обработчике события (например, ПриАктивизацииСтроки) получить данные из другой таблицы и применить условие. Пример:

ДанныеДругойТаблицы = ДокументСсылка.ДругаяТабличнаяЧасть.Найти(Элемент.ТекущиеДанные.Товар);

Если ДанныеДругойТаблицы.Количество < 10 Тогда

Элемент.ЭлементыФормы.Количество.ЦветФона = ВебЦвета.Желтый;

КонецЕсли;

Почему после обновления платформы перестали работать цвета?

В новых версиях 1С:Предприятие 8.3.20+ изменился механизм рендеринга форм. Если цвета сбрасываются, проверьте:

  1. Обновлены ли обработчики событий (например, ПриАктивизацииСтроки может требовать явного вызова ОбновитьОтображение()).
  2. Не конфликтуют ли стили с новыми настройками темы оформления (светлая/тёмная тема).

В крайнем случае перенесите логику оформления в ПриОбновленииОтображения.

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

При экспорте через ЗаписатьТабличныйДокумент() цвета ячеек сохранятся, если:

  • Используется формат .xlsx (не .xls).
  • Цвета заданы через ЦветФона или ЦветТекста, а не через CSS.

Для управляемых форм используйте:

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

ТабличныйДокумент.Вывести(ЭлементыФормы.ТабличнаяЧастьТовары);

ТабличныйДокумент.Записать("C:\export.xlsx", ТипФайлаТабличногоДокумента.XLSX);

Можно ли анимировать изменение цвета ячейки?

В стандартной платформе анимация не поддерживается. Однако в веб-клиенте можно использовать CSS-переходы через внешние стили:

ЭлементыФормы.ТабличнаяЧастьТовары.СтильЭлемента = ?

|transition: background-color 0.3s ease;

|";

Для полноценной анимации потребуется внешняя компонента (например, FlexTable).