Разработка и Конфигурация · 10 мин
1С: как задать цвет ячейки
Как задать цвет ячейки в 1С: табличный документ, условное оформление формы и динамического списка. Примеры кода, типичные ошибки и проверка результата.
Задать цвет ячейки в 1С можно несколькими способами, и выбор зависит от того, где находится эта ячейка: в табличном документе (печатная форма, отчёт на макете), в таблице формы, в динамическом списке или в отчёте на СКД. У каждого случая свой механизм: прямое обращение к свойству ЦветФона области, условное оформление формы или настройка оформления в схеме компоновки данных.
Чаще всего задача сводится к одной строке кода вида Область.ЦветФона = Новый Цвет(255, 220, 220);, но на практике встречаются нюансы: цвет можно брать из стиля конфигурации, из системного перечисления WebЦвета, а в управляемых формах прямое изменение цвета ячейки таблицы недоступно — там работает только условное оформление. Ниже разобраны все рабочие сценарии с готовыми примерами кода.
Как задать цвет ячейки в табличном документе
Табличный документ — это объект ТабличныйДокумент, который используется для печатных форм, макетов и простых отчётов. Здесь у каждой области (отдельной ячейки или диапазона) есть свойства оформления: ЦветФона, ЦветТекста, ЦветРамки, Шрифт. Изменить их можно в любой момент — и при формировании документа программно, и после вывода.
Базовый пример: получить область по адресу и назначить ей цвет фона. Адрес задаётся в стиле Excel — буква колонки и номер строки, например «R3C5» означает строку 3, колонку 5 (в 1С используется нотация R{строка}C{колонка}).
ТабДок = Новый ТабличныйДокумент;
// ... вывод макета ...
// Одна ячейка
Область = ТабДок.Область("R3C5");
Область.ЦветФона = Новый Цвет(255, 220, 220); // светло-красный
// Диапазон ячеек
ОбластьДиапазон = ТабДок.Область("R3C2:R3C8");
ОбластьДиапазон.ЦветФона = WebЦвета.СветлоЖелтый;
Если ячейка получена через ТабДок.Область("R3C5"), изменение цвета применяется сразу, документ перерисовывать не нужно. Проверка результата простая: откройте сформированный табличный документ — ячейка должна быть окрашена. Если цвет не появился, чаще всего адрес области указан неверно или область перезаписывается последующим выводом макета.
Область = ТабДок.Область("R3C5");
Область.ЦветФона = Новый Цвет(255, 220, 220);
Область.ЦветТекста = WebЦвета.Черный;Способы задать сам цвет: RGB, Web-цвета и стиль
Свойство ЦветФона принимает объект типа Цвет. Получить его можно тремя способами. Первый — конструктор Новый Цвет(Красный, Зеленый, Синий) с компонентами от 0 до 255. Второй — готовые константы из коллекций WebЦвета и WindowsЦвета, например WebЦвета.СветлоСерый. Третий — цвета из стиля конфигурации: ЦветаСтиля.ЦветФонаКнопки и подобные.
Для прикладного решения предпочтителен третий вариант: цвета стиля автоматически подстраиваются под оформление конфигурации и не «ломаются» при смене темы интерфейса. Жёстко зашитые RGB-значения уместны в печатных формах, где нужен конкретный оттенок, независимый от настроек пользователя.
Способы задания цвета
Полный контроль над оттенком. Подходит для печатных форм. Минус — цвет не реагирует на смену темы интерфейса.
Готовые именованные константы, читаемый код. Ограниченный набор оттенков.
Цвета из стиля конфигурации, единообразие с интерфейсом. Требует наличия подходящего элемента стиля.
Цвет ячейки при выводе макета печатной формы
Типовой сценарий в печатных формах — красить строки или ячейки по условию, например подсвечивать позиции с отрицательным остатком или просроченные документы. Для этого область строки получают из макета, заполняют параметры, а затем до вывода в табличный документ меняют оформление.
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Макет");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Для Каждого СтрокаТовары Из Товары Цикл
ОбластьСтрока.Параметры.Заполнить(СтрокаТовары);
Если СтрокаТовары.Количество < 0 Тогда
ОбластьСтрока.Область().ЦветФона = Новый Цвет(255, 200, 200);
Иначе
ОбластьСтрока.Область().ЦветФона = Новый Цвет(); // авто
КонецЕсли;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Важный момент: область макета переиспользуется в цикле, поэтому цвет нужно сбрасывать в ветке Иначе. Иначе после первой «красной» строки все последующие тоже останутся окрашенными — это одна из самых частых ошибок при работе с макетами.
Цвет ячейки в таблице управляемой формы
В управляемых формах прямого доступа к отдельным ячейкам таблицы нет — платформа сама управляет отрисовкой. Цвет задаётся через условное оформление формы: вы описываете условие (отбор) и оформление (цвет фона, шрифт), а платформа применяет его ко всем строкам, удовлетворяющим условию.
Настроить можно в конфигураторе (свойство «УсловноеОформление» формы) или программно. Программный вариант удобен, когда условие формируется динамически:
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
// Условие
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Просрочен");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
ЭлементОтбора.Использование = Истина;
// Оформление
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоРозовый);
// К каким полям применять
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("СписокДатаОплаты");
Если не добавить элемент в коллекцию Поля, оформление применится ко всей строке таблицы. Чтобы покрасить только одну колонку, укажите имя соответствующего поля формы. Проверка результата: откройте форму и убедитесь, что строки с выполненным условием окрашены, а остальные — нет.
- 1Откройте форму в конфигураторе или определите место программной настройки (ПриСозданииНаСервере).
- 2Добавьте элемент условного оформления и задайте отбор — условие на данные строки.
- 3Установите параметр ЦветФона нужным значением.
- 4Укажите поля, к которым применяется оформление, либо оставьте список пустым для всей строки.
- 5Откройте форму в режиме предприятия и проверьте окраску на тестовых данных.
Цвет ячейки в динамическом списке и отчёте на СКД
Динамический список (список документов, справочника) оформляется через своё условное оформление — оно находится в настройках списка, а не формы. В конфигураторе: свойства динамического списка → «Условное оформление». Логика та же: отбор по полю запроса и параметр «Цвет фона». Условие может ссылаться только на поля, которые есть в запросе динамического списка, — если нужного поля нет, его сначала добавляют в запрос.
В отчётах на СКД цвет задаётся в настройках отчёта: закладка «Условное оформление» (в типовых отчётах — «Настройки» → «Оформление»). Там добавляется элемент с отбором, областью применения и параметром «Цвет фона». Программно это делается через коллекцию Настройки.УсловноеОформление компоновщика настроек.
Проверка результата и диагностика проблем
После настройки проверьте окраску на контрольном примере: создайте или найдите объект, который точно удовлетворяет условию, и объект, который ему не удовлетворяет. Окрашена должна быть только первая группа. Если цвет не появился вообще — проверяйте отбор (самая частая причина), если окрашено лишнее — ищите не сброшенное оформление области или слишком широкое условие.
Полезный приём при отладке табличного документа — временно вывести адрес области в текст ячейки, чтобы убедиться, что вы обращаетесь именно к ней. Для условного оформления формы помогает временное изменение условия на заведомо истинное (например, сравнение поля с самим собой): если цвет появился у всех строк — механизм работает, проблема в отборе.
Как проверить результат
Заданная область окрашена, соседние ячейки без изменений
Цвет не применился или окрашена не та область — проверьте адрес R{строка}C{колонка}
Окрашены только строки, удовлетворяющие условию
Окрашены все строки или ни одной — ошибка в отборе условного оформления
Оформление сохраняется при повторном открытии формы
Оформление пропадает — настройка выполнена не в том обработчике или перезаписывается
Что важно запомнить
В табличном документе цвет задаётся напрямую через Область.ЦветФона, в управляемых формах и динамических списках — только через условное оформление, в отчётах СКД — через настройки оформления. В циклах по макету всегда сбрасывайте цвет области, а в условном оформлении проверяйте, что поле отбора доступно в данных.
Частые вопросы
Как задать цвет ячейки в обычных формах (не управляемых)?
В обычных формах у табличного поля есть событие «ПриВыводеСтроки», в обработчике которого доступен параметр ОформлениеСтроки. Через него задаётся цвет: ОформлениеСтроки.ЦветФона = Новый Цвет(255, 220, 220). Условие проверяется по данным текущей строки (параметр ДанныеСтроки).
Можно ли задать цвет ячейки интерактивно, без конфигуратора?
В табличном документе, открытом в режиме предприятия, можно выделить ячейки и через меню «Таблица» → «Вид» → «Свойства» (или контекстное меню) задать цвет фона вручную — если документ открыт не в режиме «Только просмотр». Для списков и отчётов рядовой пользователь может менять оформление только через пользовательские настройки отчёта на СКД, если разработчик оставил такую возможность.
Почему условное оформление формы не срабатывает?
Три типовые причины: поле отбора указано с ошибкой в имени или отсутствует в данных; элемент оформления отключён (свойство Использование = Ложь); оформление перекрывается другим элементом условного оформления, расположенным ниже в списке. Проверьте порядок элементов — применяется последний подходящий.
Как задать цвет только для границы или текста ячейки?
У области табличного документа помимо ЦветФона есть свойства ЦветТекста и ЦветРамки, а также Шрифт и Границы. В условном оформлении форм доступны параметры «ЦветТекста», «ЦветФона», «Шрифт» и ряд других — они задаются через Оформление.УстановитьЗначениеПараметра с соответствующим именем параметра.
Можно ли использовать цвет из настроек пользователя?
Да, если сохранить выбранный цвет в хранилище общих настроек (ХранилищеОбщихНастроек) или в собственном регистре сведений, а при формировании документа или настройке оформления считывать его оттуда. Сам тип Цвет сериализуется ограниченно, поэтому обычно сохраняют три числа RGB или имя web-цвета и восстанавливают объект Цвет при чтении.