Подсветка строк табличной части в 1С: условное оформление и код

· 9 мин

Содержание

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

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

Как устроена раскраска строк на управляемой форме

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

У правила три составные части:

  • 🎯 Условие — отбор по реквизитам строки: сравнение поля с числом, пустым значением, списком, другим полем;
  • 🧩 Поля — какие колонки таблицы красим;
  • 🎨 Оформление — цвет текста, цвет фона, шрифт, а также видимость и доступность.

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

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

Условное оформление в конфигураторе: настройка по шагам

Это основной способ. Подходит и для своей обработки, и для документа вашей конфигурации.

  1. Откройте форму в конфигураторе (документ → вкладка «Формы» → нужная форма).
  2. В дереве элементов формы выделите таблицу, которую хотите раскрасить (например, Товары).
  3. В палитре свойств найдите свойство «Условное оформление». Оно есть у таблицы формы; открывается кнопкой с многоточием.
  4. Нажмите «Добавить» и задайте правило.

В окне правила заполняются четыре блока.

Условие

Нажмите «Добавить» в блоке «Отбор» и выберите поле, вид сравнения и значение. Условий может быть несколько. Список видов сравнения такой же, как в обычном отборе: «Равно», «Не равно», «Меньше», «Больше», «Заполнено», «Не заполнено», «В списке» и другие.

Типичные примеры:

Что подсветитьПолеВид сравненияЗначение
Нулевое количествоТовары.КоличествоРавно0
Не указана ценаТовары.ЦенаНе заполнено—
Отрицательная суммаТовары.СуммаМеньше0
Определённая ставка НДСТовары.СтавкаНДСРавновыбранное значение

Оформляемые поля

В блоке «Оформляемые поля» перечислите колонки, которые нужно покрасить. Хотите всю строку — добавьте каждую колонку таблицы. Нужно только одно проблемное место (например, красная цена) — оставьте одну колонку.

Оформление

В блоке «Оформление» выберите параметры. Чаще всего нужны два:

  • Цвет фона — для заливки ячейки;
  • Цвет текста — когда фон менять неудобно (например, он уже занят цветом чередования строк).

Можно добавить шрифт : жирный или зачёркнутый удобно подходит для отменённых позиций.

Проверка

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

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

Раскраска из кода: условное оформление в модуле формы

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

Пример: красим строки табличной части Товары с нулевым количеством.

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

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

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

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

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

	// Оформление
	ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255, 220, 220));
	ЭлементУО.Использование = Истина;

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

Что здесь важно:

  • 📌 В блоке полей имя составное: имя таблицы формы + имя колонки, без точки (ТоварыКоличество). Это имена элементов формы, а не реквизитов объекта.
  • 📌 В условии наоборот: путь к данным через точку, Товары.Количество. Реквизит табличной части в отборе указывается так же, как в запросе.
  • 📌 Если блок полей не заполнять, правило действует на всю форму, а не на одну таблицу. Чтобы красилась именно эта таблица, поля нужно задавать.
  • 📌 Параметры оформления задают строкой: "ЦветФона", "ЦветТекста", "Шрифт". Опечатка в имени не даст ошибку при записи модуля, правило просто не сработает.

Цвет можно взять не только из Новый Цвет(R, G, B), но и из набора цветов стиля. Цвета стиля меняются вместе с темой оформления, поэтому в типовых конфигурациях применяют именно их. Для собственного правила подойдёт и явный RGB, если тема оформления у всех пользователей одна.

Несколько условий в одном правиле

Условия по умолчанию объединяются по «И». Нужно «ИЛИ» — создайте группу отбора и задайте у неё тип группы «ИЛИ», а условия вкладывайте внутрь. Если проще, добавьте два отдельных правила с одним и тем же цветом.

Включение и выключение раскраски

Раскраску удобно делать управляемой пользователем: флажок на форме «Подсвечивать проблемные строки», а в обработчике его изменения нужно перестроить правило. Проще всего оформить правило один раз и менять только свойство Использование:

&НаСервере
Процедура ПодсвечиватьПриИзмененииНаСервере()
	Для Каждого Правило Из УсловноеОформление.Элементы Цикл
		Если Правило.Представление = "ПодсветкаНулей" Тогда
			Правило.Использование = Подсвечивать;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

Чтобы правило нашлось, при создании задайте его представление: ЭлементУО.Представление = "ПодсветкаНулей";. Реквизит формы Подсвечивать с типом «Булево» привязывается к флажку.

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

Динамические списки: раскраска строк в списках и журналах

В динамическом списке (список документов, справочник, журнал) строка тоже красится условным оформлением, но правило задаётся у самого списка, а не у таблицы формы. Условие строится по полям запроса списка, а не по реквизитам объекта.

Через интерфейс конфигуратора:

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

Из кода обращение другое: условное оформление принадлежит списку.

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

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

ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Новый Цвет(150, 150, 150));
ЭлементУО.Использование = Истина;

Три особенности списков:

  • 🔹 Условие можно строить только по тем полям, которые есть в запросе списка. Нужного поля нет — добавьте его в запрос (в «Настройках списка» при произвольном запросе).
  • 🔹 Раскраска в списке считается на сервере вместе с выборкой данных. Условие по реквизиту, полученному через длинную цепочку точек, замедляет открытие большого списка.
  • 🔹 Если колонки в списке не указаны, правило красит всю строку, и это обычно именно то, что нужно: просроченные документы красным, закрытые серым.

Ошибки и оптимизация: почему строка не красится

Чаще всего причина одна из этих.

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

Что стоит сделать для скорости:

  • ✅ Объединяйте условия с одинаковым оформлением в одно правило с группой «ИЛИ».
  • ✅ Сравнивайте с числами и пустыми значениями, а не с ссылками, которые нужно разворачивать.
  • ✅ Не задавайте цвет там, где он совпадает с цветом по умолчанию.
  • ✅ Для вычисляемых условий (например, «сумма больше среднего») посчитайте значение заранее и положите в реквизит формы или колонку таблицы, а условие стройте по нему.

Условное оформление не умеет выполнять произвольный код и вызывать функции. Если условие слишком сложное («остаток на складе меньше количества»), посчитайте признак отдельной колонкой при заполнении и красьте по этой колонке. Колонку можно сделать невидимой.

Веб-клиент и тонкий клиент: что отличается

Условное оформление работает одинаково и в тонком клиенте, и в веб-клиенте: механизм общий, правила выполняются платформой. Отличия в деталях отрисовки:

  • 🌐 В веб-клиенте шрифты берутся из набора, доступного браузеру. Если вы задаёте нестандартное семейство шрифта, у части пользователей оно подменится. Надёжнее менять начертание (жирный, курсив) и цвет, а не гарнитуру.
  • 🌐 Цвета отображаются по RGB, но монитор и тема оформления браузера могут менять восприятие. Очень светлый фон на плохом мониторе сливается с белым, берите заметный оттенок.
  • 🌐 Цвет, который хорошо виден в светлой теме, может плохо читаться в тёмной. Если у вас в организации используют тёмную тему, проверьте раскраску и в ней.

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

Как внедрить раскраску: порядок действий

Чтобы подсветка помогала, а не раздражала, сделайте так.

  1. Определите один-два признака, которые действительно нужны: ошибка, нехватка, просрочка. Пять цветов в одной таблице бухгалтер перестаёт различать.
  2. Закрепите значения за цветами и сообщите их пользователям: красный — требует исправления, серый — отменено, жёлтый — на проверке.
  3. Сначала сделайте правило в конфигураторе через интерфейс. Код нужен, только если условия приходится менять динамически.
  4. Проверьте на реальной форме с большими данными: сотни строк, пустые строки, новые строки до записи.
  5. Не полагайтесь только на цвет. Часть людей плохо различает красный и зелёный, поэтому дополняйте цвет вторым признаком: шрифтом, пометкой или текстом в соседней колонке.
Перед выкладкой раскраски
Выполнено: 0 / 5

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

Можно ли покрасить строку табличной части на обычной форме?
В режиме «Обычное приложение» условного оформления нет. Для современных конфигураций на платформе 8.3 используют управляемые формы.
Как покрасить только одну ячейку, а не всю строку?
В блоке оформляемых полей оставьте единственную колонку. Остальные колонки таблицы правило не затронет.
Почему цвет не сохраняется в документе?
Условное оформление только отображает данные и ничего не пишет в документ. Цвет появляется при каждом открытии формы заново, если выполняется условие.
Как красить строки по значению, которого нет в таблице?
Добавьте вспомогательную колонку в табличную часть или реквизит формы, заполните её при загрузке данных и стройте условие по ней.
Можно ли менять цвет по нажатию кнопки?
Да. Правило создаётся один раз с отключённым использованием, а кнопка или флажок включает его через свойство Использование на сервере.