Как в СКД вывести значения ресурсов последовательно по месяцам?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При стандартной настройке кросс-таблицы в системе компоновки данных (СКД) поля-ресурсы автоматически размещаются внутри каждого значения группировки колонок. Например, если в колонки добавлено поле ПериодМесяц, а в выбранных полях отчета указаны Количество и Сумма, то СКД сформирует отчет вида: Январь (Количество, Сумма), Февраль (Количество, Сумма). Однако на практике часто требуется иная структура: сначала вывести показатели первого ресурса за все месяцы (Количество: Январь, Февраль, Март), а затем показатели второго ресурса (Сумма: Январь, Февраль, Март).

Проанализируем особенности архитектуры СКД, выясним причины типичных ошибок при настройке такой структуры и разберем по шагам рабочие способы решения данной задачи.

Причины поведения СКД и ограничения платформы

В СКД ресурсы служат для агрегации числовых значений в точках пересечения строк и колонок. Если попытаться добавить поле-ресурс напрямую в группировку колонок таблицы, платформа выдаст ошибку: «Не допускается группировка по полю - ресурсу в колонках таблицы или точках диаграммы, если в строках таблицы или сериях диаграммы имеются включенные группировки». Вложенные группировки внутри ресурсов также не допускаются платформой.

Для реализации требуемой структуры применяются два основных подхода: настройка независимых колоночных группировок в структуре отчета либо трансформация структуры данных непосредственно в тексте запроса с помощью псевдоизмерений.

Способ 1. Настройка структуры колонок таблицы (без изменения запроса)

Рассмотрим основной и самый гибкий вариант, который не требует переписывания схемы данных и изменения текста запроса. Все действия выполняются на вкладке «Настройки» в схеме компоновки данных.

Разберем процесс настройки по шагам:

  1. Перейдем в структуру отчета и добавим элемент Таблица. В строки таблицы добавим необходимые группировки (например, Номенклатура или Партнер).
  2. В область Колонки таблицы добавим столько независимых параллельных группировок по полю ПериодМесяц, сколько ресурсов требуется вывести последовательно. Они должны находиться на одном уровне иерархии, не будучи вложенными друг в друга.
  3. Настроим выбранные поля для каждой созданной группировки периода индивидуально:

    Выделим первую группировку ПериодМесяц, в нижней панели перейдем на вкладку «Выбранные поля», снимем флаг автонастройки (уберем поле Авто) и добавим только первый ресурс — например, Количество.

    Выделим вторую группировку ПериодМесяц, на вкладке «Выбранные поля» также снимем флаг наследования и добавим только второй ресурс — например, Сумма.

  4. Для формирования общей шапки над каждым блоком месяцев зададим пользовательский заголовок для каждой группировки колонок (например, «Количество» и «Сумма») в свойствах группировки или через пользовательские поля.
  5. Убедимся, что внутри группировок ПериодМесяц отсутствуют вложенные группировки детальных записей или ресурсов. В противном случае колонки начнут дублироваться.

Особенности настройки горизонтальных общих итогов

При использовании параллельных группировок колонок стандартный механизм вывода общих итогов по горизонтали («Расположение общих итогов по горизонтали = Конец») выводит общую колонку со всеми ресурсами сразу, что визуально нарушает разделение блоков. Разберем, как правильно скорректировать итоги:

  1. Выделим элемент Таблица и в панели «Другие настройки» установим параметр «Расположение общих итогов по горизонтали» в значение «Нет».
  2. Если необходимо вывести общие суммы по строкам в конце таблицы, добавим в самый конец списка колонок (на том же уровне, что и группировки месяцев) отдельную группировку без указания поля (пустую группировку или детальные записи).
  3. В выбранных полях этой пустой группировки укажем все необходимые ресурсы, которые должны сформировать итоговые колонки за весь период.

Способ 2. Трансформация данных в запросе с помощью псевдоизмерения

Если требуется динамически управлять списком выводимых ресурсов или формировать стандартную древовидную иерархию колонок без ручного добавления группировок под каждый ресурс, разберем вариант объединения строк в тексте запроса. Создадим дополнительное измерение ТипДанных и сведем значения разных ресурсов в одно поле Значение.

Посмотрим на пример текста запроса:


ВЫБРАТЬ
    УчетПродажОбороты.ПериодМесяц КАК ПериодМесяц,
    УчетПродажОбороты.Номенклатура КАК Номенклатура,
    СУММА(ВЫБОР
            КОГДА ТипыДанных.ТипДанных = "Выручка"
                ТОГДА УчетПродажОбороты.СуммаОборот
            КОГДА ТипыДанных.ТипДанных = "Количество"
                ТОГДА УчетПродажОбороты.КоличествоОборот
            КОГДА ТипыДанных.ТипДанных = "Себестоимость"
                ТОГДА УчетПродажОбороты.СебестоимостьОборот
            ИНАЧЕ 0
        КОНЕЦ) КАК Значение,
    ТипыДанных.ТипДанных КАК ТипДанных
ИЗ
    РегистрНакопления.УчетПродаж.Обороты(, , Авто, ) КАК УчетПродажОбороты
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            "Выручка" КАК ТипДанных
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            "Количество"
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            "Себестоимость") КАК ТипыДанных
        ПО (ИСТИНА)
СГРУППИРОВАТЬ ПО
    УчетПродажОбороты.Номенклатура,
    ТипыДанных.ТипДанных,
    УчетПродажОбороты.ПериодМесяц
ИМЕЮЩИЕ
    НЕ СУММА(ВЫБОР
                КОГДА ТипыДанных.ТипДанных = "Выручка"
                    ТОГДА УчетПродажОбороты.СуммаОборот
                КОГДА ТипыДанных.ТипДанных = "Количество"
                    ТОГДА УчетПродажОбороты.КоличествоОборот
                КОГДА ТипыДанных.ТипДанных = "Себестоимость"
                    ТОГДА УчетПродажОбороты.СебестоимостьОборот
                ИНАЧЕ 0
            КОНЕЦ) = 0

После подготовки такого запроса в схеме компоновки данных выполним следующие настройки:

  1. На вкладке «Ресурсы» укажем поле Значение с выражением Сумма(Значение).
  2. В настройках структуры таблицы в область колонок добавим верхний уровень группировки по полю ТипДанных.
  3. Внутрь группировки ТипДанных добавим подчиненную группировку по полю ПериодМесяц.
  4. В выбранных полях отчета оставим ресурс Значение.

В результате СКД автоматически построит отчет, в котором колонки сгруппированы сначала по типу показателя, а внутри каждого типа развернуты по месяцам.

Альтернативные способы оформления отчета

Рассмотрим дополнительные возможности платформы 1С, которые могут пригодиться при решении схожих задач:

  1. Вертикальное расположение ресурсов: В панели «Другие настройки» параметр «Расположение ресурсов» можно переключить со стандартного «Горизонтально» на «Вертикально». В этом случае ресурсы будут выводиться в каждой колонке периода отдельными строками друг под другом.
  2. Использование собственных макетов СКД: На вкладке «Макеты» можно создать Макет заголовка группировки, объединить ячейки шапки произвольным образом и жестко зафиксировать требуемое визуальное оформление отчета.
← На главную