Разберем распространенную ситуацию при разработке отчетов на базе системы компоновки данных (СКД). Нередко возникает задача раскрасить всю строку отчета или отдельные колонки в зависимости от некоторого признака. Например, требуется выделить цветом просроченные документы, отрицательные остатки или особый статус контрагента. При этом само служебное поле, по которому проверяется условие, выводить пользователю в отчет не нужно, чтобы не загромождать таблицу лишней информацией.
Однако при настройке разработчик сталкивается с проблемой: условное оформление не применяется. Но стоит только добавить это служебное поле в список выбранных полей, как оформление сразу же начинает работать корректно. Проанализируем, почему платформа 1С ведет себя подобным образом, и рассмотрим правильные и надежные способы решения этой задачи.
Выясним причину, почему СКД игнорирует условие оформления, если колонка не выведена в отчет. Дело заключается в оптимизации запросов и контексте расчета группировок:
Null или Неопределено). В результате условие не выполняется, и оформление всей строки не накладывается.Именно поэтому у некоторых разработчиков оформление работает даже без вывода поля — такое происходит, когда оформляются строки структуры «Детальные записи» (где доступны все поля выборки конкретной записи) либо если поле уже объявлено ресурсом.
Рассмотрим подробнее штатные и альтернативные способы решения проблемы без необходимости показывать пользователю лишние колонки.
Это наиболее универсальное, быстрое и чистое решение с точки зрения архитектуры СКД. Когда поле объявлено ресурсом, компоновщик данных начинает рассчитывать и хранить его значение для всех уровней группировок отчета.
Разберем по шагам, как выполнить настройку:
Максимум(ЕстьОшибки)
или для строковых/числовых статусов:
Минимум(СтатусДокумента)
Теперь платформа рассчитает значение на всех уровнях иерархии группировок, условие выполнится, а лишняя колонка в отчете не появится.
Если логика формирования данных такова, что служебное поле однозначно связано с текущей группировкой (например, реквизит ПометкаУдаления или статус договора), можно включить его непосредственно в состав полей группировки отчета.
Рассмотрим по шагам выполнение этой настройки:
При таком подходе СКД гарантированно выбирает значение поля в контекст строки, и условное оформление строки отрабатывает корректно.
Проанализируем частую ошибку: настройка условного оформления задается в самом корне отчета (на уровне элемента Отчет), тогда как в отчете присутствуют группировки и детальные записи. На уровне заголовка и группировок детальное поле не существует, поэтому СКД не может применить оформление.
Если раскрашивать требуется именно конкретные строки детальных записей, разберем порядок действий:
Рассмотрим также обходной вариант, упомянутый участниками обсуждения. Если структуру отчета менять нежелательно, а поле не получается сделать ресурсом, можно вывести служебное поле в отчет, но сделать его визуально незаметным для пользователя.
1, а «Минимальная ширина» также равным 1.Несмотря на то что данный способ позволяет быстро решить проблему, рекомендуется отдавать предпочтение штатным механизмам — назначению поля ресурсом или добавлению его в поля группировки, так как они не создают паразитных микроколонок в табличном документе.