Как в СКД 1С вывести группировки внутри ресурсов?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет
← На главную

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

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

Метод 1: Трансформация данных в запросе (метод «Переворачивания»)

Это самый надежный и правильный с точки зрения архитектуры СКД способ. Его суть заключается в том, чтобы превратить названия ресурсов «Приход» и «Расход» в значения измерений. Рассмотрим ситуацию: вместо того чтобы иметь две отдельные колонки в наборе данных, мы объединим их в одну общую колонку Сумма, добавив признак типа операции.

Проанализируем шаги реализации в конструкторе запроса:

  1. Используем оператор ОБЪЕДИНИТЬ ВСЕ в запросе.
  2. В первой части запроса выбираем данные по приходу, добавляя текстовое поле-константу: "Приход" КАК ТипОперации.
  3. Во второй части выбираем данные по расходу с полем: "Расход" КАК ТипОперации.
  4. Поле суммы в обоих случаях называем одинаково, например, СуммаОборот.

Пример структуры кода запроса:


ВЫБРАТЬ
    "Приход" КАК ТипОперации,
    Валюта КАК Валюта,
    СуммаПриход КАК Сумма
ИЗ
    РегистрНакопления.ДенежныеСредства

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Расход",
    Валюта,
    СуммаРасход
ИЗ
    РегистрНакопления.ДенежныеСредства

Теперь в настройках СКД на вкладке «Настройки» в структуре колонок мы создаем следующую иерархию:

  1. Группировка по полю ТипОперации.
  2. Вложенная в нее группировка по полю Валюта.
  3. В «Выбранные поля» для этого отчета добавляем только один ресурс — Сумма.

В результате мы получим именно ту структуру, которую хотел автор вопроса: сначала идет заголовок «Приход», а под ним — колонки с валютами.

Метод 2: Использование вычисляемых полей и структуры настроек

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

Выясним алгоритм настройки:

  1. Перейдем на закладку «Вычисляемые поля».
  2. Создадим два поля: ЗаголовокПриход с выражением "Приход" и ЗаголовокРасход с выражением "Расход".
  3. В настройках отчета в колонках таблицы создаем группировку по полю ЗаголовокПриход.
  4. Внутрь этой группировки добавляем группировку Валюта.
  5. В «Выбранные поля» для этой конкретной ветки добавляем только ресурс Приход.
  6. Рядом (на том же уровне, что и ЗаголовокПриход) создаем аналогичную структуру для расхода с ресурсом Расход.

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

Метод 3: Работа с макетами оформления

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

Разберем, как реализовать нестандартную шапку через макет:

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

Важно: При использовании макетов нужно быть очень внимательными к именам полей и параметров, так как макеты жестко привязываются к структуре. Если вы добавите новое поле в отчет, макет может «поехать» или перестать отображаться.

Метод 4: Настройка «Расположение ресурсов»

Иногда визуальную проблему можно решить через Дополнительные настройки отчета. Посмотрим на параметр «Расположение ресурсов».

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

Метод 5: Использование групп (папок) в выбранных полях

Рассмотрим еще один «хитрый» способ оформления через интерфейс настроек:

  1. В списке «Выбранные поля» нажмем правую кнопку мыши и выберем «Новая группа».
  2. Назовем группу «Приход».
  3. Перетащим в эту группу ресурс Приход и установим для группы вариант расположения Вертикально.
  4. Повторим для расхода.

Хотя этот метод чаще используется для управления порядком вывода самих ресурсов (один под другим или в ряд), в определенных комбинациях с группировками колонок он позволяет добиться визуального эффекта разделения ресурсов по разным блокам шапки.

Программная обработка результата

Если ни один из интерактивных методов не подходит, мы можем прибегнуть к программному выводу отчета. Проанализируем пример кода в модуле объекта отчета, где мы перехватываем результат формирования:


ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);

// Начинаем вывод
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

// После вывода можем вручную объединить ячейки в шапке
Для НомерСтроки = 1 По 5 Цикл // Предположим, шапка в первых 5 строках
    // Логика поиска и объединения ячеек "Приход" над валютами
КонецЦикла;

Резюме: Несмотря на то, что «из коробки» СКД всегда ставит ресурсы ниже группировок, использование Метода 1 (Трансформация запроса) является наиболее гибким и стабильным решением. Оно позволяет сохранить все возможности расшифровки, автоматического расчета итогов и корректной работы пользовательских настроек, при этом обеспечивая нужный визуальный порядок полей в шапке отчета.

← На главную