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