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

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

Почему не работает условное оформление в 1С и как это исправить

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

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

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

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

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

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

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

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

Причина 1: ошибка в условии отбора

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

Типичные ошибки в условиях:

  • сравнение ссылки со строковым представлением («Номенклатура = "Товар 1"» вместо выбора элемента справочника);
  • использование вида сравнения «Равно» там, где нужно «В списке» или «Содержит»;
  • условие по полю, которого нет в запросе динамического списка — такое условие либо не применяется, либо вызывает ошибку;
  • проверка на NULL там, где платформа возвращает пустую ссылку, и наоборот;
  • условие по вычисляемому полю, которое в списке не выведено и не выбрано.

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

Порядок проверки условия
  1. 1
    Откройте настройку списка и временно замените условие на заведомо выполняющееся
  2. 2
    Убедитесь, что оформление появилось — значит, механизм работает
  3. 3
    Сравните типы данных в условии: ссылка должна сравниваться со ссылкой, дата — с датой
  4. 4
    Проверьте, что поле условия присутствует в запросе динамического списка
  5. 5
    Проверьте условие через обычный отбор списка — он должен находить строки

Причина 2: не указаны оформляемые поля

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

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

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

bsl
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Использование = Истина;
// Условие
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Просрочен");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
// Оформление
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоРозовый);
// Оформляемые поля — обязательно!
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");

Причина 3: конфликт приоритетов и флажок «Использование»

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

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

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

Причина 4: отбор, группировка и особенности динамического списка

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

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

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

Причина 5: права, функциональные опции и кэш

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

Техническая составляющая — кэш. После обновления конфигурации у пользователей может остаться старый кэш метаданных и настроек форм, из-за чего оформление ведёт себя некорректно. Помогает очистка кэша: удаление папки кэша в каталоге данных пользователя (например, в профиле пользователя в %APPDATA%\1C\1cv8) при закрытом клиенте или перезапуск с очисткой. Перед удалением файлов убедитесь, что сеанс пользователя завершён.

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

Причина 6: оформление табличных частей и обычных форм

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

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

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

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

Алгоритм диагностики: что проверять по шагам

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

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

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

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

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

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

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

Внешний вид списка после настройки
Норма

Строки, подходящие под условие, подсвечены заданным цветом

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

Вид списка не изменился или подсвечены не те строки

Отбор списка с тем же условием
Норма

Отбор находит строки — условие корректно

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

Отбор пуст — ошибка в условии, а не в оформлении

Поведение у разных пользователей
Норма

Оформление одинаково у всех пользователей с одинаковыми правами

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

Различия между пользователями — проблема в правах или личных настройках

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

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

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

Можно ли применить условное оформление ко всей строке списка сразу?

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

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

Типовые причины: переименовали поле в запросе динамического списка или на форме, а элемент оформления ссылается на старое имя; либо обновление типовой конфигурации заменило ваши доработки. Проверьте все элементы условного оформления на актуальность имён полей.

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

Да, но оно настраивается отдельно — на закладке «Условное оформление» в настройках отчёта. Там действуют те же правила: корректное условие, указанные оформляемые поля и отсутствие конфликтующих элементов выше по списку.

Условие по дате не срабатывает. Что проверить?

Сравнивайте дату с датой, а не со строкой, и учитывайте, что дата документа обычно содержит время. Для проверки «старше N дней» сравнивайте с вычисленной границей, а для равенства по дню используйте диапазон или функции запроса, отсекающие время.

Итог

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

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