Использование нескольких макетов в одном отчете

1С8.2
Хочу в отчете сделать общую форму и краткую по определенным “критериям”.
Создал два макета типа схема компоновки данных.
В форму добавил список значений с выбором “макета” и на событие изменения значения повесил вот такой код:

//если 1 - общая форма отчета,
//если 2- краткая форма по внебюджету
Сообщить("");

Если Элемент.Значение=2 Тогда

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

//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

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

//установка параметров
ПарамСписка = СхемаКомпоновки.Параметры.Найти("ЗнакПрихода");
ПарамСписка.ОграничениеИспользования = Ложь;
ПарамСписка.Значение = 1;

СтатьяОстатка = СхемаКомпоновки.Параметры.Найти("СтатьяИсключения");
СтатьяОстатка.ОграничениеИспользования = Ложь;
СтатьяОстатка.Значение = Справочники.бдж_СтатьиОборотовПоБюджетам.НайтиПоКоду("000000082"); //статья переходящего остатка

ПарамНачПериода = СхемаКомпоновки.Параметры.Найти("НачПериода");
ПарамНачПериода.ОграничениеИспользования = Ложь;
ПарамНачПериода.Значение = НачалоДня(НачПериода);

ПарамКонПериода = СхемаКомпоновки.Параметры.Найти("КонПериода");
ПарамКонПериода.ОграничениеИспользования = Ложь;
ПарамКонПериода.Значение = КонецДня(КонПериода);

СтрокаИФ="Аренда жилых помещений, ДПОУ, ПОУ, Прочие услуги, Целевые и благотворительные";
СписокИФ = Новый СписокЗначений;
ВыборкаСпр = Справочники.бдж_ИсточникиФинансирования.Выбрать();
Пока ВыборкаСпр.Следующий() Цикл
Если Найти(СтрокаИФ, ВыборкаСпр.Ссылка.Наименование) Тогда
СписокИФ.Добавить(ВыборкаСпр.Ссылка);
КонецЕсли;
КонецЦикла;

ПарамИФ = СхемаКомпоновки.Параметры.Найти("СписокИФ");
ПарамИФ.ОграничениеИспользования = Ложь;
ПарамИФ.ДоступенСписокЗначений = Истина;
ПарамИФ.Значение = СписокИФ;

Иначе //=1

СхемаКомпоновки = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

//Из схемы возьмем настройки по умолчанию
Настройки = СхемаКомпоновки.НастройкиПоУмолчанию;

//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

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

//установка параметров
ПарамСписка = СхемаКомпоновки.Параметры.Найти("ЗнакПрихода");
ПарамСписка.Использование = Истина;
ПарамСписка.Значение = 1;

СтатьяОстатка = СхемаКомпоновки.Параметры.Найти("СтатьяИсключения");
СтатьяОстатка.Использование = Истина;
СтатьяОстатка.Значение = Справочники.бдж_СтатьиОборотовПоБюджетам.НайтиПоКоду("000000082"); //статья переходящего остатка

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

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

КонецЕсли;

//Очищаем поле табличного документа
Результат = ЭлементыФормы.Результат;
Результат.Очистить();

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

Результата не добился – выводится все время один и тот же макет.
Где собака порылась?

Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Головаченко Дима
Головаченко Дима
12 лет назад

1. Вы выполняете отчет, а после этого устанавливаете параметры запроса. Тут на лицо неверный вывод отчета.
2. В свое время я тоже столкнулся с таким заданием и реализовал его следующим образом:
в момент выбора конкретного варианта отчета вставил код
//инициализация схемы
СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет();
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
Ну а вывод отдал штатным средствам. Все работает отлично.
Так же хочу заметить, что переменные “СхемаКомпоновкиДанных” и “КомпоновщикНастроек” являются встроенными реквизитами отчета 1С (и только отчета), поэтому достатточно только их проинициализировать и пустить на вывод.
3. Что же в вашем случае не работает – пока сказать не могу. Поверхностный осмотр критичных ошибок не виявил.