Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 10:36

Отчет на СКД по 2-ум макетам

Автор vitasw, 11 окт 2022, 09:49

0 Пользователей и 1 гость просматривают эту тему.

vitasw

Здравствуйте. Программный вывод отчета на СКД. Есть 2 макета СКД: (1)СхемаДляОтбора и (2)СхемаДляВывода. 1 - используется для вывода данных в дерево значений. Дерево обрабатывается и результат, в виде таблицы значений, используется как внешний набор данных для схемы 2. Схема1 установлена как основная схема компоновки данных для отчета. Проблема: не выводится отчет и такое ощущение, что настройки всего отчета заменяются. Подскажите что не так. Спасибо.

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) 

СтандартнаяОбработка = Ложь;


КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; 

НастройкаДатаОтчета = НастройкаПараметра("ДатаОтчета");

Если Не НастройкаДатаОтчета.Использование Тогда
НастройкаДатаОтчета.Использование = Истина;
НастройкаДатаОтчета.Значение = КонецДня(ТекущаяДата());
КонецЕсли;


Настройки = КомпоновщикНастроек.ПолучитьНастройки();

Расш = Новый ДанныеРасшифровкиКомпоновкиДанных;

МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, Расш,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

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

ДЗ = Новый ДеревоЗначений;

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ДЗ);                                   
ПроцессорВывода.Вывести(ПроцессорКомпоновки);


тзДанные = Новый ТаблицаЗначений;

Для каждого текКолонка Из ДЗ.Колонки Цикл
тзДанные.Колонки.Добавить(текКолонка.Имя, текКолонка.ТипЗначения, текКолонка.Заголовок);
КонецЦикла;

//.... обрбаотка ДЗ и формирование ТЗ

КНКД = Новый КомпоновщикНастроекКомпоновкиДанных;
СхемаКомпоновкиДанных = ПолучитьМакет("СхемаДляВывода");
КНКД.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));

Настройки = КНКД.ПолучитьНастройки();

Расш = Новый ДанныеРасшифровкиКомпоновкиДанных;

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

ВнешниеНаборыДанных = Новый Структура;    
ВнешниеНаборыДанных.Вставить("тзДанные", тзДанные);

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

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат); //ДокументРезультат - по идее табличный документ в форме отчета. Формы нет.



ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);




КонецПроцедуры

antoneus

Вот это не так:

СхемаКомпоновкиДанных = ПолучитьМакет("СхемаДляВывода");
Переменную попробуйте переобозвать.

vitasw

antoneus, Спасибо. Ситуация улучшилась в том смысле, что настройки не заменяются. Но отчет все так же не отображается

vitasw

Переделал вывод отчета в дерево значений

    КНКД = Новый КомпоновщикНастроекКомпоновкиДанных;
СКД = ПолучитьМакет("СхемаДляВывода");
КНКД.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД));

Настр = КНКД.ПолучитьНастройки();


КомпМакета = Новый КомпоновщикМакетаКомпоновкиДанных; 
МакетК = КомпМакета.Выполнить(СКД, Настр,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

ПроцессорК = Новый ПроцессорКомпоновкиДанных;   
ВнешниеНаборыДанных = Новый Структура;   
ВнешниеНаборыДанных.Вставить("тзДанные", тзДанные);

ПроцессорК.Инициализировать(МакетК,ВнешниеНаборыДанных); 

ДЗ1 = Новый ДеревоЗначений;

ПроцессорВ = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВ.УстановитьОбъект(ДЗ1);                                   
ПроцессорВ.Вывести(ПроцессорК);



в ДЗ1 - ничего нет. В тзДанные - данные есть. Ткните куда-нибудь...

antoneus

Ну, значит дело в макете СКД, отсюда не видно куда тыкать.

vitasw

Отбой. Разобрался. Неправильно формировал вывод. Правильно так

СКД = ПолучитьМакет("СхемаДляВывода");
НастройкиСКД = СКД.НастройкиПоУмолчанию;
КомпоновщикМакетаСКД = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакетаСКД.Выполнить(СКД, НастройкиСКД);
   
ВнешниеНаборыДанных = Новый Структура;   
ВнешниеНаборыДанных.Вставить("тзДанные", тзДанные);
   
ПроцессорКомпоновкиСКД = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиСКД.Инициализировать(Макет,ВнешниеНаборыДанных);     
   
ДокументРезультат.Очистить();
   
ПроцессорВыводаСКД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВыводаСКД.УстановитьДокумент(ДокументРезультат);
ПроцессорВыводаСКД.Вывести(ПроцессорКомпоновкиСКД);

Теги: скд 2 макета 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск