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