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