|
Импорт схемы xsd -> XDTO | ☑ | ||
---|---|---|---|---|
0
DrWeb
06.07.20
✎
16:09
|
Добрый день, коллеги. Вся эта история с XDTO варится у меня в котелке все выходные, поэтому уже начинает постепенно срывать крышечку... Импортирую схему:
<?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="message"> <xs:complexType> <xs:sequence> <xs:element name="order" maxOccurs="unbounded" minOccurs="1"> <xs:complexType> <xs:sequence> <xs:element name="item" maxOccurs="unbounded" minOccurs="1"> <xs:complexType> <xs:sequence> <xs:element name="sku" type="xs:string"/> <xs:element name="price" type="xs:decimal"/> <xs:element name="quantity" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> В результате получаю пакет со свойствами, но без типов. Соответственно ФабрикаXDTO.Тип(...) возвращает "Неопределено". Я конечно мог бы поразбираться и определить типы вручную, но какой тогда смысл в экспорте схемы? И как мне получить тип message из имеющегося описания пакета XDTO, чтобы потом сделать Объект = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, Тип); Я уже поизучал ветки "про это", но понятнее не стало. |
|||
1
Fragster
гуру
06.07.20
✎
16:10
|
в схеме должен ыть определен namespace
|
|||
2
Fragster
гуру
06.07.20
✎
16:11
|
сделай пакет в пустой базе, экспортни схему и сравни. сразу станет понятно, что не так
|
|||
3
sitex
naïve
06.07.20
✎
16:20
|
(2) Бывает платформа чудит и к примеру спискиXDTO фигачит как один объектXDTO.
|
|||
4
DrWeb
06.07.20
✎
16:22
|
(1) - он определен. По ошибке скопировал схему которую прислал разработчик плагина для сайта. Импортирую с прописанными ns:
<?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:tns="http://losthost.online/plugin/instock" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://losthost.online/plugin/instock" attributeFormDefault="unqualified" elementFormDefault="qualified"> <xs:element name="message"> <xs:complexType> <xs:sequence> <xs:element name="order" maxOccurs="unbounded" minOccurs="1"> <xs:complexType> <xs:sequence> <xs:element name="item" maxOccurs="unbounded" minOccurs="1"> <xs:complexType> <xs:sequence> <xs:element name="sku" type="xs:string"/> <xs:element name="price" type="xs:decimal"/> <xs:element name="quantity" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> |
|||
5
DrWeb
06.07.20
✎
16:24
|
Я просто хочу понять есть ли путь из нормальной схемы (а я подозреваю что присланная схема нормальная), получить нормальный рабочий пакет XDTO, или это фейковая функциональность в платформе и все на самом деле нужно делать руками?
|
|||
6
sitex
naïve
06.07.20
✎
16:26
|
(4) а вроде в начале это и не нужно <?xml version="1.0" encoding="utf-8"?>
|
|||
7
Полован
06.07.20
✎
16:30
|
(5) А зачем тебе вообще пакет ХДТО? Просто глобальной фабрикой читать/писать не катит?
|
|||
8
sitex
naïve
06.07.20
✎
16:32
|
(4) да и убери ; лишние
|
|||
9
sitex
naïve
06.07.20
✎
16:33
|
(4) <xs:schema xmlns:tns="http://losthost.online/plugin/instock" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://losthost.online/plugin/instock" attributeFormDefault="unqualified" elementFormDefault="qualified">
Вот должно быть |
|||
10
sitex
naïve
06.07.20
✎
16:33
|
+ (9) <xs:schema xmlns:tns="http://losthost.online/plugin/instock" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://losthost.online/plugin/instock" attributeFormDefault="unqualified" elementFormDefault="qualified">
|
|||
11
sitex
naïve
06.07.20
✎
16:34
|
(10) хм прикольно добавляется с точкой запятой...))
|
|||
12
arsik
гуру
06.07.20
✎
16:35
|
(11) Это Волшебник ворожит.
|
|||
13
Segate
06.07.20
✎
16:37
|
(4) если исправить ошибку с неймспейсами, то схема в этом сообщении грузится как надо со всеми типами...
|
|||
14
DrWeb
06.07.20
✎
16:44
|
(13) В чем ошибка? В (4) вроде нет ошибок, (если не считать точек с запятой, которых у меня нет), однако грузится без типов. Сейчас еще раз попробую.
|
|||
15
DrWeb
06.07.20
✎
16:48
|
Скрин после загрузки схемы из (4): https://yadi.sk/i/uml8Ot75S3RcSA
|
|||
16
DrWeb
06.07.20
✎
16:48
|
1С:Предприятие 8.3 (8.3.17.1386)
|
|||
17
Segate
06.07.20
✎
16:49
|
И что? ты тип полей то покажи )
|
|||
18
Segate
06.07.20
✎
16:52
|
Ааа... я понял ) У тебя в схеме не описаны рестрикшны к полям.
А ты хочешь, чтоб они отдельно упали в ограничение типа. Описаны базовые типы, собственно они и грузятся нормально. А зачем тебе симплтайпы получать через тип? |
|||
19
sitex
naïve
06.07.20
✎
16:54
|
(18) Имеется ввиду это наверно <xs:simpleType name="sku">
<xs:restriction base="xs:string"> <xs:length value="2"/> <xs:pattern value="[0-9]{2}"/> </xs:restriction> </xs:simpleType> |
|||
20
DrWeb
06.07.20
✎
16:54
|
(17) Ты про это?
https://yadi.sk/i/BXrKDiZs5GKnaQ https://yadi.sk/i/eh29q5RacgBvGg К этому то претензий нет. Но ФабрикаXDTO.Тип("http://losthost.online/plugin/instock", "message") возвращает Неопределено. Потому как message не тип, а свойство (подозреваю) (7) Потому что иначе не работает Для Каждого если item в ордере один. |
|||
21
Fragster
гуру
06.07.20
✎
16:56
|
Ну получи тип из КорневыеСвойства.твоесвойство.Тип() а не из ФабрикаXDTO.Тип)_
|
|||
22
DrWeb
06.07.20
✎
16:57
|
Собственно в этом и вопрос. Чтобы конструкция:
Для Каждого Строка Из ПереданныйОбъект.order.item Цикл //--- КонецЦикла работала даже когда item передан один |
|||
23
DrWeb
06.07.20
✎
16:58
|
(21) Это типа как? КорневыеСвойства у меня тоже на что-то ругались. Сейчас найду тот вариант
|
|||
24
Полован
06.07.20
✎
16:58
|
(22) Так проверка на тип ХДТО Объект или Список чем не нравится?
|
|||
25
Fragster
гуру
06.07.20
✎
16:59
|
(22) ну не, там еще автопреобразование примитивных типов, трансляция в объекты 1с (например по гуиду можно в ссылки превращать прям автоматом), контроль структуры
|
|||
26
Fragster
гуру
06.07.20
✎
16:59
|
(24) потому что это костыль
|
|||
27
DrWeb
06.07.20
✎
17:01
|
(26) +1
|
|||
28
Segate
06.07.20
✎
17:02
|
Будь мужиком, напиши xsl преобразование в струкутуру )
И используй стандартный сериализатор 1с! |
|||
29
sitex
naïve
06.07.20
✎
17:06
|
(28) Будь мужиком только хардкор!!!
|
|||
30
Fragster
гуру
06.07.20
✎
17:07
|
(28) я так выгрузку-загрузку данных xml дополнял, если структура только чуть-чуть поменялась, порядок свойств, добавить/удалить реквизит.
|
|||
31
sitex
naïve
06.07.20
✎
17:14
|
(5) Все таки лучше запросить нормальную схему со всеми описаниям.
|
|||
32
DrWeb
06.07.20
✎
17:30
|
(31) Я поверю что нормальная схема заработает, когда заработает не нормальная ))
Все равно че-то не хочет. Определяют тип через корневые свойства: Процедура ЧтениеXML(Кнопка) ХМЛ = "<?xml version=""1.0"" encoding=""UTF-8""?> |<message > | <order> | <item> | <sku>G-1221</sku> | <price>240.0000</price> | <quantity>3</quantity> | </item> | </order> |</message>"; ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(ХМЛ); КорневыеСвойства = ФабрикаXDTO.Пакеты.Получить("http://losthost.online/plugin/instock").КорневыеСвойства; Тип = КорневыеСвойства.Получить(0).Тип; Объект = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, Тип); КонецПроцедуры В итоге получаю: {ВнешняяОбработка.ВызовТестовойФункции.Форма.Форма.Форма(65)}: Ошибка при вызове метода контекста (ПрочитатьXML) Объект = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, Тип); по причине: Ошибка преобразования данных XDTO: Чтение объекта типа: - [10,11] Проверка дополнительного свойства: форма: Элемент имя: order по причине: Ошибка проверки данных XDTO: Структура объекта не соответствует типу: |
|||
33
Fragster
гуру
06.07.20
✎
17:35
|
крче, выложи твой xsd и твой xml на gist.github.com, а то неудобно
|
|||
34
Fragster
гуру
06.07.20
✎
17:36
|
вообще у тебя ошибка в десятой строке xml, т.е. он в районе конца order еще что-то ждет
|
|||
35
Segate
06.07.20
✎
17:40
|
(32) вот тебе тестовый xml
Он грузится твоим кодом абсолютно нормально. <?xml version="1.0" encoding="utf-8"?> <tns:message xmlns:tns="http://losthost.online/plugin/instock" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://losthost.online/plugin/instock file:///D:/%D0%92%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5%20%D1%84%D0%B0%D0%B9%D0%BB%D1%8B/123.xsd"> <tns:order> <tns:item> <tns:sku>string</tns:sku> <tns:price>197310.234905804</tns:price> <tns:quantity>3809270.2349058</tns:quantity> </tns:item> <tns:item> <tns:sku>string</tns:sku> <tns:price>-151039.765094196</tns:price> <tns:quantity>4833360.2349058</tns:quantity> </tns:item> </tns:order> <tns:order> <tns:item> <tns:sku>string</tns:sku> <tns:price>449350.234905804</tns:price> <tns:quantity>1739710.2349058</tns:quantity> </tns:item> <tns:item> <tns:sku>string</tns:sku> <tns:price>-1793139.7650942</tns:price> <tns:quantity>2213550.2349058</tns:quantity> </tns:item> <tns:item> <tns:sku>string</tns:sku> <tns:price>2536640.2349058</tns:price> <tns:quantity>-1856419.7650942</tns:quantity> </tns:item> <tns:item> <tns:sku>string</tns:sku> <tns:price>-469779.765094196</tns:price> <tns:quantity>2909620.2349058</tns:quantity> </tns:item> <tns:item> <tns:sku>string</tns:sku> <tns:price>-4034029.7650942</tns:price> <tns:quantity>2803280.2349058</tns:quantity> </tns:item> </tns:order> <tns:order> <tns:item> <tns:sku>string</tns:sku> <tns:price>2540880.2349058</tns:price> <tns:quantity>486900.234905804</tns:quantity> </tns:item> <tns:item> <tns:sku>string</tns:sku> <tns:price>-2881029.7650942</tns:price> <tns:quantity>-2853509.7650942</tns:quantity> </tns:item> <tns:item> <tns:sku>string</tns:sku> <tns:price>1550560.2349058</tns:price> <tns:quantity>3345610.2349058</tns:quantity> </tns:item> <tns:item> <tns:sku>string</tns:sku> <tns:price>-1503099.7650942</tns:price> <tns:quantity>-2175069.7650942</tns:quantity> </tns:item> <tns:item> <tns:sku>string</tns:sku> <tns:price>-4782589.7650942</tns:price> <tns:quantity>4186810.2349058</tns:quantity> </tns:item> </tns:order> </tns:message> Не благодари, и генерируй нормально сериализованную тест-дату |
|||
36
DrWeb
06.07.20
✎
17:41
|
(33) [email protected]:Datahider/instock.git
Файлы: пример сообщения с сайта.xml схема сообщения с сайта в 1С.xsd |
|||
37
Полован
06.07.20
✎
17:42
|
(26) (27) Да лучше убить полдня, чтобы найти некостыль, а потом наткнуться на XSD, который 1С не сможет загрузить в XDTO пакет.
|
|||
38
DrWeb
06.07.20
✎
17:45
|
(35) Это прекрасно, спасибо. Но от сайта я получаю <message>...</message>, а не <tns:message xmlns:tns=...
|
|||
39
DrWeb
06.07.20
✎
17:49
|
(34) не. Обсчитался: Я сделал | </order></message>";
Ошибка стала в 9,20. То есть ждет он после закрытия message. Чего бы ему там ждать - не ясно пока. |
|||
40
DrWeb
06.07.20
✎
17:52
|
(37) В твоей позиции есть рациональное зерно конечно. Но костыли - не красиво.
|
|||
41
Fragster
гуру
06.07.20
✎
18:06
|
все работает
|
|||
42
Fragster
гуру
06.07.20
✎
18:06
|
только в схему все-таки добавил targetNamespace
|
|||
43
Segate
06.07.20
✎
18:09
|
(38)У тебя в схеме нет указания namespace
В конце концов можно вот так вот сделать: ХМЛ = РеквизитФормыВЗначение("Объект").ПолучитьМакет("TecтXML").получитьТекст(); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(ХМЛ); ПостроительDOM = Новый ПостроительDOM; ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML); ЧтениеXML.Закрыть(); ДокументDOM.ПервыйДочерний.УдалитьАтрибут("xmlns"); ДокументDOM.ПервыйДочерний.УстановитьАтрибут("xmlns", "http://losthost.online/plugin/instock"); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); ЗаписьDOM = Новый ЗаписьDOM; ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML); ХМЛ = ЗаписьXML.Закрыть(); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(ХМЛ); КорневыеСвойства = ФабрикаXDTO.Пакеты.Получить("http://losthost.online/plugin/instock").КорневыеСвойства; Тип = КорневыеСвойства.Получить(0).Тип; dfsfsfsd = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, Тип); Но это конечно порнография Лучше затребовать нормально сериализованый xml |
|||
44
Fragster
гуру
06.07.20
✎
18:09
|
а, не, ошибка. забыл тип передать в Прочитать :)
|
|||
45
Fragster
гуру
06.07.20
✎
18:10
|
однако, если добавить еще один order, то ошибка не меняется, т.е. косяк именно с order
|
|||
46
Segate
06.07.20
✎
18:14
|
Ну и да...
Сам тестовый xml <?xml version="1.0" encoding="utf-8"?> <message> <order> <item> <sku>string</sku> <price>197310.234905804</price> <quantity>3809270.2349058</quantity> </item> <item> <sku>string</sku> <price>-151039.765094196</price> <quantity>4833360.2349058</quantity> </item> </order> <order> <item> <sku>string</sku> <price>449350.234905804</price> <quantity>1739710.2349058</quantity> </item> <item> <sku>string</sku> <price>-1793139.7650942</price> <quantity>2213550.2349058</quantity> </item> <item> <sku>string</sku> <price>2536640.2349058</price> <quantity>-1856419.7650942</quantity> </item> <item> <sku>string</sku> <price>-469779.765094196</price> <quantity>2909620.2349058</quantity> </item> <item> <sku>string</sku> <price>-4034029.7650942</price> <quantity>2803280.2349058</quantity> </item> </order> <order> <item> <sku>string</sku> <price>2540880.2349058</price> <quantity>486900.234905804</quantity> </item> <item> <sku>string</sku> <price>-2881029.7650942</price> <quantity>-2853509.7650942</quantity> </item> <item> <sku>string</sku> <price>1550560.2349058</price> <quantity>3345610.2349058</quantity> </item> <item> <sku>string</sku> <price>-1503099.7650942</price> <quantity>-2175069.7650942</quantity> </item> <item> <sku>string</sku> <price>-4782589.7650942</price> <quantity>4186810.2349058</quantity> </item> </order> </message> |
|||
47
DrWeb
06.07.20
✎
18:18
|
(43) Да, это сильный изврат )) Можно проще. Я получаю <message> - менять его заменой сроки на <message xmlns=...>
Да, попробовал, все заработало. В последнем моем примере где оно ждало что-то после <message> не работало именно из за того, что не было xmlns= Спасибо. targetNamespace в той схеме которую я импортировал конечно есть. Без него не импортируется. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |