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

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

Условное оформление в 1С: когда оно отрабатывает и почему может не сработать

Когда отрабатывает условное оформление в 1С: порядок применения к формам, динамическим спискам и отчетам СКД, типичные причины, почему оформление не срабатывает.

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

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

Механизм существует в трёх местах: условное оформление формы (управляемые формы), условное оформление динамического списка и условное оформление в СКД (отчёты). У каждого свой момент срабатывания и свои ограничения, поэтому диагностику нужно вести с учётом того, где именно настроено оформление.

В какие моменты платформа применяет условное оформление

Для управляемой формы условное оформление оценивается платформой при каждом выводе или обновлении элемента, к которому оно привязано. Для таблицы это происходит при заполнении строк, при смене текущей строки, при изменении данных, влияющих на условие. Для простых полей — при изменении связанных реквизитов и перерисовке формы.

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

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

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

Условие — это отбор, аналогичный отбору динамического списка: поле, вид сравнения, значение. Оформление применяется к строке (или элементу), только если все условия отбора истинны. Если поле в данных равно NULL или имеет другой тип, чем значение сравнения, условие, как правило, не выполняется — и строка остаётся без оформления.

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

Если условий несколько внутри одного элемента оформления, они объединяются по «И». Чтобы реализовать «ИЛИ», создайте два отдельных элемента условного оформления с одинаковым оформлением, но разными условиями.

Почему оформление не срабатывает: основные причины

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

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

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

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

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

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

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

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

Особенности для отчётов на СКД

В СКД условное оформление настраивается на отдельной закладке настроек и применяется в момент формирования отчёта. Условие работает с полями, доступными в настройках отчёта; если поле не выведено в ресурсы или не добавлено в выбранные поля, для оформления его нужно явно включить в набор данных настройки.

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

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

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

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

Если оформление задано программно (в модуле формы через ЭлементыУсловногоОформления), убедитесь, что код выполняется: поставьте точку останова или выведите сообщение. Также проверьте, что код не вызывается до создания элементов формы и что правило добавляется в условное оформление именно этой формы.

Порядок диагностики
  1. 1
    Определите, где задано оформление: форма, динамический список или настройки СКД
  2. 2
    Упростите правило до одного условия с ярким оформлением
  3. 3
    Выведите проверяемое поле в список и сверьте фактическое значение с условием
  4. 4
    Проверьте типы данных: NULL, пустая ссылка, дата со временем
  5. 5
    Проверьте имя оформляемого поля и порядок правил в списке
  6. 6
    Обновите список или пересформируйте отчёт и убедитесь в результате

Производительность и ограничения

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

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

FAQ

Почему условное оформление работает у одних пользователей и не работает у других?

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

Отрабатывает ли условное оформление при программном изменении данных формы?

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

Можно ли в условии сравнивать поле с текущей датой?

Да. В настройках динамического списка и СКД доступны стандартные даты и параметры, для сравнения с текущей датой используйте соответствующее выражение или параметр, заполняемый при формировании. В условном оформлении формы проще задать реквизит с вычисленной датой и сравнивать с ним.

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

Частые причины — переименование поля или реквизита, на который ссылалось правило, изменение запроса динамического списка (поле пропало из выборки) или изменение типа поля. Откройте настройку оформления и проверьте, что все имена полей актуальны и условия по-прежнему осмысленны.

Какое правило сработает, если несколько правил задают одно свойство?

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

Работает ли условное оформление в обычных формах?

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

Итог

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

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