Имя: Пароль:
1C
 
Ошибка преобразования данных XDTO
0 Nesh
 
11.08.10
16:40
Ошибка при вызове метода контекста (ПрочитатьXML): Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.1/data/enterprise/current-config}CatalogObject.Контрагенты    Форма: Элемент    Тип: {http://v8.1c.ru/8.1/data/enterprise/current-config}CatalogObject.Контрагенты
           Объект = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
в чем может быть проблема.
1 Nesh
 
11.08.10
16:41
код выгрузки
ЗаписьXML = Новый ЗаписьXML;
   
   //ЗаписьXML.УстановитьСтроку();
   ЗаписьXML.ОткрытьФайл(ИмяФайла);
       
   ЗаписьXML.ЗаписатьОбъявлениеXML();

   Пути = Новый Массив();
   Пути.Добавить(ИмяСхемы);
   Фабрика = СоздатьФабрикуXDTO(Пути);
   ТипКонтрагент = Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.Контрагенты");
   
   
//    ТипДоговор    = Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.ДоговорыКонтрагентов");
   
//    ДоговорОбъект = Фабрика.Создать(ТипДоговор);
   КонтрагентОбъект = Фабрика.Создать(ТипКонтрагент);
   ЗаписьXML.ЗаписатьНачалоЭлемента("data");
   ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.1/data/enterprise/current-config");
   ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema");
   Контрагенты = Справочники.Контрагенты.Выбрать(Группа);
   Пока Контрагенты.Следующий() Цикл
       КонтрагентОбъект.Ref         = Контрагенты.Ссылка.УникальныйИдентификатор();
       КонтрагентОбъект.IsFolder    = Контрагенты.ЭтоГруппа;
       КонтрагентОбъект.ИНН         = Контрагенты.ИНН;
       КонтрагентОбъект.КодПоЕДРПОУ = Контрагенты.КодПоЕДРПОУ;
       Фабрика.ЗаписатьXML(ЗаписьXML, КонтрагентОбъект);
   КонецЦикла;
   ЗаписьXML.ЗаписатьКонецЭлемента();
   Текст = ЗаписьXML.Закрыть();
2 Nesh
 
11.08.10
16:42
код загрузки        
   ЧтениеXML = Новый ЧтениеXML;
   //прочитаем начало корневого элемента
   ЧтениеXML.ОткрытьФайл(ИмяФайла);
   ЧтениеXML.Прочитать();
   
   //читаем содержимое пока текущим не станет конец корневого элемента, т.к. мы писали туда только целые элементы справочника,
   //а сериализатор читает каждый из их полностью, то мы упремся именно в конец корневого
   Пока ЧтениеXML.Прочитать()Цикл
       Если ЧтениеXML.ТипУзла=ТипУзлаXML.НачалоЭлемента Тогда
           Если ЧтениеXML.Имя = "data" Тогда
               Продолжить;
           КонецЕсли;
           
           Объект = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
           
           //покажем что прочитали, осталось только записать объект
           Сообщить(""+ТипЗнч(Объект)+" - "+Объект);
       КонецЕсли;
   КонецЦикла;
   
   ЧтениеXML.Закрыть();
3 selenat
 
11.08.10
16:45
А зачем XDTO? Я конечно каюсь, что не разобрался в свое время что это  за зверь и зачем он нужен, но мне лично без него проще...
4 Nesh
 
11.08.10
16:47
ну такая задача стоит.через XDTO
5 selenat
 
11.08.10
16:49
(4) ну раз задача стоит так, пробивайся. А тут было подумал выложить простой код без XDTO...
6 Sonny
 
11.08.10
16:52
Все реквизиты справочника контрагентов попробуй записать. Абсолютно все без исключения.
7 DmitrO
 
11.08.10
17:01
(0)(6) вот какраз, чаще всего, суть ошибки в этом и есть, тока наоборот:
В XML элементе представляющем экземпляр группы контрагентов должны быть только реквизиты которые определены для группы, и в xml элементе представляющем элемент справочника должны быть только реквизиты определенные для элемента.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn