Почему вложенные отчеты СКД выводят только шапки без данных и как это исправить?

Программист IT и автоматизация бизнеса
← На главную

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

Разбор архитектуры вложенных схем

Прежде всего, проанализируем, как 1С воспринимает вложенную схему. Вложенный отчет для основного — это своего рода «черный ящик». Основной отчет (владелец) инициализирует выполнение вложенного, но он должен явно передать ему все необходимые инструкции: фильтры, настройки и, что самое важное, значения параметров. Если в основном отчете вы выбрали период «Январь 2024», вложенная схема об этом автоматически не узнает, даже если названия параметров (например, НачалоПериода и КонецПериода) совпадают в обеих схемах. В результате вложенный запрос выполняется с пустыми параметрами, что и приводит к пустому результату в таблице.

Главная причина: Некорректная связь параметров

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

Для исправления ситуации выполним следующие шаги в конструкторе СКД основного отчета:

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

Здесь кроется важный нюанс. По умолчанию 1С может подставить в колонку «Значение» тип данных, соответствующий параметру (например, «Произвольная дата»). Если там указана конкретная дата или стоит режим выбора значения, вложенный отчет будет использовать именно это статичное значение.

Важное действие: Чтобы передать параметр из основного отчета, необходимо в колонке «Значение» нажать кнопку «Очистить» (крестик) или изменить тип так, чтобы появилась возможность выбрать Поле компоновки данных. После этого вы сможете указать выражение вида &НачалоПериода. Это скажет системе: «Возьми значение параметра НачалоПериода из настроек основного отчета и передай его в этот параметр вложенной схемы».

Миф о ресурсах и вложенных схемах

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

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

Технические нюансы передачи «Стандартного периода»

Проанализируем ситуацию, когда в основном отчете используется тип СтандартныйПериод, а во вложенных — две отдельные даты. Это классический случай несовпадения типов. В этом случае прямая привязка может не сработать. Для решения этой задачи во вложенных настройках для параметра НачалоПериода следует прописать выражение:

&Период.ДатаНачала

А для параметра КонецПериода:

&Период.ДатаОкончания

Где &Период — это имя параметра типа СтандартныйПериод в основном отчете. Таким образом, мы «раскладываем» сложный объект на составляющие для вложенной схемы.

Программная инициализация (для продвинутых случаев)

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


// Создаем схему и настройки
СхемаКомпоновки = ОтчетОбъект.СхемаКомпоновкиДанных;
Настройки = ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки();

// Важно: КомпоновщикМакета автоматически обрабатывает вложенные схемы, 
// если они заданы в метаданных схемы
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, Настройки, ДанныеРасшифровки);

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

Обратите внимание на последний параметр Истина в методе Инициализировать. Он отвечает за возможность использования внешних наборов данных во вложенных схемах, если таковые имеются.

Резюме и рекомендации

Подводя итог, можно сказать, что «магия» исчезновения данных во вложенных отчетах почти всегда связана с пустыми значениями параметров. Посмотрим на чек-лист для проверки вашего отчета:

Соблюдение этих правил позволит вам создавать сложные аналитические панели, объединяющие данные из самых разных разделов учета в одном удобном окне.

← На главную