Подсветка строк табличной части в 1С: условное оформление и код
Содержание
Выделить строку табличной части цветом в 1С можно только на управляемой форме, и делается это через условное оформление: вы задаёте условие (например, «Количество меньше нуля»), поля, которые нужно покрасить, и цвет фона или текста. Строка красится на клиенте сама, при каждом изменении данных, и никакого цикла по строкам писать не нужно.
Типичная ситуация: в документе на сотню позиций нужно сразу увидеть строки, где не заполнена цена, где остаток уходит в минус или где сумма превышает лимит. Глазами это не поймать, а раскраска решает задачу за минуту. Ниже три способа: через конструктор в конфигураторе, программно из модуля формы и для динамического списка.
Как устроена раскраска строк на управляемой форме
Раскраска строки целиком в управляемой форме не является отдельной настройкой таблицы. Платформа красит поля (колонки) по условию. Чтобы закрасилась вся строка, в оформление нужно включить все колонки таблицы или не указывать поля вовсе: тогда правило действует на всю таблицу.
У правила три составные части:
- 🎯 Условие — отбор по реквизитам строки: сравнение поля с числом, пустым значением, списком, другим полем;
- 🧩 Поля — какие колонки таблицы красим;
- 🎨 Оформление — цвет текста, цвет фона, шрифт, а также видимость и доступность.
Условное оформление хранится в самой форме и срабатывает при отрисовке. Данные оно не меняет, в базу ничего не пишет и на проведение документа не влияет. Поэтому его безопасно добавлять и в типовые формы через расширение, и в свои обработки.
На обычных формах (режим «Обычное приложение») такого механизма нет, там оформление строки задавали иначе. В интерфейсе «Такси» и в веб-клиенте работают только управляемые формы, их и разбираем.
Условное оформление в конфигураторе: настройка по шагам
Это основной способ. Подходит и для своей обработки, и для документа вашей конфигурации.
- Откройте форму в конфигураторе (документ → вкладка «Формы» → нужная форма).
- В дереве элементов формы выделите таблицу, которую хотите раскрасить (например,
Товары). - В палитре свойств найдите свойство «Условное оформление». Оно есть у таблицы формы; открывается кнопкой с многоточием.
- Нажмите «Добавить» и задайте правило.
В окне правила заполняются четыре блока.
Условие
Нажмите «Добавить» в блоке «Отбор» и выберите поле, вид сравнения и значение. Условий может быть несколько. Список видов сравнения такой же, как в обычном отборе: «Равно», «Не равно», «Меньше», «Больше», «Заполнено», «Не заполнено», «В списке» и другие.
Типичные примеры:
| Что подсветить | Поле | Вид сравнения | Значение |
|---|---|---|---|
| Нулевое количество | Товары.Количество | Равно | 0 |
| Не указана цена | Товары.Цена | Не заполнено | — |
| Отрицательная сумма | Товары.Сумма | Меньше | 0 |
| Определённая ставка НДС | Товары.СтавкаНДС | Равно | выбранное значение |
Оформляемые поля
В блоке «Оформляемые поля» перечислите колонки, которые нужно покрасить. Хотите всю строку — добавьте каждую колонку таблицы. Нужно только одно проблемное место (например, красная цена) — оставьте одну колонку.
Оформление
В блоке «Оформление» выберите параметры. Чаще всего нужны два:
- Цвет фона — для заливки ячейки;
- Цвет текста — когда фон менять неудобно (например, он уже занят цветом чередования строк).
Можно добавить шрифт : жирный или зачёркнутый удобно подходит для отменённых позиций.
Проверка
Сохраните форму, запустите 1С:Предприятие в режиме отладки и введите в таблицу строку, которая подходит под условие. Строка должна окраситься сразу после выхода из ячейки. Если нет, проверьте три вещи: включено ли правило (флажок использования), совпадает ли имя поля в отборе с реальным реквизитом и не перекрывает ли его другое правило выше по списку.
Правила применяются сверху вниз, и последнее подходящее перекрывает предыдущие в тех параметрах, которые оно задаёт. Частая причина «не красит»: выше стоит правило, которое окрашивает ту же ячейку другим цветом, а ваше стоит раньше.
Раскраска из кода: условное оформление в модуле формы
Если правил много, они зависят от настроек пользователя или формы создаются динамически, оформление добавляют программно. Делать это нужно в обработчике ПриСозданииНаСервере: правила попадают в форму до первой отрисовки.
Пример: красим строки табличной части Товары с нулевым количеством.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭлементУО = УсловноеОформление.Элементы.Добавить();
// Какие колонки красим
ПолеОформления = ЭлементУО.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ТоварыНоменклатура");
ПолеОформления = ЭлементУО.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ТоварыКоличество");
// Условие
ОтборЭлемента = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Товары.Количество");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 0;
// Оформление
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255, 220, 220));
ЭлементУО.Использование = Истина;
КонецПроцедуры
Что здесь важно:
- 📌 В блоке полей имя составное: имя таблицы формы + имя колонки, без точки (
ТоварыКоличество). Это имена элементов формы, а не реквизитов объекта. - 📌 В условии наоборот: путь к данным через точку,
Товары.Количество. Реквизит табличной части в отборе указывается так же, как в запросе. - 📌 Если блок полей не заполнять, правило действует на всю форму, а не на одну таблицу. Чтобы красилась именно эта таблица, поля нужно задавать.
- 📌 Параметры оформления задают строкой:
"ЦветФона","ЦветТекста","Шрифт". Опечатка в имени не даст ошибку при записи модуля, правило просто не сработает.
Цвет можно взять не только из Новый Цвет(R, G, B), но и из набора цветов стиля. Цвета стиля меняются вместе с темой оформления, поэтому в типовых конфигурациях применяют именно их. Для собственного правила подойдёт и явный RGB, если тема оформления у всех пользователей одна.
Несколько условий в одном правиле
Условия по умолчанию объединяются по «И». Нужно «ИЛИ» — создайте группу отбора и задайте у неё тип группы «ИЛИ», а условия вкладывайте внутрь. Если проще, добавьте два отдельных правила с одним и тем же цветом.
Включение и выключение раскраски
Раскраску удобно делать управляемой пользователем: флажок на форме «Подсвечивать проблемные строки», а в обработчике его изменения нужно перестроить правило. Проще всего оформить правило один раз и менять только свойство Использование:
&НаСервере
Процедура ПодсвечиватьПриИзмененииНаСервере()
Для Каждого Правило Из УсловноеОформление.Элементы Цикл
Если Правило.Представление = "ПодсветкаНулей" Тогда
Правило.Использование = Подсвечивать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Чтобы правило нашлось, при создании задайте его представление: ЭлементУО.Представление = "ПодсветкаНулей";. Реквизит формы Подсвечивать с типом «Булево» привязывается к флажку.
Не добавляйте новые правила на каждое событие формы. Если вызывать добавление при каждом изменении строки, список правил растёт, форма тормозит, а старые правила продолжают действовать. Создавайте правило один раз при открытии формы.
Динамические списки: раскраска строк в списках и журналах
В динамическом списке (список документов, справочник, журнал) строка тоже красится условным оформлением, но правило задаётся у самого списка, а не у таблицы формы. Условие строится по полям запроса списка, а не по реквизитам объекта.
Через интерфейс конфигуратора:
- В реквизитах формы выберите динамический список (обычно
Список). - Откройте его свойство «Настройки списка».
- Перейдите на закладку «Условное оформление» и добавьте правило так же, как для таблицы.
Из кода обращение другое: условное оформление принадлежит списку.
ЭлементУО = Список.УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПометкаУдаления");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Новый Цвет(150, 150, 150));
ЭлементУО.Использование = Истина;
Три особенности списков:
- 🔹 Условие можно строить только по тем полям, которые есть в запросе списка. Нужного поля нет — добавьте его в запрос (в «Настройках списка» при произвольном запросе).
- 🔹 Раскраска в списке считается на сервере вместе с выборкой данных. Условие по реквизиту, полученному через длинную цепочку точек, замедляет открытие большого списка.
- 🔹 Если колонки в списке не указаны, правило красит всю строку, и это обычно именно то, что нужно: просроченные документы красным, закрытые серым.
Ошибки и оптимизация: почему строка не красится
Чаще всего причина одна из этих.
| Симптом | Проверка |
|---|---|
| Правило есть, цвета нет | Флажок использования выключен, или условие ссылается на поле, которое пусто в данных |
| Красится не та колонка | В кодовом варианте перепутаны формы имён: в полях ТоварыЦена, в условии Товары.Цена |
| В конфигураторе красит, у пользователя нет | Пользователь открывает форму из расширения или копии без ваших правок. Проверьте, какая форма реально открыта |
| Цвет теряется при выделении строки | Это нормально: выделение строки рисуется поверх. Проверяйте цвет на невыделенной строке |
| Форма стала медленно открываться | Слишком много правил или тяжёлые условия в динамическом списке. Объедините правила с одинаковым цветом |
Что стоит сделать для скорости:
- ✅ Объединяйте условия с одинаковым оформлением в одно правило с группой «ИЛИ».
- ✅ Сравнивайте с числами и пустыми значениями, а не с ссылками, которые нужно разворачивать.
- ✅ Не задавайте цвет там, где он совпадает с цветом по умолчанию.
- ✅ Для вычисляемых условий (например, «сумма больше среднего») посчитайте значение заранее и положите в реквизит формы или колонку таблицы, а условие стройте по нему.
Условное оформление не умеет выполнять произвольный код и вызывать функции. Если условие слишком сложное («остаток на складе меньше количества»), посчитайте признак отдельной колонкой при заполнении и красьте по этой колонке. Колонку можно сделать невидимой.
Веб-клиент и тонкий клиент: что отличается
Условное оформление работает одинаково и в тонком клиенте, и в веб-клиенте: механизм общий, правила выполняются платформой. Отличия в деталях отрисовки:
- 🌐 В веб-клиенте шрифты берутся из набора, доступного браузеру. Если вы задаёте нестандартное семейство шрифта, у части пользователей оно подменится. Надёжнее менять начертание (жирный, курсив) и цвет, а не гарнитуру.
- 🌐 Цвета отображаются по RGB, но монитор и тема оформления браузера могут менять восприятие. Очень светлый фон на плохом мониторе сливается с белым, берите заметный оттенок.
- 🌐 Цвет, который хорошо виден в светлой теме, может плохо читаться в тёмной. Если у вас в организации используют тёмную тему, проверьте раскраску и в ней.
Мобильное приложение показывает те же правила, но колонок на экране меньше. Если правило красит одну колонку, которая в мобильной форме скрыта, цвет вы не увидите. Для мобильных форм лучше красить ключевую колонку, которая видна всегда.
Как внедрить раскраску: порядок действий
Чтобы подсветка помогала, а не раздражала, сделайте так.
- Определите один-два признака, которые действительно нужны: ошибка, нехватка, просрочка. Пять цветов в одной таблице бухгалтер перестаёт различать.
- Закрепите значения за цветами и сообщите их пользователям: красный — требует исправления, серый — отменено, жёлтый — на проверке.
- Сначала сделайте правило в конфигураторе через интерфейс. Код нужен, только если условия приходится менять динамически.
- Проверьте на реальной форме с большими данными: сотни строк, пустые строки, новые строки до записи.
- Не полагайтесь только на цвет. Часть людей плохо различает красный и зелёный, поэтому дополняйте цвет вторым признаком: шрифтом, пометкой или текстом в соседней колонке.
Частые вопросы
Можно ли покрасить строку табличной части на обычной форме?
Как покрасить только одну ячейку, а не всю строку?
Почему цвет не сохраняется в документе?
Как красить строки по значению, которого нет в таблице?
Можно ли менять цвет по нажатию кнопки?
Использование на сервере.