Пример заполнения/создания файла XML из XSD схемы, используя XDTO

21.12.17

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Добрый день, коллеги! Наконец-то дошли руки написать сию статью. Хочу поделиться своим опытом по разбору xsd схемы используя Фабрику XDTO, а также связанным с этим XML файлом. Думаю, наверняка кому-то понадобится.

Скачать исходный код

Наименование Файл Версия Размер
Пример схемы xsd
.xsd 47,59Kb
47
.xsd 47,59Kb 47 Скачать
результат в виде xml
.xml 8,02Kb
30
.xml 8,02Kb 30 Скачать
Обработка с исходыми кодами
.epf 99,07Kb
76
.epf 99,07Kb 76 Скачать

Все будет сухо, без лирики и т.п.

Итак. Мне принесли задание. Подружить 1С с внешним сервисом по приему отчетности в виде xml файла.

Сторонний сервис имеет свой API по приему файлов, на выходе выдает некий код «батч», по которому я смогу вызвать еще одну функцию и получить по этому батчу, всю развернутую информацию по ошибкам.

Файл схема xsd небольшая, но типов данных много, на основе этой схемы полностью сформированный XML файл занимает что-то около 200Мб.

Дали ссылку на сайт, где можно узнать все остальное. Показывать ссылку не имеет смысла, т.к. доступ только после авторизации.

В итоге я имел на руках некий файл с расширением «xsd».

На тот момент я даже понятия не имел, что это и с чем и как его едят.

Дали какие-то пароли, логины, ссылку, куда все это выкладывать, и дали срок 3 недели.

Очень помог Инфостарт (не без этого, конечно, – огромное спасибо).

Для начала ниже материал, которым я пользовался, пока не завершил этот мини проект, и поэтому вот ссылки вам в помощь, которые могут понадобиться в дальнейшем, я думаю, это «маст-хэйв» для тех, кто хочет обучиться правилам XDTO:

//infostart.ru/public/167459/ - все три части

//infostart.ru/public/98019/ - похоже на «XDTO это просто», но сыроват

//infostart.ru/public/311011/ - написано просто и доступно

//infostart.ru/public/689184 

Что в итоге.

  1. Есть файл с правилами, ниже показана картинка в компактном виде, весь xsd файл можно увидеть во вложении.
     
    Рис.1

     
     
     
    Скажу, что на момент, когда я получил данный файл, я мог кое-как создавать типы XDTO. Читал статью «XDTO это просто» (все три части, конечно, не всё вкурил, как без этого).
    И в итоге умел примерно такое:
     
    Рис.2

    (вырезка из другого кода)
     
    То есть я мог создать тип «объектXDTO, если этот тип был расположен в дереве импортированной схемы в ветке «Типы объектов».Но на рисунке 1 выше видно, что все важные данные создаются только через ветку «свойства».
     
    Рис.3

     
    К примеру, на рис.3 видно, что у свойства «FirstName» один параметр «Name» является типом, ссылка на которую уводит в ветку «Типы объектов», а уже таааам указывается, что это за тип и что он в себе еще дополнительно содержит.
     
    Рис.4
     
     
     
    Как быть?
    Что делать?
    Как их прочитать?
    Как на их основе мне создать тип «ОбъектXDTO», ведь через создать запись можно только если записываемый/создаваемый тип является типом «ОбъектXDTO»?
    Что только не приходилось делать… я же умел создавать и записывать значения только если требуемые расположены в ветке «Типы объектов».
     
    Даже дошел до того, что попробовал изменить схему.
    Всё, что находилось в ветке «Свойства», я начал переносить в ветку «Типы объектов», начал создавать «туеву хучу» неправильных вещей, в итоге пришлось бросить весь гемор, пойти перекурить, и искать новые способы.
    Попробовал все тестировать в «Liquid XML» - не получилось.
    Потом попробовал все в «Visual Studio» - тоже …
    Очень много звонил разработчикам этих схем, где им, наверное, думалось – «Вот чудик, он что, не знает про SOAP-ы, это же допотопный механизм обмена, странные он вопросы задает, хмм…» (кстати  им тоже спасибо. открыли глаза 1С-нику).
     
     
     
    В итоге.
    В начале скажу, что у меня по условиям сбора данных есть некий первичный справочник список, в котором есть много реквизитов, которые необходимы для этого файла.
    Данные собираются, фильтруются сортируются и в итоге я получаю готовую Таблицу значений.
    Далее прохожу циклом эту таблицу и заполняю соответствующие реквизиты.
     
    Итак, как я начал считывать XSD и создавать XML файлы.
     
    Вначале считал пакет
    Рис.5

     
    Получил пакет в таком виде.
    Рис.6

     
    Далее мне нужно найти и спозиционироваться на свойстве «Records» 
     
    Вот она в дереве
    Рис.7

     
    Как это делается?
    Скажу, что это как магия.
    Пишем:
    Рис.7

     
    И мы получаем то значение, которое потом можем превратить в тип «ОбъектXDTO»
     
    Вот код:
     
    Рис.8

         
     
    Получаем на выходе готовый нам нужный тип и делаем с ним все, что нужно.
    К примеру, я должен пройтись циклом по реквизитам полученного объекта.
     
     
    Рис.9

 

Просьба смотреть «не в воду», а в суть.

Тут главные строки это:

Рис.10

И (опять магия)

Рис.11

И т.д. далее, пока не получите что хотели.

Для получения каких-либо реквизитов свойства в схеме xsd пользуюсь такой конструкцией кода,

Но скажу, что видел и другие способы, тут, как говорится, дело ваше.

 

Рис.12

 

Результат рисунков с 7 по 12

Выглядит вот так в готовом файле:

Рис.13

 

И вот что я заметил (ну местные гуру, может, и знают давным-давно).

Это как бы и правила, и пометка.

Рассмотрим свойство «ContractCode»

Вот его описание:

Рис.14

Если это свойство имеет форму как «Элемент», то тогда код выглядит таким:

Рис.15

Т.е. я срази пишу значение в параметр, просто «= равно» и пошел.

Если свойство имеет форму как «Элемент», но он записан через знак «+»

Как вот тут

 

То его код выглядит немного иначе

Рис.16

 

Т.е. нужно сначала создать через фабрику этот тип, получить его подчиненные подтипы и уже им присваивать значения из ваших данных.

И в итоге получается вот что.

Если в схеме это свойство имеет форму «элемент»

То в готовом файле запишется такая запись:

 

Т.е. все будет записано внутри т.н. «тегов».

 

Далее если вы имеете в схеме такую связку значений и ее свойства:

рис.17

Т.е. у свойства «FundingType» есть подчиненный элемент «id», где его форма равна «Атрибут»

В этом случае код при написании НЕ изменится:

Замечу, что этот код похож на рис.16

Воот, а результат будет немножко другой:

Рис.18

 

Т.е. значение запишется сразу в сам «тег».

 

Далее.

Есть такое свойство, как «Gender»

Он в свою очередь имеет ссылку на другой тип:

Рис.19

 

А вот сам тип «GenderType»

Описан вот так.

Рис.20

Вот его свойства:

Рис.20.1

Тут говорится, что данный тип значения в целом равен типу «string», но он вариант у него «атомарный», т.е. имеет, скажем, «перечисление». И его перечисления, это

Тип ее:

Рис.20.2

Аналогично и с «F»

Теперь дилемма, как мне его получить и как его записать.

Вот ответ (сам искал полдня):

Рис. 21

Тут весь фокус в строке

 

Советую почитать про «Фасеты». Там все просто.

Ну и в завершение.

Собираем файл этими строками:

 

Тут лишь в конце стоит сказать один момент.

Принимающая сторона не передала значение «xmlns», пришлось ее искать и вписывать в начало файла, вот пример:

 

Думаю, на этом все!

xml xdto xsd ФабрикаXDTO Фасеты фасет xmlns

См. также

SALE! 10%

Синхронизация и обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 22572 руб.

12.06.2017    136554    732    292    

393

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

34650 руб.

15.04.2019    69472    166    141    

112

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.16.x).

28000 25200 руб.

23.07.2020    47463    203    64    

164

SALE! 10%

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.227.x) и БП 3.0 (3.0.151.x). Правила подходят для версии ПРОФ и КОРП.

28000 25200 руб.

15.12.2021    21056    138    38    

96

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

43450 руб.

03.12.2020    34791    83    58    

81

[ED2] Обмен УПП 1.3, КА 1.1, УТ 10.3 с EnterpriseData (универсальный формат обмена), обработка

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

14580 руб.

18.02.2016    183583    565    508    

509

SALE! 10%

Переход и перенос данных из УПП 1.3 в ERP 2.5, КА 2.5. Переносятся документы (обороты за период), справочная информация и остатки

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 Бухгалтерский учет Управленческий учет Платные (руб)

Переход и перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:ERP Управление предприятием 2.5 и 1С:Комплексную автоматизацию 2.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.227.x), ERP 2.5 (2.5.16.x), КА 2.5 (2.5.16.x) .

28000 25200 руб.

24.06.2020    61655    45    27    

75

Перенос данных из БП 3.0 в УНФ 3.0 / УНФ 1.6. Переносятся остатки, документы и справочная информация

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

В продаже с 2018г. | Воспользовались более 41 предприятия! | Правила конвертации (КД 2) для переноса данных из БП 3 в УНФ | Переносятся все виды документов, начальные остатки и вся возможная справочная информация | Есть фильтр по организациям | Оперативно обновляем на новые релизы | Оказываем техподдержку | В комплект файлов входит инструкция, авторская версия обработки "Универсальный обмен...", актуальные правила переноса данных и архив старых версий переноса | Учет в БП 3 должен быть корректным, некорректные данные не переносятся | Можно бесплатно проверить на вашем сервере до покупки!

45650 руб.

10.07.2018    68380    41    124    

46
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. pm74 201 21.12.17 11:22 Сейчас в теме
(0) возьмем на карандаш.
Прикольная цветовая схема . У меня примерно такая же , глаза не так устают(жаль только , что нельзя делать импорт/экспорт)
acanta; CyberCerber; +2 Ответить
2. user649060 21.12.17 12:24 Сейчас в теме
(1)
жаль только , что нельзя делать импорт/экспорт

Можно же, все эти настройки в файлике .pfl
https://its.1c.ru/db/metod8dev/content/3746/hdoc/_top/pfl
Saint13; CyberCerber; +2 Ответить
5. pm74 201 21.12.17 14:14 Сейчас в теме
8. gavrilov_dv 22.12.17 10:42 Сейчас в теме
(2) Поделитесь настройками цветов пожалуйста!
Хочу такую схему, но на ручную настройку нервов не хватит)))
10. sandybaev 198 22.12.17 13:40 Сейчас в теме
13. Rokstedi 19 27.12.17 14:53 Сейчас в теме
(2) а дерево конфигурации и свойства белые остаються?
14. user649060 27.12.17 15:28 Сейчас в теме
(13) Эти настройки уже вроде хранятся в кэшах конкретных информационных баз
16. user649060 28.12.17 12:48 Сейчас в теме
(14) брр.. не так понял вопрос. думал вопрос про сохранение положений окон с деревом и свойствами
15. sandybaev 198 28.12.17 08:46 Сейчас в теме
(13) К огромному сожалению остальное белое
26. triviumfan 94 02.06.21 21:55 Сейчас в теме
(1)
Прикольная цветовая схема

Прикольная не значит, что от неё глаза не устают. Тут столько синего и тёмного, что мои глаза сходят с ума от увиденного.
mongiilol; Artem-B; Yashazz; +3 Ответить
3. bulpi 215 21.12.17 12:50 Сейчас в теме
Спасибо за подробные объяснения.
По нынешним временам перечисление GenderType M/F может быть недостаточно :)
mongiilol; Yimaida; sandybaev; +3 Ответить
4. sandybaev 198 21.12.17 13:26 Сейчас в теме
(3) :) без комментариев...
6. sansys 76 22.12.17 08:47 Сейчас в теме
Материал отличный, однозначно плюс!!! Как раз к стати, в январе придётся заниматься xsd схемами, а тут так шикарно разжёвано. Огромное спасибо за статью.
7. almas 254 22.12.17 10:36 Сейчас в теме
Спасибо. Читать тяжело, но полезно. Информации по данной теме в инете явно маловато.
9. sandybaev 198 22.12.17 12:12 Сейчас в теме
Спасибо. рад что пригодилось. если будут вопросы, помогу где знаю. пишите
11. Evil Beaver 8136 22.12.17 17:29 Сейчас в теме
Даешь больше статей про XDTO!

