Имя: Пароль:
1C
1С v8
1С СКД расшифровка
0 qwasqu
 
10.08.15
15:29
Здравствуйте, подскажите пожалуйста, как реализовать расшифровку в расшифровке?
Т.е. я имею в виду, формируется отчет СКД, затем происходит своя расшифровка, выполняется новая СКД, я еще вывожу в табличный документ на новой форме и стандартные расшифровки нового отчета не работают, подскажите, как сформировать этот отчет, чтобы расшифровки работали? Спасибо.
1 qwasqu
 
10.08.15
16:36
Получается у меня формировать отчет в той же самой форме, расшифровка работает, но не правильно.
Единственное, при повторной расшифровке вылазит ошибка:

"Ошибка информации расшифровки: не найден элемент расшифровки"

Вот код:

Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    Перем ВыполненноеДействие;
    
    Если Не ЭтоРасшифровка Тогда
        СтандартнаяОбработка = Ложь;  

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

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

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

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

            Отчет = Новый (ТипЗнч(ОтчетОбъект));
            Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
            Отчет.ЭтоРасшифровка = Истина;
            Форма = Отчет.ПолучитьФорму(,,Новый УникальныйИдентификатор);
            Форма.ЭлементыФормы.Результат.Очистить();

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

            ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
            
            Форма.Открыть();
            
        КонецЕсли;
    КонецЕсли;    
КонецПроцедуры
2 qwasqu
 
10.08.15
16:37
Смысл в том, что расшифровка - это другая СКД.
3 KazSever
 
12.08.15
09:27
Такая же проблема была, решил схитрить. Попробуй не формировать сам отчет из первого, а просто передай в него параметры и открывай, а второй формируй при открытии.

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

    Форма.Открыть();
КонецПроцедуры

Вот код который я использовал во втором отчете

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

Получается во втором отчете сразу работает стандартная расшифровка, а там уже как сам хочешь так и действуй.

Может это и не правильно, но информации очень мало именно по этой теме, но все работает