Имя: Пароль:
1C
1С v8
Вывод вложенных схем СКД в разные таб. документы?
0 SashaNox
 
09.12.12
22:49
Доброго вечера! Столкнулся с проблемой при построении отчета на СКД.
Итак, имеется схема в которой 3 вложенных схемы. Хочу результат выполнения каждой схемы вывести в разные табличные документы. Пишу так:
Процедура Сформировать(ЭлементыФормы)
   
   ТекСтраница = ЭлементыФормы.Панель1.ТекущаяСтраница;
   
   //Открываем закладки панели
   ЭлементыФормы.Панель1.ОтображениеЗакладок = ОтображениеЗакладок.Сверху;
   
   //Убираем видимость
   ЭлементыФормы.Панель1.Страницы.Страница1.Видимость = Ложь;
   ЭлементыФормы.Панель1.Страницы.Страница2.Видимость = Ложь;
   ЭлементыФормы.Панель1.Страницы.Страница3.Видимость = Ложь;
   
   //Получаем схему из макета
   СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
   
   Для каждого ВложеннаяСхема Из КомпоновщикНастроек.Настройки.Структура Цикл
       
       Если ВложеннаяСхема.Использование Тогда
           
           Если ВложеннаяСхема.ИдентификаторОбъекта = "СводнаяВедомостьПоДенежнымСредствам" Тогда
               
               ЭлементыФормы.Панель1.Страницы.Страница1.Видимость = Истина;
               Результат = ЭлементыФормы.Результат;
               
               //Помещаем в переменную данные о расшифровке данных
               ДанныеРасшифровки1 = Новый ДанныеРасшифровкиКомпоновкиДанных;
               
               //Находим вложенную схему
               СхемаВложеннойСхемы = СхемаКомпоновкиДанных.ВложенныеСхемыКомпоновкиДанных.Найти(ВложеннаяСхема.ИдентификаторОбъекта).Схема;
               
               //Из схемы возьмем настройки
               Настройки = ВложеннаяСхема.Настройки;
               
               //Формируем макет, с помощью компоновщика макета
               КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
               
               //Передаем в макет компоновки схему, настройки и данные расшифровки
               МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаВложеннойСхемы, Настройки, ДанныеРасшифровки1);
               
               //Выполним компоновку с помощью процессора компоновки
               ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
               ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки1, Истина);                
               
           ИначеЕсли ВложеннаяСхема.ИдентификаторОбъекта = "ПеремещенияДенежныхСредств" Тогда
               
               ЭлементыФормы.Панель1.Страницы.Страница2.Видимость = Истина;
               Результат = ЭлементыФормы.Результат2;
               
               //Помещаем в переменную данные о расшифровке данных
               ДанныеРасшифровки2 = Новый ДанныеРасшифровкиКомпоновкиДанных;
               
               //Находим вложенную схему
               СхемаВложеннойСхемы = СхемаКомпоновкиДанных.ВложенныеСхемыКомпоновкиДанных.Найти(ВложеннаяСхема.ИдентификаторОбъекта).Схема;
               
               //Из схемы возьмем настройки
               Настройки = ВложеннаяСхема.Настройки;
               
               //Формируем макет, с помощью компоновщика макета
               КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
               
               //Передаем в макет компоновки схему, настройки и данные расшифровки
               МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаВложеннойСхемы, Настройки, ДанныеРасшифровки2);
               
               //Выполним компоновку с помощью процессора компоновки
               ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
               ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки2, Истина);                
               
           ИначеЕсли ВложеннаяСхема.ИдентификаторОбъекта = "ВыручкаОплатыЗатраты" Тогда
               
               ЭлементыФормы.Панель1.Страницы.Страница3.Видимость = Истина;
               Результат = ЭлементыФормы.Результат3;
               
               //Помещаем в переменную данные о расшифровке данных
               ДанныеРасшифровки3 = Новый ДанныеРасшифровкиКомпоновкиДанных;
               
               //Находим вложенную схему
               СхемаВложеннойСхемы = СхемаКомпоновкиДанных.ВложенныеСхемыКомпоновкиДанных.Найти(ВложеннаяСхема.ИдентификаторОбъекта).Схема;
               
               //Из схемы возьмем настройки
               Настройки = ВложеннаяСхема.Настройки;
               
               //Формируем макет, с помощью компоновщика макета
               КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
               
               //Передаем в макет компоновки схему, настройки и данные расшифровки
               МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаВложеннойСхемы, Настройки, ДанныеРасшифровки3);                
               
               //Выполним компоновку с помощью процессора компоновки
               ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
               ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки3, Истина);
               
           КонецЕсли;
   
           //Очищаем поле табличного документа
           Результат.Очистить();
           
           //Выводим результат в табличный документ
           ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
           ПроцессорВывода.УстановитьДокумент(Результат);
           
           ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
           
       КонецЕсли;
       
   КонецЦикла;

   ЭлементыФормы.Панель1.ТекущаяСтраница = ТекСтраница;
   
КонецПроцедуры

Все формируется, выводит, однако никак не могу разобраться с расшифровкой. Стандартная сразу же перестала работать. Поскольку свойство формы "ДанныеРасшифровки" содержит данные расшифровки последнего выполненного отчета, то я ввел 3 переменных для каждого отчета. Обработка расшифровки выглядит так:

Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
   
   Перем ВыполненноеДействие;
   
   СтандартнаяОбработка     = Ложь;
   ИсточникДоступныхНастроекКомпоновкиДанных = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных);
   ОбработкаРасшифровки     = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки1, ИсточникДоступныхНастроекКомпоновкиДанных);
   Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка,ВыполненноеДействие);
   Если Настройки <> Неопределено Тогда
       КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
       ЭлементыФормы.Результат.Очистить();
       СкомпоноватьРезультат(ЭлементыФормы.Результат, ДанныеРасшифровки1);
   КонецЕсли;
   
КонецПроцедуры

Аналогично для других таб. документов. Но в момент расшифровке по какому либо полю настройки вложенных схем слетают, и ни одного поля система не находит, соответственно ругается. Если перейти в настройки после этого, то там также отображается одна группировка по расшифровываемому полю, не принадлежащая вложенной схеме, вложенных схем вообще там нет, а все поля отмечены удаленными. Подскажите, как быть, где я что не так делаю?
1 SashaNox
 
25.12.12
02:37
Прием, народ, хэлп, тема еще актуальна!!!
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший