1C8 + SOAP

11.04.13

Интеграция - WEB-интеграция

1C8 + SOAP Три способа работы из 1С с вебсервисами.

Обращение из 1С8 к вебсервисам можно делать разными способами.

Первое, что следует понимать, это то, что 1С посылает запросы (фактически это XML) файлы и получает ответы (обычно это так же XML, но не обязательно, т.к. программа вебпрограммиста отвечает так, как ей вздумается).

Работая с веб сервисом, придется обращаться к документации, которую написал вебразработчик, потому что без этого не получится подготовить адекватный запрос (XML). Примеры таких  запросов с разработчика можно требовать без всяких задних мыслей (ответом станет нечто вроде такого). Имея в руках пример, уже можно его опробовать (пощупать):

strЗапрос равен

< ? xml version="1.0" encoding="UTF-8" standalone="no" ? >

< SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema"

                                    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/">

             < SOAP-ENV:Body>

                           < GetAirportsList xmlns="http://webservices.belavia.by/">

                                   < Language xmlns:SOAPSDK4="http://webservices.belavia.by/">RU< / Language >

                           < / GetAirportsList>

             < / SOAP-ENV:Body >

< / SOAP-ENV:Envelope >

(c текстом XML пришлось повозиться, т.к. не отображался. В кусочках типа < / SOAP-ENV:Envelope > пробелы не нужны)

oXMLHTTP = Новый COMОбъект("MSXML2.XMLHTTP");

стрURL="http://86.57.245.235/TimeTable/Service.asmx?op=GetAirportsList";

oXMLHTTP.open("POST", стрURL, 0);

oXMLHTTP.setRequestHeader("Content-Type", "text/xml; charset=utf-8");

oXMLHTTP.setRequestHeader("SOAPAction", "http://webservices.belavia.by/GetAirportsList");

oXMLHTTP.send(strЗапрос);

Если oXMLHTTP.Status=200 тогда

                xmlВыборкаAirport = oXMLHTTP.responseXML.SelectNodes("//Airport");

                Для чКК=1 По xmlВыборкаAirport.Length Цикл

                       xmlВеткаAirport = xmlВыборкаAirport.item(чКК-1);

                       спВыбора.Добавить(xmlВеткаAirport.getAttribute("IATA"),"["+xmlВеткаAirport.getAttribute("IATA")+"] "+ xmlВеткаAirport.getAttribute("Name"))

                КонецЦикла;

КонецЕсли;

Как не трудно заметить, для обращения к сервису используется объект MSXML2.XMLHTTP. И нету совсем упоминания о сепециальных механизмах. Этот способ отличается гибкостью.

 

Однако самостоятельное составление запроса (XML-файла) крайне лениво, и хочется как то упростить процесс. Для этого понадобится описание сервиса (к примеру, такое). Это описание потребует от нас некоторого осмысления, в результате которого получится следующий фрагмент:

SOAPN = Новый COMОбъект("MSSoap.SoapClient30");

SOAPN.MSSOAPInit("http://86.57.245.235/TimeTable/Service.asmx?WSDL","OnlineTimeTable", "OnlineTimeTableSoap");

comSafeArray=SOAPN.GetAirportsList("RU");

Для чК=comSafeArray.GetLowerBound(0) по comSafeArray.GetUpperBound(0) Цикл

                    элемент=comSafeArray.GetValue(чК);

                    Если элемент.Length=2 тогда

                              спВыбора.Добавить(элемент.item(0).value,"["+элемент.item(0).value+"] "+ элемент.item(1).value);

                    ИначеЕсли элемент.Length=1 тогда

                              спВыбора.Добавить(элемент.item(0).value,"["+элемент.item(0).value+"] ");

                    КонецЕсли;

КонецЦикла;

На этот раз использован объект MSSoap.SoapClient30. И как известно, он совсем сырой (или, по крайней мере, я не умею это варить). Сложные и путанные строки XML превратились в вызов comSafeArray=SOAPN.GetAirportsList("RU").

Однако 1С пошло на встречу своим верным "друзьям" и наделало разные объекты. Код на 1С8.2 похож на это:

WSОпределение = Новый WSОпределения("http://86.57.245.235/TimeTable/Service.asmx?WSDL");

Service = Новый WSПрокси(WSОпределение, "http://webservices.belavia.by/", "OnlineTimeTable", "OnlineTimeTableSoap" ); cписокXDTO=Service.GetAirportsList("RU").ПолучитьСписок("Airport");

ВсегоАэропортов=cписокXDTO.Количество();

