Как в схему XSD передать сложный тип
Доброго времени суток, пишу обработку для выгрузки метаданных в XSD. Сейчас я могу выгружать в xsd примитивные и ссылочные типы. Но некоторые реквизиты имеют несколько типов. Подскажите, как можно описать элемент с несколькими типами.
Функция создания элемента:
Функция создания элемента:
Функция СоздатьЭлемент(ИмяЭлемента,UriПространстваИмен,ИмяТипа) Экспорт
Элемент=Новый ОбъявлениеЭлементаXS;//Новый ФрагментXS;
Элемент.Имя=ИмяЭлемента;
Элемент.ИмяТипа=новый РасширенноеИмяXML(UriПространстваИмен, Строка(ИмяТипа));
возврат Элемент
КонецФункции
По теме из базы знаний
- 1С: Конвертация данных 3. Инструкции и примеры. EnterpriseData (универсальный формат обмена)
- Создание в 1С 7.7 XML в формате EnterpriseData (универсальный формат обмена), версия 1.5. Инструкции и примеры переноса данных из устаревшей конфигурации 1С 7.7 в любую современную 1С 8.3, поддерживающую EnterpriseData, через Конвертацию данных 3
- Опыт внедрения ESB (интеграционной шины) в ПАО "Газпром нефть"
- ЕГАИС от А до Я
- Вопросы с технических интервью
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
Функция СоздатьЭлемент(ИмяЭлемента,ИмяТипа = "string", UriПространстваИмен = "http://www.w3.org/2001/XMLSchema") Экспорт
Элемент = Новый ОбъявлениеЭлементаXS;
Элемент.Имя = ИмяЭлемента;
Элемент.ИмяТипа = Новый РасширенноеИмяXML(UriПространстваИмен, ИмяТипа);
Возврат Элемент
КонецФункции
Функция СоздатьТип(ИмяТипа, БазовыйТип = Неопределено) Экспорт
Тип = Новый ОпределениеСоставногоТипаXS;
Тип.Имя = ИмяТипа;
Тип.МодельСодержимого = МодельСодержимогоXS.Составная;
Если БазовыйТип <> Неопределено Тогда
Тип.ИмяБазовогоТипа = БазовыйТип;
Тип.МетодНаследования = МетодНаследованияXS.Расширение;
КонецЕсли;
Часть = Новый ГруппаМоделиXS;
Содержимое = Новый ФрагментXS;
Содержимое.Часть = Часть;
Тип.Содержимое = Содержимое;
Возврат Тип
КонецФункции
БазовыйТип = Новый РасширенноеИмяXML("https://forum.infostart.ru/", "Значение");
ИмяТипа = ЭлементаПравила.ИмяТипаXDTO + "_" + Выборка.ТабличнаяЧасть;
Тип = СоздатьТип(ИмяТипа);
Фрагменты = Тип.Содержимое.Часть.Фрагменты;
Фрагмент = Новый ФрагментXS;
Элемент = СоздатьЭлемент(Выборка.ТабличнаяЧасть,ИмяТипа,Схема.ПространствоИмен);
Фрагмент.Часть = Элемент;
Показать
(2)
Подобный код у меня реализован, но с ним есть ньюанс. Таким образом он выгрузит следующий xml
И в xdto загрузит 2 автора (скриншот в приложении).
У XSD есть свойство union membertype. Есть ли аналог в 1С?
P.s
Решил руками поправить xsd, и да, это работает:
МетодНаследованияXS
Подобный код у меня реализован, но с ним есть ньюанс. Таким образом он выгрузит следующий xml
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:tns="http://www.TestShema.ru/sample" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.TestShema.ru/sample" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:complexType name="ВариантыОтчетов">
<xs:sequence>
<xs:element name="Автор" type="tns:ВнешниеПользователи"/>
<xs:element name="Автор" type="tns:Пользователи"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Справочники">
<xs:sequence>
<xs:element name="ВариантыОтчетов" type="tns:ВариантыОтчетов"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
ПоказатьИ в xdto загрузит 2 автора (скриншот в приложении).
У XSD есть свойство union membertype. Есть ли аналог в 1С?
P.s
Решил руками поправить xsd, и да, это работает:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:tns="http://www.TestShema.ru/sample" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.TestShema.ru/sample" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:complexType name="ВариантыОтчетов">
<xs:sequence>
<xs:element name="Автор">
<xs:simpleType>
<xs:union memberTypes="tns:ВнешниеПользователи tns:Пользователи" />
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Справочники">
<xs:sequence>
<xs:element name="ВариантыОтчетов" type="tns:ВариантыОтчетов"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
ПоказатьПрикрепленные файлы: