Page tree
Skip to end of metadata
Go to start of metadata

Концепция

Сообщение обмена представляет собой XML файл, сформированный по заранее согласованной XSD схеме

В XSD схеме описаны ограничения для получаемого / выгружаемого сообщения:

  • Набор полей
  • Обязательность заполнения
  • Типы данных

Состав типов (объектов выгрузки) в схеме XSD делится на 2 группы:

  • Постоянные типы
    • Тип, содержащий информацию о структуре НСИ
    • Тип, содержащий данные о состоянии обмена (опционально)
  • Переменные типы

Сформированное / полученное сообщение  должно быть валидно XSD (соответствовать схеме). Если сообщение не проходит валидацию, данные не могут быть загружены

Проверить валидность сообщения XSD можно с помощью любого онлайн - сервиса, поддерживающего кириллицу. Например: https://www.liquid-technologies.com/online-xsd-validator

Актуальные схемы в виде сообщений могут участвовать в обмене (через отдельные точки и очереди RabbitMQ)

При получении сообщения в прикладной базе (если это 1С база):

  • На базе XSD схемы, полученной из соответствующей очереди, разбирается XML текст сообщения, и формируется структура с данными сообщения
  • По полученной структуре выполняется загрузка

Сообщения о состоянии загрузки объекта НСИ также представляют собой XML файл, XSD схема статическая (обмен состоянием используется опционально)

XSD схема

Постоянные типы

  • ЭлементыСтруктурыОбъектаНСИ - описывает реквизиты объектов НСИ, используется для передачи информации о том, какие объекты и реквизиты являются централизованной НСИ их нельзя редактировать в прикладной системе
  • ТекущееСостояниеЗагрузки - описывает текущее состояние обмена
  • Ссылка.УникальныеИдентификаторыПрикладныхСистем и Ссылка.УникальныеИдентификаторыПрикладныхСистем.Строка - описывают уникальные
    идентификаторы (GUID) данной ссылки в прикладных системах

Переменные типы

Для каждого выгружаемого объекта создаются:

  • Один общий тип с наименованием, совпадающим с именем метаданных (идентификатором объекта НСИ)
  • По 2 типа на каждую табличную часть с наименованиями: <Имя метаданных>.<Идентификатор ТЧ> И <Имя метаданных>.<Идентификатор ТЧ>.Строка

    Пример описания табличной части
    	<xs:complexType name="Документ.ПеремещениеТоваров.Товары.Строка">
            <xs:all>
                <xs:element name="Номенклатура" type="tns:Справочник.Номенклатура.Ссылка"/>
                <xs:element name="Характеристика" type="tns:Справочник.ХарактеристикиНоменклатуры.Ссылка" minOccurs="0"/>
                <xs:element name="Количество">
                    <xs:simpleType>
                        <xs:restriction base="xs:decimal">
                            <xs:totalDigits value="15"/>
                            <xs:fractionDigits value="3"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="Серия" type="tns:Справочник.СерииНоменклатуры.Ссылка" minOccurs="0"/>
            </xs:all>
        </xs:complexType>
        <xs:complexType name="Документ.ПеремещениеТоваров.Товары">
            <xs:sequence>
                <xs:element name="Строка" type="tns:Документ.ПеремещениеТоваров.Товары.Строка" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
  • При наличии элементов составных типов создается отдельный тип, описывающих набор типов, которые может принимать элемент

    Пример описания составного типа
    	<xs:complexType name="Документ.ПеремещениеТоваров.ДокументОснование.ОписаниеТипа">
            <xs:choice>
                <xs:element name="Документ.ПриобретениеТоваровУслуг" type="tns:Документ.ПриобретениеТоваровУслуг.Ссылка"/>
                <xs:element name="Документ.ПоступлениеТоваров" type="tns:Документ.ПоступлениеТоваров.Ссылка"/>
                <xs:element name="Документ.ПриемкаТоваровНаХранение" type="tns:Документ.ПриемкаТоваровНаХранение.Ссылка"/>
            </xs:choice>
        </xs:complexType>
    
    	<xs:element name="ДокументОснование" type="tns:Документ.ПеремещениеТоваров.ДокументОснование.ОписаниеТипа" minOccurs="0"/>
  • Ссылочные реквизиты описываются отдельными типами (например, "Справочник.СерииНоменклатуры.Ссылка").  Состав полей, которым описывается ссылочный тип, задается в правилах конвертации. По умолчанию ссылочный тип описывается уникальным идентификатором (GUID) и уникальными идентификаторами ссылки в прикладных системах (при наличии)

    Пример описания ссылочного типа
    	<xs:complexType name="Справочник.СерииНоменклатуры.Ссылка">
            <xs:all>
                <xs:element name="GUID" type="xs:string"/>
                <xs:element name="Номер">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:maxLength value="200"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="ГоденДо" type="xs:dateTime">
                    <!-- Дата партии -->
                </xs:element>
                <xs:element name="УникальныеИдентификаторыПрикладныхСистем" type="tns:Ссылка.УникальныеИдентификаторыПрикладныхСистем" minOccurs="0"/>
            </xs:all>
        </xs:complexType>
Пример XSD (документ "Перемещение товаров")
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:tns="http://www.bitmdm.ru/data" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.bitmdm.ru/data" attributeFormDefault="unqualified" elementFormDefault="qualified">
    <xs:complexType name="Ссылка">
        <xs:all>
            <xs:element name="ОбъектНСИ" type="xs:string"/>
            <xs:element name="GUID" type="xs:string"/>
            <xs:element name="УникальныеИдентификаторыПрикладныхСистем" type="tns:Ссылка.УникальныеИдентификаторыПрикладныхСистем"/>
            <xs:element name="Перечисление" type="xs:string"/>
            <xs:element name="ЗначениеСтрока" type="xs:string"/>
            <xs:element name="ЗначениеЧисло" type="xs:decimal"/>
            <xs:element name="ЗначениеБулево" type="xs:boolean"/>
            <xs:element name="ЗначениеДата" type="xs:dateTime"/>
        </xs:all>
    </xs:complexType>
    <xs:complexType name="Ссылка.УникальныеИдентификаторыПрикладныхСистем.Строка">
        <xs:all>
            <xs:element name="КодПрикладнойСистемы" type="xs:string"/>
            <xs:element name="GUID" type="xs:string"/>
        </xs:all>
    </xs:complexType>
    <xs:complexType name="Ссылка.УникальныеИдентификаторыПрикладныхСистем">
        <xs:sequence>
            <xs:element name="Строки" type="tns:Ссылка.УникальныеИдентификаторыПрикладныхСистем.Строка" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Документ.ПеремещениеТоваров.ДокументОснование.ОписаниеТипа">
        <xs:choice>
            <xs:element name="Документ.ПриобретениеТоваровУслуг" type="tns:Документ.ПриобретениеТоваровУслуг.Ссылка"/>
            <xs:element name="Документ.ПоступлениеТоваров" type="tns:Документ.ПоступлениеТоваров.Ссылка"/>
            <xs:element name="Документ.ПриемкаТоваровНаХранение" type="tns:Документ.ПриемкаТоваровНаХранение.Ссылка"/>
        </xs:choice>
    </xs:complexType>
    <xs:complexType name="Документ.ПеремещениеТоваров.Товары.Строка">
        <xs:all>
            <xs:element name="Номенклатура" type="tns:Справочник.Номенклатура.Ссылка"/>
            <xs:element name="Характеристика" type="tns:Справочник.ХарактеристикиНоменклатуры.Ссылка" minOccurs="0"/>
            <xs:element name="Количество">
                <xs:simpleType>
                    <xs:restriction base="xs:decimal">
                        <xs:totalDigits value="15"/>
                        <xs:fractionDigits value="3"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="Серия" type="tns:Справочник.СерииНоменклатуры.Ссылка" minOccurs="0"/>
        </xs:all>
    </xs:complexType>
    <xs:complexType name="Документ.ПеремещениеТоваров.Товары">
        <xs:sequence>
            <xs:element name="Строка" type="tns:Документ.ПеремещениеТоваров.Товары.Строка" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Документ.ПеремещениеТоваров">
        <xs:all>
            <xs:element name="GUID">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="36"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="Дата" type="xs:dateTime"/>
            <xs:element name="УникальныеИдентификаторыПрикладныхСистем" type="tns:Ссылка.УникальныеИдентификаторыПрикладныхСистем" minOccurs="0"/>
            <xs:element name="Организация" type="tns:Справочник.Организации.Ссылка"/>
            <xs:element name="СкладОтправитель" type="tns:Справочник.Склады.Ссылка"/>
            <xs:element name="СкладПолучатель" type="tns:Справочник.Склады.Ссылка" minOccurs="0"/>
            <xs:element name="ДокументОснование" type="tns:Документ.ПеремещениеТоваров.ДокументОснование.ОписаниеТипа" minOccurs="0"/>
            <xs:element name="Товары" type="tns:Документ.ПеремещениеТоваров.Товары"/>
        </xs:all>
    </xs:complexType>
    <xs:complexType name="Документ.ПеремещениеТоваров.Ссылка">
        <xs:all>
            <xs:element name="GUID" type="xs:string"/>
            <xs:element name="УникальныеИдентификаторыПрикладныхСистем" type="tns:Ссылка.УникальныеИдентификаторыПрикладныхСистем" minOccurs="0"/>
        </xs:all>
    </xs:complexType>
    <xs:complexType name="Справочник.Номенклатура.Ссылка">
        <xs:all>
            <xs:element name="GUID" type="xs:string"/>
            <xs:element name="УникальныеИдентификаторыПрикладныхСистем" type="tns:Ссылка.УникальныеИдентификаторыПрикладныхСистем" minOccurs="0"/>
        </xs:all>
    </xs:complexType>
    <xs:complexType name="Справочник.Организации.Ссылка">
        <xs:all>
            <xs:element name="GUID" type="xs:string"/>
            <xs:element name="УникальныеИдентификаторыПрикладныхСистем" type="tns:Ссылка.УникальныеИдентификаторыПрикладныхСистем" minOccurs="0"/>
        </xs:all>
    </xs:complexType>
    <xs:complexType name="Справочник.СерииНоменклатуры.Ссылка">
        <xs:all>
            <xs:element name="GUID" type="xs:string"/>
            <xs:element name="Номер">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="200"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="ГоденДо" type="xs:dateTime">
                <!-- Дата партии -->
            </xs:element>
            <xs:element name="УникальныеИдентификаторыПрикладныхСистем" type="tns:Ссылка.УникальныеИдентификаторыПрикладныхСистем" minOccurs="0"/>
        </xs:all>
    </xs:complexType>
    <xs:complexType name="Справочник.Склады.Ссылка">
        <xs:all>
            <xs:element name="GUID" type="xs:string"/>
            <xs:element name="УникальныеИдентификаторыПрикладныхСистем" type="tns:Ссылка.УникальныеИдентификаторыПрикладныхСистем" minOccurs="0"/>
        </xs:all>
    </xs:complexType>
    <xs:complexType name="Справочник.ХарактеристикиНоменклатуры.Ссылка">
        <xs:all>
            <xs:element name="GUID" type="xs:string"/>
            <xs:element name="УникальныеИдентификаторыПрикладныхСистем" type="tns:Ссылка.УникальныеИдентификаторыПрикладныхСистем" minOccurs="0"/>
        </xs:all>
    </xs:complexType>
    <xs:complexType name="Документ.ПоступлениеТоваров.Ссылка">
        <xs:all>
            <xs:element name="GUID" type="xs:string"/>
            <xs:element name="УникальныеИдентификаторыПрикладныхСистем" type="tns:Ссылка.УникальныеИдентификаторыПрикладныхСистем" minOccurs="0"/>
        </xs:all>
    </xs:complexType>
    <xs:complexType name="Документ.ПриемкаТоваровНаХранение.Ссылка">
        <xs:all>
            <xs:element name="GUID" type="xs:string"/>
            <xs:element name="УникальныеИдентификаторыПрикладныхСистем" type="tns:Ссылка.УникальныеИдентификаторыПрикладныхСистем" minOccurs="0"/>
        </xs:all>
    </xs:complexType>
    <xs:complexType name="Документ.ПриобретениеТоваровУслуг.Ссылка">
        <xs:all>
            <xs:element name="GUID" type="xs:string"/>
            <xs:element name="УникальныеИдентификаторыПрикладныхСистем" type="tns:Ссылка.УникальныеИдентификаторыПрикладныхСистем" minOccurs="0"/>
        </xs:all>
    </xs:complexType>
    <xs:complexType name="MessageType">
        <xs:choice>
            <xs:element name="Документ.ПеремещениеТоваров" type="tns:Документ.ПеремещениеТоваров"/>
        </xs:choice>
    </xs:complexType>
    <xs:element name="Данные" type="tns:MessageType"/>
