Имя: Пароль:
1C
1С v8
Создание 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С. Пришел к этому методом научного тыка.

Если есть ссылки по тематике - готов прочитать и научится