Как в кросс-таблице СКД вывести определенный ресурс в колонки, а вычисляемую дельту — в итоговую колонку?

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

При формировании кросс-таблиц в схеме компоновки данных (СКД) часто возникает задача, когда в колонках группировки (например, по этапам или периодам) требуется видеть один показатель (Количество), а в итоговой колонке строки — не тривиальную сумму, а разность между определенными этапами (Дельта). По умолчанию СКД пытается рассчитать и вывести каждый добавленный ресурс во всех ячейках и общих итогах таблицы. Разберем по шагам, как настроить отчет так, чтобы разнести эти показатели по нужным колонкам.

Анализ исходных данных и логики расчета

Рассмотрим ситуацию, когда в запросе набора данных уже вычисляются базовые поля и знак для дельты:


ВЫБРАТЬ
    Регистр.Номенклатура КАК Номенклатура,
    Регистр.Этап КАК Этап,
    Регистр.КоличествоОборот КАК Количество,
    ВЫБОР
        КОГДА Регистр.Этап = ЗНАЧЕНИЕ(Перечисление.Этапы.Этап_8)
            ТОГДА Регистр.КоличествоОборот
        КОГДА Регистр.Этап = ЗНАЧЕНИЕ(Перечисление.Этапы.Этап_7)
            ТОГДА -Регистр.КоличествоОборот
        ИНАЧЕ 0
    КОНЕЦ КАК Дельта
ИЗ
    РегистрНакопления.Регистр.Обороты КАК Регистр

Если просто добавить поля Количество и Дельта в список ресурсов с выражением Сумма(...), то СКД продублирует обе колонки для каждого этапа и для общего итога. Чтобы добиться правильного отображения, проанализируем основные способы настройки отчета.

Способ 1. Ограничение расчета ресурсов по группировкам на вкладке «Ресурсы»

Платформа 1С позволяет жестко ограничить область действия любого ресурса с помощью поля «Рассчитывать по...». Разберем порядок настройки:

  1. Перейдем на вкладку «Ресурсы» схемы компоновки данных.
  2. Для поля Количество зададим выражение Сумма(Количество) и в колонке «Рассчитывать по...» выберем только группировку колонок Этап. Это исключит расчет и вывод количества в общем итоге по строке.
  3. Для поля Дельта зададим выражение Сумма(Дельта), а в колонке «Рассчитывать по...» укажем группировку строк Номенклатура и Общий итог, не выбирая группировку Этап.

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

Способ 2. Вычисление дельты формулой ресурса без правки запроса

Посмотрим на альтернативный вариант, когда в тексте запроса не формируется поле Дельта, а расчет разности целиком переносится в СКД. Для группировки Номенклатура на вкладке «Ресурсы» можно прописать явное агрегатное выражение:


Сумма(ВЫБОР КОГДА Этап = ЗНАЧЕНИЕ(Перечисление.Этапы.Этап_8) ТОГДА Количество ИНАЧЕ 0 КОНЕЦ)
- Сумма(ВЫБОР КОГДА Этап = ЗНАЧЕНИЕ(Перечисление.Этапы.Этап_7) ТОГДА Количество ИНАЧЕ 0 КОНЕЦ)

Также можно воспользоваться специализированной функцией компоновщика Вычислить():


Вычислить("Сумма(Количество)", "Этап", "Группировка", "Этап_8")
- Вычислить("Сумма(Количество)", "Этап", "Группировка", "Этап_7")

Этот подход делает схему данных универсальной, избавляя запрос от жестко зашитой логики вычитания.

Способ 3. Формирование структуры таблицы с отдельной колонкой (вкладка «Настройки»)

Если требуется полностью скрыть дельту из колонок этапов и при этом жестко управлять макетом таблицы без использования стандартных общих итогов, применим следующую структуру:

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

Таким образом, мы получаем кросс-таблицу, в которой для каждого этапа выводится исключительно его Количество, а в конце таблицы создается независимая итоговая колонка с рассчитанной дельтой.

← На главную