При разработке отчетов на Системе компоновки данных (СКД) часто возникает задача создания кросс-таблицы, где колонки разделены на две части: динамическую (например, продажи по месяцам) и статическую (остатки, ожидаемые поступления или другие показатели на конец периода). Стандартная настройка таблицы не всегда позволяет интуитивно добавить такие поля в конец строки, сохранив при этом гибкость настройки и корректный расчет итогов. В этой статье мы разберем, как правильно сконструировать такую структуру, обеспечив работоспособность всех механизмов СКД.
Наиболее надежный и правильный с точки зрения архитектуры СКД способ — это создание нескольких группировок на одном уровне иерархии в колонках таблицы. Рассмотрим этот процесс по шагам:
Месяц).Проанализируем ситуацию: теперь СКД сначала выведет все колонки, соответствующие периодам, а затем — колонки, указанные во второй группировке. Чтобы ресурсы не дублировались в обеих частях таблицы, воспользуемся настройкой Выбранные поля для каждой конкретной группировки колонок, оставив в месяцах только периодические показатели, а в статической части — только остатки.
Существует альтернативный способ через использование свойств группировки. В настройках кросс-таблицы для колонок можно добавить группировку (детальные записи), а на вкладке Другие настройки установить параметр Вариант использования группировки в значение Дополнительная информация. В выбранных полях этой группировки указываются нужные показатели (например, ОжидаемоеПоступление).
Однако здесь мы можем столкнуться с серьезной проблемой: платформа часто исключает такие поля из механизмов расчета общих итогов. Выясним причину: это архитектурное ограничение, так как «Дополнительная информация» предназначена для пояснительных текстовых данных (артикулы, описания), а не для агрегируемых ресурсов. Если вам критически важны общие итоги по этим колонкам, рекомендуем использовать Метод 3.
Чтобы обойти ограничение с итогами и визуально отделить статические данные, выполним следующие действия:
ЗаголовокСтатики и выражением "Ожидаемые показатели".Поскольку это полноценная группировка по полю, СКД применит к ней стандартные механизмы агрегации. Таким образом, в конце таблицы появится блок колонок под общим заголовком «Ожидаемые показатели», по которым будут рассчитаны и промежуточные, и общие итоги по горизонтали и вертикали.
При большом количестве периодов отчет становится широким, и пользователю неудобно терять из виду наименование товара. Рассмотрим, как зафиксировать колонку Номенклатура, чтобы она оставалась видимой при горизонтальной прокрутке. В СКД настройка «Фиксация слева» в параметрах вывода работает преимущественно для строк, поэтому для колонок кросс-таблицы необходимо использовать программный метод в модуле объекта отчета.
Для этого перехватим процесс формирования результата в процедуре ПриКомпоновкеРезультата:
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Инициализируем схему и компоновщик
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
// Фиксируем колонку с номенклатурой (обычно это первая колонка)
Результат.ФиксацияСлева = 1;
КонецПроцедуры
Чтобы отчет выглядел профессионально, разберем еще несколько нюансов оформления:
ЕСТЬNULL(Поле, 0) в выражении ресурсов на закладке Ресурсы.Следуя этим рекомендациям, вы сможете создавать сложные, но интуитивно понятные отчеты, которые корректно отображают как динамику за период, так и итоговые прогнозные показатели в единой таблице.