8.х ОБМЕН Объект XDTO

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем bearpaw, 2 апр 2013.

  1. TopicStarter Overlay
    bearpaw
    Offline

    bearpaw

    Регистрация:
    2 апр 2013
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Создаю веб-сервис


    Код:
    Функция read(code)
    Код= Строка(code) ;
    Возврат Код ;
    
    КонецФункции
    Возврат функции стоит String (XMLSchema)

    code имеет тип String (XMLSchema)

    Когда делаю запрос

    <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <soap:Header/>
    <soap:Body>
    <xs:read>
    <xs:code>150800</xs:code>
    </xs:read>
    </soap:Body>
    </soap:Envelope>

    то получаю ответ


    <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <soap:Header/>
    <soap:Body>
    <m:readResponse xmlns:m="http://www.w3.org/2001/XMLSchema">
    <m:return xsi:type="m:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">ОбъектXDTO</m:return>
    </m:readResponse>
    </soap:Body>
    </soap:Envelope>

    Т.е. получаеться что на вход я подаю уже объект. Как из него извлечь значение 150800 ?
  2. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    на входе - объект xdto с параметрами.

    если xdto описан в конфигурации, то code.code
  3. TopicStarter Overlay
    bearpaw
    Offline

    bearpaw

    Регистрация:
    2 апр 2013
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    спасибо!!!!
    помогло

    Код:
    Функция read(code)
    Сериализатор=Новый СериализаторXDTO(ФабрикаXDTO);
    МойСписокЗначений=Сериализатор.ПрочитатьXDTO(code);
    
    Возврат МойСписокЗначений ;
    
    КонецФункции
    

    <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <soap:Header/>
    <soap:Body>
    <xs:read>
    <xs:code>150800</xs:code>
    </xs:read>
    </soap:Body>
    </soap:Envelope>


    <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <soap:Header/>
    <soap:Body>
    <m:readResponse xmlns:m="http://www.w3.org/2001/XMLSchema">
    <m:return xsi:type="m:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">150800</m:return>
    </m:readResponse>
    </soap:Body>
    </soap:Envelope>
  4. TopicStarter Overlay
    bearpaw
    Offline

    bearpaw

    Регистрация:
    2 апр 2013
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Помогите еще . Немогу понять как такое сделать
    Необходимо на вход подавать XML
    Сделал пакет XDTO
    [xml]<xs:schema xmlns:tns="http://NomTest" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://NomTest" attributeFormDefault="unqualified" elementFormDefault="qualified">
    <xs:complexType name="List">
    <xs:sequence>
    <xs:element name="Nom" type="xs:string" nillable="true"/>
    </xs:sequence>
    </xs:complexType>
    </xs:schema>[/xml]

    Сделал метод
    Код:
    Функция readNom(inField)
    Возврат "2345";
    КонецФункции
    
    InField объявил как тип List (http://NomTest)

    на вход обращаюсь как

    [xml]<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <soapenv:Header/>
    <soapenv:Body>
    <xs:readNom>
    <xs:inField>
    <List><Nom>123</Nom></List>
    </xs:inField>
    </xs:readNom>
    </soapenv:Body>
    </soapenv:Envelope>[/xml]

    на входе получаю

    [xml]<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header/>
    <soap:Body>
    <soap:Fault>
    <faultcode>soap:Client</faultcode>
    <faultstring>Неизвестная ошибка. Ошибка преобразования данных XDTO:
    Чтение объекта типа: {http://NomTest}List - [11,4]
    Проверка дополнительного свойства:
    форма: Элемент
    имя: List
    по причине:
    Ошибка преобразования данных XDTO:
    Чтение объекта типа: {http://NomTest}List - [11,4]
    Проверка дополнительного свойства:
    форма: Элемент
    имя: List
    по причине:
    Ошибка проверки данных XDTO:
    Структура объекта не соответствует типу: {http://NomTest}List</faultstring>
    <detail>Неизвестная ошибка. Ошибка преобразования данных XDTO:
    Чтение объекта типа: {http://NomTest}List - [11,4]
    Проверка дополнительного свойства:
    форма: Элемент
    имя: List
    по причине:
    Ошибка преобразования данных XDTO:
    Чтение объекта типа: {http://NomTest}List - [11,4]
    Проверка дополнительного свойства:
    форма: Элемент
    имя: List
    по причине:
    Ошибка проверки данных XDTO:
    Структура объекта не соответствует типу: {http://NomTest}List</detail>
    </soap:Fault>
    </soap:Body>
    </soap:Envelope>[/xml]

    Что необходимо изменить?
    Возможно есть статьи в которых описано как подавать данные XML в Web сервис?
  5. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    тэг <List> из конверта уберите - вы объявили тип List, а не элемент с этим именем

    просто почитайте любую литературу по xml, xsd и soap - эти вещи так сказать общечеловеческие и относятся не только к 1с
  6. TopicStarter Overlay
    bearpaw
    Offline

    bearpaw

    Регистрация:
    2 апр 2013
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Можете пояснить как убрать?
  7. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    на входе должно быть
    [xml]<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <soapenv:Header/>
    <soapenv:Body>
    <xs:readNom>
    <xs:inField>
    <Nom>123</Nom>
    </xs:inField>
    </xs:readNom>
    </soapenv:Body>
    </soapenv:Envelope>[/xml]
  8. TopicStarter Overlay
    bearpaw
    Offline

    bearpaw

    Регистрация:
    2 апр 2013
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Так я пробовал до того момента как написать сюда
    Но на всякий случай проверил ваш вариант

    [xml]<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header/>
    <soap:Body>
    <soap:Fault>
    <faultcode>soap:Client</faultcode>
    <faultstring>Неизвестная ошибка. Ошибка преобразования данных XDTO:
    Чтение объекта типа: {http://NomTest}List - [10,4]
    Проверка дополнительного свойства:
    форма: Элемент
    имя: Nom
    по причине:
    Ошибка преобразования данных XDTO:
    Чтение объекта типа: {http://NomTest}List - [10,4]
    Проверка дополнительного свойства:
    форма: Элемент
    имя: Nom
    по причине:
    Ошибка проверки данных XDTO:
    Структура объекта не соответствует типу: {http://NomTest}List</faultstring>
    <detail>Неизвестная ошибка. Ошибка преобразования данных XDTO:
    Чтение объекта типа: {http://NomTest}List - [10,4]
    Проверка дополнительного свойства:
    форма: Элемент
    имя: Nom
    по причине:
    Ошибка преобразования данных XDTO:
    Чтение объекта типа: {http://NomTest}List - [10,4]
    Проверка дополнительного свойства:
    форма: Элемент
    имя: Nom
    по причине:
    Ошибка проверки данных XDTO:
    Структура объекта не соответствует типу: {http://NomTest}List</detail>
    </soap:Fault>
    </soap:Body>
    </soap:Envelope>[/xml]

    на всякий случай попробовал добавить xmlns:ns0="http://NomTest" в описание и сделал
    <ns0:Nom>123</ns0:Nom>

    т.е.
    [xml]<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns0="http://NomTest">
    <soapenv:Header/>
    <soapenv:Body>
    <xs:readNom>
    <xs:inField>
    <ns0:Nom>123</ns0:Nom>
    </xs:inField>
    </xs:readNom>
    </soapenv:Body>
    </soapenv:Envelope>[/xml]

    получил

    [xml]<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header/>
    <soap:Body>
    <m:readNomResponse xmlns:m="http://www.w3.org/2001/XMLSchema">
    <m:return xsi:type="d2p1:List" xmlns:d2p1="http://NomTest" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <d2p1:Nom>123</d2p1:Nom>
    </m:return>
    </m:readNomResponse>
    </soap:Body>
    </soap:Envelope>[/xml]

    тоже результат

    Так я пробовал до того момента как написать сюда
    проверил ваш вариант

    [xml]<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header/>
    <soap:Body>
    <soap:Fault>
    <faultcode>soap:Client</faultcode>
    <faultstring>Неизвестная ошибка. Ошибка преобразования данных XDTO:
    Чтение объекта типа: {http://NomTest}List - [10,4]
    Проверка дополнительного свойства:
    форма: Элемент
    имя: Nom
    по причине:
    Ошибка преобразования данных XDTO:
    Чтение объекта типа: {http://NomTest}List - [10,4]
    Проверка дополнительного свойства:
    форма: Элемент
    имя: Nom
    по причине:
    Ошибка проверки данных XDTO:
    Структура объекта не соответствует типу: {http://NomTest}List</faultstring>
    <detail>Неизвестная ошибка. Ошибка преобразования данных XDTO:
    Чтение объекта типа: {http://NomTest}List - [10,4]
    Проверка дополнительного свойства:
    форма: Элемент
    имя: Nom
    по причине:
    Ошибка преобразования данных XDTO:
    Чтение объекта типа: {http://NomTest}List - [10,4]
    Проверка дополнительного свойства:
    форма: Элемент
    имя: Nom
    по причине:
    Ошибка проверки данных XDTO:
    Структура объекта не соответствует типу: {http://NomTest}List</detail>
    </soap:Fault>
    </soap:Body>
    </soap:Envelope>[/xml]

    на всякий случай попробовал добавить xmlns:ns0="http://NomTest" в описание и сделал
    <ns0:Nom>123</ns0:Nom>

    т.е.
    [xml]<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns0="http://NomTest">
    <soapenv:Header/>
    <soapenv:Body>
    <xs:readNom>
    <xs:inField>
    <ns0:Nom>123</ns0:Nom>
    </xs:inField>
    </xs:readNom>
    </soapenv:Body>
    </soapenv:Envelope>[/xml]

    получил

    [xml]<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header/>
    <soap:Body>
    <m:readNomResponse xmlns:m="http://www.w3.org/2001/XMLSchema">
    <m:return xsi:type="d2p1:List" xmlns:d2p1="http://NomTest" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <d2p1:Nom>123</d2p1:Nom>
    </m:return>
    </m:readNomResponse>
    </soap:Body>
    </soap:Envelope>[/xml]

    тоже результат
  9. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    да, пространство имен тоже нужно.

    ну собственно результат вы уже получили. теперь смотрите на ваш веб-сервис - у него возвращаемое значение видать не string, а ваш List.
  10. TopicStarter Overlay
    bearpaw
    Offline

    bearpaw

    Регистрация:
    2 апр 2013
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Я код поменял функции поэтому такой результат
    Спасибо!!

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