15.01.2024 Лев Туренко 5176
Веб-сервисы (SOAP) в 1С: Шина

Содержание:

Механизм Web (SOAP) сервисов в системе 1С: Шина представляет собой инструмент для реализации сервисно-ориентированной архитектуры.

         

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

         

SOAP-сервисы позволяют системе 1С: Шина обрабатывать входящие SOAP-запросы от информационных систем извне. Обращение к SOAP-сервису происходит при помощи HTTP POST-запроса по конкретному URL-адресу. А SOAP-сообщение передаётся внутри тела запроса.

         

При разработке интеграционной системы 1С: Шина также можно использовать SOAP-сервис для обработки SOAP-сообщений.

         

Для реализации функциональности SOAP-сервиса в 1С: Шина используется элемент проекта под названием «SOAP Сервис». Этот элемент проекта позволяет определить логику обработки SOAP-сообщений в рамках системы 1С: Шина и настроить необходимые взаимодействия с другими системами.    


1.     Клиент Web SOAP сервиса


Система 1С: Шина даёт возможность вызывать Web SOAP сервис извне и удобно обрабатывать полученные ответы. Для этого существует элемент проекта «Клиент Soap Сервиса», который отображён на скриншоте ниже:



Клиент Soap Сервиса

         

Для создания клиента SOAP-сервиса следует создать элемент проекта «Клиент Soap Сервиса» и выбрать у него следующие свойства:

-     Свойство  «UrlПоУмолчанию»  —  URL,  по  которому  по  умолчанию  будет  выполняться  запрос  к SOAP-сервису;

-    Свойство «ВерсияSoap» — версия SOAP,  используемая при формировании  исходящих и интерпретации входящих SOAP сообщений.

         

Например, программный код по выбору свойств будет выглядеть так:


Видэлемента: КлиентSoapCервиса

Ид: f65ac26f-0351-48cd-bc93-751912e05bc1

Имя: КлиентСервисаМагазина

ОбластьВидимости: ВПроекте

UrlПоУмолчанию: http://myserver:9090/applications/S0APservis/api/service

ВерсияSoap: Soap_1_1

         

В проект необходимо загрузить WSDL-описание сервиса: открываем панель «Свойства», где в поле «URL WSDL Soap-сервиса», указываем HTTP-адрес описания сервиса и кликаем по кнопке «Загрузить в проект», как в примере далее:



Загрузить в проект

         

При загрузке будет выполнена генерация типов встроенного языка, соответствующих WSDL-описанию сервиса. В типе клиента с именем элемента проекта будут сгенерированы методы для вызова операций сервиса.   


2.     Имя клиента сервиса 1С SOAP


В среде разработки на основе WSDL, полученного от SOAP-сервиса, будет создан тип «<Имя-клиента-soap-сервиса>». Этот тип содержит методы, которые соответствуют операциям сервиса, и структуры для передачи параметров, и возвращаемых значений. Имя этого типа совпадает с именем элемента проекта.

         

Имена структур данных и методов генерируются на основе описания разных секций WSDL по определённым правилам. Если указанное в WSDL имя не является валидным идентификатором встроенного языка 1С, то имя формируется путём замены непригодных символов на символ подчёркивание. Уникальность имён обеспечивается добавлением в конец увеличивающегося счётчика. Если полученное имя в результате замены будет состоять только из подчеркиваний и цифр, то будет использован префикс в 1С «Structure/Структура» для структуры, «Field/Поле» — для поля структуры, «Method/Метод» — для метода сервиса, «Exception/Исключение» — для исключений, «Enum/Перечисление» — для перечислений.   


3.     Создание типов встроенного языка 1С


Для каждого элемента, описанного в секции 


в типе «КлиентSoapСервиса» создаётся структура. Имя структуры определяется через имя типа в WSDL схеме с учётом вышеуказанных ограничений. Полное имя типа структуры — «<Имя-элемента>.<Имя-cтруктуры>». Для всех элементов и атрибутов, описанных в схемах типов, генерируется поле структуры. Имя поля определяется по имени типа в схеме с учётом вышеуказанных ограничений. Тип поля определяется следующим образом, как отображено в таблице с типами ниже:




Помимо этого, есть ещё два вида ограничений, которые можно наблюдать в таблице, приведённой ниже:




Для каждой операции, описанной в секциях 


в типе будет создано следующее:

