Разработка и Конфигурация · 12 мин
Как изменить цвет ячейки табличной части в 1С
Как изменить цвет ячейки табличной части в 1С: условное оформление формы, программная раскраска через ЭлементыФормы, примеры кода, ошибки и проверка результата.
Изменить цвет ячейки табличной части в 1С можно двумя принципиально разными способами: через условное оформление формы (декларативно, без кода раскраски в цикле) и программно — обращением к оформлению элементов формы. Выбор зависит от типа конфигурации: в управляемых формах (1С 8.3, типовые БП, УТ, ERP) основным инструментом является условное оформление, а в обычных формах (8.2 и старые конфигурации) применяется свойство «ЦветФона» у оформления ячейки.
Важно понимать с самого начала: цвет ячейки — это свойство оформления формы, а не данных. Цвет не хранится в базе, не сохраняется вместе с документом и при повторном открытии формы должен вычисляться заново. Поэтому правильный подход — задать правило, по которому платформа сама раскрасит ячейки, а не «закрасить и забыть».
Ниже разобраны оба подхода с примерами кода, условиями выбора, типичными ошибками и способами проверить результат. Материал ориентирован на разработчика или продвинутого пользователя, работающего в конфигураторе или в режиме расширения формы.
Как устроено оформление ячеек в 1С
Табличная часть на форме — это элемент «ТаблицаФормы» (в обычных формах — «ТабличноеПоле»), связанный с данными объекта. У каждой колонки и каждой строки есть оформление: шрифт, цвет текста, цвет фона, картинка. Платформа позволяет переопределять эти параметры либо статически, либо по условию.
Ключевое различие между платформами: в управляемом приложении разработчик не имеет прямого доступа к «пикселам» формы — он описывает правила, а платформа сама строит интерфейс на клиенте. Поэтому единственный штатный способ раскрасить ячейку в тонком клиенте — условное оформление. В обычном приложении доступно прямое программное управление оформлением строки через событие «ПриВыводеСтроки».
Способ 1: условное оформление формы в 1С 8.3
Это рекомендуемый способ для всех управляемых форм. Условное оформление можно настроить в конфигураторе через редактор формы либо программно — в модуле формы, например при её создании на сервере.
Через конфигуратор: откройте форму документа, в дереве элементов выберите таблицу товаров, затем в палитре свойств найдите «УсловноеОформление» (либо общий узел «УсловноеОформление» формы). Добавьте элемент, задайте оформление «ЦветФона», настройте отбор — например, «Объект.Товары.Количество Равно 0» — и укажите оформляемые поля (конкретную колонку или всю таблицу).
Программный вариант удобнее, когда условие сложное или цвет нужно задавать динамически. Код размещается в обработчике «ПриСозданииНаСервере»:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
// Цвет фона ячейки
ЭлементОформления.Оформление.УстановитьЗначениеПараметра(
"ЦветФона", WebЦвета.СветлоРозовый);
// Условие: количество равно нулю
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(
Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение =
Новый ПолеКомпоновкиДанных("Объект.Товары.Количество");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = 0;
ЭлементОтбора.Использование = Истина;
// Раскрашиваем конкретную колонку
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле =
Новый ПолеКомпоновкиДанных("ТоварыКоличество");
ПолеОформления.Использование = Истина;
КонецПроцедуры
Обратите внимание: в поле «Поля» указывается имя элемента формы (колонки), а в отборе — путь к данным через точку от «Объект». Это частая причина «неработающего» оформления: если перепутать, правило молча не сработает.
- 1Откройте модуль формы и найдите или создайте обработчик ПриСозданииНаСервере
- 2Добавьте элемент в коллекцию УсловноеОформление.Элементы
- 3Установите параметр ЦветФона нужным значением (WebЦвета или Новый Цвет)
- 4Настройте отбор по данным табличной части через ПолеКомпоновкиДанных
- 5Укажите оформляемое поле — имя колонки таблицы на форме
- 6Сохраните, обновите конфигурацию и откройте документ с подходящими данными
Способ 2: программная раскраска в обычных формах
В обычном приложении (конфигурации на платформе 8.2, а также старые версии УПП, УТ 10.3) используется событие табличного поля «ПриВыводеСтроки». Оно вызывается для каждой отображаемой строки, и внутри можно изменить оформление конкретной ячейки:
Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Если ДанныеСтроки.Количество = 0 Тогда
ОформлениеСтроки.Ячейки.Количество.ЦветФона =
Новый Цвет(255, 220, 220);
КонецЕсли;
КонецПроцедуры
Здесь «Количество» после «Ячейки» — это имя колонки табличного поля. Если нужно раскрасить всю строку, обращайтесь к «ОформлениеСтроки.ЦветФона» без указания ячейки. Событие назначается в палитре свойств табличного поля в конфигураторе.
У этого способа есть ограничение: он срабатывает только при выводе строки на экран. Если данные строки изменились, а строка не перерисовалась, цвет может остаться старым — тогда вызывайте «Обновить()» у табличного поля после изменения данных.
Как выбрать цвет и задать его программно
Цвет в 1С можно задать тремя способами: через предопределённую коллекцию WebЦвета (например, «WebЦвета.СветлоЖелтый»), конструктором «Новый Цвет(Красный, Зеленый, Синий)» со значениями от 0 до 255, либо через стили конфигурации. Для прикладных решений предпочтителен третий вариант — цвета стиля автоматически адаптируются под тему интерфейса и единообразны во всей конфигурации.
Яркие насыщенные цвета (чистый красный, чистый зелёный) в таблицах использовать не стоит: они утомляют глаза и делают текст нечитаемым. Практически удобны пастельные оттенки — светло-розовый для ошибок, светло-жёлтый для предупреждений, светло-зелёный для успешных состояний.
Сравнение вариантов задания цвета
Быстро и читаемо в коде; ограниченный фиксированный набор, не меняется под тему интерфейса
Любой оттенок; значения «зашиты» в код, сложно менять глобально
Единый стиль конфигурации, поддержка тем; требует создания элемента стиля в конфигураторе
Раскраска строк динамических списков и отчётов
Если табличная часть — это не документ, а динамический список (например, список заказов на форме), условное оформление настраивается аналогично, но отбор строится по полям запроса списка. При этом в отборе доступны только те поля, которые реально присутствуют в выборке динамического списка — поле, не включённое в запрос, использовать в условии нельзя.
Для отчётов на СКД раскраска делается не в форме, а в схеме компоновки: на закладке «Настройки» → «Условное оформление» добавляется правило с отбором и оформлением «Цвет фона». Это правильный путь для печатных и аналитических форм — оформление сохранится и при выгрузке отчёта.
Типичные ошибки и ограничения
Самая частая проблема — условное оформление «не работает». Причины почти всегда одни и те же: неверное имя поля в отборе (путь к данным не совпадает с реальным), не указано оформляемое поле в коллекции «Поля», либо условие написано с нарушением типов — например, сравнение числа со строкой. Проверяйте путь к данным по дереву реквизитов формы.
Вторая группа ошибок — попытка хранить цвет в базе. Начинающие разработчики добавляют в табличную часть реквизит «Цвет» и пытаются его заполнять. Это избыточно: любое правило раскраски можно выразить отбором по существующим данным. Реквизит для цвета оправдан только если пользователь вручную выбирает цвет строки как самостоятельную бизнес-сущность.
Третья ошибка — конфликт нескольких правил. Если к одной ячейке применимо два элемента условного оформления, побеждает то, что расположено ниже в списке (применяется последним). При отладке временно отключайте лишние правила через свойство «Использование».
Проверка результата и отладка
После настройки правила откройте форму в режиме предприятия и проверьте три сценария: строка, удовлетворяющая условию, раскрашена; строка, не удовлетворяющая условию, имеет стандартный фон; при изменении данных в строке цвет обновляется автоматически, без переоткрытия формы.
Если цвет не появился, действуйте по шагам: убедитесь, что обработчик с кодом вообще выполняется (поставьте точку останова или сообщение), проверьте правильность пути к данным в отборе, временно уберите условие — если цвет появился без отбора, проблема в условии, если нет — в имени оформляемого поля.
Как проверить результат
Ячейка окрашена заданным цветом, текст читаем
Цвет не применился или окрашена вся таблица целиком
Стандартный фон платформы
Окрашены все строки — ошибка в отборе
Цвет обновляется сразу после редактирования
Цвет меняется только после переоткрытия формы — правило настроено не на те данные
Когда задачу лучше передать разработчику
Самостоятельно через расширение конфигурации можно безопасно добавить условное оформление в форму, не меняя типовой код. Это обратимая операция: расширение отключается, и форма возвращается к исходному виду. Однако прямая доработка типовой формы в конфигураторе усложняет последующие обновления — перед изменением снимите копию базы и убедитесь, что у вас есть план отката.
Если условие раскраски требует сложных вычислений (остатки на складе, данные других документов, обращения к регистрам), лучше поручить задачу разработчику: такие правила влияют на производительность формы, и ошибка может замедлить работу всех пользователей.
Что важно запомнить
В управляемых формах цвет ячейки задаётся условным оформлением: отбор по данным, параметр ЦветФона, оформляемое поле. В обычных формах — через событие ПриВыводеСтроки. Цвет не хранится в базе, а вычисляется правилом; для отчётов СКД оформление настраивается в схеме компоновки отдельно.
Частые вопросы
Можно ли раскрасить ячейку без программирования, в режиме предприятия?
В динамических списках многих типовых конфигураций пользователь может открыть «Ещё → Настроить список» и добавить своё условное оформление с цветом фона. Для табличных частей документов такой возможности из интерфейса обычно нет — потребуется доработка формы или расширение.
Почему условное оформление не срабатывает, хотя код выполняется?
Чаще всего не совпадает путь к данным в отборе или не указано оформляемое поле. Проверьте, что в отборе используется путь вида «Объект.Товары.Количество», а в полях — точное имя колонки таблицы на форме, и у обоих элементов установлено «Использование = Истина».
Как раскрасить всю строку, а не одну ячейку?
В управляемой форме не добавляйте элементы в коллекцию «Поля» условного оформления — тогда оформление применится ко всей таблице. Либо перечислите в полях все колонки табличной части. В обычной форме задайте «ОформлениеСтроки.ЦветФона» без обращения к конкретной ячейке.
Сохранится ли цвет, если закрыть и снова открыть документ?
Да, если раскраска сделана через условное оформление или обработчик вывода строки: правило выполняется при каждом открытии формы. Но сам цвет в базе не хранится — если изменятся данные, перестанет выполняться условие, и ячейка станет обычной.
Как задать цвет по значению перечисления, например по статусу строки?
Добавьте в отбор условие «Равно» с правым значением нужного элемента перечисления. В коде правое значение задаётся как «Перечисления.СтатусыСтроки.Отклонено». Для нескольких статусов создайте отдельный элемент оформления на каждый цвет.
Можно ли изменить цвет ячейки в мобильном клиенте 1С?
Условное оформление формы работает и в мобильном клиенте, если форма адаптирована под него. Однако набор поддерживаемых параметров оформления уже, поэтому правило стоит тестировать именно на целевом устройстве, а не только в тонком клиенте.