Разработка и Конфигурация · 10 мин
Условное оформление в 1С: когда оно отрабатывает и почему может не сработать
Когда отрабатывает условное оформление в 1С: порядок применения к формам, динамическим спискам и отчетам СКД, типичные причины, почему оформление не срабатывает.
Условное оформление в 1С — это механизм, который автоматически меняет внешний вид элементов (цвет фона, шрифт, текст, доступность, видимость) при выполнении заданного условия. Платформа применяет его не «постоянно», а в строго определённые моменты: при формировании формы, при обновлении данных, выводимых на экран, и при пересчёте динамического списка. Понимание этих моментов — ключ к тому, чтобы оформление работало предсказуемо.
Чаще всего проблема выглядит так: разработчик добавил условие, а строки в списке не красятся, либо красятся не те. Причина почти всегда одна из четырёх — условие не выполняется для данных строки, оформление привязано не к тому элементу формы, отбор сравнивает несовместимые типы, либо настройку «перекрывает» другое оформление с более высоким приоритетом.
Механизм существует в трёх местах: условное оформление формы (управляемые формы), условное оформление динамического списка и условное оформление в СКД (отчёты). У каждого свой момент срабатывания и свои ограничения, поэтому диагностику нужно вести с учётом того, где именно настроено оформление.
В какие моменты платформа применяет условное оформление
Для управляемой формы условное оформление оценивается платформой при каждом выводе или обновлении элемента, к которому оно привязано. Для таблицы это происходит при заполнении строк, при смене текущей строки, при изменении данных, влияющих на условие. Для простых полей — при изменении связанных реквизитов и перерисовке формы.
Для динамического списка оформление применяется при получении порции данных и их отображении. Если данные в базе изменились, но список не обновился, оформление останется прежним — пока пользователь не обновит список вручную или не сработает автоматическое обновление. Это частая причина жалоб «оформление запаздывает».
В отчётах на СКД условное оформление применяется один раз — в момент формирования отчёта. Если после формирования изменить данные в базе, отчёт не перекрасится: нужно сформировать его заново.
Как устроено условие и когда оно считается выполненным
Условие — это отбор, аналогичный отбору динамического списка: поле, вид сравнения, значение. Оформление применяется к строке (или элементу), только если все условия отбора истинны. Если поле в данных равно NULL или имеет другой тип, чем значение сравнения, условие, как правило, не выполняется — и строка остаётся без оформления.
Особое внимание — сравнению с пустыми значениями. Пустая ссылка, пустая строка и NULL — три разных состояния. Условие «Поле = ПустаяСсылка» не сработает для NULL, который появляется, например, при левом соединении в запросе динамического списка. Для таких случаев используйте вид сравнения «Не заполнено» или проверку на NULL в самом запросе.
Если условий несколько внутри одного элемента оформления, они объединяются по «И». Чтобы реализовать «ИЛИ», создайте два отдельных элемента условного оформления с одинаковым оформлением, но разными условиями.
Почему оформление не срабатывает: основные причины
Первая причина — условие объективно не выполняется. Откройте данные конкретной строки и проверьте значение поля, по которому построен отбор: возможно, там NULL, лишние пробелы в строке или дата со временем, тогда как в условии — дата без времени.
Вторая причина — неправильно указаны оформляемые поля. Если в настройке не заполнен список оформляемых полей, оформление применяется ко всей строке таблицы, но если указано конкретное поле — только к нему. Опечатка в имени поля или указание поля, которого нет в таблице, приведёт к тому, что видимого эффекта не будет.
Третья причина — конфликт нескольких оформлений. Элементы условного оформления применяются по порядку, и последующие могут перекрывать предыдущие по тем же параметрам (например, два правила задают разный цвет фона одному полю — сработает то, что ниже по списку, либо результат зависит от порядка обработки платформой). Держите правила упорядоченными и избегайте пересечений.
Особенности для динамических списков
У динамического списка оформление может задаваться в трёх местах: в запросе и настройках самого списка (в конфигураторе или кодом), в условном оформлении формы и в пользовательских настройках, если список их поддерживает. Пользовательские настройки могут перекрывать заданное разработчиком оформление — проверьте, не отключил ли пользователь правило или не добавил ли своё.
Важно: поле, по которому строится условие, должно присутствовать в выборке динамического списка. Если поле не выбирается запросом, платформа не сможет вычислить условие. Добавьте поле в запрос — при необходимости без вывода в таблицу.
Также учитывайте, что основная таблица динамического списка с произвольным запросом и соединениями может давать NULL в полях. Проверяйте условия на тестовых данных, где соединение гарантированно не находит пару.
Особенности для отчётов на СКД
В СКД условное оформление настраивается на отдельной закладке настроек и применяется в момент формирования отчёта. Условие работает с полями, доступными в настройках отчёта; если поле не выведено в ресурсы или не добавлено в выбранные поля, для оформления его нужно явно включить в набор данных настройки.
Типичная ошибка в отчётах — оформление применяется к группировке, а не к нужной области. В настройках СКД условное оформление можно добавлять как на верхнем уровне, так и внутри конкретной группировки: правило, добавленное «не туда», визуально не проявится в нужных строках.
Как проверить и отладить условное оформление
Начните с упрощения: временно оставьте одно правило с одним условием и ярким оформлением (например, красный фон). Если оно сработало — добавляйте условия по одному и найдите то, которое ломает отбор. Это быстрее, чем анализировать сложную комбинацию правил сразу.
Проверьте фактические данные строки: выведите проблемное поле в список явно и посмотрите его значение. Сравните тип и представление с тем, что задано в условии. Для ссылочных полей убедитесь, что сравниваете именно ссылку, а не строковое представление.
Если оформление задано программно (в модуле формы через ЭлементыУсловногоОформления), убедитесь, что код выполняется: поставьте точку останова или выведите сообщение. Также проверьте, что код не вызывается до создания элементов формы и что правило добавляется в условное оформление именно этой формы.
- 1Определите, где задано оформление: форма, динамический список или настройки СКД
- 2Упростите правило до одного условия с ярким оформлением
- 3Выведите проверяемое поле в список и сверьте фактическое значение с условием
- 4Проверьте типы данных: NULL, пустая ссылка, дата со временем
- 5Проверьте имя оформляемого поля и порядок правил в списке
- 6Обновите список или пересформируйте отчёт и убедитесь в результате
Производительность и ограничения
Каждое правило условного оформления вычисляется для каждой выводимой строки. Десятки правил на большом динамическом списке заметно замедляют его прорисовку, особенно если в условиях участвуют поля, требующие обращения к соединённым таблицам. Держите число правил минимальным и объединяйте их, где возможно.
Условное оформление не заменяет бизнес-логику: оно только меняет отображение. Нельзя через него запретить проведение или изменить данные. Для ограничений используйте проверки в коде, а оформление применяйте как визуальную подсказку пользователю.
FAQ
Почему условное оформление работает у одних пользователей и не работает у других?
Скорее всего, у части пользователей сохранены собственные настройки списка или отчёта, которые перекрывают настройки разработчика. Сбросьте пользовательские настройки до стандартных и проверьте снова. Также убедитесь, что у пользователей есть права на чтение поля, участвующего в условии: при ограничении на уровне записей поле может быть недоступно, и условие не вычислится.
Отрабатывает ли условное оформление при программном изменении данных формы?
Да, но не мгновенно по факту записи в базу, а при обновлении отображения формы. После программного изменения реквизитов платформа перерисует связанные элементы и применит оформление. Для динамического списка после изменения данных вызовите обновление списка, чтобы правила применились к новым значениям.
Можно ли в условии сравнивать поле с текущей датой?
Да. В настройках динамического списка и СКД доступны стандартные даты и параметры, для сравнения с текущей датой используйте соответствующее выражение или параметр, заполняемый при формировании. В условном оформлении формы проще задать реквизит с вычисленной датой и сравнивать с ним.
Почему после обновления конфигурации оформление перестало работать?
Частые причины — переименование поля или реквизита, на который ссылалось правило, изменение запроса динамического списка (поле пропало из выборки) или изменение типа поля. Откройте настройку оформления и проверьте, что все имена полей актуальны и условия по-прежнему осмысленны.
Какое правило сработает, если несколько правил задают одно свойство?
Правила применяются последовательно, и по одному и тому же свойству (например, цвету фона) эффект даёт правило, обработанное последним. Чтобы поведение было предсказуемым, упорядочите правила от общих к частным или сделайте условия взаимоисключающими.
Работает ли условное оформление в обычных формах?
В обычных формах отдельного механизма условного оформления, как в управляемых, нет. Там оформление строк реализуется программно — через обработчики событий вывода строк табличного поля, где кодом задаются цвет и шрифт ячеек.
Что важно запомнить
Условное оформление отрабатывает в момент вывода данных: при открытии формы, обновлении динамического списка или формировании отчёта СКД. Если оно не срабатывает, проверяйте по цепочке: истинность условия на реальных данных, корректность оформляемых полей, совместимость типов, наличие поля в выборке запроса и отсутствие перекрывающих правил или пользовательских настроек.