1. surgut_dezvgr 26.03.20 07:45 Сейчас в теме

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

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>

/////////////////////////////////////////////////////////////////

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
Найденные решения
44. surgut_dezvgr 01.04.20 09:34 Сейчас в теме
Разобрался

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

ServiceList = "";
Error = "";

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

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

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

КонецЦикла;
Остальные ответы
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
2. danjer74 1 26.03.20 08:20 Сейчас в теме
(1)Мы сталкивались с подобным - нужно экранировать вские точки, запятые и прочую ересь.
3. koln 26.03.20 08:36 Сейчас в теме
(1) В описании указано, что входной параметр только один
Входные переменные

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

а Вы передаете три параметра при вызове метода
Прокси.ServisesWithoutSupplier(WSПараметр,serviceList,Error);


"serviceList" и "error" - выходные параметры, т.е. то, что Вам отправляет сервис
7. surgut_dezvgr 26.03.20 08:51 Сейчас в теме
(3) Прокси.ServisesWithoutSupplier(WSПараметр) - Недостаточно фактических параметров
4. koln 26.03.20 08:39 Сейчас в теме
При чем
Прокси.ServisesWithoutSupplier(WSПараметр,serviceList,Error);
само по себе написано не верно, т.к. предполагается возврат параметров, т.е. "ServisesWithoutSupplier" - функция. Правильно как-то так
Ответ = Прокси.ServisesWithoutSupplier(WSПараметр)
5. surgut_dezvgr 26.03.20 08:50 Сейчас в теме
Запрос перечня услуг, доступных для партнёра
Для запроса перечня услуг необходимо вызвать процедуру 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)
6. surgut_dezvgr 26.03.20 08:50 Сейчас в теме
(4) ServisesWithoutSupplier - это процедура
9. koln 26.03.20 09:16 Сейчас в теме
(6)Вряд ли, т.к. есть выходные параметры, т.е. метод что-то возвращает.
11. surgut_dezvgr 26.03.20 09:23 Сейчас в теме
(9) Ответ = Прокси.ServisesWithoutSupplier(WSПараметр) так проверял писал ошибку попытка обратиться к процедуре как к функции
8. surgut_dezvgr 26.03.20 09:05 Сейчас в теме
Загрузил WS ссылку в 1С

Модель данных
Пакет
Типы объектов
ServisesWithoutSupplier (запрос)
- partnerID
ServisesWithoutSupplierResponse (Ответ)
- serviceList
- Error
Web - сервис
Имя
ИмяSOAP
ServisesWithoutSupplier (запрос)
- partnerID (Направление - Входной)
- serviceList (Направление - Выходной)
- Error (Направление - Выходной)
10. koln 26.03.20 09:23 Сейчас в теме
(8) Можете тут скинуть ссылку на данный сервис, посмотрю.
12. surgut_dezvgr 26.03.20 09:27 Сейчас в теме
(10)Там доступ по IP не получится можно по anydesk
13. koln 26.03.20 09:28 Сейчас в теме
(12)Я хотел просто загрузить и описание сервиса (структуру) посмотреть.
14. surgut_dezvgr 26.03.20 09:30 Сейчас в теме
(13) Могу структуру в пустую базу загрузить или в расширение и отправить
15. koln 26.03.20 09:33 Сейчас в теме
Давайте так, посмотрим. Просто у меня не укладывается в голове, как процедура может что-то Вам вернуть в качестве ответа.
17. surgut_dezvgr 26.03.20 09:44 Сейчас в теме
(15)
Запрос по 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>
18. surgut_dezvgr 26.03.20 09:46 Сейчас в теме
(15) Я сам не понимаю, но 1С ругается
Как вы подключитесь?
19. koln 26.03.20 09:50 Сейчас в теме
Я подключаться не планирую, т.к., скорее всего, у Вас авторизация не открытая. Я хочу посмотреть структуру сервиса и параметров, как передаваемых, так и возвращаемых. Может что-то и прояснится.
20. surgut_dezvgr 26.03.20 10:54 Сейчас в теме
(19) Напиши почту куда отправить расширение
21. koln 26.03.20 11:07 Сейчас в теме
22. surgut_dezvgr 26.03.20 11:16 Сейчас в теме
23. koln 26.03.20 12:47 Сейчас в теме
(22)Судя по структуре, похоже, что передавать нужно все параметры. В таком случае, вместо
serviceList = "";
Error = "";

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

и в метод "ServisesWithoutSupplier" передавайте все три параметра
Прокси.ServisesWithoutSupplier(WSПараметр,ОбъектМассива,ОбъектОшибки);
24. surgut_dezvgr 26.03.20 14:37 Сейчас в теме
(23) Все равно ошибка

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

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

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

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

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

Метод Pay тоже работает (записывает данные в сервис)
Прикрепленные файлы:
25. koln 26.03.20 14:53 Сейчас в теме
(24)Попробуйте этот код
	
	Тип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Параметр,ОбъектМассива,ОбъектОшибки);
Показать

ранее не учел некоторые моменты
26. surgut_dezvgr 26.03.20 15:02 Сейчас в теме
27. koln 26.03.20 15:07 Сейчас в теме
(26)А попробуйте закомментировать
ОбъектServiceInfo.SerID = 0;
и
ОбъектОшибки.ID = 0;
28. surgut_dezvgr 26.03.20 16:19 Сейчас в теме
29. koln 26.03.20 16:31 Сейчас в теме
30. koln 26.03.20 16:36 Сейчас в теме
(28)Ну почему с одним параметром не проходит-то? Даже в примере передается один параметр

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

<?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>
31. koln 26.03.20 16:38 Сейчас в теме
(28) А не пробовали другим софтом отработать? например SoapUI.
32. surgut_dezvgr 26.03.20 16:41 Сейчас в теме
(31)Делал все хорошо

Запрос по 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>

Сам без понятия в чем может быть дело
33. surgut_dezvgr 26.03.20 16:43 Сейчас в теме
(31) Такое чувство что 1С не видит что это функция либо неправильно считывает WSDL
34. surgut_dezvgr 26.03.20 16:48 Сейчас в теме
(31) ПО SOAPUI отрабатывал
Отправлял один параметр и получил список услуг
все хорошо
35. koln 26.03.20 17:02 Сейчас в теме
(34)Значит что-то не так с самим параметром. Решил проверить, как преобразовывается XDTOОбъект в строку XML. Добавил такой код
	Запись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
36. koln 26.03.20 17:07 Сейчас в теме
(34)Попробуйте на основе данной ссылки создать в конфигураторе новый XDTO-пакет. И вот уже на основе данного пакета создавать XDTOОбъект. Есть подозрение, что он не распознает объект, созданный на основе WS-ссылки
37. koln 26.03.20 17:29 Сейчас в теме
(34)Отбой, изменил строку
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, WSПараметр);
на
Прокси.Фабрика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>
38. surgut_dezvgr 27.03.20 07:58 Сейчас в теме
(37) Проверял обработками
https://infostart.ru/public/189891/ и https://infostart.ru/public/305383/ тоже пишут ошибку
При попытке выполнить метод ошибка Обращение к процедуре объекта как к функции (ServisesWithoutSupplier)
39. koln 27.03.20 08:03 Сейчас в теме
(38)1. Сколько параметров передаете?
2. Я до сих пор не могу понять, почему идет обращение к процедуре, если даже SOAPUI показывает возвращенные данные
Ответ

<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>
Показать

3. А у Вас нет доступа к отладчику на стороне веб-сервиса?
41. surgut_dezvgr 27.03.20 08:20 Сейчас в теме
(39) У меня единственный вариант 1С не правильно считывает WSDL
42. alex_bitti 76 30.03.20 13:18 Сейчас в теме
(41) здравствуйте, публикация сервиса выполнена? это сообщение может говорить о том что 1С принимает только входящий запрос, но не формирует ответ, какой веб- сервер используется?
43. surgut_dezvgr 31.03.20 11:25 Сейчас в теме
(42) Это обмен с программой на оракле
Данные отправляет метод 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:-->
40. surgut_dezvgr 27.03.20 08:10 Сейчас в теме
Нет сторонняя организация
44. surgut_dezvgr 01.04.20 09:34 Сейчас в теме
Разобрался

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

ServiceList = "";
Error = "";

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

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

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

КонецЦикла;
45. koln 02.04.20 06:34 Сейчас в теме
(44) Тогда, видимо, не нужно создавать и XDTO объект "WSПараметр". Просто
partnerID = "Код партнера";
, как в случае
ServiceList = "";
Error = "";
. Тогда строка обращения к веб-сервису
Прокси.ServisesWithoutSupplier(partnerID,ServiceList,Error);
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Программист 1С
Новосибирск
зарплата от 30 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Специалист внедрения и сопровождения 1С
Москва
зарплата от 80 000 руб.
Полный день