Имя: Пароль:
1C
1С v8
Список XDTO
0 Zixxx
 
14.07.13
20:07
Есть схема

 <xs:complexType name ="Остатки">
   <xs:sequence>
     <xs:element name="Номенклатура" type="tns:ЭлементНоменклатуры" minOccurs="0" maxOccurs="-1"/>
   </xs:sequence>
 </xs:complexType>
 
 <xs:complexType name="ЭлементНоменклатуры">
   <xs:sequence>
     <xs:element name="НоменклатураID" type="xs:string" />
     <xs:element name="ХарактеристикаID" type="xs:string" />
     <xs:element name="Количество" type="xs:int" />
   </xs:sequence>
 </xs:complexType>

Проблема в том что если в Номенклатуру записывается только один Элемент Номенклатуры, то при чтении xml у меня Номенклатура становиться объектом, а если значений больше двух то все нормально, получаю список.

Что еще нужно указать в схеме, чтобы даже при одной записи у меня получался Список XDTO
1 Rie
 
14.07.13
20:28
Не уверен, но может быть, имеет смысл попробовать xsd:list?
2 Fragster
 
гуру
14.07.13
20:43
надо схему при импорте тоже указывать
3 Cyberhawk
 
14.07.13
20:48
Пиши еще и пустую ссылку заодно
4 Zixxx
 
14.07.13
20:51
(1) Там я явно указываю тип на ЭлементНоменклатуры, по моему xsd:list там воткнуть некуда уже.
(2) Указываю
5 Rie
 
14.07.13
20:56
(4) list - а внутри уже ЭлементНоменклатуры. По идее, тогда list вынужден будет обработаться.
6 Zixxx
 
14.07.13
21:04
(5) Можешь пример привести, не понимаю
7 Fragster
 
гуру
14.07.13
21:08
(4) если бы указывал - то тогда оно было бы списком
8 Zixxx
 
14.07.13
21:20
(7) При импорте это при чтении?
9 Fragster
 
гуру
14.07.13
21:50
(8) ога
10 Zixxx
 
14.07.13
21:50
При чтении подсовываю схему, таким образом...
11 Zixxx
 
14.07.13
21:51
ФайлыXSD = Новый Массив();
   ФайлыXSD.Добавить(ВременныйФайл);
   ФабрикаПрихода = СоздатьФабрикуXDTO(ФайлыXSD);
   
   НовыйЧтение = Новый ЧтениеXML;
   НовыйЧтение.ОткрытьФайл(ПутьДоФайлаДанных);
   
   Документ = ФабрикаПрихода.ПрочитатьXML(НовыйЧтение);

Что не так делаю?
12 Fragster
 
гуру
14.07.13
21:53
(11) ты не сообщаешь тип в прочитатьXML
13 Zixxx
 
14.07.13
21:57
(12) Т.е. если при записи XML явно типы не указывались, то при чтении для каждого объекта придется указывать с каким типом я его хочу прочитать?
14 Zixxx
 
14.07.13
21:58
(12) А то что я при чтении указываю целую схему с типами это не считается?
15 Fragster
 
гуру
14.07.13
22:10
(14) а в схеме указано, какой тип у корневого элемента?
16 Zixxx
 
14.07.13
22:19
(15) Нет, а какой тип мне поставить complexType?
17 Fragster
 
гуру
14.07.13
22:28
попробуй вначале дописать

<xs:element name ="Остатки" type="Остатки">

возможно у типа Остатки придется поменять имя на ОтсткиТип или что-нибудь типа того
18 Fragster
 
гуру
14.07.13
22:28
<xs:element name ="Остатки" type="Остатки"/>
19 acsent
 
14.07.13
22:51
проще сделать функцию ПолучитьСписокXDTO, и если количество 1 в массив запихивать
20 etc
 
15.07.13
01:06
Попробуй так:

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(Файл.ПолноеИмя);
ТипXML = ПолучитьXMLТип(ЧтениеXML);
Данные = ФабрикаПрихода.ПрочитатьXML(ЧтениеXML, ФабрикаПрихода.Тип(ТипXML));
21 etc
 
15.07.13
01:10
Если XML содержит описание namespace-а то ПолучитьXMLТип что-то вернет. А если не содержит тогда нужно как-то по другому выкручиваться.