Имя: Пароль:
1C
1С v8
Правильно ли так выгружать при помощи XDTO
,
0 Alex_MA
 
12.08.11
10:11
Всем доброго дня коллеги!

Есть пакет XDTO.
Выгружаю только номенклатуру.

http://imagepost.ru/images/c/rd/crdymwiwtoajyjliwjnkltxiyaziji.png

Свойства номенклатуры:
http://gyazo.com/6464e7738b50570dc9e58fe087a8d283.png

Список номенклатуры:
http://gyazo.com/419c180930792146ae5f770e2015c09c.png

Номенклатура:
http://gyazo.com/41fca01d03849e9390bdcabcd71590cc.png

Код выгрузки следующий:

Процедура ВыполнитьВыгрузкуОбъектаКонфигурацииНажатие(Элемент)
   
   //Создать сериализатор XDTO для глобальной фабрики
   ТекСериализаторXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
   
   //Создать объект записи XML и открыть файл
   ЗаписьXML = Новый ЗаписьXML();
   
   ЗаписьXML.ОткрытьФайл("D:\RequestDocXDTO.xml");
   
   //Создаем объект XDTO ЗаявкаНаРасходованиеСредств
   Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Номенклатура");
   Выборка = Запрос.Выполнить().Выбрать();
   
   НоменклатураТип    = ФабрикаXDTO.Тип("http://localhost/xdto/request/", "Номенклатура");
   СписокНоменклатуры = ФабрикаXDTO.Тип("http://localhost/xdto/request/", "СписокНоменклатуры");
   
   СписокНоменклатурыXDTO = ФабрикаXDTO.Создать(СписокНоменклатуры);
   
   Пока Выборка.Следующий() Цикл
       
       Если Выборка.Ссылка.ЭтоГруппа Тогда
           Продолжить;
       КонецЕсли;
       
       НоменклатураXDTO = ФабрикаXDTO.Создать(НоменклатураТип);
       ЗаполнитьЗначенияСвойств(НоменклатураXDTO, Выборка);
       СписокНоменклатурыXDTO.Номенклатура.Добавить(НоменклатураXDTO);
       
   КонецЦикла;    
   
   ТекСериализаторXDTO.Фабрика.ЗаписатьXML(ЗаписьXML, СписокНоменклатурыXDTO);
   ЗаписьXML.Закрыть();
   
КонецПроцедуры


В результате получился файл данных:
http://gyazo.com/38981ceee318756154b205900fc14352.png

Правильно ли сделана выгрузка данных ?
1 Alex_MA
 
12.08.11
10:16
(0) + Правильно ли выгружать объекты в свойство, у которого фасеты заданы как "Минимальное количество" = 0, "Максимальное количество" = -1. Или есть еще варианты, если есть то какие ?
2 Alex_MA
 
12.08.11
11:00
апну
3 Alex_MA
 
12.08.11
11:57
подъем
4 Alex_MA
 
12.08.11
12:07
почему ошибка возникает при загрузке ?

D:\ShemaPoluch.xsd - xdto схема получателя

Процедура ВыгрузкаНажатие(Элемент)
   
   ЗаписьXML = Новый ЗаписьXML;
   ЗаписьXML.ОткрытьФайл("D:\RequestDocXDTO.xml");
   
   Пути = Новый Массив();
   Пути.Добавить("D:\ShemaPoluch.xsd");
   
   Фабрика = СоздатьФабрикуXDTO(Пути);

   ТипНоменклатура = Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.Номенклатура");
   
   ОбъектНоменклатура     = Фабрика.Создать(ТипНоменклатура);
   НоменклатураОбъект     = Номенклатура.ПолучитьОбъект();
   
   ОбъектНоменклатура.НаименованиеПолное = НоменклатураОбъект.Наименование;
   
   Фабрика.ЗаписатьXML(ЗаписьXML, ОбъектНоменклатура);
   ЗаписьXML.Закрыть();

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

Процедура ЗагрузкаНажатие(Элемент)
   
   ЧтениеXML = Новый ЧтениеXML;
   
   ЧтениеXML.ОткрытьФайл("D:\RequestDocXDTO.xml");
   
   НоменклатураОбъект = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
   НоменклатураОбъект.ОбменДанными.Загрузка = Истина;
   НоменклатураОбъект.Записать(РежимЗаписиДокумента.Запись);
   ЧтениеXML.Закрыть();
   
КонецПроцедуры

При загрузке ошибка:

