Имя: Пароль:
1C
 
Интеграция 1С с Пони Экспресс. Через XDTO, не могу создать xml?
,
0 Radion
 
06.10.15
18:18
Добрый вечер, УТ 10.3. требуется интеграция с пони экспресс. Застопорился на сериализации через XDTO xml файла. Суть в следующем не могу понять как создать xml файл нужной структуры. Скачал xsd, грузанул создал пакет XDTO, осталось за малым создать xml. Перечитал Пытаюсь создать подобный тестовому файл не получается. (
1 Горогуля
 
06.10.15
18:22
очевидно, да
2 Radion
 
06.10.15
18:23
<?xml version="1.0" encoding="utf-8" ?>
- <Request xmlns:xsd="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:type="OrderRequest">
  <Mode>Order</Mode>
- <OrderList>
- <Order>
  <ClientsNumber>kb48-12744</ClientsNumber>
- <Payment>
  <Mode>Bill</Mode>
  </Payment>
- <ServiceList>
- <Service xsi:type="DeliveryService">
  <PickupDate>2015-10-01T00:00:00+03:00</PickupDate>
  <Mode>Express</Mode>
- <Sender>
- <Address>
  <Country>Россия</Country>
  <PostCode>127023</PostCode>
  <City>Москва</City>
  <StreetAddress>ул.Строителей, д.13</StreetAddress>
  </Address>
- <Company>
  <Name>ОАО "Компания"</Name>
  </Company>
- <PersonList>
- <Person>
  <Name>Петров Игорь Иванович</Name>
- <PhoneList>
  <string>+7 495 342-3422</string>
  <string>12-44</string>
  </PhoneList>
  </Person>
- <Person>
  <Name>Иванов Семен</Name>
- <PhoneList>
  <string>+7 910 456-7895</string>
  </PhoneList>
... кусок тестового файла
3 Serginio1
 
06.10.15
18:29
ЗаписьХМЛ= новый ЗаписьXML;
    ЗаписьХМЛ.УстановитьСтроку();
//Можешь Открыть файл и писать прямо в файл
    ФабрикаXDTO.записатьXML(ЗаписьХМЛ,ТвойОбъектXDTO,,,,НазначениеТипаXML.Явное);
    текст=Новый ТекстовыйДокумент;
    Текст.УстановитьТекст(ЗаписьХМЛ.Закрыть());
    Текст.Показать();
4 Radion
 
06.10.15
18:30
//Сериализация и отправка документов в ПониЭкспресс
    OrderRequest = ФабрикаXDTO.Создать("http://www.ponyexpress.ru/ws/track/v1","OrderRequest";);
    OrderRequest.Mode = "Order";
    
    DeliveryService = ФабрикаXDTO.Создать("http://www.ponyexpress.ru/ws/track/v1";, "DeliveryService");
    Для Каждого ТекДок Из ТаблицаЗаказов Цикл
        Если ЗначениеЗаполнено(ТекДок.АдресДоставки) Тогда
            Address = ФабрикаXDTO.Создать("http://www.ponyexpress.ru/ws/track/v1";, "Address");
            Address.PostCode     = ТекДок.Индекс;
            Address.Country      = ТекДок.Страна;
            Address.City         = ТекДок.Город;
            Address.District     = ТекДок.Район;
            Address.Region       = "";
            Address.StreetAddress= ТекДок.Улица;
            //DeliveryService.Добавить(Address);
            //DeliveryService.Sender.Добавить(Address);
        КонецЕсли;
    КонецЦикла;
    DeliveryService.Sender = Address;
    OrderRequest.OrderList = DeliveryService;
Получается:
<OrderRequest xmlns="http://www.ponyexpress.ru/ws/track/v1"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">;
    <Mode xsi:type="xs:string">Order</Mode>
    <OrderList xsi:type="DeliveryService">
        <Sender xsi:type="Address">
            <Country>Казахстан</Country>
            <Region/>
            <District/>
            <PostCode>005008</PostCode>
            <City>Актау</City>
            <StreetAddress>Шевченко 162А, кв 26</StreetAddress>
        </Sender>
    </OrderList>
</OrderRequest>
5 Radion
 
06.10.15
18:31
(3) Сергей, спасибо. Это работает (отправка). Я не могу грамотно с помощью XDTO сериализовать xml файл.
6 Radion
 
06.10.15
18:31
Чтобы отправить этот самый xml файл.
7 Serginio1
 
06.10.15
18:35
Так в 3 это и есть сериализация объекта XDTO
ТвойОбъектXDTO
8 Radion
 
06.10.15
18:38
(7) не правильно выразился, мне нужно добавить значение в структуру через xdto, и потом сериализовать.
9 Serginio1
 
06.10.15
18:38
Если тебе нужно Десериализовать, то
ЧтениеXML=Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайла);
ЧтениеXML.ПерейтиКСодержимому();
ОбъектXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ФабрикаXDTO.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));
10 Serginio1
 
06.10.15
18:39
Напиши код что и куда ты хочешь добавить.
11 Radion
 
06.10.15
18:42
вот в (2) есть такой тэг: <Sender>, хочу заполнить вложенный <Address>
12 Radion
 
06.10.15
18:43
у меня такое ощущение, что xsd импортированный в 1С некорректный (
13 Serginio1
 
06.10.15
18:45
Sender имеет тип Address?
DeliveryService.Sender=Address
Или он является AnyType?
Напиши, что в итоге хочешь получить
14 Serginio1
 
06.10.15
18:47
(12) Он корректный. Просто 1С не умеет читать.
Использование web-сервиса, wsdl-схема
15 Radion
 
06.10.15
18:57
(13) да DeliveryService.Sender имеет тип AnyType.
16 Radion
 
06.10.15
20:14
(14) а возможно реализовать наоборот. Если типы данных из xsd файла не читаются 1С, возможно сгенерировать новый xsd из файла примера xml? или кто нибудь сталкивался с этой проблемой?
17 Serginio1
 
06.10.15
20:14
Ну судя по всему у тебя аналогично 14.
1С не разобрала Sender.
18 Serginio1
 
06.10.15
20:15
Мне проще было через классы Net.
19 Radion
 
07.10.15
10:18
(18) понял. Спасибо.