gifts2017

Модуль для работы 1С (платформа 8.2 и выше) с внешними SOAP Web-сервисами

Опубликовал Эльдар Гамзаев (lunjio) в раздел Обмен - Обмен с другими системами

Модуль для работы 1С (платформа 8.2 и выше) с внешними Web-сервисами, реализованными по протоколу SOAP.

Здравствуйте, уважаемые программисты 1С! Представляю вашему вниманию, обсуждению и использованию Модуль для работы 1С с внешними веб-сервисами.


Кому это может пригодиться

 1. Вы опытный программист, и в данный момент времени перед Вами стоит задача интегрировать 1С с внешними программами посредством вызова внешних веб-сервисов, и эта задача возникает у Вас периодически, каждый раз при этом Вы дублируете код - этот модуль придёт Вам на помощь, вызывайте любые операции любых веб-сервисов из кода в две строчки.

 2. Вы только учитесь программировать или Вы опытный программист 1С, но у Вас абсолютно нет опыта работы с веб-сервисами и понятием XDTO в 1С - модуль поможет Вам в тестовом режиме использования понять на практике определенные нюансы работы с XDTO объектами в 1С, на примере с тестовыми внешними веб-сервисами (можете использовать в учебных целях общедоступный веб-сервис для работы с погодой GlobalWeather).

 Конечно же, практика в виде чтения чужого кода с отладчиком хороша и полезна, не заменит никакую документацию, но для начала, если Вы не знакомы с веб-сервисами, но хотите понять всю суть работы с внешними веб-сервисами из 1С и публикации веб-сервисов 1С для внешнего использования, для начала советую прочитать статью о веб-сервисах в целом на хабре или на wikipedia, реализации веб-сервисов в 1С на ИТС, затем серию публикаций автора Evil Beaver под названием XDTO - это просто.  По Вашему желанию можно поискать любую другую информацию на просторах интернета, всё зависит от Вашего настроя. Но давайте вернёмся к сути данной публикации.

Принцип работы данного модуля

 Когда у меня встала задача интеграции 1С с внешними источниками, я сразу понял, что код нужно разделить на несколько уровней абстракции.

 Общий модуль (1-ый уровень абстракции), который обслуживает определенный внешний веб-сервис, предоставляет такие функции как : получить структуру параметров определенной операции на данном веб-сервисе, выполнить определенную операцию на определенном веб-сервисе, который по мере необходимости обращается к 2-ому общему модулю (2-ой уровень абстракции), который уже на более низком уровне предоставляет все необходимые операции для работы с веб-сервисами.

 

Более подробно схематично:

 

 Модель

 

 От теории к практике

Как это работает в коде:


Платформа 8.3, управляемые формы.

 

Управляемые формы пример.

 


Платформа 8.2, обычные формы.

 

Пример обычные формы.

 


Под капотом при получении параметров:

Под капотом - получение параметров


Под капотом при выполнении метода:

При выполнении метода

 

Как видно по последнему скрину, имеется возможность указать имя реквизита, который идентифицирует успешное выполнение, также модуль имеет функционал для создания анонимных типов, причем на любом уровне вложенности. Есть возможность передавать реквизит булевого типа - "Отказ", в случае, если веб-сервис вызывается при записи объектной сущности.

Так как статья ориентирована на программистов, так или иначе умеющих читать код 1С и делать логические выводы, я не буду слишком сильно углубляться в обьяснение принципов работы данного модуля.

Файлы во вложении:

1. Тестовые конфигурации с интегрированными тестовыми внешними веб-сервисами:

   1.1. на платформе 8.2, с режимом запуска обычное приложение.

   1.2. на платформе 8.3, с режимом запуска управляемое приложение.

   1.3 Соответствующие обработки на обычных и управляемых формах, для вызова и тестирования интегрированных веб-сервисов.

 2. Текстовые файлы содержащие код технического общего модуля и шаблон обслуживающего веб-сервис общего модуля. 

 3. Текстовый файл, описывающий необходимые действия для интеграции данного модуля.

Скачать файлы

Наименование Файл Версия Размер
Модуль для работы с внешними веб-сервисами 34
.zip 50,70Kb
15.02.16
34
.zip 1.0 50,70Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Эльдар Гамзаев (lunjio) 04.02.16 15:37
Буду рад и благодарен любым предложениям и замечаниям.
2. Петр Базелюк (pbazeliuk) 16.02.16 12:40
(1) lunjio, минус реализации в том что идет жесткая привязка к SOAP-сервису. Систему можно сделать более динамической и независимой от программиста.
3. Эльдар Гамзаев (lunjio) 16.02.16 18:56
(2) pbazeliuk,
Не понимаю, что вы имеете ввиду под словом более динамической и независимой от программиста ? Модуль наоборот, именно программистам и адресован, более динамическим его уже делать некуда, всё что нужно сделать это добавить шаблоны модулей, в шаблоне обслуживающего модуля прописать имя сервиса, адрес всдл и функции получения параметров и выполнения методов. По поводу жесткой привязки к SOAP - есть конечно и REST, про него никто не забыл, но как вы знаете 1С для вызова REST веб-сервисов рекомендует пользоваться стандартными объектами - HTTPСоединение и т.д, можно конечно расширить мой модуль до такой функциональности, но это наоборот увеличит число манипуляций для внедрения определеноого внешнего REST сервиса, если люди выявят, конечно сделаю/продумаю настолько, чтобы было максимально все просто и понятно для программиста при внедрении и использовании.
4. rommario . (abion) 17.02.16 07:39
Интересно. Но это уже сделано.
Интересует возможность отправки фалов по протоколу MTOM.
Эта задача кажется невыполнимой на данном этапе.
5. Максим *** (premier) 17.02.16 09:14
(0), а зачем интегрировать внешние web-сервисы в конфигурацию? В платформе 1С:Предприятие версий 8.x реализован механизм динамического вызова web-сервисов. Пример можно посмотреть, перейдя по этой ссылке.
6. Эльдар Гамзаев (lunjio) 17.02.16 09:57
(5) premier, Вопрос конечно не совсем ясен, учитывая тот факт, что Вы сами разработчик). Не буду объяснять подробно, приведу примеры - интеграция с сайтом, мобильными приложениями, другими ИС на базе 1С, и т.п продолжать нет смысла, это именно МОДУЛЬ облегчающий вызовы внешних веб-сервисов из 1С, его даже можно переделать чтобы он автоматически формировал XDTO объект в качестве ответа внутреннего веб-сервиса предоставляемого 1С, на досуге займусь, судя по Вашей ссылке у Вас обработка просто для тестирования и просмотра определенных веб-сервисов.
У меня к Вам встречный вопрос, если Вы не видите смысла интегрировать, зачем тогда вообще их тестировать ???
7. Эльдар Гамзаев (lunjio) 17.02.16 10:19
(4) abion,
Нет невыполнимых задач, если не подходящие по определенным критериям - время выполнения, архитектура, вопросы безопасности и т.п.
Да 1С не может вложения распозновать, я вижу следующие возможные варианты( перечислены сверху вниз по актуальности)):

1. Написать веб-сервис(на джаве или си шарпе) который будет у вас в сети, будет вложение сохранять и уже передавать в 1С в качестве доп параметра путь к файлу.(самый на мой взгляд оптимальный и пока, существующий). Писать на джаве и сишарпе не так сложно, в интернете куча примеров.
2 Попробовать через base64 файл как данные передавать , авось и не будет большая потеря во взаимодействии из-за большего размера чем по необходимой Вам технологии, конечно тут все относительно и надо смотреть на критерии - частота обмена, объем файлов и т.п.
3. Ждать от 1С, пока "родит" такую возможность.
8. Сергей Смирнов (Serginio) 17.02.16 10:45
9. Максим *** (premier) 17.02.16 15:00
(6) lunjio, обработка названа SoapКлиент, и она предназначена не только для тестирования. Методы веб-сервисов, вызываемых динамически, можно использовать и в "рабочем" режиме. Кому-то удобней модуль встроить, кому-то обработку запустить и заполнив параметры получить от веб-сервиса необходимые данные. Оба подхода имеют право на жизнь. Чтобы Вы не принимали меня за критикана, поставлю Вам +. Больше подходов хороших и разных!
10. Эльдар Гамзаев (lunjio) 17.02.16 15:21
(9) premier,
Не принимаю за критикана, опять повторюсь, не совсем понятен Ваш вопрос, то ли Вы просто написали с целью сослаться на свою обработку, связанную с веб-сервисами. Вы как программист должны знать, зачем и для чего нужно интегрировать 1С с внешними веб-сервисами. Наши работы предназначены для разных целей работы с одной областью, хотя и имеют право на совместное использованию(ваша на этапе тестирования, моя работа на этапе внедрении), внедрение моего модуля, наверное проше куда некуда - указать имя сервиса местоположение WSDL и имена операций, в Вашем случае надо указать начинаю от пространства имен и т.п и т.д + не совсем представляю её как модуль для внедрения/интеграции 1С с внешними программами посредством веб-сервисов. Могли бы просто без вопроса сослаться на свою работу в сообщении.
11. Максим *** (premier) 17.02.16 16:26
(10) lunjio, будем считать, что мы друг друга не поняли. Фраза "интегрировать 1С с внешними программами посредством вызова внешних веб-сервисов" ассоциировалась у меня со встраиванием веб-сервисов (точнее, WS-ссылок) в конфигурацию, а не о динамическом их вызове, отсюда и вопрос. Просто не увидел на скринах, где можно задать URL WSDL web-сервиса. А в общем и целом принципы работы достаточно похожи, судя по коду, в Вашей разработке и в моей. Вопрос снят.
P.S. Программный код на скриншоте читается тяжело, код лучше текстом оформлять. Чуть глаза не сломал, пока читал ))
И по поводу: "Могли бы просто без вопроса сослаться на свою работу в сообщении.". Обработка писалась лет 8 назад, я давно её не продвигаю, соответственно в её рекламе не вижу себя практического смысла. Выложил ссылку для примера (разработки - из одной и той же предметной области, Ваша - логически завершеннее).
12. Эльдар Гамзаев (lunjio) 17.02.16 19:58
(11) Согласен, с ноута особенно читается плохо, не знаю как делать код текстом пока)
Вебсервисы вызывать можно у меня в двух режимах, в динамическом - формируется Вс определения при каждом вызове, либо через WSСсылка, так же у меня сериализация идет для передачи с клиента на сервер в клиент-серверном варианте, создание анонимных типов + возможность указать реквизиты идентификаторы успешного вызова, как вы уже поняли прочитав код. Единственное что вижу, можно сюда привязать вызов rest сервисов, через рекомендуемые 1С объекты httpзапрос и т.п. Для интеграции, просто добавить объекта WSСсылка не достаточно ) нужно и логику вшить.
А вы кстати может знаете обработки которые на уровне запросов SQL позволяют базу чистить с отборами по реквизитам ?
13. Максим *** (premier) 20.02.16 10:30
(12) lunjio, по поводу привязки rest сервисов: идея неплохая, имхо, повысит универсальность работы с веб-сервисами.
Обработки, которые работают напрямую с SQL сервером через запросы где-то видел на инфостарте, но, вроде бы, данное
действие нарушает лиц. соглашение с 1С, так что, возможно этих публикаций уже и нет.