|
Создание xml на основе xsd | ☑ | ||
---|---|---|---|---|
0
Morohon
20.11.16
✎
21:39
|
Добрый вечер. Только начинаю окунаться в мир работы с фабрикой xdto.
Есть xml файл следующего вида: <?xml version="1.0" encoding="utf-8"?> <ROOT> <ArchivedLocalStocks> <ArchivedLocalStock WAREH_CODE="000000002" LOCALCODE="00000000100" LOT_ID="" DATE="2014-03-01T00:00:00" STOCK="438.000" DTLM="20140623 11:53" /> <ArchivedLocalStock WAREH_CODE="000000002" LOCALCODE="00000000103" LOT_ID="" DATE="2014-03-01T00:00:00" STOCK="192.000" DTLM="20140623 11:53" /> </ArchivedLocalStocks> </ROOT> На его основе создал схему в liquid xml (возможно в схеме у меня косяк): <?xml version="1.0" encoding="utf-8" ?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="ArchivedStocks" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="ArchivedLocalStocks"> <xs:sequence> <xs:element name="ArchivedLocalStock" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:complexContent> <xs:extension base="xs:anyType"> <xs:attribute name="WAREH_CODE" type="xs:string" /> <xs:attribute name="LOCALCODE" type="xs:string" /> <xs:attribute name="LOT_ID" type="xs:string" /> <xs:attribute name="DATE" type="xs:dateTime" /> <xs:attribute name="STOCK" type="xs:decimal" /> <xs:attribute name="DTLM" type="xs:string" /> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:complexType name="ROOT"> <xs:sequence> <xs:element xmlns:q1="ArchivedStocks" name="ArchivedLocalStocks" type="q1:ArchivedLocalStocks" /> </xs:sequence> </xs:complexType> </xs:schema> Импортировал данную схему как пакет и теперь пытаюсь создать файл xml: xdtoROOT = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("yarprodsnab:ArchivedStocks", "ROOT")); xdtoArchivedLocalStoks = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("yarprodsnab:ArchivedStocks", "ArchivedLocalStocks")); xdtoArchivedLocalStoks.Добавить(xdtoArchivedLocalStoks.ArchivedLocalStock); xdtoСтрокаСписка = xdtoArchivedLocalStoks.ArchivedLocalStock.Добавить(); xdtoСтрокаСписка.WAREH_CODE = "lol"; xdtoСтрокаСписка.LOCALCODE = "lol"; xdtoСтрокаСписка.LOT_ID = "lol"; xdtoСтрокаСписка.DATE = "lol"; xdtoСтрокаСписка.STOCK = 123.000; xdtoСтрокаСписка.DTLM = "20140623 11:53"; xdtoROOT.Добавить(xdtoArchivedLocalStoks); Запись = Новый ЗаписьXML; Запись.ОткрытьФайл("C:\ArchivedStocks.xml"); ФабрикаXDTO.ЗаписатьXML(Запись, xdtoROOT); Запись.Закрыть() На моменте: xdtoСтрокаСписка = xdtoArchivedLocalStoks.ArchivedLocalStock.Добавить() появляется недопонимание т.к. нужно передать или ЗначениеXDTO или ОбъектXDTO. Но я не понимаю, что нужно ему передать. Подскажите пожалуйста |
|||
1
Mauser
20.11.16
✎
23:14
|
Ему надо передать созданный объект XDTO с типом элемента списка ArchivedLocalStock.
Хотя непонимание начинается куда раньше... Что такое "yarprodsnab"? |
|||
2
Cyberhawk
20.11.16
✎
23:25
|
(1) Наверное, имя ХДТО-пакета в конфигурации
|
|||
3
Morohon
20.11.16
✎
23:42
|
(1) yarprodsnab - пространство имен.
Просто кое-где затер. Общее название пространства имен: "yarprodsnab:ArchivedStocks" |
|||
4
Morohon
20.11.16
✎
23:44
|
(1) Ему надо передать созданный объект XDTO с типом элемента списка ArchivedLocalStock.
Вот этой строчки не понял, можете пояснить? Вот как выглядят в графическом виде схемы xdto, чтобы было проще понять: http://rgho.st/7qlcVBmxc http://rgho.st/8b8FKYmZW |
|||
5
Morohon
21.11.16
✎
02:11
|
Так, я вроде разобрался. Напишу тут ответ, мало ли кому пригодится. Привел XML к такой структуре:
<?xml version="1.0" encoding="utf-8" ?> <!--Created with Liquid XML Studio Developer Edition 9.0.11.3078 (http://www.liquid-technologies.com)--> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="ArchivedStocks" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="ROOT" /> <xs:complexType name="ArchivedLocalStocks" /> <xs:complexType name="ArchivedLocalStock"> <xs:complexContent> <xs:extension base="xs:anyType"> <xs:attribute name="WAREH_CODE" type="xs:string" use="required" /> <xs:attribute name="LOCALCODE" type="xs:string" use="required" /> <xs:attribute name="LOT_ID" type="xs:string" use="required" /> <xs:attribute name="DATE" type="xs:dateTime" use="required" /> <xs:attribute name="STOCK" type="xs:decimal" use="required" /> <xs:attribute name="DTLM" type="xs:string" use="required" /> </xs:extension> </xs:complexContent> </xs:complexType> </xs:schema> И обрабатываю в коде так: xdtoROOT = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("ArchivedStocks", "ROOT")); xdtoArchivedLocalStoks = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("ArchivedStocks", "ArchivedLocalStocks")); Для Счетчика = 0 По Счетчика < 3 Цикл xdtoArchivedLocalStok = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("ArchivedStocks", "ArchivedLocalStock")); xdtoArchivedLocalStok.WAREH_CODE = "str123"; xdtoArchivedLocalStok.LOCALCODE = "str123"; xdtoArchivedLocalStok.LOT_ID = "str123"; xdtoArchivedLocalStok.DATE = "2014-03-01T00:00:00"; xdtoArchivedLocalStok.STOCK = 123; xdtoArchivedLocalStok.DTLM = "201406 2311:53"; xdtoArchivedLocalStoks.Добавить(ФормаXML.Элемент, "ArchivedStocks", "ArchivedLocalStock",xdtoArchivedLocalStok); КонецЦикла; xdtoROOT.Добавить(ФормаXML.Элемент, "ArchivedStocks", "ArchivedLocalStoks",xdtoArchivedLocalStoks); Запись = Новый ЗаписьXML; Запись.ОткрытьФайл("c:\ArhivedStoks.xml"); Запись.ЗаписатьОбъявлениеXML(); ФабрикаXDTO.ЗаписатьXML(Запись, xdtoROOT); Запись.Закрыть(); Единственный косяк, что если вручную не проставить Свойство Открытый в пакете XDTO у типов, то будет ругаться. Кто может подсказать, почему возникает данная ошибка? Может я чего-то в схеме не указал? |
|||
6
Morohon
21.11.16
✎
02:13
|
Если же у вас есть какие-либо замечания (как по мне тут проблема со схемой xml), то готов выслушать т.к. до конца не понимаю, как создавать схемы xml для 1С. Пришел к этому методом научного тыка.
Если есть ссылки по тематике - готов прочитать и научится |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |