1С WEB - Сервис обмен SOAP WSDL

Запрос перечня услуг, доступных для партнёра
Для запроса перечня услуг необходимо вызвать процедуру ServisesWithoutSupplier.

Входные переменные

Имя переменной - partnerID
Тип - string
Комментарий - Уникальный идентификатор партнёра

Выходные переменные

Имя переменной - serviceList
Тип - массив ServiceInfo (SerID - тип int, SerName - тип string)
Комментарий - Перечень доступных услуг
Имя переменной - error
Тип - Error
Комментарий - Ошибка обработки запроса, структура данных

Пример запроса

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
      <ServisesWithoutSupplier xmlns="PayService.Service">
           <partnerID> QWER-ASDF-ZXCV </partnerID>
      </ServisesWithoutSupplier>
  </soap:Body>
</soap:Envelope>

Пример ответа

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ServisesWithoutSupplierResponse xmlns="PayService.Service">
       <serviceList>
         <ServiceInfo>
              <SerID>500065</SerID>
              <SerName>ЖКУ</SerName>
          </ServiceInfo>
          <ServiceInfo>
              <SerID> 500284 </SerID>
              <SerName>ВЗНОС НА КАП.РЕМОНТ</SerName>
         </ServiceInfo>
       </serviceList>
     </ServisesWithoutSupplierResponse>
   </soap:Body>
</soap:Envelope>

```1c
    /////////////////////////////////////////////////////////////////

    WSОпределение = Новый WSОпределения(НашВебСервис);

    WSСервис=WSОпределение.Сервисы[0];

    Прокси = Новый WSПрокси(WSОпределение, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя)

    ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("ServisesWithoutSupplier");

    //Создаем параметр на основе типа и заполняем значение параметра partnerID.
    WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
    WSПараметр.partnerID = НашКодПартнера;
    serviceList = ";
    Error = ";

    //Вызываем метод веб-сервиса, получения перечня услуг .
    Прокси.ServisesWithoutSupplier(WSПараметр,serviceList,Error);
```

Выходит ошибка - При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Extra content at the end of the document
---
Разобрался

        Ошибка была из-за того что partnerID передавался как список параметров, а надо было как значение метод отработал правильно

 ServiceList = "";
 Error = "";

 //Вызываем метод веб-сервиса, получения перечня услуг .

 Прокси.ServisesWithoutSupplier(WSПараметр.partnerID,ServiceList,Error);

 Для Каждого Стр ИЗ ServiceList.ServiceInfo Цикл

 КонецЦикла;
---
Мы сталкивались с подобным - нужно экранировать вские точки, запятые и прочую ересь.
---
В описании указано, что входной параметр только один
Входные переменные

Имя переменной - partnerID
Тип - string
Комментарий - Уникальный идентификатор партнёра
а Вы передаете три параметра при вызове метода

```1c
    Прокси.ServisesWithoutSupplier(WSПараметр,serviceList,Error);
```

"serviceList" и "error" - выходные параметры, т.е. то, что Вам отправляет сервис
---
Прокси.ServisesWithoutSupplier(WSПараметр) - Недостаточно фактических параметров
---
При чем
```1c
    Прокси.ServisesWithoutSupplier(WSПараметр,serviceList,Error);
```
 само по себе написано не верно, т.к. предполагается возврат параметров, т.е. "ServisesWithoutSupplier" - функция. Правильно как-то так

```1c
    Ответ = Прокси.ServisesWithoutSupplier(WSПараметр)
```
---
Запрос перечня услуг, доступных для партнёра
Для запроса перечня услуг необходимо вызвать процедуру ServisesWithoutSupplier.

Входные переменные

Имя переменной - partnerID
Тип - string
Комментарий - Уникальный идентификатор партнёра

Выходные переменные

Имя переменной - serviceList
Тип - массив ServiceInfo (SerID - тип int, SerName - тип string)
Комментарий - Перечень доступных услуг
Имя переменной - error
Тип - Error
Комментарий - Ошибка обработки запроса, структура данных

Пример запроса

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
      <ServisesWithoutSupplier xmlns="PayService.Service">
           <partnerID> QWER-ASDF-ZXCV </partnerID>
      </ServisesWithoutSupplier>
  </soap:Body>
</soap:Envelope>

Пример ответа

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ServisesWithoutSupplierResponse xmlns="PayService.Service">
       <serviceList>
         <ServiceInfo>
              <SerID>500065</SerID>
              <SerName>ЖКУ</SerName>
          </ServiceInfo>
          <ServiceInfo>
              <SerID> 500284 </SerID>
              <SerName>ВЗНОС НА КАП.РЕМОНТ</SerName>
         </ServiceInfo>
       </serviceList>
     </ServisesWithoutSupplierResponse>
   </soap:Body>
</soap:Envelope>

////////////////////////////////////////////////////////////­/////

WSОпределение = Новый WSОпределения(НашВебСервис);

WSСервис=WSОпределение.Сервисы[0];

Прокси = Новый WSПрокси(WSОпределение, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя)

ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("ServisesWithoutSupplier");

//Создаем параметр на основе типа и заполняем значение параметра partnerID.
WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
WSПараметр.partnerID = НашКодПартнера;
serviceList = "";
Error = "";

//Вызываем метод веб-сервиса, получения перечня услуг .
Прокси.ServisesWithoutSupplier(WSПараметр,serviceList,Error);

Выходит ошибка - При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Extra content at the end of the document

(4)
---
ServisesWithoutSupplier - это процедура
---
Вряд ли, т.к. есть выходные параметры, т.е. метод что-то возвращает.
---
Ответ = Прокси.ServisesWithoutSupplier(WSПараметр) так проверял писал ошибку попытка обратиться к процедуре как к функции
---
Загрузил WS ссылку в 1С

         Модель данных
                             Пакет
                                  Типы объектов
                                              ServisesWithoutSupplier (запрос)
                                                                    - partnerID
                                              ServisesWithoutSupplierResponse (Ответ)
                                                                    - serviceList
                                                                    - Error
         Web - сервис
                           Имя
                               ИмяSOAP
                                      ServisesWithoutSupplier (запрос)
                                                                    - partnerID (Направление - Входной)
                                                                    - serviceList (Направление - Выходной)
                                                                    - Error (Направление - Выходной)
---
Можете тут скинуть ссылку на данный сервис, посмотрю.
---
Там доступ по IP не получится можно по anydesk
---
Я хотел просто загрузить и описание сервиса (структуру) посмотреть.
---
Могу структуру в пустую базу загрузить или в расширение и отправить
---
Давайте так, посмотрим. Просто у меня не укладывается в голове, как процедура может что-то Вам вернуть в качестве ответа.
---
Запрос по SOAPUI
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pay="PayService.Service">
   <soapenv:Header/>
   <soapenv:Body>
      <pay:ServisesWithoutSupplier>
         <!--Optional:-->
         <pay:partnerID>111111111111111</pay:partnerID>
      </pay:ServisesWithoutSupplier>
   </soapenv:Body>
</soapenv:Envelope>
Ответ
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <ServisesWithoutSupplierResponse xmlns="PayService.Service">
         <serviceList>
            <ServiceInfo>
               <SerID>111</SerID>
               <SerName>Имя1</SerName>
            </ServiceInfo>
            <ServiceInfo>
               <SerID>222</SerID>
               <SerName>Имя2</SerName>
            </ServiceInfo>
         </serviceList>
      </ServisesWithoutSupplierResponse>
   </soap:Body>
</soap:Envelope>
---
Я сам не понимаю, но 1С ругается
 Как вы подключитесь?
---
Я подключаться не планирую, т.к., скорее всего, у Вас авторизация не открытая. Я хочу посмотреть структуру сервиса и параметров, как передаваемых, так и возвращаемых. Может что-то и прояснится.
---
Напиши почту куда отправить расширение
---
koln75@mail.ru
---
отправил
---
Судя по структуре, похоже, что передавать нужно все параметры. В таком случае, вместо
serviceList = "";
Error = "";
добавьте код
```1c
    ПараметрМассива = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("ArrayOfServiceInfo");
    ОбъектМассива = Прокси.ФабрикаXDTO.Создать(ПараметрМассива);

    ПараметрОшибки = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("Error");
    ОбъектОшибки = Прокси.ФабрикаXDTO.Создать(ПараметрОшибки);

    Прокси.ServisesWithoutSupplier(WSПараметр,ОбъектМассива,ОбъектОшибки);
```

и в метод "ServisesWithoutSupplier" передавайте все три параметра

```1c
    Прокси.ServisesWithoutSupplier(WSПараметр,ОбъектМассива,ОбъектОшибки);
```
---
Все равно ошибка

При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Extra content at the end of the document

Пробовал список = Прокси.ServisesWithoutSupplier(WSПараметр,ОбъектМассива,ОбъектОшибки); тоже ошибка обращение к процедуре как к функции

Такое чувство что 1С неправильно считывает из WSDL

Тестировал с помощью обработки WSreader в 1С нет возвращаемого значения (фото приложил)

Метод Status отработал правильно (получает информацию) там правда только один параметр

Метод Pay тоже работает (записывает данные в сервис)
---
Попробуйте этот код

```1c
    ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("ServisesWithoutSupplier");
    WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
    WSПараметр.partnerID = "НашКодПартнера";

    ПараметрServiceInfo = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("ServiceInfo");
    ОбъектServiceInfo = Прокси.ФабрикаXDTO.Создать(ПараметрServiceInfo);
    ОбъектServiceInfo.SerID = 0;

    ПараметрМассива = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("ArrayOfServiceInfo");
    ОбъектМассива = Прокси.ФабрикаXDTO.Создать(ПараметрМассива);
    ОбъектМассива.ServiceInfo.Добавить(ОбъектServiceInfo);

    ПараметрОшибки = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("Error");
    ОбъектОшибки = Прокси.ФабрикаXDTO.Создать(ПараметрОшибки);
    ОбъектОшибки.ID = 0;

    Прокси.ServisesWithoutSupplier(WSПараметр,ОбъектМассива,ОбъектОшибки);
```

