Как вывести несколько отчетов в одном макете с помощью СКД в 1С?

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

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

1. Использование вложенных схем СКД

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

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

Таким образом, мы получаем один отчет, внутри которого формируются другие. Однако у этого метода есть нюанс: если отчеты имеют разное количество колонок и разную ширину, они могут отображаться некорректно относительно друг друга.

2. Программный вывод нескольких СКД в один табличный документ

Если нам нужна максимальная гибкость, проанализируем программный вывод. Этот вариант реализуется в модуле менеджера или модуле объекта отчета (например, в процедуре ПриКомпоновкеРезультата), либо в модуле формы.

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

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

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

3. Несколько наборов данных в одной схеме (без связей)

Посмотрим на еще один способ: создание нескольких независимых наборов данных в одной схеме СКД.

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

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

4. Дашборд (панель отчетов) на управляемой форме

Если объединение в один макет создает проблемы с читаемостью, может лучше сделать форму с несколькими страницами или областями, и просто сразу сформировать все отчеты? Выясним преимущества этого подхода.

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

Ограничения платформы и технические трудности

При объединении отчетов в один табличный документ мы часто сталкиваемся с ограничениями платформы:

Если данные логически близки, отчеты можно объединить на уровне одного набора данных запросом с конструкцией ОБЪЕДИНИТЬ ВСЕ, добавив поле-признак вида операции. Затем эти данные выводятся в штатную кросс-таблицу или группировку СКД.

← На главную