Имя: Пароль:
1C
 
Выгрузка документа посредством XDTO
0 leo_d
 
03.09.08
18:39
Здравствуйте. Подскажите пож. как выгрузить табл. часть документа посредством XDTO объекта.
вот кусок обработки:

   ЗаписьXML = Новый ЗаписьXML;
   ИмяФайла ="D:\XML_выгрузка.xml";
   ЗаписьXML.ОткрытьФайл(ИмяФайла);
   Пути = Новый Массив();
   Пути.Добавить("D:\v8_schem.xsd");
   
   Фабрика = СоздатьФабрикуXDTO(Пути);
   URI = "http://v8.1c.ru/8.1/data/enterprise/current-config";
   ТипЗаказ = Фабрика.Тип(URI, "DocumentObject.ЗаказПокупателя");
   ТипТабЧасть = ФабрикаXDTO.Тип(URI, "DocumentTabularSectionRow.ЗаказПокупателя.Товары");
   ЗаписьXML.ЗаписатьНачалоЭлемента("Заказ");
   ОбъектДокумент = Фабрика.Создать(ТипЗаказ);
   
   Выборка = Документы.ЗаказПокупателя.Выбрать(НачДата, КонДата);
   Пока Выборка.Следующий() Цикл
       Если Выборка.Проведен Тогда
           
           ТекДок = Выборка.ПолучитьОбъект();
           
           ОбъектДокумент.Ref                         = Строка(ТекДок.ВидОперации);
           ОбъектДокумент.АдресДоставки             = ТекДок.АдресДоставки;
           ОбъектДокумент.ВидОперации                 = Строка(ТекДок.ВидОперации);
           ОбъектДокумент.Контрагент                 = ТекДок.Контрагент.Код;
           ОбъектДокумент.Товары                     = ТекДок.Товары;
           Для Каждого Элемент из ТекДок.Товары Цикл
               
               ОбъектТабЧасть = Фабрика.Создать(ТипТабЧасть);

               //.....................
               
           КонецЦикла;
           
           Фабрика.ЗаписатьXML(ЗаписьXML, ОбъектДокумент);
           
       КонецЕсли;
       
   КонецЦикла;
   ЗаписьXML.ЗаписатьКонецЭлемента();
   ЗаписьXML.Закрыть();


в строке "ОбъектТабЧасть = Фабрика.Создать(ТипТабЧасть);" - выдает
Несоответствие типов XDTO:
Тип '{http://v8.1c.ru/8.1/data/enterprise/current-config}DocumentTabularSectionRow.ЗаказПокупателя.Товары' не найден
Тип принадлежит пакету, отсутствующему в фабрике типов XDTO

в схеме "D:\v8_schem.xsd" описано:
...
<xsd:complexType name="DocumentTabularSectionRow.ЗаказПокупателя.Товары">
       <xsd:sequence>
           <xsd:element name="Количество" type="xsd:decimal"/>
           <xsd:element name="Номенклатура" type="tns:CatalogRef.Номенклатура"/>
       </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="DocumentTabularSectionRow.ЗаказПокупателя.Услуги">
       <xsd:sequence>
           <xsd:element name="Количество" type="xsd:decimal"/>
           <xsd:element name="Номенклатура" type="tns:CatalogRef.Номенклатура"/>
       </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="DocumentObject.ЗаказПокупателя">
       <xsd:sequence>
           <xsd:element name="Ref" type="xsd:string"/>
           <xsd:element name="АдресДоставки" type="xsd:string"/>
           <xsd:element name="ВидОперации" type="xsd:string"/>
           <xsd:element name="Контрагент" type="xsd:string"/>
           <xsd:element name="Город" type="tns:CatalogRef.Города"/>
           <xsd:element name="Район" type="tns:CatalogRef.Районы"/>
           <xsd:element name="Улица" type="tns:CatalogRef.Улица"/>
           <xsd:element name="НомерДома" type="xsd:string"/>
           <xsd:element name="Корпус" type="xsd:string"/>
           <xsd:element name="Квартира" type="xsd:string"/>
           <xsd:element maxOccurs="99999" minOccurs="0" name="Товары" type="tns:DocumentTabularSectionRow.ЗаказПокупателя.Товары"/>
           <xsd:element maxOccurs="99999" minOccurs="0" name="Услуги" type="tns:DocumentTabularSectionRow.ЗаказПокупателя.Услуги"/>
       </xsd:sequence>
   </xsd:complexType>
...
1 Йожин с бажин
 
03.09.08
18:41
что такое XDTO?
2 leo_d
 
03.09.08
18:45
XML Data Transfer Objects (Объекты перенова данных с помощью XML).
3 Йожин с бажин
 
03.09.08
18:48
чудеса
4 quest
 
03.09.08
18:57
вместо
          <xsd:element maxOccurs="99999" minOccurs="0" name="Товары" type="tns:DocumentTabularSectionRow.ЗаказПокупателя.Товары"/>
           <xsd:element maxOccurs="99999" minOccurs="0" name="Услуги" type="tns:DocumentTabularSectionRow.ЗаказПокупателя.Услуги"/>

не должно ли быть
               <xsd:choice>
                   <xsd:element maxOccurs="unbounded" minOccurs="0" name="Товары" type="tns:DocumentTabularSectionRow.ЗаказПокупателя.Товары"/>
                   <xsd:element maxOccurs="unbounded" minOccurs="0" name="Услуги" type="tns:DocumentTabularSectionRow.ЗаказПокупателя.Услуги"/>
               </xsd:choice>

?
5 quest
 
03.09.08
18:59
сори. Тупанул. Ты прав. Буду думать дальше
6 leo_d
 
03.09.08
19:00
хм, файл схемы брал вырезками из файла экспорта конфигурации в схему XML...
но все ж попробую, спасибо
7 leo_d
 
03.09.08
19:02
))
8 quest
 
03.09.08
19:17
Ша. Читать по буквам.
 Фабрика = СоздатьФабрикуXDTO(Пути);
   URI = "http://v8.1c.ru/8.1/data/enterprise/current-config";

   ТипТабЧасть = ФабрикаXDTO.Тип(URI, "DocumentTabularSectionRow.ЗаказПокупателя.Товары");

Внимание вопрос - что создали и где требуем получить тип?
9 quest
 
03.09.08
19:18
хотя прикольно. Даже не понял сразу в чем прикол :)
10 quest
 
03.09.08
19:20
я тебе даже больше скажу -

разные экземпляры фабрик построенные по одному типу - различны. Попался на этом с в одной своей разработке.
11 quest
 
03.09.08
19:27
блин, не типу. URI
12 leo_d
 
04.09.08
10:22
все же почему тип ТипТабЧасть в фабрике не находит не пойму?
в отладчике ТипТабЧасть определяется, в пространстве "http://v8.1c.ru/8.1/data/enterprise/current-config", все как полодено...
13 leo_d
 
04.09.08
11:13
аааааа!!! понял, эка меня глюкануло. to quest пасибоооо!!!
14 quest
 
04.09.08
11:23
Фигня. ты с этим XDTO еще хлебнешь проблем... И основная - очень мало инфы.
15 leo_d
 
04.09.08
11:29
инфы даааа, нету вообще а то что есть то просто примеры и без всякого пояснения что и куда... ((