Здравствуйте, выходит ошибка когда доходит до Нов.Записать(); помогите разобраться.
{Справочник.Номенклатура.Форма.ФормаВыбора.Форма(307)}: Ошибка при вызове метода контекста (СозданиеСпр)
СозданиеСпр(Нов, Внкод, Вннам, Внобз, Внедн, Группа);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Текст: ec86ebe3-0f1e-11e8-ba36-b870f4dcd721
вот код
{Справочник.Номенклатура.Форма.ФормаВыбора.Форма(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();
КонецПроцедуры
// Конец СтандартныеПодсистем
ПоказатьПо теме из базы знаний
- Часто встречающиеся ошибки 1С и общие способы их решения
- Выдержки из книги Чистый код
- Как читать чужой код? Часть 3. Разбор и доработка запросов
- Зачем и как читать чужой код? Какой результат ожидаем получить? Основные подходы
- Результаты ревью кода 1500+ решений каталога Инфостарт: наиболее частые ошибки разработчиков в коде
Найденные решения
Все логично - в параметр Нов процедуры присваивается объект. После завершения процедуры он возвращается на клиент, а передача объекта справочника с сервера на клиент не возможна.
Если значение Нов на клиенте не нужна, можно добавить Знач перед параметром Нов. В этом случае возврата объекта на клиент не будет.
Выглядеть это будет так:
Процедура СозданиеСпр(Знач Нов, Внкод, Вннам, Внобз, Внедн, Группа)
А ещё лучше переписать код так, что бы изменения значений параметров внутри процедуры не было.
Если значение Нов на клиенте не нужна, можно добавить Знач перед параметром Нов. В этом случае возврата объекта на клиент не будет.
Выглядеть это будет так:
Процедура СозданиеСпр(Знач Нов, Внкод, Вннам, Внобз, Внедн, Группа)
А ещё лучше переписать код так, что бы изменения значений параметров внутри процедуры не было.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Все логично - в параметр Нов процедуры присваивается объект. После завершения процедуры он возвращается на клиент, а передача объекта справочника с сервера на клиент не возможна.
Если значение Нов на клиенте не нужна, можно добавить Знач перед параметром Нов. В этом случае возврата объекта на клиент не будет.
Выглядеть это будет так:
Процедура СозданиеСпр(Знач Нов, Внкод, Вннам, Внобз, Внедн, Группа)
А ещё лучше переписать код так, что бы изменения значений параметров внутри процедуры не было.
Если значение Нов на клиенте не нужна, можно добавить Знач перед параметром Нов. В этом случае возврата объекта на клиент не будет.
Выглядеть это будет так:
Процедура СозданиеСпр(Знач Нов, Внкод, Вннам, Внобз, Внедн, Группа)
А ещё лучше переписать код так, что бы изменения значений параметров внутри процедуры не было.
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот