СКД: Ошибка при вызове метода контекста (Инициализировать) Несоответствие типов (параметр номер '3')
Платформа 8.3.4.437
В серверной процедуре написал код:
получаю ошибку:
Как с этим бороться? Интернет молчит (есть темы, но там нет решения).
В серверной процедуре написал код:
&НаСервере
Процедура СформироватьВМодулеНаСервере()
//внешние наборы данных
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ТзОтчета", ДанныеФормыВЗначение(ТзОтчета, Тип("ТаблицаЗначений")));
ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
Настройки = ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки();
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = Компоновщик.Выполнить(ОтчетОбъект.СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки); //ТУТ ОШИБКА!!!
Результат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Показатьполучаю ошибку:
{Форма.ФормаОтчета.Форма(309)}: Ошибка при вызове метода контекста (Инициализировать)
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
по причине:
Несоответствие типов (параметр номер '3')
Несоответствие типов (параметр номер '3')
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
по причине:
Несоответствие типов (параметр номер '3')
Несоответствие типов (параметр номер '3')
Как с этим бороться? Интернет молчит (есть темы, но там нет решения).
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Теперь не показывает саму расшифровку (флаг "Только просмотр" стоит), вместо этого показывает число (например, 13). Если добавить обработку расшифровки:
, то возникает ошибка, так как коллекция "ДанныеРасшифровки1" не имеет ни одного элемента (а обращение идет к 13-ому элементу).
Как наконец-то показать значение расшифровки юзеру?
&НаСервере
Процедура РезультатОбработкаРасшифровкиНаСервере(Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
ДанныеРасшифровки1 = Новый ДанныеРасшифровкиКомпоновкиДанных;
ОбработкаРасшифорки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки1, Новый ИсточникДоступныхНастроекКомпоновкиДанных(ОтчетОбъект.СхемаКомпоновкиДанных));
ЭлементРасшифровкиДанных = ДанныеРасшифровки1.Элементы[Расшифровка]; //ТУТ ОШИБКА!!!!
ЭлементРасшифровкиДанныхПоля = ЭлементРасшифровкиДанных.ПолучитьПоля()[0];
ОбработкаРасшифорки.ОткрытьЗначение(ЭлементРасшифровкиДанных.Идентификатор, новый ПолеКомпоновкиДанных(ЭлементРасшифровкиДанныхПоля.Поле));
КонецПроцедуры
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
РезультатОбработкаРасшифровкиНаСервере(Расшифровка, СтандартнаяОбработка);
КонецПроцедуры
Показать, то возникает ошибка, так как коллекция "ДанныеРасшифровки1" не имеет ни одного элемента (а обращение идет к 13-ому элементу).
Как наконец-то показать значение расшифровки юзеру?
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; - вот с этой строчкой экспериментируй попробуй ее заремить или при рамшифровке указывай ту переменнную куда слил расшифровку
вот пример
на картинке настройки
пример рабочий разбирайся
вот пример
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("ПериодПросмотра") Тогда
СКД = Отчеты.ДетальныйПоУслугам.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = СКД.НастройкиПоУмолчанию;
УстановитьНастройки(Настройки,Параметры.ПериодПросмотра);
СформироватьОтчет(СКД, Настройки);
КонецЕсли;
Параметры.ЗакрыватьПриЗакрытииВладельца = Истина;
КонецПроцедуры
&НаСервере
Процедура УстановитьНастройки(Настройки,ПериодОтбора)
ПараметрСКД = Настройки.ПараметрыДанных.Элементы.Найти("Период");
Если ПараметрСКД <> Неопределено Тогда
Попытка
ПараметрСКД.Значение = ПериодОтбора.Период;
ПараметрСКД.Использование = Истина;
Исключение
ПараметрСКД.Использование = Ложь;
КонецПопытки;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СформироватьОтчет(СКД, Настройки)
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
Результат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
АдресРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровки, ЭтаФорма.УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Попытка
ЗначениеРасшифровки = ПолучитьЗначениеРасшифровки(Расшифровка);
Если ЗначениеРасшифровки <> Неопределено Тогда
ОткрытьЗначение(ЗначениеРасшифровки);
КонецЕсли;
Исключение
СтандартнаяОбработка = Истина;
КонецПопытки;
КонецПроцедуры
&НаСервере
Функция ПолучитьЗначениеРасшифровки(Расшифровка)
КоллекцияРасшифровок = ПолучитьИзВременногоХранилища(АдресРасшифровки);
Попытка
КоллекцияПолей = КоллекцияРасшифровок.Элементы[Расшифровка].ПолучитьПоля();
Действие = КоллекцияРасшифровок.Элементы[Расшифровка].ОсновноеДействие;
Исключение
Возврат Неопределено;
КонецПопытки;
Если Действие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда
Если КоллекцияПолей.Количество() = 2 Тогда
ЗначениеРасшифровки = ?(ПустаяСтрока(КоллекцияПолей[0].Значение),КоллекцияПолей[1].Значение,КоллекцияПолей[0].Значение);
Возврат ЗначениеРасшифровки;
Иначе
ЗначениеРасшифровки = КоллекцияПолей[0].Значение;
Если ТипЗнч(ЗначениеРасшифровки) <> Тип("Дата")
ИЛИ ТипЗнч(ЗначениеРасшифровки) <> Тип("Число")
ИЛИ ТипЗнч(ЗначениеРасшифровки) <> Тип("Null")Тогда
Возврат ЗначениеРасшифровки;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецЕсли;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
X
Показатьна картинке настройки
пример рабочий разбирайся
Прикрепленные файлы:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот