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