ранее не учел некоторые моменты
---
Так же ошибка (
---
А попробуйте закомментировать
ОбъектServiceInfo.SerID = 0;
и
ОбъектОшибки.ID = 0;
---
Так же ошибка
---
Фантазия иссякла (
---
Ну почему с одним параметром не проходит-то? Даже в примере передается один параметр

Пример запроса

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ServisesWithoutSupplier xmlns="PayService.Service">
<partnerID> QWER-ASDF-ZXCV </partnerID>
</ServisesWithoutSupplier>
</soap:Body>
</soap:Envelope>
---
А не пробовали другим софтом отработать? например SoapUI.
---
Делал все хорошо

Запрос по SOAPUI

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pay="PayService.Service">
<soapenv:Header/>
<soapenv:Body>
<pay:ServisesWithoutSupplier>
<!--Optional:-->
<pay:partnerID>111111111111111</pay:partnerID>
</pay:ServisesWithoutSupplier>
</soapenv:Body>
</soapenv:Envelope>

Ответ

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ServisesWithoutSupplierResponse xmlns="PayService.Service">
<serviceList>
<ServiceInfo>
<SerID>111</SerID>
<SerName>Имя1</SerName>
</ServiceInfo>
<ServiceInfo>
<SerID>222</SerID>
<SerName>Имя2</SerName>
</ServiceInfo>
</serviceList>
</ServisesWithoutSupplierResponse>
</soap:Body>
</soap:Envelope>

Сам без понятия в чем может быть дело
---
Такое чувство что 1С не видит что это функция либо неправильно считывает WSDL
---
ПО SOAPUI отрабатывал
Отправлял один параметр и получил список услуг
все хорошо
---
Значит что-то не так с самим параметром. Решил проверить, как преобразовывается XDTOОбъект в строку XML. Добавил такой код

```1c
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();
    ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, WSПараметр);
    ТекстОбъектаXDTO = ЗаписьXML.Закрыть();
```

 и получил ошибку Несоответствие типов XDTO:
Тип '{PayService.Service}ServisesWithoutSupplier' не найден
Тип принадлежит пакету, отсутствующему в фабрике типов XDTO
{ВнешняяОбработка.HTTPЗапрос.Форма.Форма.Форма(187)}: ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, WSПараметр);

по причине:
Несоответствие типов XDTO:
Тип '{PayService.Service}ServisesWithoutSupplier' не найден
Тип принадлежит пакету, отсутствующему в фабрике типов XDTO
---
Попробуйте на основе данной ссылки создать в конфигураторе новый XDTO-пакет. И вот уже на основе данного пакета создавать XDTOОбъект. Есть подозрение, что он не распознает объект, созданный на основе WS-ссылки
---
Отбой, изменил строку
```1c
    ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, WSПараметр);
```
 на
```1c
    Прокси.ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, WSПараметр);
```
 и получил строку <ServisesWithoutSupplier xmlns="PayService.Service" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <partnerID>НашКодПартнера</partnerID>
</ServisesWithoutSupplier>
---
Проверял обработками
https://infostart.ru/public/189891/ и https://infostart.ru/public/305383/ тоже пишут ошибку
При попытке выполнить метод ошибка Обращение к процедуре объекта как к функции (ServisesWithoutSupplier)
---
1. Сколько параметров передаете?
2. Я до сих пор не могу понять, почему идет обращение к процедуре, если даже SOAPUI показывает возвращенные данные

3. А у Вас нет доступа к отладчику на стороне веб-сервиса?
---
У меня единственный вариант 1С не правильно считывает WSDL
---
здравствуйте, публикация сервиса выполнена? это сообщение может говорить о том что 1С принимает только входящий запрос, но не формирует ответ, какой веб- сервер используется?
---
Это обмен с программой на оракле
Данные отправляет метод PAY
Данные получает метод STATUS

Отправлял запрос иp SoapUI метод отработал вернул список услуг

Фидлер перехватил при отправке - закладка RAW

POST http://172.67.112.6:10101/pays.asmx HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "PayService.Service/ServisesWithoutSupplier"
Content-Length: 349
Host: 172.67.112.6:10101
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pay="PayService.Service">
   <soapenv:Header/>
   <soapenv:Body>
      <pay:ServisesWithoutSupplier>
         <!--Optional:-->
         <pay:partnerID>4L4D052A16WKWZG0</pay:partnerID>
      </pay:ServisesWithoutSupplier>
   </soapenv:Body>
</soapenv:Envelope>

меня смущает эта строка <!--Optional:-->
---
Нет сторонняя организация
---
Разобрался

        Ошибка была из-за того что partnerID передавался как список параметров, а надо было как значение метод отработал правильно

 ServiceList = "";
 Error = "";

 //Вызываем метод веб-сервиса, получения перечня услуг .

 Прокси.ServisesWithoutSupplier(WSПараметр.partnerID,ServiceList,Error);

 Для Каждого Стр ИЗ ServiceList.ServiceInfo Цикл

 КонецЦикла;
---
Тогда, видимо, не нужно создавать и XDTO объект "WSПараметр". Просто
```1c
    partnerID = "Код партнера";
```
, как в случае ServiceList = "";
Error = "";. Тогда строка обращения к веб-сервису
```1c
    Прокси.ServisesWithoutSupplier(partnerID,ServiceList,Error);
```