У нас в компании есть основная база (самописная) 1С 8 в которой хранится информация об всех клиентах, с которыми когда-либо имели дело подразделения компании. Специально обученные люди следят за тем, что бы информация в этой базе была актуальной и не задваивалась.
Кроме основной, есть еще некоторое количество баз (для разных подразделений) которые, при необходимости, получают информацию из основной базы (например, сообщают основной базе ИНН, а в ответ получают всю контактную информацию).
Получение информации происходит при помощи SOAP веб-сервиса запущенного на основной базе.
При разработке все этого встала задача получения данных от SOAP веб-сервиса из базы 1С 7.7 (с «восьмерками», понятно, никаких проблем не было).
Решена данная задача была двумя способами — простым и чуть более сложным.
Простой способ (Clients — название веб-сервиса):
1 2 3 4 5 6 7 | СервисСОАП = СоздатьОбъект("MSSOAP.SoapClient30"); СервисСОАП.MSSoapInit("http://Login:Password@server/basename/ru_RU/ws/Clients?wsdl", "Clients", "ClientsSoap"); СервисСОАП.ConnectorProperty("AuthUser","Login"); СервисСОАП.ConnectorProperty("AuthPassword","Password"); СервисСОАП.ConnectorProperty("WinHTTPAuthScheme",1); ОтветСервиса = СервисСОАП.method_name(Параметр); Сообщить(ОтветСервиса); |
Главное достоинство и главный недостаток данного метода заключается в библиотеке MS SOAP, которая, с одной стороны, предоставляет удобные средства для работы с SOAP веб-сервисами, а с другой — отсутствует в стандартной поставке Windows.
Чуть более сложный способ:
При помощи сниффера был сформирован текст запроса (clients — название веб-сервиса).
1 2 3 4 5 6 7 8 9 10 11 | зп = " | | xmlns:SOAPSDK2=""http://www.w3.org/2001/XMLSchema-instance"" | xmlns:SOAPSDK3=""http://schemas.xmlsoap.org/soap/encoding/"" | xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/""> | | | | | |"; |
После этого запрос отправляется на сервер, а полученный ответ разбирается:
1 2 3 4 5 6 7 8 | об = СоздатьОбъект("MSXML2.XMLHTTP"); об.open("POST", "http://servername/basename/ru_RU/ws/Clients", 0, "Login", "Password"); об.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); об.setRequestHeader("SOAPAction", "http://servername/basename/ru_RU/wsclients#Clients:method_name"); об.send(зп); Если об.Status=200 Тогда ТекстОтвета = об.responseXml; КонецЕсли; |
Данный метод, конечно, не так изящен, но не требует установки дополнительных библиотек.
Надеюсь эта запись кому-нибудь поможет и буду рад увидеть другой метод решения данной проблемы.
Загрузка...
«После этого запрос отправляется на сервер»
Добрый день, во втором случаи, как сформированный запрос вы отправили на сервер ?
а в 1ом при СоздатьОбъект(«MSSOAP.SoapClient30»); получаю ошибку, вы ЗагружалиВнешнююКомпаненту в 1с ? или просто зарегистрировали mssoup30.dll ? да и где лучше взять эту библиотеку ?
Добрый день.
Я просто скачал и установил Microsoft SOAP Toolkit 3.0 — ничего больше.
Взял я его по моему тут (хотя могу ошибаться): _http://download.cnet.com/SOAP-Toolkit-3-0-Redistributable/3000-2070_4-10733017.html
Этот метод будет работать в Win 7? Гдето читал что Soap 3.0 на вин7 не работает.
работает и в WIN 10
Доброго времени суток, пытаюсь по Вашим примерам сделать отправку из 1с 7.7 на Кристалл 10, но что не получается. Оба способа не записывают данные.
1-й СервисСОАП = СоздатьОбъект(«MSSOAP.SoapClient30»);
СервисСОАП.MSSoapInit(«http://172.16.10.141:8090/SET-ERPIntegration/SET/WSGoodsCatalogImport?wsdl»);
СервисСОАП.ConnectorProperty(«AuthUser»,»xxxxxxxx»);
СервисСОАП.ConnectorProperty(«AuthPassword»,»xxxxxxxx»);
СервисСОАП.ConnectorProperty(«WinHTTPAuthScheme»,1);
зп = »
|
|<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:plug=""http://plugins.products.ERPIntegration.crystals.ru/""
|
|
|
| «+СтрокаРезультат+»
|
|
|
|»;
СервисСОАП.getGoodsCatalog.send(зп);
и второй
зп = »
|
|<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:plug=""http://plugins.products.ERPIntegration.crystals.ru/""
|
|
|
| «+СтрокаРезультат+»
|
|
|
|»;
об = СоздатьОбъект(«MSXML2.XMLHTTP»);
об.open(«POST», «http://172.16.10.141:8090/SET-ERPIntegration/SET/WSGoodsCatalogImport?wsdl», 0, «xxxxxx», «xxxxxxx»);
об.setRequestHeader(«Content-Type», «text/xml; charset=utf-8»);
об.setRequestHeader(«SOAPAction», «http://172.16.10.141:8090/SET-ERPIntegration/SET/WSGoodsCatalogImport?wsdl»);
об.send(зп);
Сообщить(об);
Может подскажете что я делаю не так
Здравствуйте !
Подскажите пожайлуста как тут передать параметры ?
На 8-ке у меня код так реализован:
Определения = Новый WSОпределения(«адрес моего сервиса»);
Прокси = Новый WSПрокси(Определения, «http://core.webservice.com/»,»CoreWebServiceImplService»,»CoreWebServiceImplPort»);
Схема=»http://www.w3.org/2001/XMLSchema»;
ТекТекст=»Тут содержимое передаваемого документа»;
ТипXDTO_data_content = Прокси.ФабрикаXDTO.Тип(Схема, «string»);
ОбъектXDTO_data_content = Прокси.ФабрикаXDTO.Создать(ТипXDTO_data_content,ТекТекст);
ТипXDTO_batchId = Прокси.ФабрикаXDTO.Тип(Схема, «int»);
ОбъектXDTO_batchId = Прокси.ФабрикаXDTO.Создать(ТипXDTO_batchId,201);
ТипXDTO_data_type = Прокси.ФабрикаXDTO.Тип(Схема, «string»);
ОбъектXDTO_data_type = Прокси.ФабрикаXDTO.Создать(ТипXDTO_data_type,»XML»);
ДанныеОтправки = Прокси.createEntities(ОбъектXDTO_data_content, ОбъектXDTO_batchId, ОбъектXDTO_data_type);
Сообщить(ДанныеОтправки);
Добрый день. Посмотрите статью про веб-сервис отправки смс: https://1c-programmer-blog.ru/programmirovanie/mts-kommunikator-i-1s.html. Там есть пример программного подключения и использования веб-сервиса
Мне надо это сделать на 7.7.
А на 8-ке работает.
Поэтому выложил свой рабочий код на 8-ке.
Пробовал так обращаться:
Процедура Выполнить()
ПараметрыSoap=»;
|
|
|
| 0c18fd768c0cdab0ee41d4c605314259dff9b8cf8c8e4c3a0cb1e24090482c963190d643fe58b75f1bcb45e05cd861c1
|8724112f3bf585cbb872f77562d06920d9b613327267dbf4f9190e99f0e35a82
|![CDATA[{«»Организации»»: [{
|»»Ref»»: «»eaf3d8f2-5207-11e5-9b29-000c293829c4″»,
|»»Код»»: «»000000001″»,
|»»Наименование»»: «»ТОО Cloudmaker»»}]}
|]]
|
|
|201
|
|json
|
|
|»;
Сообщить(«ПараметрыSoap=»+ПараметрыSoap);
об = СоздатьОбъект(«MSXML2.XMLHTTP»);
об.open(«POST», «https://presale.tophr.kz/corews?wsdl»;);
об.setRequestHeader(«Content-Type», «text/xml; charset=utf-8»);
об.setRequestHeader(«SOAPAction», «http://core.webservice.config.core.auction.bas.com/#CoreWebServiceImplService:CoreWebServiceImplPort»;);
об.send(ПараметрыSoap);
Если об.Status=200 Тогда
ТекстОтвета = об.responseXml;
КонецЕсли;
КонецПроцедуры
Получаю ошибку:
Если об.Status=200 Тогда
{F:\SOAPSENDER.ERT(45)}: msxml3.dll: Неопознанная ошибка
Отладчик показывает что объект «об» пустой.
Сервис находиться по этому адресу:
https://presale.tophr.kz/corews?wsdl
Надо вызвать метод — createEntities
Написал такой и выполняю:
Процедура Выполнить()
ПараметрыSoap=»
|
|
|
|
| 0c18fd768c0cdab0ee41d4c605314259dff9b8cf8c8e4c3a0cb1e24090482c963190d643fe58b75f1bcb45e05cd861c1
|8724112f3bf585cbb872f77562d06920d9b613327267dbf4f9190e99f0e35a82
|![CDATA[{«»Организации»»: [{
|»»Ref»»: «»eaf3d8f2-5207-11e5-9b29-000c293829c4″»,
|»»Код»»: «»000000001″»,
|»»Наименование»»: «»ТОО Cloudmaker»»}]}
|]]
|
|
|201
|
|json
|
|
|»;
об = СоздатьОбъект(«MSXML2.XMLHTTP»);
об.open(«POST», «https://presale.tophr.kz/corews?wsdl»);
об.setRequestHeader(«Content-Type», «text/xml; charset=utf-8»);
об.setRequestHeader(«SOAPAction», «http://core.webservice.config.core.auction.bas.com/#CoreWebServiceImplService:CoreWebServiceImplPort»);
об.send(ПараметрыSoap);
Если об.Status=200 Тогда
ТекстОтвета = об.responseXml;
КонецЕсли;
КонецПроцедуры
Вот конкретный пример рабочего кода из 1с7.7:
Параметр = «ПроверитьАМ,000000000000000000000000000000000,00000000000″;
ЗП = »
|
|
|
| «+Параметр+»
|
|
| «;
об = СоздатьОбъект(«MSXML2.XMLHTTP»);
об.open(«POST», «http://Server/BAZA//ru_RU/ws/WEBSWRVICE», 0, «LOGIN», «PASSWORD»);
об.setRequestHeader(«Content-Type», «text/xml; charset=utf-8»);
об.setRequestHeader(«SOAPAction», «WEBSWRVICE#WEBSWRVICE:METOD»);
об.send(зп);
Сообщить(об.Status);
Если об.Status=200 Тогда
ТекстОтвета = об.responsetext; //responseXml
ПозицияОтвета = Найти(ТекстОтвета, «»);
Сообщить(Сред(ТекстОтвета, ПозицияОтвета — 1, 1));
КонецЕсли;
ЗП = »
|
|
|
| «+Параметр+»
|
|
| «;
ЗП = «soap:Envelope xmlns:soap=»»http://www.w3.org/2003/05/soap-envelope»» xmlns:exc=»»ИМЯВЕБСЕРВИСА»»>
| soap:Header/>
| soap:Body>
| exc:Exchange>
| exc:Data>»+Параметр+»
| /exc:Exchange>
| /soap:Body>
| «;
Пришлось удалить везде «<" — иначе пустые строки как в первых двух сообщениях выходили