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

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

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

Рассмотрим подробно несколько способов решения этой задачи средствами платформы 1С:Предприятие.

Способ 1. Использование вычисляемого поля и индивидуальных ресурсов (Рекомендуемый)

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

Разберем реализацию по шагам:

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

Благодаря такой настройке платформа рассчитывает единое ресурсное поле Комментарий по-разному в зависимости от того, на каком уровне группировки находится выводимая строка, и выводит результат в одну колонку.

Способ 2. Составные группировки и управление позиционированием ресурсов

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

Разберем порядок действий:

  1. При формировании структуры отчета создаем составные группировки:
    • Группировка 1: Организация + КомментарийОрганизации
    • Группировка 2: Контрагент + КомментарийКонтрагента
    • Группировка 3: Договор + КомментарийДоговора
  2. Чтобы поле комментария не «прилипало» к названию группировки слева от ресурсов, заходим в раздел «Другие настройки» отчета.
  3. Устанавливаем параметр «Авто позиция ресурсов» в значение «Не использовать».
  4. На уровне каждой конкретной группировки в окне «Выбранные поля» вручную настраиваем порядок и видимость колонок.

Способ 3. Единое вычисляемое поле с условным выражением

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

На вкладке «Вычисляемые поля» для поля КомментарийГруппировки задается выражение с использованием оператора ВЫБОР КОГДА:


Выбор 
    Когда ЗначениеЗаполнено(Документ) Тогда КомментарийДокумента
    Когда ЗначениеЗаполнено(Договор) Тогда КомментарийДоговора
    Когда ЗначениеЗаполнено(Контрагент) Тогда КомментарийКонтрагента
    Иначе КомментарийОрганизации
Конец

После этого на вкладке «Ресурсы» достаточно прописать общую агрегатную функцию для поля КомментарийГруппировки: Максимум(КомментарийГруппировки) для всех группировок.

Особенности работы с числовыми реквизитами и расчет итогов

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

Для корректного суммирования числового реквизита по иерархии используется функция языка выражений СКД ВычислитьВыражениеСГруппировкойМассив(). В выражении ресурса для родительской группировки указывается:


Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(ЧисловойРеквизит)", "ИмяНижнейГруппировки"))

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

← На главную