Для чК=0 по ВсегоАэропортов-1 Цикл

          обАэропорт=cписокXDTO.Получить(чК);

          спВыбора.Добавить(обАэропорт.IATA,"["+обАэропорт.IATA+"] "+ обАэропорт.name);

КонецЦикла;

Можно даже положить в конфигурацию описание сервиса, и тогда первые две строки можно заменить на:

Service=WSСсылки.WSСсылка1.СоздатьWSПрокси("http://webservices.belavia.by/", "OnlineTimeTable", "OnlineTimeTableSoap" );

 

Вот так не хитро и не кривляясь можно работать с вебсервисами.

 

 

См. также

WEB-интеграция Администрирование веб-серверов Платные (руб)

Веб-портал обеспечивает удобный доступ к конфигурации 1С:ITIL(ИТИЛ), 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    5341    4    0    

12

WEB-интеграция Анализ продаж Системный администратор Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С.

60000 руб.

07.05.2019    36288    71    45    

30

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    19973    26    24    

22

WEB-интеграция Программист Бизнес-аналитик Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    1621    11    2    

12

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Онлайн-заказ - это решение для автоматизации процесса оформления заказов на сайте в торговых организациях. Продукт обеспечивает легкое взаимодействие между компанией и клиентами через веб-интерфейс, интегрированный с 1С:Предприятие. Система позволяет снизить операционные расходы, повысить лояльность клиентов и оптимизировать работу отдела продаж.

57600 руб.

26.11.2024    3767    3    3    

5

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 1C:Бухгалтерия 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    6231    4    2    

7

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 1C:Бухгалтерия Управленческий учет Платные (руб)

Решение осуществляет синхронизацию задач Битрикс24 и 1С, что позволяет в одной системе ставить задачи, контролировать выполнение всего пула задач с группировкой по ответственным и проектам, формировать управленческие отчеты по работе сотрудников (загрузка, просроченные задачи), уведомлять сотрудников о ходе выполнения задач посредством чат-бот Telegram

7200 руб.

04.05.2021    21553    14    19    

19
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. www2000 60 11.04.13 23:59 Сейчас в теме
Soap3 - уже лучше не использовать, начиная с Вин 7 он уже не поддерживается и достать для него адекватную инсталяцию не получится

А так за обзор спасибо. Пока у себя использую первый подход с xml, так как он отлично работает в 7.7 тоже, пожтому можно спокойно переносить логику между платформами.
2. CagoBHuK 33 17.04.13 10:00 Сейчас в теме
WS ссылки - тоже не лучший метод, т.к. не работают с сертификатами (только в 8.3). XMLHTTP - лучший выбор.
3. ryst 10.12.13 15:06 Сейчас в теме
То, что сделано 1С "для друзей" полный отстой. Зачастую сервис успешно проходит тесты различными чекерами на валидность, а с 1С не работает. Не грузится wsdl или вылетают ошибки про обращении к методам сервиса.
В общем как обычно - сделали для галочки. Типа универсальная платформа. Отстой.
4. AllexSoft 10.12.13 15:43 Сейчас в теме
любая инфа по 1C8 + SOAP полезна, за статью однозначно +
А по поводу того что наваяло 1С, думаю должны доделать, ведь они активно развивают работу в модели сервиса, а там без SOAP никуда
5. prodines 107 08.04.15 11:48 Сейчас в теме
Пока непонятно - а как составлять SOAP-запросы из клиента к веб-серверу 1С?
6. ture 614 10.04.15 16:33 Сейчас в теме
(5) prodines, нужно добавлять ссылку на сервис по старому образцу (.Net 2.0). 1Ссы не торопится за инновациями совсем.
7. Pertubator 14.05.15 14:29 Сейчас в теме
То, что 1с посылает запрос по SOAP расписано хорошо. Но можно ли отправить тоже запрос из сервера в 1С?
Например для получения списка сотрудников в ответ.
8. Turn123 18 12.03.16 15:57 Сейчас в теме
(7) Pertubator, Можно, любые методы синхронного обмена. К примеру ты посылаешь значение параметра и в зависимости от параметра возвращаются разные данные или делать два разных метода сервиса. Все зависит от конечной цели
9. fixin 4288 17.05.16 15:00 Сейчас в теме
хороший текст, но оформлен грязновато
10. ХамитоваРайса 22.02.21 18:41 Сейчас в теме
Добрый вечер) А кто-нибудь писал обращение к веб-сервису 1С из VB? Каким образом можно обратиться к веб-сервису 1С из VB?
Оставьте свое сообщение