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