Получение данных от SOAP веб-сервиса из 1С 7.7

 

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

Кроме основной, есть еще некоторое количество баз (для разных подразделений) которые, при необходимости, получают информацию из основной базы (например, сообщают основной базе ИНН, а в ответ получают всю контактную информацию).

Получение информации происходит при помощи SOAP веб-сервиса запущенного на основной базе.

При разработке все этого встала задача получения данных от SOAP веб-сервиса из базы 1С 7.7 (с «восьмерками», понятно, никаких проблем не было).

Решена данная задача была двумя способами — простым и чуть более сложным.

Простой способ (Clients — название веб-сервиса):

Главное достоинство и главный недостаток данного метода заключается в библиотеке MS SOAP, которая, с одной стороны, предоставляет удобные средства для работы с SOAP веб-сервисами, а с другой — отсутствует в стандартной поставке Windows.

Чуть более сложный способ:

При помощи сниффера был сформирован текст запроса (clients — название веб-сервиса).

После этого запрос отправляется на сервер, а полученный ответ разбирается:

Данный метод, конечно, не так изящен, но не требует установки дополнительных библиотек.

Надеюсь эта запись кому-нибудь поможет и буду рад увидеть другой метод решения данной проблемы.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Оценка статьи:
УжасноПлохоНеплохоХорошоОтлично (Пока оценок нет)
Загрузка...

Понравилась статья? Поделиться с друзьями:
Комментарии: 14
  1. Начинающий

    «После этого запрос отправляется на сервер»
    Добрый день, во втором случаи, как сформированный запрос вы отправили на сервер ?
    а в 1ом при СоздатьОбъект(«MSSOAP.SoapClient30»); получаю ошибку, вы ЗагружалиВнешнююКомпаненту в 1с ? или просто зарегистрировали mssoup30.dll ? да и где лучше взять эту библиотеку ?

    1. Добрый день.
      Я просто скачал и установил Microsoft SOAP Toolkit 3.0 — ничего больше.

      Взял я его по моему тут (хотя могу ошибаться): _http://download.cnet.com/SOAP-Toolkit-3-0-Redistributable/3000-2070_4-10733017.html

  2. Илья

    Этот метод будет работать в Win 7? Гдето читал что Soap 3.0 на вин7 не работает.

    1. Serg

      работает и в WIN 10

  3. Николай

    Доброго времени суток, пытаюсь по Вашим примерам сделать отправку из 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/"&quot; xmlns:plug=""http://plugins.products.ERPIntegration.crystals.ru/"&quot;
    |
    |
    |
    | «+СтрокаРезультат+»
    |
    |
    |
    |»;

    СервисСОАП.getGoodsCatalog.send(зп);
    и второй
    зп = »
    |
    |<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"&quot; xmlns:plug=""http://plugins.products.ERPIntegration.crystals.ru/"&quot;
    |
    |
    |
    | «+СтрокаРезультат+»
    |
    |
    |
    |»;

    об = СоздатьОбъект(«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(зп);
    Сообщить(об);
    Может подскажете что я делаю не так

  4. Габит

    Здравствуйте !

    Подскажите пожайлуста как тут передать параметры ?

    На 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);
    Сообщить(ДанныеОтправки);

    1. Сергей (автор)

      Добрый день. Посмотрите статью про веб-сервис отправки смс: https://1c-programmer-blog.ru/programmirovanie/mts-kommunikator-i-1s.html. Там есть пример программного подключения и использования веб-сервиса

      1. Габит

        Мне надо это сделать на 7.7.
        А на 8-ке работает.
        Поэтому выложил свой рабочий код на 8-ке.

  5. Габит

    Пробовал так обращаться:

    Процедура Выполнить()
    Параметры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: Неопознанная ошибка

    Отладчик показывает что объект «об» пустой.

  6. Габит

    Сервис находиться по этому адресу:

    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;
    КонецЕсли;
    КонецПроцедуры

  7. Виталий

    Вот конкретный пример рабочего кода из 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));

    КонецЕсли;

  8. Виталий

    ЗП = »
    |
    |
    |
    | «+Параметр+»
    |
    |
    | «;

  9. Виталий

    ЗП = «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>
    | «;

  10. Виталий

    Пришлось удалить везде «<" — иначе пустые строки как в первых двух сообщениях выходили

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: