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