{Форма.Форма.Форма(181)}: Ошибка при вызове метода контекста (ПрочитатьXML)
   НоменклатураОбъект = СериализаторXDTO.Прочитать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.Номенклатура
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ПолноеНаименование    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}string

В чем проблема ?
5 Alex_MA
 
12.08.11
14:21
апну
6 DmitrO
 
12.08.11
14:33
(4)посмотри в выходной файл, станет понятнее
7 Vetal_978
 
12.08.11
14:33
Ну видимо в XML'e в свойстве ПолноеНаименование не то, что XDTO ожидает увидеть. Проверьте что в XML.
8 Alex_MA
 
12.08.11
14:37
(6)тут вроде все Ок

<CatalogObject.Номенклатура xmlns="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <ПолноеНаименование>Автомобиль Chevrolet Niva 212300</ПолноеНаименование>
</CatalogObject.Номенклатура>
9 DmitrO
 
12.08.11
14:41
(8) это не ок! это полная туфта так-то, по причине того что нет остальных элементов.
И еще более удивительно, что при выгрузке устанавливался элемент "НаименованиеПолное", а в файле вдруг получился "ПолноеНаименование", по-моему кто-то нас обмануть пытается. :)
10 Alex_MA
 
12.08.11
14:41
11 Alex_MA
 
12.08.11
14:45
(9)перечень свойств должен быть полный ???

вот тогда сделал такой файл xml:

<CatalogObject.Номенклатура xmlns="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <IsFolder>false</IsFolder>
   <Ref>05fe3fd4-60fa-11e0-9ab1-002264a3800e</Ref>
   <DeletionMark>false</DeletionMark>
   <Parent>00000000-0000-0000-0000-000000000000</Parent>
   <Code>ГER0000000409</Code>
   <Description>Авт.выкл. ВА 47-29 50А</Description>
</CatalogObject.Номенклатура>
12 Alex_MA
 
12.08.11
14:45
(11)все равно ошибка получилась
13 Alex_MA
 
12.08.11
14:47
Нужно еще файл в (11) дописывать остальные реквизиты
http://gyazo.com/e775a01a4efd4c2ae3d3a73749c9c45f.png
14 DmitrO
 
12.08.11
14:48
(12) ну разумеется, где в файле остальные элементы соответствующие реквизитам?
15 DmitrO
 
12.08.11
14:52
Там все строго. С учетом принадлежности реквизитов к группе/элементу справочника.
16 Alex_MA
 
12.08.11
14:54
(15)а, вот как
17 Alex_MA
 
12.08.11
14:58
странно, при записи XML состав объета XDTO:
http://gyazo.com/b3ea067e622570ab874fe1387476944d

а в выходном файле структура как в (11), куда делись остальные элементы ?
18 DmitrO
 
12.08.11
15:00
Те которые не устанавливались (Неопределено) не записываются в файл.
19 Alex_MA
 
12.08.11
15:00
странно, почему бы и не создать объект, если не все реквизиты у него заполнены, сделала бы программа сопоставления по тем полям которые можно сопоставить
20 Alex_MA
 
12.08.11
15:01
(18)т.е. тут надо принудительно что то писать, так ? или можно как то записать пустые ? Вроде есть свойство какое то (фасет), вроде "Возможно пустое"
21 DmitrO
 
12.08.11
15:02
Например, когда будешь передавать группу справочника, набор свойств у объекта XDTO будет такой же как и у элемента, но в файле должны оказаться только те элементы реквизитов, которые допустимы для группы.
22 DmitrO
 
12.08.11
15:03
(21)+ иначе сериализатор не загрузит группу справочника.
23 Alex_MA
 
12.08.11
15:05
как при записи в файл или заполнении для выгрузки указать, что данный элемент может быть пустым ?
Если пакет XDTO присутствует в конфигурации, то понятно, за это отвечает свойство "Возможно пустое", а если пакет XDTO создается на так:

Пути = Новый Массив();
Пути.Добавить("D:\ShemaPol.xsd");
   
Фабрика = СоздатьФабрикуXDTO(Пути);
24 DmitrO
 
12.08.11
15:18
ЗакупочнаяЦена. Тип у него наверняка Число. Что значит пустым? 0 - это тоже значение. Оно должно быть указано в файле.
25 DmitrO
 
12.08.11
15:23
Схема не полностью определяет логику сериализации/десериализации в XDTO. Она определяет только на столько, на сколько может это сделать.