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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с Системой компоновки данных (СКД) разработчики часто сталкиваются с ситуацией, когда стандартное Условное оформление перестает функционировать, как только в отчет добавляется собственный Макет. На первый взгляд задача кажется тривиальной: раскрасить отрицательные числа красным, а положительные — зеленым. Однако при использовании макета оформления ячеек механизм автоматического применения стилей СКД может "терять" связь с конкретными полями. Разберем подробно, почему это происходит и как настроить макет так, чтобы оформление работало корректно.

Причина проблемы: Разрыв связи между полем и параметром макета

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

Проанализируем ключевой нюанс: если вы назвали параметр в макете (например, &СуммаОстаток), но это имя не совпадает с псевдонимом поля в наборе данных СКД или если в свойствах ячейки не указан путь к данным, система воспримет это просто как текст или неопределенный параметр, к которому правила оформления не применимы.

Решение №1: Синхронизация имен параметров и полей

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

  1. Перейдем на закладку Макеты в схеме компоновки данных.
  2. Выберем интересующую нас ячейку, где должен выводиться ресурс или поле.
  3. В свойстве Параметр укажем имя. Важно: это имя должно быть идентично имени (псевдониму) поля в наборе данных СКД. Если поле называется СуммаОборота, то параметр в макете должен называться так же.
  4. Проверим свойство Заполнение. Оно должно иметь значение Параметр.

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

Решение №2: Настройка свойства «Данные» в макете

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

В окне редактирования макета, выделив ячейку с параметром, обратите внимание на палитру свойств. Там есть поле Данные (или Путь к данным). В нем необходимо выбрать конкретное поле из вашей схемы. Именно это свойство является "мостиком", который сообщает процессору вывода: "В этой ячейке лежит значение поля СуммаДляОформления, примени к нему все правила оформления, настроенные для этого поля".

Решение №3: Тип заполнения — Значение vs Текст

Проанализируем ситуацию, когда условное оформление завязано на числовые значения (например, Значение < 0). Если в макете для параметра установлено свойство Тип заполнения как Текст, то система может преобразовать число в строку еще до момента анализа условий оформления. В результате условие "Строка" < 0 не сработает.

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

Особенности для вычисляемых полей и ресурсов

Если вы применяете оформление к Вычисляемым полям, которые выводятся через макет, нужно быть предельно внимательными к регистру символов. В некоторых версиях платформы 1С:Предприятие 8.3 наблюдались проблемы, когда несовпадение регистра в имени вычисляемого поля и параметра макета приводило к отказу работы условного оформления.

Рассмотрим пример кода, если вы вдруг решите программно проверить, какие параметры установлены в макете (хотя чаще это делается в визуальном редакторе):


// Пример обращения к области макета для проверки параметров
Область = МакетКомпоновки.Макеты.Найти("МакетГруппировки").Область;
Для Каждого Параметр Из Область.Параметры Цикл
    Сообщить("Параметр макета: " + Параметр.Имя);
КонецЦикла;

Приоритеты оформления: почему макет может "перебивать" настройки

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

  1. Свойства, жестко заданные в самом макете (в конфигураторе).
  2. Условное оформление, заданное в настройках СКД (динамическое).
  3. Стандартное оформление по умолчанию.

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

Работа с группировками

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

Посмотрим на алгоритм проверки работоспособности:

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

← На главную