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