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