• Метод «<ИмяМетодаСервиса>» с именем, сформированным по описанным выше правилам.  Параметры  метода создаются на основе схемы WSDL;

• Обработчик с именем «НастроитьЗаголовкиSoap<ИмяМетодаСервиса>» функционального типа;

• Обработчик с именем «ОбработатьЗаголовкиSoap<ИмяМетодаСервиса>» функционального типа;

• Свойство с именем «ПередЗапросом<ИмяМетодаСервиса>»  функционального типа. Значение свойства — метод, который позволяет настроить свойства HTTP-запроса, выполняемого к сервису при вызове метода «<ИмяМетодаСервиса>»;

• Для SOAP-ошибок, описанных в WSDL, генерируются:

1.    Исключение. Базовый тип — «ИсключениеВызоваSoapСервиса»;

2.  Структура  с  деталями  ошибки.  Имя  структуры  формируется  из  имени  XML-типа  ошибки с постфиксом Detail с учетом правил формирования имён.

         

В общем виде методы, сгенерированные по WSDL описанию, выглядят так, как демонстрируется на примерах ниже:



Здесь «ТипРезультата» — тип структуры, сгенерированной для хранения результата, возвращаемого методом-функцией SOAP-сервиса.   


4.     Обращение к операциям сервиса SOAP


Чтобы вызвать какую-либо операцию сервиса, следует создать экземпляр типа «<Имя-клиента-soap-сервиса>». Он создаётся через такую строку:



В виде параметра конструктору передаётся значение типа «КлиентHttp». В него можно передать все необходимые настройки для выполнения HTTP-запроса 1С, как вариант, следующие настройки:



Если значение параметра «Неопределено», то используется значение типа «КлиентHttp» с настройками по умолчанию, к примеру, следующим образом:



Вызвать операцию SOAP-сервиса можно следующим образом:



Если операция возвращает какие-либо значения, можно получить результат вызова операции так:



Если для операции в сервисе реализована проверка доступа через WSS-токен «UsernameToken», тогда для вызова операции клиенту требуется передать сервису SOAP-заголовок с именем пользователя и паролем. Это можно сделать в обработчике «НастроитьЗаголовкиSoap<ИмяМетодаСервиса>».


При вызове метода, соответствующего операции внешнего SOAP-сервиса, происходит следующее:

1. Переданные в метод значения параметров сериализуются, после чего формируется секция «Body»  SOAP сообщения;

2. При наличии, вызывается обработчик  «НастроитьЗаголовкиSoap<ИмяМетодаСервиса>».  Формируется секция «Headers «SOAP сообщения;

3. Сформированное SOAP сообщение помещается в тело HTTP запроса 1С;

4. При  наличии,  вызывается обработчик «ПередЗапросом<ИмяМетодаСервиса>», которому  передаётся подготовленный HTTP запрос 1С;

5. Выполняется HTTP запрос, и происходит синхронный вызов метода SOAP-сервиса;

6. При наличии, вызывается обработчик «ОбработатьЗаголовкиSoap<ИмяМетодаСервиса>».  Он возвращает значение, которое будет записано в свойство «Заголовки» результата типа «ОтветSoap»;

7. В зависимости от кода  возврата и наличия в ответе  секции «Fault», в вызывающий  код  возвращается результат или выбрасывает исключение. При наличии в SOAP-ответе секции «Fault» выбрасывается исключение «ИсключениеВызоваSoapСервиса». В ином случае выбрасывается «ИсключениеHttp».   


5.     Клиент сервиса SOAP 1С


В проекте модуль, расширяющий тип «<Имя-клиента-soap-сервиса>», называется модулем клиента SOAP-сервиса. Он исполняется на сервере и выглядит так, как показано на скриншоте ниже:



Модуль клиента SOAP-сервиса

         

Дополнительно для каждой операции сервиса в модуле клиента SOAP-сервиса можно создать:

• Обработчик записи заголовка SOAP-сообщения. 

Это опциональный обработчик для настройки  элемента «Header» исходящего SOAP-сообщения для клиента сервиса версии SOAP 1С. В качестве параметров получает значения, переданные при вызове метода «<ИмяМетодаСервиса>». Данный обработчик вызывается автоматически перед выполнением запроса к SOAP сервису. В теле метода можно вызывать метод «ЗаписьSoap_1_1(2).СоздатьЗаголовок» таким образом:



• Обработчик чтения заголовка SOAP-сообщения. 

Это опциональный обработчик для чтения заголовков  ответа SOAP-сервиса в виде XML. Вызывается платформой при получении ответа от SOAP-сервиса. Элемент «Header» ответа сервиса передаётся в метод через параметр «Заголовок», это происходит так, как демонстрируется в примере программного кода ниже:



Специалист компании ООО "Кодерлайн"

Лев Туренко

Наши проекты

Госкорпорация «Ростех»
Госкорпорация «Ростех»

Отрасль:
Производство, ТЭК >> Машиностроение, приборостроение

Внедренное типовое решение:
1С:Управление холдингом 1.3.

Специалисты «Кодерлайн» помогли разработать и внедрить автоматизированную...

ПАО «АрселорМиттал Кривой Рог»
ПАО «АрселорМиттал Кривой Рог»

Отрасль:
Металлургическая промышленность

Внедренное типовое решение:
1С:Управление производственным предприятием для Украины

- Кадровый учет
- Расчет зарплаты
- Регламентированная отчетность
- Уч...

Автоматизация торговых операций на базе "1С:Управление торговлей" в ОАО "Авиазапчасть"
ОАО «Авиазапчасть»

Отрасль:
Авиационно-космическая промышленность

Внедренное типовое решение:
1С:Управление торговлей

- Оптовая торговля;
- Оформление заказов покупателей;
- Планирование прод...

Автоматизация складских операций на базе «1С:Предприятие 8. WMS Логистика. Управление складом»
ОАО «Фрейт Линк»

Отрасль:
Логистика и грузоперевозки

Внедренное типовое решение:
1С:Управление холдингом

Реализовали разработку уникального модуля «Интернет-магазины» на базе прог...

СТС-Медиа
СТС-Медиа

Отрасль:
Медиаиндустрия

Внедренное типовое решение:
1С:Управление холдингом

- Бухгалтерский учет;
- Налоговый учет;
- МСФО (GAAP/управленческий учет);
- ...

Автоматизация подсистемы учета взаиморасчетов с агентами и интернет-магазинами на базе «1С:Управление холдингом 8»
ОАО «Фрейт Линк»

Отрасль:
Логистика и грузоперевозки

Внедренное типовое решение:
1С:Управление холдингом

– Оформление заказов поставщикам;
– Управление отношениями с поставщика...

Внедрение ПП "1С:Корпоративный инструментальный пакет 8" в ООО «Торговый Дом Факел»
ООО «Торговый Дом Факел»

Отрасль:
Производство

Внедренное типовое решение:
1С:Предприятие 8. ERP Управление предприятием 2

Различная отраслевая специфика:
- Переработка давальческого сырья
- Уче...

ООО “РТИТС”
ООО “РТИТС”

Отрасль:
Транспортные системы

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

Блок регламентированного кадрового учета и расчета заработной платы в 1С:ERP;...

ФГУП «Почта России»
ФГУП «Почта России»

Отрасль:
Почта, доставка

Внедренное типовое решение:
1С:Зарплата и управление персоналом

- Бухгалтерский учет
- Расчет зарплаты и кадровый учет
- Налоговый учет ...

МИР ХОББИ
МИР ХОББИ

Отрасль:
Торговля. Интернет магазин

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

Оформление заказов поставщикам
Взаиморасчеты с покупателями
Оформление...

Внедрение ПП "1С:CRM ПРОФ" в ООО «Торговый Дом Факел»
ООО «Торговый Дом Факел»

Отрасль:
Производство

Внедренное типовое решение:
1С:CRM ПРОФ

- Управление отношениями с клиентами (CRM) ...

Автоматизация кадрового учета на базе ПП "1С:Зарплата и управление персоналом" в ТД НМК
ООО «Торговый дом Нальчикский молочный комбинат»

Отрасль:
Торговля

Внедренное типовое решение:
1С:Зарплата и управление персоналом

- Кадровый учет;
- Расчет зарплаты;
- Регламентированная отчетность;
- А...

Наши соц. сети

Telegram-канал «Koderline 1С» Группа в Вконтакте «Кодерлайн КОРП» Rutube

Остались вопросы - обратитесь к нам!

Впишите свои Имя и Телефон, чтобы мы ответили на все интересующие Вас вопросы.
ФИО*
E-mail*
Телефон*
Сообщение