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

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

Как выделять строки цветом в 1С

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

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

Пользовательский способ доступен в большинстве типовых конфигураций на управляемых формах («Управление торговлей», «Бухгалтерия предприятия», «ERP») и не требует прав администратора. Конфигураторный и программный способы нужны, когда раскраска должна работать у всех пользователей централизованно или зависит от сложной логики, которую нельзя выразить стандартным отбором.

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

Способ 1. Раскраска списка через пользовательские настройки

Этот вариант подходит, когда цвет нужен только вам или вы готовы показать коллегам последовательность действий. Откройте нужный список (например, «Реализации товаров и услуг»), нажмите кнопку «Ещё» в правом верхнем углу и выберите пункт «Настроить список». В открывшемся окне перейдите на закладку «Условное оформление».

Нажмите «Добавить» и заполните три области элемента настройки. В области «Оформление» выберите свойство «Цвет фона» или «Цвет текста» и задайте нужный оттенок. В области «Отбор» задайте условие, например: «Сумма документа Больше 100000» или «Проведен Равно Нет». В области «Оформляемые поля» можно оставить пусто — тогда раскрасится вся строка, либо указать конкретные колонки.

После нажатия «ОК» и «Завершить редактирование» список перерисуется: строки, подходящие под условие, будут выделены. Настройка сохраняется для текущего пользователя и применяется при каждом открытии списка, пока вы её не удалите или не измените.

Порядок действий в пользовательском режиме
  1. 1
    Откройте список и нажмите «Ещё → Настроить список»
  2. 2
    Перейдите на закладку «Условное оформление» и нажмите «Добавить»
  3. 3
    Задайте цвет фона или текста в области «Оформление»
  4. 4
    Добавьте условие в области «Отбор» (например, Проведен = Нет)
  5. 5
    Нажмите «Завершить редактирование» и убедитесь, что строки раскрасились

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

Способ 2. Условное оформление формы в конфигураторе

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

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

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

Способ 3. Программная раскраска в модуле формы

Программный вариант нужен, когда условие невозможно выразить отбором: например, подсветить строки, у которых дата отгрузки меньше текущей даты, а статус не «Закрыт». Код размещают в обработчике ПриСозданииНаСервере формы списка и заполняют коллекцию УсловноеОформление формы или списка.

&НаСервере

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

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

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

ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("Список");

ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(

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

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

Новый ПолеКомпоновкиДанных("Список.Проведен");

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

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

Элемент.Оформление.УстановитьЗначениеПараметра(

"ЦветФона", WebЦвета.СветлоРозовый);

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

Ключевые моменты кода: поле «Список» означает, что раскрашивается вся строка таблицы с именем «Список»; если нужно выделить только одну колонку, укажите её имя. Отбор ссылается на поля динамического списка через префикс «Список.». Несколько условий объединяйте по «И», добавляя элементы отбора в тот же элемент оформления, либо группируйте через ГруппаЭлементовОтбораКомпоновкиДанных с типом «Или».

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

1c
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255, 240, 240));

Раскраска строк табличной части документа

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

Если нужно раскрасить только отдельные ячейки, а не всю строку, в полях элемента оформления перечислите конкретные колонки: «ТоварыКоличество», «ТоварыЦена». Это удобно, когда цветом нужно показать проблемное значение, не перегружая всю строку.

Учтите: условное оформление пересчитывается при изменении данных строки автоматически, дополнительного кода в обработчиках ПриИзменении обычно не требуется. Если цвет не обновляется, проверьте, что отбор ссылается именно на поле объекта (Объект.Товары.Количество), а не на реквизит формы.

Особенности для динамических списков с произвольным запросом

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

Типовой приём: добавьте в запрос вычисляемое служебное поле, например «ВЫБОР КОГДА ДатаОтгрузки < &ТекущаяДата ТОГДА Истина ИНАЧЕ Ложь КОНЕЦ КАК Просрочено», — и стройте отбор условного оформления уже по нему. Так вы переносите сложную логику в запрос, где доступны любые вычисления, а оформление остаётся простым.

Не забудьте установить параметр запроса (в примере — ТекущаяДата) при создании формы или в обработчике ПриСозданииНаСервере через Список.Параметры.УстановитьЗначениеПараметра. Без установленного параметра запрос может не выполниться, и список окажется пустым.

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

Проверка результата и производительность

После настройки проверьте три сценария: строка, которая должна быть раскрашена; строка, которая не должна; граничный случай (пустое значение, ноль, незаполненная дата). Пустые значения в отборах ведут себя неочевидно: условие «Количество = 0» не сработает для незаполненного поля, если нужно учитывать и его — добавьте второе условие «Не заполнено» через группу «Или».

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

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

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

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

Окрашена заданным цветом сразу при открытии списка

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

Цвет появляется только после обновления (F5) или не появляется

Строка вне условия
Норма

Оформление стандартное

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

Раскрашена — значит условие отбора слишком широкое или пустое значение трактуется иначе

Другой пользователь
Норма

Видит ту же раскраску (для настройки из конфигуратора)

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

Не видит — настройка сделана в пользовательском режиме или перекрыта его личными настройками

Что выбрать в вашей ситуации

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

Маршрут решения

Как выбрать действие

Раскраска нужна только вам и условие простоеИспользуйте «Ещё → Настроить список → Условное оформление»
Раскраска нужна всем пользователям, условие по полям спискаНастройте условное оформление формы в конфигураторе или расширении
Условие вычисляемое (просрочка, текущая дата, несколько полей)Добавьте служебное поле в запрос динамического списка или заполните УсловноеОформление программно
Нельзя менять конфигурациюИспользуйте расширение конфигурации — условное оформление формы доступно и в нём

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

Итог

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

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

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

Почему раскраска пропадает после того, как коллега настроил список под себя?

Пользовательские настройки списка имеют приоритет над настройками из конфигуратора. Пусть пользователь выполнит «Ещё → Установить стандартные настройки» — после этого заработает оформление, заданное разработчиком.

Можно ли раскрасить строки в обычных формах (1С 8.2, толстый клиент)?

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

Как выделить цветом только одну ячейку, а не всю строку?

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

Работает ли условное оформление в отчётах на СКД?

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

Почему условие по дате «меньше текущей» не работает в пользовательских настройках?

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