СКД: Ошибка при вызове метода контекста (Инициализировать) Несоответствие типов (параметр номер '3')

1. IvanAlekseev 77 29.03.14 22:59 Сейчас в теме
Платформа 8.3.4.437

В серверной процедуре написал код:
&НаСервере
Процедура СформироватьВМодулеНаСервере()

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


получаю ошибку:
{Форма.ФормаОтчета.Форма(309)}: Ошибка при вызове метода контекста (Инициализировать)
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
по причине:
Несоответствие типов (параметр номер '3')
Несоответствие типов (параметр номер '3')


Как с этим бороться? Интернет молчит (есть темы, но там нет решения).
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. IvanAlekseev 77 04.04.14 23:20 Сейчас в теме
Добавляю бакс вознаграждения :)
3. seermak 665 05.04.14 05:29 Сейчас в теме
убери ДанныеРасшифровки и попробуй (вернее всего поле ДанныРасшифровки используются в объекте отчета - смотри конфигуратор) или обзови ДнныеРасшифровки1
JohnConnor; +1 Ответить
4. IvanAlekseev 77 05.04.14 19:53 Сейчас в теме
(3) seermak, заработало! Балин, не могу бакс запульнуть...
5. IvanAlekseev 77 05.04.14 20:54 Сейчас в теме
Теперь не показывает саму расшифровку (флаг "Только просмотр" стоит), вместо этого показывает число (например, 13). Если добавить обработку расшифровки:

&НаСервере
Процедура РезультатОбработкаРасшифровкиНаСервере(Расшифровка, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
	
	ДанныеРасшифровки1 = Новый ДанныеРасшифровкиКомпоновкиДанных;
	ОбработкаРасшифорки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки1, Новый ИсточникДоступныхНастроекКомпоновкиДанных(ОтчетОбъект.СхемаКомпоновкиДанных));
	ЭлементРасшифровкиДанных = ДанныеРасшифровки1.Элементы[Расшифровка]; //ТУТ ОШИБКА!!!!
	ЭлементРасшифровкиДанныхПоля = ЭлементРасшифровкиДанных.ПолучитьПоля()[0];
		
	ОбработкаРасшифорки.ОткрытьЗначение(ЭлементРасшифровкиДанных.Идентификатор, новый ПолеКомпоновкиДанных(ЭлементРасшифровкиДанныхПоля.Поле));
	
КонецПроцедуры


&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
	РезультатОбработкаРасшифровкиНаСервере(Расшифровка, СтандартнаяОбработка);
КонецПроцедуры
Показать


, то возникает ошибка, так как коллекция "ДанныеРасшифровки1" не имеет ни одного элемента (а обращение идет к 13-ому элементу).

Как наконец-то показать значение расшифровки юзеру?
6. seermak 665 05.04.14 21:05 Сейчас в теме
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; - вот с этой строчкой экспериментируй попробуй ее заремить или при рамшифровке указывай ту переменнную куда слил расшифровку
вот пример
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Если Параметры.Свойство("ПериодПросмотра") Тогда
	СКД = Отчеты.ДетальныйПоУслугам.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	Настройки = СКД.НастройкиПоУмолчанию;
	УстановитьНастройки(Настройки,Параметры.ПериодПросмотра);
	СформироватьОтчет(СКД, Настройки); 
   КонецЕсли;
Параметры.ЗакрыватьПриЗакрытииВладельца = Истина;
КонецПроцедуры
&НаСервере
Процедура УстановитьНастройки(Настройки,ПериодОтбора)
ПараметрСКД = Настройки.ПараметрыДанных.Элементы.Найти("Период");
	Если ПараметрСКД <> Неопределено Тогда
		Попытка
		ПараметрСКД.Значение = ПериодОтбора.Период;			
      ПараметрСКД.Использование = Истина;                               
		Исключение
		ПараметрСКД.Использование = Ложь;
      КонецПопытки;
	КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СформироватьОтчет(СКД, Настройки)
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
Результат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
АдресРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровки, ЭтаФорма.УникальныйИдентификатор);
КонецПроцедуры

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

на картинке настройки
пример рабочий разбирайся
Прикрепленные файлы:
Kennik; SmArtist; +2 Ответить
7. IvanAlekseev 77 05.04.14 21:47 Сейчас в теме
Спасибо! Заработало!

Я пробовал сохранить ДанныеРасшифровки в реквизит формы методом "ЗначениеВРеквизитФормы", но он постоянно ругался на параметр 2 (наверное не все этот метод умеет сохранять). А во временное хранилище все залезло без проблем :)
8. natarezn 13.11.14 11:29 Сейчас в теме
У меня 11.1.2.15 платформа 8.3 УТ и тоже несоответствие типов! ни один отчет с предыдущей 8.2 не работает . что не так ?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот