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