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