1c и Soap

Тема в разделе "1C и всё что с ней связано", создана пользователем Ino, 25 ноя 2010.

Статус темы:
Закрыта.
  1. Ino

    Ino Гость

    Здравствуйте. Возникла задача интеграции 1С с PHP посредством веб-сервиса, публикуемого на стороне PHP и вызываемого из 1С. Веб-сервис работает нормально, однако проблемы начинаются при попытке передать сложный объект, в котором одним из полей (наряду с полями-примитивами) является поле сложного типа, а этот тип в свою очередь является массивом любых объектов (сложных или примитивов).

    Вот кусок описание типов из WSDL:

    <!--shcode--><pre><code class='xml'><xsd:complexType name="ArrayOfString">
    <xsd:sequence>
    <xsd:element name="item" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="Soap_Debug_Container">
    <xsd:all>
    <xsd:element name="field1" type="xsd:string" nillable="true"/>
    <xsd:element name="field2" type="xsd:int" nillable="true"/>
    <xsd:element name="field3" type="xsd:float" nillable="true"/>
    <xsd:element name="field4" type="xsd:boolean" nillable="true"/>
    <xsd:element name="nestedObjects" type="tns:ArrayOfString" nillable="true"/>
    </xsd:all>
    </xsd:complexType>[/CODE]

    Проблема состоит в том, что 1С не хочет воспринимать такой объект и при вызове метода веб-сервиса выдает следующую ошибку

    Для тестов также был создан другой веб-сервис, который и публикуется, и вызывается на стороне 1С. В данном веб-сервисе похожая структура типов (но не идентичная) описывается следующим образом:

    <!--shcode--><pre><code class='xml'><xsd:complexType name="Obj">
    <xsd:sequence>
    <xsd:element name="N" type="xsd:integer"/>
    <xsd:element name="D" type="xsd:date"/>
    <xsd:element name="S" type="xsd:string"/>
    <xsd:element name="B" type="xsd:boolean"/>
    <xsd:element maxOccurs="unbounded" minOccurs="0" name="Mas" type="tns:StrTZ"/>
    </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="StrTZ">
    <xsd:sequence>
    <xsd:element name="Num" type="xsd:integer"/>
    <xsd:element name="Dat" type="xsd:date"/>
    <xsd:element name="Str" type="xsd:string"/>
    <xsd:element name="Bul" type="xsd:boolean"/>
    </xsd:sequence>
    </xsd:complexType>[/CODE]

    Этот веб-сервис нормально вызывается и работает в 1С. Очевидно, что во втором случае отсутствует выделение сложного типа, такого как <xsd:complexType name="ArrayOfString"> в первом примере. Во втором случае, в ответе сервися 1С последовательность вложенных объектов (из 4х свойств каждый) находится на одном уровне с полями объекта. В первом же случае -- одно из полей имеет сложный тип, который является последовательностью объектов.
    Теперь, собственно, вопрос: является ли это проблемой 1С? Если да, то как можно заставить 1С воспринимать сложные типы вида "Массив сложных типов"?

    Также стоит упомянуть, что WSDL ссылка воспринимается 1С нормально и показывает верную структуру типов, а ошибка возникает именно при вызове метода, возвращающего такой объект. Для полной ясности, приведу также кусок ответа от сервера, в котором описывается этот объект:

    <!--shcode--><pre><code class='xml'><return xsi:type='ns1:Oir_Module_Sync_Soap_Debug_Container'>
    <field1 xsi:type='xsd:string'>Field 1 value</field1>
    <field2 xsi:type='xsd:int'>32</field2>
    <field3 xsi:type='xsd:float'>24.56</field3>
    <field4 xsi:type='xsd:boolean'>false</field4>
    <nestedObjects xsi:type='ns1:ArrayOfString'>
    <item xsi:type='xsd:string'>string0</item>
    <item xsi:type='xsd:string'>string1</item>
    ...
    </nestedObjects>
    </return>[/CODE]
     
  2. Mirage

    Mirage Гость

Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей