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