</xs:schema>
Пример сообщения (документ "Перемещение товаров")
<?xml version="1.0" encoding="UTF-8"?>
<Данные xmlns="http://www.bitmdm.ru/data" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Документ.ПеремещениеТоваров>
        <Дата>2018-05-07T09:51:25</Дата>
        <УникальныеИдентификаторыПрикладныхСистем/>
        <Организация>
            <GUID>60f6d3f3-ba53-11e7-80c5-00155d056a04</GUID>
        </Организация>
        <СкладОтправитель>
            <GUID>e8327306-2069-11e8-80cd-00155d056913</GUID>
        </СкладОтправитель>
        <СкладПолучатель>
            <GUID>e0fd10d8-2069-11e8-80cd-00155d056913</GUID>
        </СкладПолучатель>
        <ДокументОснование>
            <Документ.ПриобретениеТоваровУслуг>
                <GUID>cf6cc1cc-67e8-11e8-80d8-00155d056913</GUID>
            </Документ.ПриобретениеТоваровУслуг>
        </ДокументОснование>
        <Товары>
            <Строка>
                <Номенклатура>
                    <GUID>d2ac18e6-291b-11e8-80c7-00155d056a0f</GUID>
                </Номенклатура>
                <Количество>1</Количество>
                <Серия>
                    <GUID>12d8ba29-8b23-11e8-80df-00155d056913</GUID>
                    <Номер>123123123</Номер>
                    <ГоденДо>0001-01-01T00:00:00</ГоденДо>
                </Серия>
            </Строка>
            <Строка>
                <Номенклатура>
                    <GUID>d2ac18e6-291b-11e8-80c7-00155d056a0f</GUID>
                </Номенклатура>
                <Количество>1</Количество>
                <Серия>
                    <GUID>12d8ba29-8b23-11e8-80df-00155d056913</GUID>
                    <Номер>123123123</Номер>
                    <ГоденДо>0001-01-01T00:00:00</ГоденДо>
                </Серия>
            </Строка>
        </Товары>
        <GUID>17ff822b-51c3-11e8-80d5-00155d056913</GUID>
    </Документ.ПеремещениеТоваров>
</Данные>



  • No labels