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

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

Как раскрасить строку табличной части в 1С

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

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

Типовая задача выглядит так: в документе «Реализация товаров» нужно подсветить строки, где количество равно нулю, красным цветом, а строки с отрицательной ценой — жёлтым. Пользователь должен сразу видеть проблемные позиции, не проверяя каждую строку вручную. Ниже разобраны оба подхода с примерами кода, типичными ошибками и способами проверки результата.

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

Где задаётся раскраска: управляемые и обычные формы

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

Определить, с какой формой вы работаете, просто: если конфигурация запускается в режиме «Тонкий клиент» или «Веб-клиент» и форма собрана из элементов в дереве редактора формы — это управляемая форма. Если форма рисуется в диалоге с элементами управления старого стиля — обычная. Большинство современных конфигураций (Бухгалтерия 3.0, УТ 11, ERP) используют управляемые формы.

Как раскрасить строку через условное оформление в конфигураторе

Самый простой способ — задать условное оформление в конфигураторе, не написав ни строки кода. Откройте форму документа в конфигураторе, выделите корневой элемент «Форма» в дереве элементов и откройте палитру свойств. Найдите свойство «УсловноеОформление» и нажмите кнопку открытия — появится редактор, похожий на настройку оформления в отчётах.

В редакторе на закладке «Условное оформление» добавьте новый элемент. Затем заполните три части настройки. На закладке «Оформление» установите параметр «Цвет фона» — например, светло-красный. На закладке «Отбор» добавьте условие: поле «Объект.Товары.Количество», вид сравнения «Равно», значение 0. На закладке «Оформляемые поля» перечислите колонки табличной части, которые должны окрашиваться — если оставить список пустым, оформление не применится ни к чему.

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

Порядок действий в конфигураторе
  1. 1
    Откройте форму документа, выделите корневой элемент «Форма»
  2. 2
    В палитре свойств откройте «УсловноеОформление»
  3. 3
    Добавьте элемент, задайте цвет фона на закладке «Оформление»
  4. 4
    На закладке «Отбор» задайте условие, например Объект.Товары.Количество = 0
  5. 5
    На закладке «Оформляемые поля» добавьте все колонки табличной части
  6. 6
    Сохраните форму и проверьте в режиме предприятия на документе с нулевым количеством

Программная установка условного оформления

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

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

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

// Оформление: цвет фона

ЭлементЦвета = ЭлементОформления.Оформление.Элементы.Найти("ЦветФона");

ЭлементЦвета.Значение = WebЦвета.СветлоРозовый;

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

// Условие: Количество = 0

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

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

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

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

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

// Оформляемые поля: все колонки таблицы

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

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

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

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

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

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

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

Обратите внимание на три критичных момента в этом коде. Во-первых, у каждого элемента оформления, отбора и поля обязательно устанавливается Использование = Истина — без этого элемент игнорируется. Во-вторых, имена в «Оформляемых полях» — это имена элементов формы (колонок таблицы), а не имена реквизитов данных. В-третьих, левое значение отбора — путь к данным, а не имя элемента формы.

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

1c
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Количество"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.ПравоеЗначение = 0; ЭлементОтбора.Использование = Истина;

Как раскрасить строку по сложному условию

Условие по нескольким полям

Если раскраска зависит от комбинации условий (например, количество больше остатка И товар не услуга), добавьте несколько элементов отбора в один элемент условного оформления. По умолчанию они объединяются по «И». Для «ИЛИ» создайте группу элементов отбора с типом ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли.

Условие, которое нельзя выразить отбором

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

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

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

Раскраска строк в обычных формах

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

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

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

ОформлениеСтроки.ЦветФона = WebЦвета.СветлоРозовый;

КонецЕсли;

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

Можно красить не всю строку, а отдельную ячейку: ОформлениеСтроки.Ячейки.Цена.ЦветФона = WebЦвета.СветлоЖелтый;. Этот способ гибче, чем условное оформление, потому что в обработчике доступен любой алгоритм на встроенном языке, включая запросы к базе. Но учитывайте производительность: обработчик вызывается для каждой видимой строки, тяжёлые запросы внутри него заметно тормозят прокрутку таблицы.

Сравнение подходов

Условное оформление (управляемые формы)

Декларативно, не требует кода, работает в тонком и веб-клиенте. Ограничение: условие должно выражаться отбором по полям данных.

Программное условное оформление

Гибкость включения и выключения раскраски из кода. Требует аккуратности с именами полей и флагом Использование.

ПриВыводеСтроки (обычные формы)

Любая логика на встроенном языке, окраска отдельных ячеек. Только для обычного приложения, влияет на скорость прокрутки.

Типичные ошибки и как их избежать

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

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

Типичные ошибки
01
Не установлено Использование = Истина у отбора — условие игнорируется без ошибок
02
Пустой список оформляемых полей — оформление не применяется ни к одной колонке
03
Имя реквизита вместо имени элемента формы в оформляемых полях — колонка не красится
04
Тяжёлый запрос в ПриВыводеСтроки — форма подтормаживает при прокрутке
05
Попытка присвоить цвет строке таблицы напрямую в управляемой форме — такого свойства не существует

Как проверить, что раскраска работает правильно

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

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

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

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

Строка, попадающая под условие
Норма

Строка окрашена заданным цветом во всех колонках

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

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

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

Цвет снимается или меняется сразу после изменения

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

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

Производительность формы
Норма

Прокрутка и ввод строк работают без задержек

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

Форма тормозит — в обработчике вывода строки тяжёлый код или запрос

Итог

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

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

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

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

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

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

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

Как раскрасить строку по условию, которое требует запроса к базе?

Напрямую в отборе условного оформления запрос выполнить нельзя. Добавьте в табличную часть или форму служебную колонку-флаг, заполняйте её программно (при записи, при изменении строки) результатом запроса, а условное оформление настройте по этому флагу. В обычных формах запрос можно выполнить прямо в ПриВыводеСтроки, но это замедлит прокрутку.

Работает ли раскраска в веб-клиенте и тонком клиенте?

Да, условное оформление управляемых форм полностью работает в тонком и веб-клиенте — платформа применяет его на стороне клиента. А вот обработчики обычных форм (ПриВыводеСтроки) доступны только в режиме обычного приложения толстого клиента.

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

Создайте элемент условного оформления программно и управляйте его свойством «Использование» в зависимости от настройки, сохранённой для пользователя. При изменении настройки достаточно установить ЭлементОформления.Использование = Ложь — строки вернутся к стандартному виду без перезапуска формы.

Можно ли задать цвет не из палитры WebЦвета, а произвольный?

Да, используйте конструктор Новый Цвет(Красный, Зелёный, Синий) со значениями от 0 до 255, например Новый Цвет(255, 200, 200) для мягкого красного фона. В редакторе условного оформления в конфигураторе произвольный цвет выбирается через диалог выбора цвета.