Поради щодо доопрацювання упп. Web-сервіси Робота з Web-сервісами безпосередньо

Сьогодні WEB сервіси використовуються практично повсюдно – саме вони надають нам інформацію про рейси літаків та поїздів, курси валют та погоду. Не дивно, що і 1С має можливість створення власних WEB сервісів, що дозволяють виступати як у ролі постачальника, так і споживача. Даний механізм вбудований у платформу «1С:Підприємство 8.3» і розробники можуть додавати навіть у типову конфігураціювласні об'єкти типу "WEB-сервіси". Їхня архітектура побудована на наборі сервісів, що дозволяють обмінюватися інформацією з іншим програмним забезпеченням.

Створення веб-сервісу 1С

Однією з головних переваг WEB-сервісів 1С є відсутність необхідності надавати прямий доступ до даних ІБ. Правильно налаштований веб-сервіс 1С дозволяє іншим програмам користуватися функціями ззовні. У таких випадках визначати право користування даними за заданими параметрами має сама функція за прописаними розробником правил.

Як створювати веб-сервіс у 1С?

Щоб певна функціясистеми 1С стала доступна зовнішньому ПЗ, необхідно виконати наступний алгоритмдій:

  1. Зайти в конфігурацію та у певній гілці дерева додати об'єкт WEB-сервіс;
  2. Описати всі операції, які зможуть виконувати наш функціонал. Опис функцій проводитися в модулі вбудованою в 1С мові;
  3. Додати опис параметрів функцій веб-сервісу. Зверніть увагу, що типи даних описуються з урахуванням існуючих типів механізму XDTO, що з'явився на платформі версії 8.1;
  4. Опублікувати створений WEB-сервіс на сервері. Механізм, вбудований у платформу 1С, підтримує такі стандарти:
  • SSL/TLS
  • WS-I BP

Приклад створення простого WEB-сервісу

Щоб наочно продемонструвати роботу механізму WEB-сервісів, створимо приклад – функціонал, що визначає довжину введеного рядка. Програмне забезпеченняпередасть як параметр запиту рядок, а функція, описана в 1С, поверне число символів. Під час створення необхідно пам'ятати, що публікація цього механізму дасть можливість звернення щодо нього різного ПЗ. Оскільки кожне ПЗ здатне сприймати кирилицю, називатимемо об'єкти конфігурації, використовуючи латинські знаки.

Відкриваємо конфігуратор, знаходимо в дереві гілку WEB-сервіси і додаємо новий сервіс wa_LengthString. Також необхідно додати нову операцію на вкладці «Операції». Назвемо її «CalcLengthString», у властивостях вкажемо тип значення, що повертається – int або integer і створимо всередині неї параметр «InputString». Тип значення залишаємо string.

Тепер необхідно прописати дію функції CalcLengthString у модулі WEB-сервісу. Для цього відкриваємо властивості створеної функції та натискаємо кнопку у вигляді лупи праворуч, біля поля введення «Ім'я процедури». 1С автоматично створить функцію у модулі нашого WEB-сервісу та відкриє його для того, щоб ми описали дію CalcLengthString. Скористаємося цим і напишемо дію функції – визначення довжини рядка, що вводиться.


Фактично на цьому створення найпростішого WEB-сервісу закінчено. Тепер необхідно «викласти» цей сервіс у загальний доступщоб стороннє ПЗ або інші системи 1С могли користуватися даним функціоналом.

Для того, щоб ми змогли опублікувати створений веб-сервіс з його функціональністю, нам необхідно мати доступ на сайт. Перед тим як почнемо публікацію сервісу, необхідно перевірити ім'я файлу у властивостях створеного модуля wa_LengthString. Воно має бути зрозумілим, простим і мати розширення «1cws».


Тепер настав час публікувати створений нами WEB-сервіс на сервері. Ця можливість з'явилася у версії платформи 8.3, і багато компаній вже зрозуміли всю користь цього функціоналу. Щоб розпочати публікацію, необхідно в конфігураторі відкрити форму «Адміністрування/Публікація на веб-сервері…».


У вікні нам необхідна настройка Web сервісів 1С і заповнення певних полів:

  • Ім'я. Позначає папку на веб-сервері, де зберігатиметься опис нашого веб-сервісу. Будьте уважні до регістрів, оскільки іноді сервери розрізняють символи великого та малого регістру;
  • Веб-сервер. Необхідно вибрати сервер із встановлених на комп'ютері;
  • Каталог. Ви повинні вибрати шлях до папки, де зберігаються дані веб-сервера з налаштування підключення. Використовуються виключно латинські літери;
  • Дві ознаки типу Булеве. Перший нам знадобиться, якщо потрібно настроїти доступ через веб-клієнт до конфігурації. Щоб опублікувати сервіс 1С, необхідно поставити другу позначку.

Залишається лише перевірити, що у потрібного WEB-сервісу встановлено галку в першому стовпці, і натиснути на «Опублікувати».


Так як даний механізмще досить новий, ви можете зіткнутися з помилкою виду «Помилка під час виконання файлової операції…». В цьому випадку вам потрібно просто повторити натискання "Опублікувати". У більшості випадків це допомагає, і вам з'явиться повідомлення про те, що публікація веб-сервісу виконана.

<имяСервера>.ru/<ИмяУказанногоКаталогаНаСервере>/ws/<НаименованиеФайла>.1cws?wsdl

У відповідь на запит адреси браузер повинен відобразити структуру файлу XML. Якщо ви бачите порожню сторінку, помилку або незрозумілі символи (проблеми з кодуванням), потрібно ще раз перевірити всі дії. Також не зайвим буде переконатися, що сервер налаштований правильно, і у вас є доступ до нього. Після успішної публікації WEB-сервіс 1С можуть використовувати сторонні програми.

Не зупинятимусь на питанні, що таке веб-сервіси і навіщо вони потрібні. У мережі дуже багато статей на цю тему. Просто постараюся коротко показати, яким простим способомможливе створення клієнта до будь-якого веб-сервісу на PHP.

Налаштування

Для використання SOAP у php необхідно підключити модуль SOAP (входить до дистрибутиву php5). Під windows це робиться просто – необхідно дописати (саме дописати, тому що цей рядок там не просто закоментований, він відсутній взагалі) у php.ini:
extension=php_soap.dll

Не забудьте перезапустити сервер, якщо PHP у вас встановлений як модуль.

Створення SOAP-клієнта за WSDL-документом

Створення SOAP-клієнта зазвичай відбувається за WSDL-документом, який є XML-документом у певному форматі, що повністю описує той чи інший веб-сервіс. За подробицями щодо WSDL – відправляю Вас на сайт консорціуму W3C - www.w3.org/TR/2005/WD-wsdl20-soap11-binding-20050510.

Головне ж, що потрібно знати для того, щоб побудувати клієнта до веб-сервісу – це знати URL-адресу його WSDL-документа.
Наприклад візьмемо веб-сервіс «Currency Exchange Rate» від xmethods.com. Адреса цього веб-сервісу, який дозволяє отримувати курси валют у режимі онлайн - www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl.

Другий важливий момент– з опису веб-сервісу необхідно отримати інформацію про те, які методи цей сервіс надає, та які параметри ми повинні передавати йому як вхідні значення (дуже схоже на виклик звичайної функції phpчи методу класу). Зазвичай, ця інформація міститься в описі сервісу на його сайті. Наш веб-сервіс для отримання курсу валют надає метод getRate(), якому як аргументи передаються коди валют.

І останнє – важливо знати, що очікувати як відповідь: скільки значень, якого типу тощо. Це також можна отримати з опису.
А в результаті код виходить дуже простим та компактним, майже елементарним:

// Використання Web-сервісу
// "Currency Exchange Rate" від xmethods.com

// Створення SOAP-клієнта за WSDL-документом
$client = new SoapClient("http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl");

// Посилання SOAP-запиту та отримання результату
$result = $client->getRate("us", "russia");

Echo 'Поточний курс долара: ', $result, 'рублів';
?>

Як видно з коду конструктор класу SoapClient необхідно передати URL WSDL-документа і отримати об'єкт для роботи з потрібним веб-сервісом. Потім викликається спосіб цього об'єкта, ім'я якого збігається з ім'ям самого способу веб-сервісу. Повертає цей метод бажаний нами результат.

Отже, цей простий приклад ілюструє принцип побудови SOAP-клієнта для веб-сервісів на php. Однак у реальному додатку ще багато чого доведеться подбати, зокрема про те, що в момент звернення до веб-сервісу він може бути тимчасово недоступний або повертати помилку. Явно напрошується використання блоку try/catch/throw:)

Друк (Ctrl+P)

Механізм Web-сервісів у системі «1С:Підприємство» є засобом підтримки сервісно-орієнтованої архітектури (Service-Oriented Architecture, SOA).
Сервісно-орієнтована архітектура є прикладною архітектурою, в якій всі функції визначені як незалежні послуги з інтерфейсами. Звернення до цих сервісів у певній послідовності дозволяє реалізувати той чи інший бізнес-процес.
Сервісно-орієнтована архітектура пропонує новий підхід до створення розподілених інформаційних систем, у яких програмні ресурси розглядаються як послуги, що надаються мережею. Такий підхід дозволяє забезпечити швидку консолідацію розподілених компонентів (сервісів) у єдине рішення для підтримки певних бізнес-процесів.
Механізм Web-сервісів дозволяє використовувати систему «1С:Підприємство» як набір сервісів у складних розподілених та гетерогенних системах, а також дозволяє інтегрувати її з іншими промисловими системами з використанням сервісно-орієнтованої архітектури.
Конфігурація системи «1С:Підприємство» може експортувати свою функціональність через Web-сервіси. Визначення Web-сервісів задаються в дереві конфігурації і стають доступними для довільних інформаційних систем завдяки публікації їх на веб-сервері.
Крім цього, система «1С:Підприємство» може звертатися до Web-сервісів сторонніх виробників як через статичні посилання, визначені в дереві конфігурації, так і за допомогою динамічних посилань, створюваних засобами вбудованої мови. Рис. 1. Web-сервіси

В основі сервісної архітектури системи "1C:Підприємство 8" знаходиться менеджер сервісів. Менеджер сервісів виконує такі функції:
● керування пулом з'єднань з інформаційними базами;
● підтримка WSDL опису сервісу;
● реалізація протоколу SOAP, серіалізація повідомлень, виклик відповідного сервісу.
Менеджер сервісів виконується у процесі сервісного хоста, який виконує функцію прийому/передачі повідомлень з/в менеджер сервісів. Як сервісний хост може використовуватися веб-сервер IIS або Apache.
Менеджер сервісів містить у собі пул з'єднань, якими йде взаємодія з базами даних системи «1С:Підприємство».
Механізм Web-сервісів, реалізований у системі «1С:Підприємство», підтримує такі стандарти:
● SOAP 1.1,
● SOAP 1.2,
● WSDL 1.1,
● WS-I Basic Profile 1.1,
● HTTP 1.1,
● TLS 1.x (TLS 1.1 та 1.2 підтримуються, якщо не потрібна передача клієнтського сертифіката на сервер), включаючи криптографічні алгоритми,
відповідні ГОСТ Р 34.10-2001, Р 34.10-94, Р 34.11-94 та 28147-89;
● MTOM;
● Аутентифікація: Basic, NTLM/Negotiate.

Для отримання доступу до Web-сервісу необхідно використовувати адресу, яка формується таким чином:

http://host/base/ws/Ім'яWebСервісу

Http://host/base/ws/АдресаWebСервіса.

Докладніше розглянемо складові частини адреси:

http://host/base – звичайний URL, яким виконується доступ, наприклад, до інформаційної бази з допомогою веб-клієнта. За наявності роздільників не підтримується вказівка ​​значень роздільників за допомогою параметра Z командного рядказапуску клієнтської програми.

ws – ознака того, що виконується звернення до Web-сервісу (на відміну hs, який визначає доступ до HTTP-сервісу, див. тут).

Ім'я Web Сервісу - ім'я Web-сервісу. Задається як об'єкта Web-сервис.

АдресаWebСервіса - визначає альтернативне ім'я для доступу до Web-сервісу. Задається як Ім'я файлу публікації об'єкта Web-сервис.Можливо змінено при публікації Web-сервиса.

Звернення на ім'я Ім'яWebСервісу та адресу АдресаWebСервісу Web-сервісу є рівносильними.

Надання функціональності через Web-сервіси

Для того щоб функціональність системи «1С:Підприємство» стала доступною зовнішнім споживачам Web-сервісів, потрібно виконати такі дії:
● створити в конфігурації необхідну кількість Web-сервісів,
● опублікувати Web-сервіси за допомогою спеціального інструменту конфігуратора.
Опис процедури публікації Web-сервісів та опис використання Reverse Proxy для доступу до «1С:Підприємства» написано на главі 7 “Посібник адміністратора” на диску ІТС.
Створення Web-сервісу полягає:
● у додаванні до дерева метаданих об'єкта конфігурації Web-сервіс,
● опис операцій, які може виконувати створюваний Web-сервіс,
● опис параметрів операцій Web-сервісу.
Об'єкт конфігурації Web-сервіс містить модуль, в якому створюються процедури вбудованою мовою, що виконуються під час виклику тих чи інших операцій Web-сервиса. Типи параметрів операцій Web-сервісу описуються за допомогою типів XDTO і можуть являти собою значення XDTO, або об'єкти XDTO.
Виклик Web-сервісу відбувається так:
● з пулу з'єднань вибирається відповідне з'єднання з інформаційною базою; за відсутності необхідного з'єднання з'єднання створюється;
● створюється новий сеанс і для створеного сеансу викликається подія УстановкаПараметрівСеансу(У модулі сеансу);
● Виконується виклик затребуваного методу Web-сервісу, при цьому відбувається виклик обробника УстановкаПараметрів Сеансу()(в модулі сеансу) щоразу, коли відбувається звернення до не ініціалізованого параметра сеансу.
ПОРАДА. Не рекомендується виконувати ресурсомісткі операції в обробнику події УстановкаПараметрівСеансу.
Подія УстановкаПараметрівСеансумодуля сеансу викликається на сервері у привілейованому режимі. Модуль викликаного сервісу виконується на
сервер у звичайному режимі.
Модуль сеансу служить для ініціалізації параметрів сеансу та виконання деякого набору команд під час виклику будь-якого Web-сервісу системи «1С:Підприємство».

Приклад реалізації Web-сервісу

Наприклад, потрібно створити Web-сервіс системи «1С:Підприємство», який повинен за переданим номером видаткової накладної повертати склад її табличної частини. Аналогічний приклад за допомогою HTTP-сервісів буде розглянуто в іншій статті.
Для опису значення, що повертається створимо пакет XDTO Дані ВитратноїНакладноїз простором імен http://www.MyCompany.ru/shipment,містить три типи об'єктів XDTO:
● Номенклатура — щоб передавати дані довідника Номенклатура. Цей тип об'єкта XDTO міститиме такі властивості:
● Назва – тип string із простору імен
Повне найменування– тип string із простору імен http://www.w3.org/2001/XMLSchema;
● ШтрихКод – тип string із простору імен http://www.w3.org/2001/XMLSchema;
● ЗакупівельнаЦіна – тип int із простору імен http://www.w3.org/2001/XMLSchema.
РядокВитратнийНакладний- Для передачі даних одного рядка видаткової накладної. Цей тип об'єкта XDTO міститиме такі властивості:
● Номенклатура – ​​тип Номенклатура із простору імен; є посилання на об'єкт XDTO,
який ми визначили вище;
● Кількість – тип int із простору імен http://www.w3.org/2001/XMLSchema;
● Ціна – тип int із простору імен http://www.w3.org/2001/XMLSchema;
● Сума – тип int із простору імен http://www.w3.org/2001/XMLSchema.
Видаткова накладна– для передачі всіх рядків витратної накладної. Цей тип об'єкта XDTO міститиме єдину властивість:
● Склад – тип РядокВитратнийНакладнийз простору імен http://www.MyCompany.ru/shipment. Є посилання на об'єкт XDTO,
який ми визначили вище. Для того, щоб ця властивість могла містити необмежену кількість значень, необхідно встановити її
Властивість Верхня межа значення -1.
Після того, як необхідні типи XDTO створені, слід додати до конфігурації новий Web-сервіс Дані ВитратноїНакладноїз наступними значеннями властивостей:

URI Простір імен - http://www.MyCompany.ru/shipment;
● Пакети XDTO – Дані ВитратноїНакладної;
Ім'я файлу публікації- shipment.1cws.
У створеного Web-сервісу слід визначити операцію Отримати з такими значеннями властивостей:
Тип значення, що повертаєтьсяВидаткова накладназ простору імен http://www.MyCompany.ru/shipment;
Можливе порожнє значення– встановлений;
● Назва процедури – Отримати .
У операції Отримати слід визначити параметр НомерДокумента з такими значеннями властивостей:
● Тип значення – тип string із простору імен http://www.w3.org/2001/XMLSchema;
Напрямок передачі – Вхідний.
Після цього слід відкрити модуль створеного Web-сервісу та розмістити в цьому модулі функцію Отримати() , яка буде виконуватись під час виклику даного Web-сервісу.

Функція Отримати (НомерДокумента) Експорт // Отримати об'єкт видаткової накладної за переданим номером ДокументПосилання = Документи.ВитратнаНакладна. ЗнайтиПономеру(НомерДокумента, ПоточнаДата());Якщо ДокументПосилання.Порожня()Тоді Повернення Невизначено;КінецьЯкщо; Документ = ДокументПосилання.ОтриматиОб'єкт(); // Отримати типи об'єктів XDTO НоменклатураТип= Фабрика XDTO. Тип ("http://www.MyCompany.ru/shipment", "Номенклатура"); ВитратнаНакладнаТип = ФабрикаXDTO.Тип("http://www.MyCompany.ru/shipment", "ВитратнаНакладна"); РядокВитратнийНакладнийТип = ФабрикаXDTO.Тип("http://www.MyCompany.ru/shipment", "РядокВитратноїНакладної"); // Створити об'єкт XDTO витратної накладної ВитратнаНакладна = ФабрикаXDTO.(витратна накладна тип); Для кожного рядку документа З Документ. Склад Цикл // Створити об'єкти XDTO рядки видаткової накладної // та номенклатури РядокВитратноїНакладної = ФабрикаXDTO.Створити (Рядок ВитратнийНакладнийТип); Номенклатура = Фабрика XDTO.(НоменклатураТип); // Заповнити властивості номенклатури Номенклатура.Найменування = РядокДокумента.Номенклатура.Найменування; Номенклатура.ПовнеНайменування = РядокДокумента.Номенклатура.ПовнеНайменування; Номенклатура.ШтрихКод = РядокДокумента.Номенклатура.ШтрихКод; Номенклатура.ЗакупівельнаЦіна = РядокДокумента.Номенклатура.ЗакупівельнаЦіна; // Заповнити властивості рядка видаткової накладной РядокВитратноїНакладної.Номенклатура = Номенклатура; РядокВитратноїНакладної.Кількість = РядокДокумента.Кількість; РядокВитратноїНакладної.Ціна = РядокДокумента.Ціна; РядокВитратноїНакладної.Сума = РядокДокумента.Сума; // Додати рядок видаткової накладної ВитратнаНакладна.Склад.Додати(Рядок ВитратноїНакладної); КінецьЦикл; // Повернути видаткову накладнуПовернення Видаткова накладна; КінецьФункції

Робота з веб-сервісами сторонніх постачальників

Система «1С:Підприємство» може використовувати веб-сервіси, що надаються іншими постачальниками, декількома способами:
● за допомогою статичних посилань, створюваних у дереві конфігурації;
● за допомогою динамічних посилань, створюваних засобами вбудованої мови;
● комбінацією попередніх способів.
Перевага використання статичних посилань полягає у більшій швидкості роботи, тому що опис веб-сервісу постачальника виходить один раз при створенні посилання. Надалі при зверненні до цього веб-сервісу використовується існуючий опис веб-сервісу.
При використанні динамічних посилань опис веб-сервісу постачальника буде одержуватись системою «1С:Підприємство» щоразу при викликі веб-сервісу, що, звичайно, уповільнюватиме роботу з даним веб-сервісом. Однак перевагою такого підходу є можливість отримання актуального опису веб-послуг постачальника. При використанні статичних посилань для отримання актуального опису веб-сервісу слід здійснити повторний імпорт WSDL-опису засобами конфігуратора і збереження зміненої конфігурації.
При експлуатації прикладних рішень може виникати ситуація, коли той самий веб-сервіс надається за різними адресами (URL), однак має абсолютно однаковий опис (WSDL). У цьому випадку виникає потреба завантажити опис веб-сервісу в конфігурацію (створити об'єкт у дереві об'єктів конфігурації), але під час використання вказати конкретну адресу, за якою розташований веб-сервіс. Комбінований спосібдозволяє працювати в такий спосіб. Як приклад можна розглянути таку ситуацію: є веб-сервіс, що тиражується, що виконує
деяку функцію. Прикладне рішення, написане на «1С:Підприємстві», користується послугами даного сервісу, у своїй адресу сервісу може бути різним (сервіс тиражируемый), а опис – фіксований. Тоді прикладне рішення може завантажити опис веб-сервісу, а в налаштуваннях прикладного рішення передбачити введення адреси конкретного екземпляра сервісу, який (адреса) і буде використовуватися при роботі.
Також доступний інший спосіб: використовується динамічне посилання, але адреса розташування веб-сервісу виходить не з файлу опису (WSDL), а безпосередньо вказується при створенні об'єкта.
При спробі завантажити опис Web-сервісу в конфігураторі (створення статичного посилання) або під час використання динамічного посилання (за допомогою об'єкта WSВизначення), система перевіряє завантажуваний опис Web-сервісу (WSDL). Якщо в описі Web-сервісу є помилка (з «точки зору» системи «1С:Підприємства»), то опис не буде завантажено і буде згенеровано виняток. У тексті виключення буде перебувати докладна діагностикапричин відмови у завантаженні. Помилки WSDL розташовуються як їх виявлення. Кожна помилка WSDL містить запис з детальним описом такого вигляду:

<Тип элемента с ошибкой>.<Имя>
[<Тип элемента с ошибкой>.<Имя>[…]]
<Описание ошибки>
<Тип элемента с ошибкой>
<Имя>
У цьому описі:
● Тип помилкового елемента – тип елемента WSDL. Найчастіше відповідає імені тега в XML-файлі, що описує Web-сервіс.
● Опис помилки – опис конкретної помилки.
● Ім'я – ім'я об'єкта WSDL, у якому виникла помилка.

Приклад використання статичної WS-посилання

Як приклад використання веб-сервісів стороннього постачальника розглянемо звернення до Web-сервісу, який раніше було створено на прикладі вище

Перш за все, слід додати до дерева конфігурації новий об'єкт конфігурації WS-посилання з ім'ям Дані Витратної Накладної, що посилається на опублікований сервіс. Для цього слід виконати імпорт WSDL-опису опублікованого сервісу та як URL вказати http://www.MyCompany.ru/shipment/ws/Shipment.1cws?wsdl. Опис імпорту опису WSDL написано в іншій статті.
Після цього, наприклад, у модулі прибуткової накладної можна створити процедуру, наведену нижче. Вона заповнює табличну частину документа даними витратної накладної постачальника, отриманими за допомогою веб-сервісу постачальника.

Процедура ОтриматиДані ВитратноїНакладної(НомерНакладноїПостачальника) Проксі = WSПосилання.Дані ВитратноїНакладної. СтворитиWSПроксі("http://www.MyCompany.ru/shipment", "Дані ВитратноїНакладної", "Дані ВитратноїНакладної"); ДаніНакладний = Проксі.Отримати(); Якщо ДаніНакладний = Невизначено ТодіПовернення; КінецьЯкщо; // Заповнити прибуткову накладну отриманими данимиДля кожного рядкаНакл З ДаніНакладної.Склад Цикл НоваРядок = ДокументОбъект.Состав.Добавить(); НоваРядок.Кількість = РядокНакл.Кількість; НоваРядок.Ціна = РядокНакл.Ціна; НоваРядок.Сума = РядокНакл.Сума; // Знайти елемент номенклатури за переданими даними // (наприклад, за штрихкодом) НоваРядок.Номенклатура = Довідники.Номенклатура. ЗнайтиПо Реквізиту("Штрих код", РядокНакл.Номенклатура.ШтрихКод); КінецьЦикл; КінецьПроцедури

Якщо адреса реального розташування сервісу відрізняється від адреси, яку використовували під час завантаження опису веб-сервісу в конфігурацію,
то нову адресу необхідно явно вказати при створенні об'єкта WSПроксі:

Приклад використання динамічного WS-посилання

Використання динамічного посилання відрізняється від використання статичного посилання лише способом створення WS-проксі та відсутністю необхідності створювати WS-посилання у дереві конфігурації.
Якщо порівняти з прикладом, представленим у попередньому розділі, то, на відміну створення проксі з урахуванням статичної посилання, під час використання динамічного посилання WS-прокси створюється з допомогою конструктора так:

// Створити WS-проксі на підставі WS-визначення
Визначення = Новий WSВизначення (“http://www.MyCompany.ru/shipment/ws/Shipment.1cws?wsdl”);
Проксі = Новий WSПроксі (Визначення, "http://www.MyCompany.ru/shipment", "Дані ВитратноїНакладної", "Дані ВитратноїНакладноїSoap");
У той час як створення WS-проксі на основі статичного посилання виглядає так:

// Створити WS-проксі на основі посилання
Проксі = WSПосилання.Дані ВитратноїНакладної.СтворитиWSПроксі ("http://www.MyCompany.ru/shipment", "Дані ВитратноїНакладної", "Дані ВитратноїНакладної");
Якщо адреса реального розташування сервісу відрізняється від адреси, яка вказана у WSDL-файлі, який використовується при створенні визначення веб-сервісів, нову адресу необхідно явно вказати при створенні об'єкта WSПроксі на підставі визначення веб-сервісів:

// Створити WS-проксі на підставі WS-визначенняВизначення = Новий SВизначення ("http://www.MyCompany.ru/shipment/ws/Shipment.1cws?wsdl"); Проксі = Новий WSПроксі (Визначення, "http://www.MyCompany.ru/shipment", "Дані ВитратноїНакладної", "Дані ВитратноїНакладноїSoap",);

Редагування властивостей Web-сервісу

На закладці Основні вводиться ім'я, синонім та коментар об'єкта.
На закладці Операції створюються підпорядковані об'єкти Операції, які можуть мати підпорядковані об'єкти Параметри, необхідні для роботи з об'єктами даного типу. Опис підлеглих об'єктів виконується на панелі властивостей.

Властивості «Операції»

Крім загальних властивостейоб'єктів конфігурації операція Web-сервісу містить такі характеристики:

● Тип значення, що повертається – тип значення, яке повертає операція Web-сервісу. Може бути типом значення XDTO або типом об'єкта
XDTO.
● Можливе порожнє значення – показує, чи може значення, що повертається, приймати невизначене значення.
● У транзакції – показує, чи буде виконуватися код модуля Web-сервісу в транзакції чи ні. Якщо властивість встановлено, то під час виклику Web-сервісу автоматично розпочнеться транзакція, а при завершенні роботи Web-сервісу транзакція буде або зафіксована, або відбудеться відкат транзакції (залежно від результатів виконання). Якщо властивість не встановлена, на початку виконання модуля Web-сервісу
транзакцію не буде розпочато.
● Ім'я методу – ім'я процедури, що експортується, модуля Web-сервісу, яка буде виконана при виклику даної властивості.
На закладці Підсистеми вказується, до яких підсистем належать об'єкти цього типу.
На закладці Інше визначаються такі властивості:
● URI простір імен – містить URI простір імен Web-сервісу. Кожен Web-сервіс може бути однозначно ідентифікований за своїм
імені та URI простору імен, якому він належить. Простір імен сервісу не повинен співпадати з відомими просторами імен, які вже використовуються або зарезервовані іншими організаціями. Рекомендується в простір імен сервісу включати фрагмент, унікальний організації, яка веде розробку Web-сервиса. Наприклад, для організації з назвою Промресурс має сенс починати всі простори імен із префіксу, наприклад http://promresurs.com. Тоді URI простору імен Web-сервісу матиме вигляд http://promresurs.com/public/services/OurService.
● Пакети XDTO – перелік пакетів XDTO, типи яких можуть використовуватися як типи операцій, що повертаються, і типів параметрів операцій Web-сервісу.
● Ім'я файлу публікації – ім'я файлу опису веб-сервісу, розташованого на веб-сервері.
На кнопці Модуль відкривається редактор модуля Web-сервісу.

Властивості «Параметр»
Крім загальних властивостей об'єктів конфігурації, параметр операції Web-сервісу містить наступні властивості:
● Тип значення – тип значення параметра операції Web-сервісу. Може бути типом XDTO або типом об'єкта XDTO.
● Можливе порожнє значення — Вказує, чи значення параметра операції набуває невизначеного значення.
● Напрямок передачі — Визначте напрямок передачі даних за допомогою цього параметра. Можливі значення:
● Вхідний – означає, що параметр використовується для передачі даних до веб-сервісу;
● Вихідний – означає, що цей параметр використовується для отримання даних від Web-сервісу;
● Вхідний-Вихідний – означає, що параметр може використовуватися як для передачі даних, так і для отримання від Web-сервісу.

У цій статті я розповім принципи роботи з веб-сервісами Terrasoft зовнішніх додатків. З допомогою цих механізмів можна реалізувати різні інтеграційні завдання з будь-якою зовнішньою системою.

Працювати з Web-сервісами з сторонніх додатківможна двома способами, все залежить від мети використання та конкретної мови програмування:
1. Робота через COM-об'єкти Terrasoft
2. Робота з Web-сервісами безпосередньо

Робота через COM-об'єкти

Перший варіант найменш трудомісткий і зручний, але вимагає, щоб на клієнтській машині були зареєстровані бібліотеки Terrasoft (для використання COM-об'єктів). При цьому вся робота з Web-сервісами виконуватиметься COM-об'єктами Terrasoft, надаючи доступ до даних та об'єктів через об'єктну модель платформи Terrasoft: IDataset, ISelectQuery тощо.

Для підключення програмно потрібно виконати наступний код (приклад Jscript, але це можна реалізувати будь-якою мовою, яка працює з COM-об'єктами):

// Створення екземплярів COM-об'єктів Connector та Configuration
WSConnector = новий ActiveXObject( "TSDskObjectLibrary.DskConnector") ; // Для версій 3.4.0+ об'єкт створюється ActiveXObject("TSObjectLibrary.Connector")
var WSConfiguration = new ActiveXObject( "TSObjectLibrary.Configuration") ;
WSConfiguration.DBExecutorTypeCode = "WebServices" ;

// Кеширування створеної сполуки
Connector.Attributes ("WSConnector") = WSConnector;

// Установка рядка з'єднання та назва конфігурації настроєної на сервері
WSConfiguration.SetConnectionString (
""URL=http://192.168.227.128/TSWebServicesServerLibrary.dll/soap/IServer"" +
","ConfigurationName=Dev332"" ) ;

// Відкриття конфігурації
var IsConnected = WSConnector.OpenConfiguration (
WSConfiguration,
1 , // Тип аутентифікації: 0 – Windows Authentication, 1 – Server
"ddd", // Ім'я користувача
""); // Пароль

Після успішного підключення можемо звертатися до будь-яких об'єктів, отримувати дані тощо. Наприклад, отримання даних про контрагентів:

// Отримання сервісу ds_Account з конектора до веб-сервісів
var AccountDataset = WSConnector.Services .GetSingleItemByUSI ("ds_Account" ) ;

// Підготовка датасета: закриття та очищення фільтрів
AccountDataset.Close ();
EnableDatasetFilters(AccountDataset, false);

// Накладання фільтра за ID поточного запису
ApplyDatasetFilter(AccountDataset, "ID", dlData.Dataset ("ID"), true);

// Відкриття датасету
AccountDataset.Open();

// Зчитування даних
if (AccountDataset.IsEOF) (
var Value = "(!LANG:(немає даних)" ; !}
edtWSName.Value = Value;
edtWSOfficialName.Value = Value;
edtWSCode.Value = Value;
) else (
edtWSName.Value = AccountDataset.ValAsStr ("Name" ) ;
edtWSOfficialName.Value = AccountDataset.ValAsStr ("OfficialAccountName" ) ;
edtWSCode.Value = AccountDataset.ValAsStr ("Code" ) ;
}

// Закриття датасету
AccountDataset.Close ();

У вкладенні повний приклад роботи з Web-сервісами Jscript, використовуючи COM-об'єкти.

Робота з Web-сервісами безпосередньо

Цей тип роботи важче, т.к. всі запити до Web-сервісів необхідно надсилати самостійно, а також самому обробляти відповідь від сервера. При цьому не використовуються COM-об'єкти Terrasoft, відповідно не потрібно встановлювати та реєструвати бібліотеки Terrasoft на кожному клієнтському комп'ютері, звідки будуть запитуватись веб-сервіси.

Запити Web-сервісам можна надсилати виходячи з їх інтерфейсу (WSDL) - опису всіх методів з параметрами.

Для спрощеної розробки програм роботи з Web-сервісами в деяких IDE, наприклад Visual Studio, передбачено імпорт WSDL (Add WebService Reference), у своїй сама IDE генерує обгорткові класи до роботи з Web-сервисами. Викликаючи методи такого класу, ви будете спрощено викликати відповідні методи веб-сервісу.

Спрощення полягає в тому, що для виклику методу Web-сервісу потрібно надіслати повний XML запит, а за допомогою обгорткових класів просто викликати відповідний метод з параметрами.

Приклад на C#:

// Створення клієнта Web-сервісу
ws. IServer sc=new ws. ServerClient(); // ws.IServer – обгортковий клас для роботи з Web-сервісами Terrasoft
ws. OpenConfigurationRequest rqOpenConfiguration = New ws. OpenConfigurationRequest(); // Запити відкриття конфігурації
ws. OpenConfigurationResponse rsOpenConfiguration = New ws. OpenConfigurationResponse ();

// Відкриття конфігурації
rqOpenConfiguration. ACompressionLevel = 0; // без композиції (zip)
rqOpenConfiguration. AConfigurationName = Configuration;
rqOpenConfiguration. ADBExecutorTypeCode = "MSSQL";
rqOpenConfiguration. AUserName = UserName;
rqOpenConfiguration. AUserPassword = Password;
rsOpenConfiguration = sc. OpenConfiguration (rqOpenConfiguration);

У цьому передачу даних, розбивку великих даних пакети, розбір відповіді сервера тощо. Треба реалізовувати самостійно.

У вкладенні повний приклад роботи з Web-сервісами на C#.

Окрема подяка Олександру Кравчуку за надані приклади.

Web-сервіси- це один із механізмів платформи, які використовуються для інтеграції з іншими інформаційними системами. Він є засобом підтримки SOA (Service-Oriented Architecture) – сервіс-орієнтованої архітектури, яка є сучасним стандартом інтеграції додатків та інформаційних систем.

Значною перевагою сервіс-орієнтованої архітектури є те, що вона дозволяє розвивати інфраструктуру підприємства однорідним чином, без руйнування вже існуючих рішень. Її використання дозволяє мінімізувати витрати за рахунок інтеграції різнорідних та успадкованих систем у сучасний ландшафт підприємства. Вона дозволяє реалізовувати слабо зв'язні програмні компоненти для того, щоб максимально підвищити їх повторну використовуваність.

Сервіс-орієнтована архітектура інтенсивно розвивається та підтримується великими вендорами. Вона будується з урахуванням сервісів, автономних чи керованих ззовні. Кращим способом реалізації є веб-сервисы . Вони незалежні від платформи, автономні та підтримуються повсюдно.

Прикладне рішення 1С:Підприємства 8 може бути як постачальником веб-сервісів, так і споживачем веб-сервісів, опублікованих іншими постачальниками.

Як споживачі можуть виступати системи, що використовують довільні апаратні та програмні платформи. Технологія веб-сервісів є платформно незалежною.


Технічна реалізація web-сервісів

Якщо прикладне рішення є постачальником веб-сервісу, то і у файловому, і в клієнт-серверному варіанті роботи взаємодія між прикладним рішеннямта споживачами веб-сервісу здійснюється через веб-сервер, за допомогою модуля розширення веб-сервера.

У цьому, коли споживач звертається до web-сервису прикладного рішення , виконується модуль web-сервиса . Цей модуль міститься в конфігурації і в ньому розміщуються процедури, що виконуються при виклику тих чи інших операцій веб-сервісу.

У разі клієнт-серверного варіанта роботи цей модуль буде виконуватись у кластері . У разі файлового варіанта роботи – у модулі розширення веб-сервера.

Якщо прикладне рішення є споживачем веб-сервісу стороннього постачальника, то тут взаємодія між прикладним рішенням і постачальником веб-сервісу здійснює