Ошибка в коде, помогите разобраться

1. alimuslim 3 11.02.18 15:12 Сейчас в теме
Здравствуйте, выходит ошибка когда доходит до Нов.Записать(); помогите разобраться.

{Справочник.Номенклатура.Форма.ФормаВыбора.Форма(307)}: Ошибка при вызове метода контекста (СозданиеСпр)
СозданиеСпр(Нов, Внкод, Вннам, Внобз, Внедн, Группа);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Текст: ec86ebe3-0f1e-11e8-ba36-b870f4dcd721

вот код
&НаСервере
Процедура СозданиеСпр(Нов, Внкод, Вннам, Внобз, Внедн, Группа)
    Справочник = Справочник1();	
	Если Нов = Справочник.ПустаяСсылка() Тогда
				Нов = Справочник.СоздатьЭлемент();
				//Нов.Код = Внкод;
		   		Нов.Артикул = Внкод;
				Нов.Наименование = Вннам;
		   		Нов.НаименованиеПолное = Вннам + "  " + Внобз;
		   		Нов.Родитель = Группа;
				ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Материалы");
				Нов.ВидНоменклатуры = ВидНоменклатуры;
				
				//Едхр=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("кг");
				
				СправочникЕдИзм = СправочникЕдИзм();
				Едхр=СправочникЕдИзм.НайтиПоНаименованию("кг");
		   		Если Найти(Внедн,"шт")>0 Тогда
					//Едхр=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
					Едхр=СправочникЕдИзм.НайтиПоНаименованию("шт");
				КонецЕсли;
				Если Внедн="м" Тогда
					//Едхр=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("м");
					Едхр=СправочникЕдИзм.НайтиПоНаименованию("м");
				КонецЕсли;
				Если Внедн="м2" Тогда
					//Едхр=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("м2");
					Едхр=СправочникЕдИзм.НайтиПоНаименованию("м2");
				КонецЕсли;
				Если Внедн="м3" Тогда
					//Едхр=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("м3");
					Едхр=СправочникЕдИзм.НайтиПоНаименованию("м3");
				КонецЕсли;
				Если Внедн="л" Тогда
					//Едхр=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("л");
					Едхр=СправочникЕдИзм.НайтиПоНаименованию("л");
				КонецЕсли;
		   		Нов.ЕдиницаИзмерения = Едхр;
				Нов.Записать();
		Иначе
		   		Сообщить("!!!!!!!       Код "+Внкод+" уже есть у "+Нов.Наименование);
		КонецЕсли;

КонецПроцедуры


&НаКлиенте
Процедура Команда1(Команда)
	//Команда1НаСервере();
	Группа = НайтиГруппу();
	//Если Группа = Справочник.ПустаяСсылка() Тогда
	//	Сообщить("Группы Классификатор еще нет!");
	//	Возврат;
	//КонецЕсли;
	
	
	ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДиалогВыбораФайла.Заголовок          = "Выбор файла-классификатора для загрузки";
	ДиалогВыбораФайла.МножественныйВыбор = Ложь;
	ДиалогВыбораФайла.Фильтр             = "Файл протокола(Классификатор.xls)|Классификатор.xls";
	
	Если ДиалогВыбораФайла.Выбрать() Тогда
		  Файл=ДиалогВыбораФайла.ПолноеИмяФайла;
	Иначе
		Возврат;
	КонецЕсли;
	
	Состояние("Выполняется загрузка...");	
	
	Попытка
		Екс= НОвый  COMОбъект("Excel.Application") ;
	Исключение
		Предупреждение("Неудалось создание Excel объекта.");
		Возврат;
	КонецПопытки;
	НашФайл = Екс.Workbooks.Open(Файл); //Открываем файл 
	
	стр = 2;
	Внкод = НашФайл.Sheets(1).Cells(стр,1).Value;
	Вннам = НашФайл.Sheets(1).Cells(стр,2).Value;
	Внобз = НашФайл.Sheets(1).Cells(стр,3).Value;
	Внедн = НашФайл.Sheets(1).Cells(стр,4).Value;
	
	Пока НЕ Пустаястрока(Внкод) Цикл
		
		Сообщить("Код " + Внкод + " " + Вннам);
	    Нов = Справочник(Внкод);
		
		СозданиеСпр(Нов, Внкод, Вннам, Внобз, Внедн, Группа);
		
		стр = стр + 1;
		
		Внкод = НашФайл.Sheets(1).Cells(стр,1).Value;
		Вннам = НашФайл.Sheets(1).Cells(стр,2).Value;
		Внобз = НашФайл.Sheets(1).Cells(стр,3).Value;
		Внедн = НашФайл.Sheets(1).Cells(стр,4).Value;

	КонецЦикла;
	НашФайл.Close();

КонецПроцедуры
// Конец СтандартныеПодсистем
Показать
+
По теме из базы знаний
Найденные решения
5. semyon 11.02.18 18:42 Сейчас в теме
Все логично - в параметр Нов процедуры присваивается объект. После завершения процедуры он возвращается на клиент, а передача объекта справочника с сервера на клиент не возможна.
Если значение Нов на клиенте не нужна, можно добавить Знач перед параметром Нов. В этом случае возврата объекта на клиент не будет.
Выглядеть это будет так:
Процедура СозданиеСпр(Знач Нов, Внкод, Вннам, Внобз, Внедн, Группа)
А ещё лучше переписать код так, что бы изменения значений параметров внутри процедуры не было.
alimuslim; +1
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. mkalimulin 1166 11.02.18 15:17 Сейчас в теме
Какой тип у переменной Нов?
+
3. a30v 11.02.18 15:28 Сейчас в теме
Приведите листинг функции Справочник(Внкод)
+
4. user621724_Dimav1979 403 11.02.18 17:38 Сейчас в теме
на клиенте нужно записывать
+
6. semyon 11.02.18 18:43 Сейчас в теме
(4) Стесняюсь спросить, что на клиенте записывать?
+
5. semyon 11.02.18 18:42 Сейчас в теме
Все логично - в параметр Нов процедуры присваивается объект. После завершения процедуры он возвращается на клиент, а передача объекта справочника с сервера на клиент не возможна.
Если значение Нов на клиенте не нужна, можно добавить Знач перед параметром Нов. В этом случае возврата объекта на клиент не будет.
Выглядеть это будет так:
Процедура СозданиеСпр(Знач Нов, Внкод, Вннам, Внобз, Внедн, Группа)
А ещё лучше переписать код так, что бы изменения значений параметров внутри процедуры не было.
alimuslim; +1
7. alimuslim 3 11.02.18 19:36 Сейчас в теме
(5) Спасибо, получилось
+
Внимание! Тема сдана в архив

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