Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 12:46

Обработка веб-сервиса

Автор sergwi, 15 мая 2014, 15:09

0 Пользователей и 1 гость просматривают эту тему.

sergwi

Добрый день.
Делаем веб-сервис, с которого 1с будет забирать данные.
Столкнулись с проблемой, 1с не хочет работать со списками...

wsdl

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="services_avia_bookings" targetNamespace="http://schemas.xmlsoap.org/wsdl/soap12/">
  <types>
    <schema targetNamespace="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns="http://www.w3.org/2001/XMLSchema">
      <xsd:complexType name="booking">
        <xsd:sequence>
          <xsd:element name="reservation_code" type="xsd:string"/>
          <xsd:element name="created_at" type="xsd:dateTime"/>
          <xsd:element name="paid_at" type="xsd:dateTime"/>
          <xsd:element name="validating_airline_code" type="xsd:string"/>
          <xsd:element name="payer_fullname" type="xsd:string"/>
          <xsd:element name="airlines_deduction" type="xsd:int"/>
          <xsd:element name="comission_fee" type="xsd:int"/>
          <xsd:element name="total_price" type="xsd:int"/>
          <xsd:element name="payment_gateway" type="xsd:string"/>
          <xsd:element name="passenger_fullname" type="xsd:string"/>
          <xsd:element name="passengers" type="tns:passengers"/>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="passengers">
        <xsd:sequence>
          <xsd:element name="passenger" type="tns:passenger" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="passenger">
        <xsd:sequence>
          <xsd:element name="name" type="xsd:string"/>
        </xsd:sequence>
      </xsd:complexType>
    </schema>
  </types>
  <portType name="services_avia_bookings_port">
    <operation name="for_period">
      <input message="tns:for_period"/>
      <output message="tns:for_period_response"/>
    </operation>
    <operation name="by_reservation_code">
      <input message="tns:by_reservation_code"/>
      <output message="tns:by_reservation_code_response"/>
    </operation>
  </portType>
  <binding name="services_avia_bookings_binding" type="tns:services_avia_bookings_port">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="for_period">
      <soap:operation soapAction="for_period"/>
      <input>
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://schemas.xmlsoap.org/wsdl/soap12/"/>
      </input>
      <output>
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://schemas.xmlsoap.org/wsdl/soap12/"/>
      </output>
    </operation>
    <operation name="by_reservation_code">
      <soap:operation soapAction="by_reservation_code"/>
      <input>
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://schemas.xmlsoap.org/wsdl/soap12/"/>
      </input>
      <output>
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://schemas.xmlsoap.org/wsdl/soap12/"/>
      </output>
    </operation>
  </binding>
  <service name="service">
    <port name="services_avia_bookings_port" binding="tns:services_avia_bookings_binding">
      <soap:address location="https://xxx.com/bookings/action"/>
    </port>
  </service>
  <message name="for_period">
    <part name="paid_at_from" type="xsd:date"/>
    <part name="paid_at_to" type="xsd:date"/>
  </message>
  <message name="for_period_response">
    <part name="value" type="xsd:string"/>
  </message>
  <message name="by_reservation_code">
    <part name="reservation_code" type="xsd:string"/>
  </message>
  <message name="by_reservation_code_response">
    <part name="booking" type="tns:booking" xsi:minOccurs="0" xsi:maxOccurs="unbounded"/>
  </message>
</definitions>



Ответ сервиса:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://schemas.xmlsoap.org/wsdl/soap12/">
   <soap:Body>
      <tns:by_reservation_code_response>
         <booking xsi:type="tns:booking">
            <reservation_code xsi:type="xsd:string">27ВВВВ</reservation_code>
            <created_at xsi:type="xsd:dateTime">2014-02-10 09:01:45 UTC</created_at>
            <paid_at xsi:type="xsd:dateTime">2014-02-21 12:37:37 UTC</paid_at>
            <validating_airline_code xsi:type="xsd:string">PS</validating_airline_code>
            <payer_fullname xsi:type="xsd:string">serg</payer_fullname>
            <airlines_deduction xsi:type="xsd:int">11</airlines_deduction>
            <comission_fee xsi:type="xsd:int">11</comission_fee>
            <total_price xsi:type="xsd:int">11</total_price>
            <payment_gateway xsi:type="xsd:string">11</payment_gateway>
            <passenger_fullname xsi:type="xsd:string">11</passenger_fullname>
            <passengers xsi:type="tns:passengers">
               <passenger xsi:type="tns:passenger">
                  <name xsi:type="xsd:string">ADULT SOME</name>
               </passenger>
               <passenger xsi:type="tns:passenger">
                  <name xsi:type="xsd:string">ADULT WERWER</name>
               </passenger>
               <passenger xsi:type="tns:passenger">
                  <name xsi:type="xsd:string">SOME ADULT</name>
               </passenger>
               <passenger xsi:type="tns:passenger">
                  <name xsi:type="xsd:string">INFANT ASDDF</name>
               </passenger>
            </passengers>
         </booking>
      </tns:by_reservation_code_response>
   </soap:Body>
</soap:Envelope>


1с ругается:
{Форма.Форма.Форма(8)}: Помилка при виклику методу контексту (by_reservation_code)
ДанныеОБроне = ServBooking.by_reservation_code(Об);
через:
Помилка виклику операції сервісу:  {http://schemas.xmlsoap.org/wsdl/soap12/}:service:by_reservation_code()
через:
Невідома помилка. Невідповідність типів XDTO:
Властивість є списковим
через:
Невідповідність типів XDTO:
Властивість є списковим

я так понимаю из-за passengers

или если несколько элементов booking:
{Форма.Форма.Форма(8)}: Помилка при виклику методу контексту (by_reservation_code)
ДанныеОБроне = ServBooking.by_reservation_code(Об);
через:
Помилка виклику операції сервісу:  {http://schemas.xmlsoap.org/wsdl/soap12/}:service:by_reservation_code()
через:
Невідома помилка. Занадто багато параметрів операції
через:
Занадто багато параметрів операції

mixqn

Хорошо бы 1С-ный код увидеть. Фрагмент несколько строк до и несколько после строки с ошибкой

sergwi

1c код:

Процедура КнопкаВыполнитьНажатие(Кнопка)

Определение=Новый WSОпределения("https://xxx/wsdl");
ServBooking =  Новый WSПрокси(Определение, "http://schemas.xmlsoap.org/wsdl/soap12/", "service", "services_avia_bookings_port");
Тип = ServBooking.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "string");
Об = ServBooking.ФабрикаXDTO.Создать(Тип, НомерБрони);
ДанныеОБроне = ServBooking.by_reservation_code(Об);

КонецПроцедуры

Теги:
Рейтинг@Mail.ru

Поиск