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