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