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