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

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

1С: как задать цвет ячейки

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

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

Чаще всего задача сводится к одной строке кода вида Область.ЦветФона = Новый Цвет(255, 220, 220);, но на практике встречаются нюансы: цвет можно брать из стиля конфигурации, из системного перечисления WebЦвета, а в управляемых формах прямое изменение цвета ячейки таблицы недоступно — там работает только условное оформление. Ниже разобраны все рабочие сценарии с готовыми примерами кода.

Как задать цвет ячейки в табличном документе

Табличный документ — это объект ТабличныйДокумент, который используется для печатных форм, макетов и простых отчётов. Здесь у каждой области (отдельной ячейки или диапазона) есть свойства оформления: ЦветФона, ЦветТекста, ЦветРамки, Шрифт. Изменить их можно в любой момент — и при формировании документа программно, и после вывода.

Базовый пример: получить область по адресу и назначить ей цвет фона. Адрес задаётся в стиле Excel — буква колонки и номер строки, например «R3C5» означает строку 3, колонку 5 (в 1С используется нотация R{строка}C{колонка}).

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

// ... вывод макета ...

// Одна ячейка

Область = ТабДок.Область("R3C5");

Область.ЦветФона = Новый Цвет(255, 220, 220); // светло-красный

// Диапазон ячеек

ОбластьДиапазон = ТабДок.Область("R3C2:R3C8");

ОбластьДиапазон.ЦветФона = WebЦвета.СветлоЖелтый;

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

1c
Область = ТабДок.Область("R3C5");
Область.ЦветФона = Новый Цвет(255, 220, 220);
Область.ЦветТекста = WebЦвета.Черный;

Способы задать сам цвет: RGB, Web-цвета и стиль

Свойство ЦветФона принимает объект типа Цвет. Получить его можно тремя способами. Первый — конструктор Новый Цвет(Красный, Зеленый, Синий) с компонентами от 0 до 255. Второй — готовые константы из коллекций WebЦвета и WindowsЦвета, например WebЦвета.СветлоСерый. Третий — цвета из стиля конфигурации: ЦветаСтиля.ЦветФонаКнопки и подобные.

Для прикладного решения предпочтителен третий вариант: цвета стиля автоматически подстраиваются под оформление конфигурации и не «ломаются» при смене темы интерфейса. Жёстко зашитые RGB-значения уместны в печатных формах, где нужен конкретный оттенок, независимый от настроек пользователя.

Способы задания цвета

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

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

WebЦвета / WindowsЦвета

Готовые именованные константы, читаемый код. Ограниченный набор оттенков.

ЦветаСтиля

Цвета из стиля конфигурации, единообразие с интерфейсом. Требует наличия подходящего элемента стиля.

Цвет ячейки при выводе макета печатной формы

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

Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Макет");

ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

Для Каждого СтрокаТовары Из Товары Цикл

ОбластьСтрока.Параметры.Заполнить(СтрокаТовары);

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

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

Иначе

ОбластьСтрока.Область().ЦветФона = Новый Цвет(); // авто

КонецЕсли;

ТабДок.Вывести(ОбластьСтрока);

КонецЦикла;

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

Типичные ошибки
01
Не сброшен цвет области макета в цикле — все строки после первой условной остаются окрашенными.
02
Обращение к области по неверному адресу — цвет применяется не к той ячейке или возникает ошибка.
03
Попытка задать ЦветФона ячейке таблицы управляемой формы напрямую — такого свойства у неё нет, нужно условное оформление.
04
Изменение области до вывода в табличный документ там, где оформление затем перезаписывается макетом.

Цвет ячейки в таблице управляемой формы

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

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

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

// Условие

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

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

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

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

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

// Оформление

ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоРозовый);

// К каким полям применять

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

ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("СписокДатаОплаты");

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

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

Цвет ячейки в динамическом списке и отчёте на СКД

Динамический список (список документов, справочника) оформляется через своё условное оформление — оно находится в настройках списка, а не формы. В конфигураторе: свойства динамического списка → «Условное оформление». Логика та же: отбор по полю запроса и параметр «Цвет фона». Условие может ссылаться только на поля, которые есть в запросе динамического списка, — если нужного поля нет, его сначала добавляют в запрос.

В отчётах на СКД цвет задаётся в настройках отчёта: закладка «Условное оформление» (в типовых отчётах — «Настройки» → «Оформление»). Там добавляется элемент с отбором, областью применения и параметром «Цвет фона». Программно это делается через коллекцию Настройки.УсловноеОформление компоновщика настроек.

Проверка результата и диагностика проблем

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

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

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

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

Ячейка табличного документа
Норма

Заданная область окрашена, соседние ячейки без изменений

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

Цвет не применился или окрашена не та область — проверьте адрес R{строка}C{колонка}

Строки таблицы формы
Норма

Окрашены только строки, удовлетворяющие условию

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

Окрашены все строки или ни одной — ошибка в отборе условного оформления

Цвет после перезапуска
Норма

Оформление сохраняется при повторном открытии формы

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

Оформление пропадает — настройка выполнена не в том обработчике или перезаписывается

Итог

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

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

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

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

В обычных формах у табличного поля есть событие «ПриВыводеСтроки», в обработчике которого доступен параметр ОформлениеСтроки. Через него задаётся цвет: ОформлениеСтроки.ЦветФона = Новый Цвет(255, 220, 220). Условие проверяется по данным текущей строки (параметр ДанныеСтроки).

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

В табличном документе, открытом в режиме предприятия, можно выделить ячейки и через меню «Таблица» → «Вид» → «Свойства» (или контекстное меню) задать цвет фона вручную — если документ открыт не в режиме «Только просмотр». Для списков и отчётов рядовой пользователь может менять оформление только через пользовательские настройки отчёта на СКД, если разработчик оставил такую возможность.

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

Три типовые причины: поле отбора указано с ошибкой в имени или отсутствует в данных; элемент оформления отключён (свойство Использование = Ложь); оформление перекрывается другим элементом условного оформления, расположенным ниже в списке. Проверьте порядок элементов — применяется последний подходящий.

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

У области табличного документа помимо ЦветФона есть свойства ЦветТекста и ЦветРамки, а также Шрифт и Границы. В условном оформлении форм доступны параметры «ЦветТекста», «ЦветФона», «Шрифт» и ряд других — они задаются через Оформление.УстановитьЗначениеПараметра с соответствующим именем параметра.

Можно ли использовать цвет из настроек пользователя?

Да, если сохранить выбранный цвет в хранилище общих настроек (ХранилищеОбщихНастроек) или в собственном регистре сведений, а при формировании документа или настройке оформления считывать его оттуда. Сам тип Цвет сериализуется ограниченно, поэтому обычно сохраняют три числа RGB или имя web-цвета и восстанавливают объект Цвет при чтении.