Ну и от меня, как от автора упомянутой "XDTO - это просто" - отдельное спасибо, что читаете и упоминаете.
mongiilol; davydoff; Alligator84; sandybaev; +4 Ответить
12. Uncore 1275 24.12.17 17:59 Сейчас в теме
Отдельный плюс за грамотность, приятно читать :)
sandybaev; +1 Ответить
17. klinval 339 28.12.17 15:57 Сейчас в теме
Тоже только недавно впервые начал работать с XDTO. Статья хорошая жалко её не было пару месяцев назад))

Хотел бы добавить к списку статей:
Пророк в своем отечестве или Читаем XML с помощью XDTO
Там сквозной мини пример. Мне очень пригодился.
//infostart.ru/public/98019/ - похоже на «XDTO это просто», но сыроват

Не согласен. Мне наоборот эта статья больше понравилась чем «XDTO это просто». Но о вкусах не спорят))
18. Dzenn 876 16.02.18 10:26 Сейчас в теме
Круто, молодец, отличная работа и отличное изложение
19. kild 89 19.02.18 23:55 Сейчас в теме
Спасибо за статью. Скриншоты кода, 50 оттенков синего... Самый опасный цвет для глаз
20. Negator 03.07.18 10:25 Сейчас в теме
Народ, а подскажите как используя XSD-схему собирать XML с несколькими корневыми свойствами?
Я создал фабрику XDTO, создал столько объектов сколько у меня корневых свойств (с соответствующими типами), заполнил их - как их теперь собрать в один XML-файл?
21. rozer 309 04.12.18 15:18 Сейчас в теме
Класс, очень помогло. Но мне показалось что очень перегружен код когда в цикле перебираешь свойства. Я решил что проще будет сразу получать напрямую по имени свойства типо Свойства.Получить("блаблабла").Тип.
22. kembrik 10 06.12.18 17:02 Сейчас в теме
Блин, лучшая статья) Чётко, "Для чайников", по делу.
topchydv; +1 Ответить
23. kembrik 10 07.12.18 15:06 Сейчас в теме
Небольшое дополнение, сам часок помучился.

Допустим нам нужно выгрузить все договора контрагентов, и max= -1

Тогда конструкция

 ИначеЕсли СвойствоContractorDto.Имя="Contracts" Тогда	
			 ОбъектContractDto=ФабрикаXDTO.Создать(СвойствоContractorDto.Тип);
			    ОбъектContractDto.Number="666";
ОбъектContractorDto.Contracts=ОбъектContractDto;


Работать не будет, а упадет с ошибкой (мол поле недоступно для записи)

Добавлять надо вот так:

 ИначеЕсли СвойствоContractorDto.Имя="Contracts" Тогда	
   ОбъектContractDto=ФабрикаXDTO.Создать(СвойствоContractorDto.Тип);
   ОбъектContractDto.Number="666";
  ОбъектContractorDto.Contracts.Добавить(ОбъектContractDto);
24. sashapere 159 28.07.20 22:40 Сейчас в теме
25. user1035175 2 23.12.20 23:05 Сейчас в теме
Есть пакет в котором только корневое свойство. Хочу получить объект :
НашПакет =  ФабрикаXDTO.Пакеты.Получить("https://nechto.com/");
СвойствоRequest = НашПакет.КорневыеСвойства.Получить("Request");
ОбъектRequest     =  ФабрикаXDTO.Создать(СвойствоRequest.Тип);


У объекта есть все свойства но они имеют значение Неопределенно.
Заполнить их не получается.
Получить объект из них тоже.
ОбъектDocNum = ФабрикаXDTO.Создать(ОбъектRequest.DocNum.ВладеющееСвойство.Тип);

т.к. ОбъектRequest.DocNum Неопределённо
В чем может быть проблема?
27. triviumfan 94 02.06.21 22:10 Сейчас в теме
Сторонний сервис имеет свой API по приему файлов, на выходе выдает некий код «батч»

Что за "батч"? батч-код?
К примеру, на рис.3 видно, что у свойства «FirstName» один параметр «Name» является типом, ссылка на которую уводит в ветку «Типы объектов», а уже таааам указывается, что это за тип и что он в себе еще дополнительно содержит.

Не вижу name, вижу text.
Так и не понимаю, зачем мне мучаться с xdto, если проще и быстрее по старинке.
28. topchydv 17.06.21 14:28 Сейчас в теме
Отличная статья! Как раз сейчас делаю все тоже самое что и автор: направление и ошибки! Очень сильно помог!
Оставьте свое сообщение