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

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

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

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

Изменить цвет ячейки табличной части в 1С можно двумя принципиально разными способами: через условное оформление формы (декларативно, без кода раскраски в цикле) и программно — обращением к оформлению элементов формы. Выбор зависит от типа конфигурации: в управляемых формах (1С 8.3, типовые БП, УТ, ERP) основным инструментом является условное оформление, а в обычных формах (8.2 и старые конфигурации) применяется свойство «ЦветФона» у оформления ячейки.

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

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

Как устроено оформление ячеек в 1С

Табличная часть на форме — это элемент «ТаблицаФормы» (в обычных формах — «ТабличноеПоле»), связанный с данными объекта. У каждой колонки и каждой строки есть оформление: шрифт, цвет текста, цвет фона, картинка. Платформа позволяет переопределять эти параметры либо статически, либо по условию.

Ключевое различие между платформами: в управляемом приложении разработчик не имеет прямого доступа к «пикселам» формы — он описывает правила, а платформа сама строит интерфейс на клиенте. Поэтому единственный штатный способ раскрасить ячейку в тонком клиенте — условное оформление. В обычном приложении доступно прямое программное управление оформлением строки через событие «ПриВыводеСтроки».

Способ 1: условное оформление формы в 1С 8.3

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

Через конфигуратор: откройте форму документа, в дереве элементов выберите таблицу товаров, затем в палитре свойств найдите «УсловноеОформление» (либо общий узел «УсловноеОформление» формы). Добавьте элемент, задайте оформление «ЦветФона», настройте отбор — например, «Объект.Товары.Количество Равно 0» — и укажите оформляемые поля (конкретную колонку или всю таблицу).

Программный вариант удобнее, когда условие сложное или цвет нужно задавать динамически. Код размещается в обработчике «ПриСозданииНаСервере»:

&НаСервере

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

ЭлементОформления = УсловноеОформление.Элементы.Добавить();

// Цвет фона ячейки

ЭлементОформления.Оформление.УстановитьЗначениеПараметра(

"ЦветФона", WebЦвета.СветлоРозовый);

// Условие: количество равно нулю

ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(

Тип("ЭлементОтбораКомпоновкиДанных"));

ЭлементОтбора.ЛевоеЗначение =

Новый ПолеКомпоновкиДанных("Объект.Товары.Количество");

ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

ЭлементОтбора.ПравоеЗначение = 0;

ЭлементОтбора.Использование = Истина;

// Раскрашиваем конкретную колонку

ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();

ПолеОформления.Поле =

Новый ПолеКомпоновкиДанных("ТоварыКоличество");

ПолеОформления.Использование = Истина;

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

Обратите внимание: в поле «Поля» указывается имя элемента формы (колонки), а в отборе — путь к данным через точку от «Объект». Это частая причина «неработающего» оформления: если перепутать, правило молча не сработает.

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

Способ 2: программная раскраска в обычных формах

В обычном приложении (конфигурации на платформе 8.2, а также старые версии УПП, УТ 10.3) используется событие табличного поля «ПриВыводеСтроки». Оно вызывается для каждой отображаемой строки, и внутри можно изменить оформление конкретной ячейки:

Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

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

ОформлениеСтроки.Ячейки.Количество.ЦветФона =

Новый Цвет(255, 220, 220);

КонецЕсли;

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

Здесь «Количество» после «Ячейки» — это имя колонки табличного поля. Если нужно раскрасить всю строку, обращайтесь к «ОформлениеСтроки.ЦветФона» без указания ячейки. Событие назначается в палитре свойств табличного поля в конфигураторе.

У этого способа есть ограничение: он срабатывает только при выводе строки на экран. Если данные строки изменились, а строка не перерисовалась, цвет может остаться старым — тогда вызывайте «Обновить()» у табличного поля после изменения данных.

Как выбрать цвет и задать его программно

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

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

Сравнение вариантов задания цвета

WebЦвета

Быстро и читаемо в коде; ограниченный фиксированный набор, не меняется под тему интерфейса

Новый Цвет(R,G,B)

Любой оттенок; значения «зашиты» в код, сложно менять глобально

Элемент стиля

Единый стиль конфигурации, поддержка тем; требует создания элемента стиля в конфигураторе

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

Если табличная часть — это не документ, а динамический список (например, список заказов на форме), условное оформление настраивается аналогично, но отбор строится по полям запроса списка. При этом в отборе доступны только те поля, которые реально присутствуют в выборке динамического списка — поле, не включённое в запрос, использовать в условии нельзя.

Для отчётов на СКД раскраска делается не в форме, а в схеме компоновки: на закладке «Настройки» → «Условное оформление» добавляется правило с отбором и оформлением «Цвет фона». Это правильный путь для печатных и аналитических форм — оформление сохранится и при выгрузке отчёта.

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

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

Вторая группа ошибок — попытка хранить цвет в базе. Начинающие разработчики добавляют в табличную часть реквизит «Цвет» и пытаются его заполнять. Это избыточно: любое правило раскраски можно выразить отбором по существующим данным. Реквизит для цвета оправдан только если пользователь вручную выбирает цвет строки как самостоятельную бизнес-сущность.

Третья ошибка — конфликт нескольких правил. Если к одной ячейке применимо два элемента условного оформления, побеждает то, что расположено ниже в списке (применяется последним). При отладке временно отключайте лишние правила через свойство «Использование».

Типичные ошибки
01
Перепутаны пути: в отборе указано имя элемента формы вместо пути к данным — правило молча не срабатывает
02
Не заполнена коллекция «Поля» — цвет применяется не к той колонке или ни к какой
03
Сравнение значений разных типов в отборе — условие всегда ложно
04
Попытка задать цвет ячейки на клиенте в управляемой форме через обращение к данным объекта — реквизит Объект недоступен в клиентском контексте
05
Яркие насыщенные цвета фона — текст становится нечитаемым

Проверка результата и отладка

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

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

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

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

Строка с выполненным условием
Норма

Ячейка окрашена заданным цветом, текст читаем

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

Цвет не применился или окрашена вся таблица целиком

Строка без условия
Норма

Стандартный фон платформы

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

Окрашены все строки — ошибка в отборе

Изменение данных в строке
Норма

Цвет обновляется сразу после редактирования

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

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

Когда задачу лучше передать разработчику

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

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

Итог

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

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

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

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

В динамических списках многих типовых конфигураций пользователь может открыть «Ещё → Настроить список» и добавить своё условное оформление с цветом фона. Для табличных частей документов такой возможности из интерфейса обычно нет — потребуется доработка формы или расширение.

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

Чаще всего не совпадает путь к данным в отборе или не указано оформляемое поле. Проверьте, что в отборе используется путь вида «Объект.Товары.Количество», а в полях — точное имя колонки таблицы на форме, и у обоих элементов установлено «Использование = Истина».

Как раскрасить всю строку, а не одну ячейку?

В управляемой форме не добавляйте элементы в коллекцию «Поля» условного оформления — тогда оформление применится ко всей таблице. Либо перечислите в полях все колонки табличной части. В обычной форме задайте «ОформлениеСтроки.ЦветФона» без обращения к конкретной ячейке.

Сохранится ли цвет, если закрыть и снова открыть документ?

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

Как задать цвет по значению перечисления, например по статусу строки?

Добавьте в отбор условие «Равно» с правым значением нужного элемента перечисления. В коде правое значение задаётся как «Перечисления.СтатусыСтроки.Отклонено». Для нескольких статусов создайте отдельный элемент оформления на каждый цвет.

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

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