Имя: Пароль:
1C
1С v8
Создание xml на основе схемы xsd без типов
,
0 fatal_error
 
29.04.13
13:34
Есть начало схемы:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0">
<xsd:element name="ConsumerOrder">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Docnumb" type="xsd:string">

Как на основании этой схемы создать объект ConsumerOrder?
1 Fragster
 
гуру
29.04.13
13:38
Фабрика = СоздатьФабрикуXDTO(Путь);
Тип = Фабрика.Тип(Пространство имен, Имя типа);
Объект = Фабрика.Создать(Тип);
2 Fragster
 
гуру
29.04.13
13:39
Можно там из корневых элементов тип достать - надо тебе отладчиком забуриться вглубь фабрики и ее пакетов
3 fatal_error
 
29.04.13
13:42
да я уже 2-ой день бурю
а там как примерно должно быть? где-то будет сидеть элемент с именем ConsumerOrder?
4 Fragster
 
гуру
29.04.13
13:44
что-то типа:


Фабрика.Пакеты.Получить("http://www.w3.org/2001/XMLSchema").КорневыеСвойства.Получить("ConsumerOrder").Тип;
5 Fragster
 
гуру
29.04.13
13:45
хотя у тебя нет пространства имен - смотри отладчиком номер пакета у Фабрика.Пакеты
6 fatal_error
 
29.04.13
13:49
Фабрика.Пакеты[0].КорневыеСвойства.Получить("ConsumerOrder") - Неопределено
7 Fragster
 
гуру
29.04.13
13:50
(6) отладчиком умеешь пользоваться?
8 fatal_error
 
29.04.13
13:51
(7) а что там уметь?
9 Fragster
 
гуру
29.04.13
13:51
(8) тогда почему не пользуешься?
10 fatal_error
 
29.04.13
13:51
просто не знаю уже где искать.
11 Fragster
 
гуру
29.04.13
13:52
в каком-то из пакетов в корневых свойствах
12 fatal_error
 
29.04.13
13:53
да у меня там только один пакет
13 Fragster
 
гуру
29.04.13
13:57
выложи схему
14 fatal_error
 
29.04.13
14:02
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <xsd:element name="ConsumerOrder">
   <xsd:complexType>
     <xsd:sequence>
       <xsd:element name="Docnumb" type="xsd:string">
           <xsd:annotation>
               <xsd:documentation>Номер заказа в системе поставщика</xsd:documentation>
           </xsd:annotation>
       </xsd:element>
       <xsd:element name="Docdate" type="xsd:string">
           <xsd:annotation>
               <xsd:documentation>Дата заказа</xsd:documentation>
           </xsd:annotation>
       </xsd:element>
       <xsd:element name="Faceacc" type="xsd:string">
           <xsd:annotation>
               <xsd:documentation>Лицевой счет</xsd:documentation>
           </xsd:annotation>
       </xsd:element>
       <xsd:element name="DrugStore" type="xsd:string">
           <xsd:annotation>
               <xsd:documentation>Магазин</xsd:documentation>
           </xsd:annotation>
       </xsd:element>
       <xsd:element name="DocType" type="xsd:int">
           <xsd:annotation>
               <xsd:documentation>Тип заказа</xsd:documentation>
           </xsd:annotation>
       </xsd:element>
       <xsd:element name="ReleaseDate" type="xsd:string">
           <xsd:annotation>
               <xsd:documentation>Дата доставки</xsd:documentation>
           </xsd:annotation>
       </xsd:element>
       <xsd:element name="Note" type="xsd:string">
           <xsd:annotation>
               <xsd:documentation>Примечание заказа</xsd:documentation>
           </xsd:annotation>
       </xsd:element>
       <xsd:element name="OrderItems">
         <xsd:complexType>
           <xsd:sequence>
             <xsd:element name="Item">
               <xsd:complexType>
                 <xsd:sequence>
                   <xsd:element name="ProductCode" type="xsd:string">
                       <xsd:annotation>
                           <xsd:documentation>Код модификации</xsd:documentation>
                       </xsd:annotation>
                   </xsd:element>
                   <xsd:element name="Quantity" type="xsd:decimal">
                       <xsd:annotation>
                           <xsd:documentation>Количество</xsd:documentation>
                       </xsd:annotation>
                   </xsd:element>
                   </xsd:sequence>
                 <xsd:attribute name="Number" type="xsd:int">
                       <xsd:annotation>
                           <xsd:documentation>Порядковый номер позиции</xsd:documentation>
                       </xsd:annotation>
                 </xsd:attribute>
               </xsd:complexType>
             </xsd:element>
           </xsd:sequence>
         </xsd:complexType>
       </xsd:element>
     </xsd:sequence>
   </xsd:complexType>
 </xsd:element>
</xsd:schema>
15 Ёпрст
 
29.04.13
14:21
16 Fragster
 
гуру
29.04.13
14:23
(14) в первой строке сделай так:
<xsd:schema targetNamespace="http://test.com" attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

после чего будет работать:


Фабрика = СоздатьФабрикуXDTO("d:\temp\2.xsd");
Пакет = Фабрика.Пакеты.Получить("http://test.com");
Свойство = Пакет.КорневыеСвойства.Получить("ConsumerOrder");
Тип = Свойство.Тип;
Объект = Фабрика.Создать(Тип);
17 Fragster
 
гуру
29.04.13
14:24
(15) расскажи это 1с :)
18 Fragster
 
гуру
29.04.13
14:26
ну и повторяемость у OrderItems типа maxOccurs="unbounded" надо указать, наверное
19 Fragster
 
гуру
29.04.13
14:27
или у Item
20 Ёпрст
 
29.04.13
14:27
(17) дык я быстрее ручонками создам xml в 1с, чем какие то фабрики рассматривать
21 fatal_error
 
29.04.13
14:28
(16) спасибо, так работает
22 Fragster
 
гуру
29.04.13
14:30
(20) просто куча программеров не представляют, что такое XML схема, и зачем она. если б они знали это и давали бы правильную схему - было б очень удобно. все-таки намного удобнее фабрикой работать, чем вручную.
23 zladenuw
 
29.04.13
14:33
(22) да только фабрика требует заголовки в xsd если их нету. 1с шлет лесом :(
24 Fragster
 
гуру
29.04.13
14:35
(23) фабрику можно вообще без схемы юзать, на чтение XML, например. единственная заморока, что надо предусмотреть, что списки могут быть пустые или с 1 элементом в таком случае.
25 Fragster
 
гуру
29.04.13
14:36
я так сам схемы делаю, если XML обмен с кем-то предполагается, и в макет обработки засовываю
26 zladenuw
 
29.04.13
14:39
(24) да у меня была хмл. на ее основание хотел создать схему. но в ней нет  URI пространства имен . и все дальше нечего сделать нельзя.
хотел использовать для проверки тегов в хмл на основание схемы. именно через ХДТО, можно еще по кому через МХМЛ. но хотелось в 1с :)
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.