Использование нескольких макетов в одном отчете
1С8.2
Хочу в отчете сделать общую форму и краткую по определенным “критериям”.
Создал два макета типа схема компоновки данных.
В форму добавил список значений с выбором “макета” и на событие изменения значения повесил вот такой код:
//если 1 - общая форма отчета,
//если 2- краткая форма по внебюджету
Сообщить("");
Если Элемент.Значение=2 Тогда
СхемаКомпоновки = ПолучитьМакет("КраткийВнебюджет");
//Из схемы возьмем настройки по умолчанию
Настройки = СхемаКомпоновки.НастройкиПоУмолчанию;
//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, Настройки, ДанныеРасшифровки);
//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
//установка параметров
ПарамСписка = СхемаКомпоновки.Параметры.Найти("ЗнакПрихода");
ПарамСписка.ОграничениеИспользования = Ложь;
ПарамСписка.Значение = 1;
СтатьяОстатка = СхемаКомпоновки.Параметры.Найти("СтатьяИсключения");
СтатьяОстатка.ОграничениеИспользования = Ложь;
СтатьяОстатка.Значение = Справочники.бдж_СтатьиОборотовПоБюджетам.НайтиПоКоду("000000082"); //статья переходящего остатка
ПарамНачПериода = СхемаКомпоновки.Параметры.Найти("НачПериода");
ПарамНачПериода.ОграничениеИспользования = Ложь;
ПарамНачПериода.Значение = НачалоДня(НачПериода);
ПарамКонПериода = СхемаКомпоновки.Параметры.Найти("КонПериода");
ПарамКонПериода.ОграничениеИспользования = Ложь;
ПарамКонПериода.Значение = КонецДня(КонПериода);
СтрокаИФ="Аренда жилых помещений, ДПОУ, ПОУ, Прочие услуги, Целевые и благотворительные";
СписокИФ = Новый СписокЗначений;
ВыборкаСпр = Справочники.бдж_ИсточникиФинансирования.Выбрать();
Пока ВыборкаСпр.Следующий() Цикл
Если Найти(СтрокаИФ, ВыборкаСпр.Ссылка.Наименование) Тогда
СписокИФ.Добавить(ВыборкаСпр.Ссылка);
КонецЕсли;
КонецЦикла;
ПарамИФ = СхемаКомпоновки.Параметры.Найти("СписокИФ");
ПарамИФ.ОграничениеИспользования = Ложь;
ПарамИФ.ДоступенСписокЗначений = Истина;
ПарамИФ.Значение = СписокИФ;
Иначе //=1
СхемаКомпоновки = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
//Из схемы возьмем настройки по умолчанию
Настройки = СхемаКомпоновки.НастройкиПоУмолчанию;
//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, Настройки, ДанныеРасшифровки);
//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,
ДанныеРасшифровки);
//установка параметров
ПарамСписка = СхемаКомпоновки.Параметры.Найти("ЗнакПрихода");
ПарамСписка.Использование = Истина;
ПарамСписка.Значение = 1;
СтатьяОстатка = СхемаКомпоновки.Параметры.Найти("СтатьяИсключения");
СтатьяОстатка.Использование = Истина;
СтатьяОстатка.Значение = Справочники.бдж_СтатьиОборотовПоБюджетам.НайтиПоКоду("000000082"); //статья переходящего остатка
ПарамСписка = СхемаКомпоновки.Параметры.Найти("НачПериода");
ПарамСписка.Использование = Истина;
ПарамСписка.Значение = НачалоДня(НачПериода);
ПарамСписка = СхемаКомпоновки.Параметры.Найти("КонПериода");
ПарамСписка.Использование = Истина;
ПарамСписка.Значение = КонецДня(КонПериода);
КонецЕсли;
//Очищаем поле табличного документа
Результат = ЭлементыФормы.Результат;
Результат.Очистить();
//Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Результата не добился – выводится все время один и тот же макет.
Где собака порылась?
1. Вы выполняете отчет, а после этого устанавливаете параметры запроса. Тут на лицо неверный вывод отчета.
2. В свое время я тоже столкнулся с таким заданием и реализовал его следующим образом:
в момент выбора конкретного варианта отчета вставил код
//инициализация схемы
СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет();
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
Ну а вывод отдал штатным средствам. Все работает отлично.
Так же хочу заметить, что переменные “СхемаКомпоновкиДанных” и “КомпоновщикНастроек” являются встроенными реквизитами отчета 1С (и только отчета), поэтому достатточно только их проинициализировать и пустить на вывод.
3. Что же в вашем случае не работает – пока сказать не могу. Поверхностный осмотр критичных ошибок не виявил.