|
"Избитый" вопрос о программной расшифровке в СКД | ☑ | ||
---|---|---|---|---|
0
Uchenica74
07.05.14
✎
08:12
|
Доброе утро! Помогите пожалуйста найти ошибку при выводе расшифровки программно. 1,5 дня потратила, не могу найти, что только не пробовала.
Тем по этому вопросу очень много, я никак не могу собрать в одно! Вывожу в таб поле таблицу средствами СКД: ВнешнийНаборДанных = Новый Структура; ВнешнийНаборДанных.Вставить("ТаблицаРезультата", ТаблицаРезультата); ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; ДокументРезультат = ЭлементыФормы.ДокументРезультат; ДокументРезультат.Очистить(); СхемаКомпоновкиДанных = ПолучитьМакет("СхемаКомпоновкиДанных"); Настройки=СхемаКомпоновкиДанных.НастройкиПоУмолчанию; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки,ДанныеРасшифровки); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,ВнешнийНаборДанных,ДанныеРасшифровки,Истина); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); //ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); ДокументРезультат.ТолькоПросмотр = Истина; ДокументРезультат.ОтображатьСетку = Ложь; ПроцессорВывода.НачатьВывод(); Пока Истина Цикл ЭлементРезультата = ПроцессорКомпоновкиДанных.Следующий(); Если ЭлементРезультата = Неопределено Тогда Прервать; Иначе ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); КонецЕсли; КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); ДокументРезультат.Показать(); У таб поля использую метод ОбработкаРасшифровки: Процедура ДокументРезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) Перем ВыполненноеДействие; ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; СхемаКомпоновкиДанных = ПолучитьМакет("СхемаКомпоновкиДанных"); СтандартнаяОбработка=Ложь; ОбработкаРасшифровки=Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); ДоступныеДействия=Новый Массив; ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение); Настройки=ОбработкаРасшифровки.Выполнить(Расшифровка,ВыполненноеДействие,ДоступныеДействия); ЕонецПроцедуры и здесь налетаю на ошибку "не найден элемент расшифровки Настройки=ОбработкаРасшифровки.Выполнить(Расшифровка,ВыполненноеДействие,ДоступныеДействия);" Меняю "Расшифровка" на "ДанныеРасшифровки.Элементы" и тут ошибка "Несоответствие типов (параметр номер '1') Настройки=ОбработкаРасшифровки.Выполнить(ДанныеРасшифровки.Элементы,ВыполненноеДействие,ДоступныеДействия)". Чего хочет не пойму. Пробовала конструкцию: ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; ТекДанные = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля().Значение; Как только ее не крутила, не работает. Заглянула в ДанныеРасшифровки.Элементы - там пусто. Должно быть так или нет? Помогите пожалуйста. |
|||
1
goleaff2006
07.05.14
✎
08:25
|
СтандартнаяОбработка = Ложь;
ДополнительныеДействия = новый СписокЗначений; ДополнительныеДействия = ФормаВЛаделец.Отчет.СЗначОтчетыДляРасшифровки.скопировать(); ДополнительныеДействия.Добавить("Расшифровка по заказу"); ДополнительныеДействия.Добавить("Расшифровка по поступлению"); ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ФормаВЛаделец.Отчет.ДанныеРасшифровки,Новый ИсточникДоступныхНастроекКомпоновкиДанных(ФормаВЛаделец.Отчет.СхемаКомпоновкиДанных)); РезультатВыполненияРасшифровки = ОбработкаРасшифровки.Выполнить(Расшифровка,ВыполненноеДействие,Неопределено,ДополнительныеДействия); РезультатВыполненияРасшифровки = ОбработкаРасшифровки.Расшифровать(Расшифровка,Новый ПолеКомпоновкиДанных("Номенклатура")); Если ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать или ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Оформить Или ВыполненноеДействие=ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать ИЛи ВыполненноеДействие=ДействиеОбработкиРасшифровкиКомпоновкиДанных.Сгруппировать ИЛи ВыполненноеДействие=ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить тогда Если ТипЗНч(РезультатВыполненияРасшифровки) = Тип("НастройкиКомпоновкиДанных") тогда ФормаВЛаделец.Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(РезультатВыполненияРасшифровки); ФормаВЛаделец.Отчет.КомпоновщикНастроек.Восстановить(); ФормаВладелец.СформироватьОтчет(); // ФормаВладелец.ЗаписатьЭлементИстории(); Конецесли; ИначеЕсли ВыполненноеДействие="Расшифровка по заказу" тогда //идет вызов другого отчета Если РезультатВыполненияРасшифровки<>Неопределено тогда КНастроек = новый КомпоновщикНастроеккомпоновкиДанных; СКД = ПолучитьМакет("РасшифровкаПоЗаказу"); КНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД)); КНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию); КНастроек.Восстановить(); // КНастроек.Настройки.Выбор.Элементы.Очистить(); //для каждого поле из РезультатВыполненияРасшифровки.Выбор.Элементы цикл // НовоеПОле = КНастроек.Настройки.Выбор.Элементы.Добавить(Тип(Поле)); // НовоеПОле.Использование=Истина; // НовоеПОле.Поле = Поле.Поле; // если ТипЗнч(Поле) = Тип("ГруппаВыбранныхПолейКОмпоновкиДанных") тогда // для каждого ПолеПоле из поле.Элементы цикл // НовоеПОлеПоле = НовоеПоле.Элементы.Добавить(Тип(ПолеПоле)); // НовоеПОлеПоле.Использование=Истина; // НовоеПОлеПоле.Поле = ПолеПоле.Поле; // // конеццикла; // конецесли; //конеццикла; для каждого ЭлементОтбора из РезультатВыполненияРасшифровки.Отбор.Элементы цикл Если ЭлементОтбора.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("Период") Тогда ПериодНеделя=ЭлементОтбора.ПравоеЗначение; продолжить; КонецЕсли; НовыйОтбор = Кнастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКОмпоновкиДанных")); НовыйОтбор.ВидСравнения = ЭлементОтбора.ВидСравнения; НовыйОтбор.ЛевоеЗначение = ЭлементОтбора.ЛевоеЗначение; НовыйОтбор.ПравоеЗначение = ЭлементОтбора.ПравоеЗначение; НовыйОтбор.Представление = ЭлементОтбора.Представление; НовыйОтбор.Использование = ЭлементОтбора.Использование; конеццикла; НачПериода = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода")); Если НачПериода<>Неопределено тогда НачалоПериода = КНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода")); Если НачалоПериода<>Неопределено тогда НачалоПериода.Использование = Истина; если ПериодНеделя<НачПериода.Значение тогда НачалоПериода.Значение = НачПериода.Значение; иначе НачалоПериода.Значение = ПериодНеделя; конецесли; конецесли; конецесли; КонПериода = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода")); Если КонПериода<>Неопределено тогда КонецПериода = Кнастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода")); Если КонецПериода<>Неопределено тогда КонецПериода.Использование=Истина; Если ПериодНеделя > КонПериода.Значение Тогда возврат; КонецЕсли; если КонецНедели(ПериодНеделя)>КонПериода.Значение тогда КонецПериода.Значение= КонПериода.Значение; иначе КонецПериода.Значение= КонецНедели(ПериодНеделя); конецесли; конецесли; конецесли; формаОтч=ПолучитьФорму("ФормаОтчет",ФормаВладелец,Новый УникальныйИдентификатор() ); ТабДок = формаОтч.ЭлементыФормы.ПолеТабличногоДокумента1; ТабДок.очистить(); // ТабДок =новый ТабличныйДокумент; Заг = омПроцедурыДляОтчетовСКД.СформироватьЗаголовокОтчета(ФормаВладелец.Отчет,НЕопределено,СКД,КНастроек.Настройки,Неопределено,неопределено); для НомерСТроки = 1 по Заг.ВысотаТаблицы цикл Для НомерКолонки = 1 по Заг.ШиринаТаблицы цикл Область = Заг.Область(НомерСтроки,номерКолонки,НомерСтроки,НомерКолонки); Область.Защита = Истина; конеццикла; конеццикла; ТабДок.Вывести(Заг); РасшифровкаДокумента= Новый ДанныеРасшифровкиКомпоновкиДанных; омПроцедурыДляОтчетовСКД.ВывестиОтчетВТабличныйДокумент(СКД,КНастроек.Настройки,Неопределено,ТабДок,Ложь,РасшифровкаДокумента,неопределено,неопределено,неопределено) ; формаОтч.РасшифровкаДокумента=РасшифровкаДокумента; формаОтч.СКД = СКД; формаОтч.Открыть(); ТабДок.ТолькоПросмотр = Истина; ТабДок.ОтображатьГруппировки = Истина; ТабДок.ОтображатьЗаголовки= Истина; ТабДок.ОтображатьСетку = Ложь; ТабДок.Показать("Расшифровка Документ - регистратор"); |
|||
2
goleaff2006
07.05.14
✎
08:26
|
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; это лишнее
|
|||
3
Hans
07.05.14
✎
08:26
|
Я недавно делал такую херь, насколько помню у меня дынне расшифровки была глобальной переменной модуля.
|
|||
4
Uchenica74
07.05.14
✎
08:32
|
Ладно, значит мучиться мне дальше с этим((( попробую сделать ка как (1) и (3)
|
|||
5
jsmith82
07.05.14
✎
08:32
|
&НаСервере
Процедура НарисоватьОтчет(ИмяКоманды) Макет = Отчеты.Отчет1.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Настройки = Макет.НастройкиПоУмолчанию; // косвенная рутина по настройке компоновщика (отборы, параметры) МакетКомпоновки = КомпоновщикМакета.Выполнить(Макет, Настройки, ДанныеРасшифровки); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки); ЭтаФорма.ДокументРезультат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ЭтаФорма.ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); Адрес = ПоместитьВоВременноеХранилище(ДанныеРасшифровки, УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ДокументРезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОткрытьЗначение(ПолучитьЗначение(Расшифровка)); КонецПроцедуры Функция ПолучитьЗначение(Расшифровка) ДанныеРасшифровки = ПолучитьИзВременногоХранилища(Адрес); Возврат ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Значение; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |