Де виконуються процедури web сервісу 1с. Web-сервіси. Найпростіший приклад створення сервісу «Привіт Поки»

30 липня 2012 в 13:19

Використання зовнішніх веб-сервісів у 1С на прикладі завантаження курсів валют

  • Програмування

Знаю, що на хабрі не дуже шанують багатостраждальну 1С. Хоча (з клієнтами під Linux), її стали любити трохи більше. До речі, так само зовсім недавно інтерфейс однієї з основних розробок 1С - конфігурація Управління виробничим підприємством - був повністю переведений на англійська мова. Багато разів я зустрічав питання, чому тут не пишуть про 1С. Відповідь на них досить очевидна – існує безліч спеціалізованих ресурсів, де можна оперативно обговорити всі питання та щось почитати.

Є всі підстави вважати, що ця стаття тут не виживе, але я все ж таки ризикну, тому що в 1С є деякі цікаві речі, про які варто розповісти.

З деяких пір у 1С 8.х з'явилася можливість використання веб-сервісів: 1С може бути як постачальником, так і споживачем. У цій статті я покажу, як використовувати 1С як споживач на прикладі отримання курсів валют із сервера ЦБР.

Веб-сервіс

Центробанк має веб-сервіс для отримання щоденних даних: курси валют, новини, динаміка курсів і т.д. Опис сервісу можна знайти тут http://www.cbr.ru/scripts/Root.asp?Prtid=DWS. Нас цікавить один із методів цього сервісу: GetCursOnDate(On_date)- Отримання курсів валют на задану дату. У метод передається один аргумент On_date– це дата, яку потрібно отримати курси. В результаті повертається XML, що містить таблицю ValuteCursOnDate(Самі курси та супутня інформація).

Конфігурування

Для розробки я взяв 1С 8.2 (8.2.15.317 у моєму випадку) та створив порожню конфігурацію. Для використання зовнішніх веб-сервісів передбачено об'єкт WS-посилання, але використовувати його не обов'язково, до сервісу можна звертатися з коду динамічно. Я використовуватиму перший варіант, а потім покажу, як можна використовувати другий. У конфігурації створив обробку та назвав її «ЗавантаженняКурсовВалютЦБР». Додав форму (керовану) та зробив її основною. На формі я створив реквізити та розмістив елементи управління так, як показано на малюнку.

Зараз найголовніше – створюємо посилання опис веб-сервісу. У конфігурації додаємо новий об'єкт типу WS-посилання. У вікні вказуємо посилання на WSDL (опис даного формату виходить за рамки статті, ви можете почитати про нього на Вікіпедії): http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL .

1С на основі отриманого опису автоматично створить візуальну картку веб-сервісу. Можна побачити назву веб-сервісу, подивитися які у нього доступні операції, а також типи даних, що використовуються.

Конфігурування на цьому майже закінчено, залишилося зробити пару штрихів для того, щоб наш додаток виглядав естетичнішим. Клацніть правою кнопкою миші по корені конфігурації та викличемо меню «Відкрити командний інтерфейсробочого столу». У вікні необхідно зняти прапор «Видимість» навпроти обробки «Завантаження курсів валют ЦБР». Натисніть кнопку Ок. Далі ще правий клік по корені конфігурації та викличемо меню «Відкрити робочу область робочого столу», там зробимо налаштування як на малюнку:

Ці налаштування дозволять нам відобразити форму обробки прямо на робочому столі (мається на увазі робочий стіл програми 1С) у режимі 1С Підприємство.

Програмування

Тепер залишилося наповнити змістом нашу обробку: змусити її отримувати курси валют та відображати у таблиці на формі. У режимі редагування форми необхідно додати нову команду форми, назвемо її Завантажити Валюти. Цю команду необхідно зв'язати із кнопкою, розташованою на формі. Дію для команди заповнимо наступним кодом (прим. автора: нічого собі, на хабрі є підсвічування коду 1С, правда вона працює не коректно):

&НаКлієнті Процедура ЗавантажитиВалюти(Команда) Якщо НЕ ЗначенняЗаповнено(ДатаЗавантаження) Тоді Повідомити("Не вибрано дату завантаження!", СтатусПовідомлення.Важливе); Повернення; КінецьЯкщо; ТаблицяКурсовВалют.Очистити(); ЗавантажитиКурсиВалют(ДатаЗавантаження); КінецьПроцедури
Тут спочатку перевіряється, чи заповнена дата (якщо не заповнена, то повідомляємо про це користувачеві і більше нічого не робимо). Потім очищається таблиця, розташована на формі і викликається процедура Завантажити Курси Валют(), в яку передається дата.

Код процедури ЗавантажитиКурсиВалют(), пояснення наведено в коментарях до коду:

Процедура ЗавантажитиКурсиВалют(фДатаЗагрузки) //Створюємо проксі для звернення до зовнішнього веб-сервісу // передаємо в функцію URI простору імен, ім'я сервісу, ім'я порту. Проксі = WSПосилання.CBR_DailyInfoWebServ.СтворитиWSПроксі("http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap"); //Отримуємо тип параметра, який передається метод GetCursOnDate. ТипWSПараметри = Проксі.ФабрикаXDTO.Пакети.Отримати("http://web.cbr.ru/").Отримати("GetCursOnDate"); //Створюємо параметр з урахуванням типу і заповнюємо значення параметра On_Date. WSПараметр = Проксі.ФабрикаXDTO.Створити(ТипWSПараметра); WSПараметр.On_Date = фДатаЗавантаження; // Викликаємо метод веб-сервісу, записуємо результат у змінну курси валют. КурсиВалют = Проксі.GetCursOnDate(WSПараметр); //Перебираємо таблицю ValuteCursOnDate, кожне значення таблиці // додаємо до таблиці на формі (колонки заповнюємо відповідними значеннями). Для кожного елемента з курсів Валют. НоваРядокТЗ.НазваВалюти = Елемент.Vname; НоваРядокТЗ.Номінал = Елемент.Vnom; НовийРядокТЗ.ЦифровийКодВалюти = Елемент.Vcode; НовийРядокТЗ.СимвольнийКодВалюти = Елемент.VChCode; НоваРядокТЗ.КурсВалюти = Елемент.Vcurs; КінецьЦикл; КінецьПроцедури
Тепер можна оновлювати конфігурацію БД (F7) та запускати 1С Підприємство (F5). Якщо все зробили правильно, то маємо побачити вікно як на малюнку нижче:

Щоб перевірити результат, нам потрібно запровадити дату, на яку хочемо отримати курси валют та натиснути на кнопку «Завантажити валюти». У разі успішного запиту таблиця на формі заповниться значеннями курсів:

Насамкінець хочу показати, як можна звернутися динамічно до зовнішнього веб-сервісу, тобто без додавання об'єкта WS-посилання. Таким чином ми можемо використовувати такі веб-сервіси із зовнішніх обробок без прив'язки до конфігурації.

У процедурі ЗавантажитиКурсиВалют() рядок

Визначення = Новий WSВизначення ("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL"); Проксі = Новий WSПроксі (Визначення, "http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap");
Спочатку ми створюємо звані визначення для веб-сервісу з його WSDL. Потім створюємо проксі для звернення до нього.

Як видно, використовувати зовнішні веб-сервіси з 1С загалом досить просто (хоча і є певна складність у розумінні визначення типів, у мене в тому числі).

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

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

  • Розклад поїздів, автобусів, літаків;
  • курсів валют;
  • Списку товарів із певного ресурсу.

Обмін даними відбувається з урахуванням SOAP, тобто. за допомогою структурованих повідомлень. Самі повідомлення створюються на базі XML схем та відповідно до стандартів цих виразів. Мова специфікації Web-сервісу так само стандартизована - це WDSL.

Між програмами та ресурсами повідомлення передаються за протоколом HTTP.

Для реалізації цього принципу в конфігурації було додано новий об'єкт метаданих Web-сервіс (Рис.1)

Як видно з малюнка, знайти цей об'єкт можна на закладці "Загальні".

Створення нового Web-сервісу

Як і будь-який інший об'єкт метаданих, новий Web-сервіс додається з конфігуратора.

Вікно створення сервісу показано на рис.

Рис.2

  1. На першій закладці необхідно визначити Ім'я та подання нового об'єкта;
  2. У яких підсистемах братиме участь сервіс, визначається на другій закладці «Підсистеми»;
  3. Список та визначення виконуваних сервісом операторів можна подивитися на закладці «Операції», тут ми вказуємо тип значення, що повертається операцією, і процедуру, що описує виконуваний алгоритм;
  4. Ідентифікувати ресурс можна за допомогою рядка URI (Uniform Resource Identifier), простір імен URI, а також опис XDTO пакета можна на закладці «Інше».

Таким чином ми в нашій базі визначаємо Web-сервіс, до якого можна буде звертатися зі сторонніх ресурсів.

Дії, які треба буде виконати перед створенням та налаштуванням Web-сервісу

Перш ніж створювати Web-сервіс із можливістю стороннього доступу, необхідно:

  • Запустити сервер;
  • встановити модулі розширення «Web-сервісу»;
  • Опублікувати базу ресурсу.

Найпростіший приклад створення сервісу «Привіт Поки»

Для демонстрації того, як працює цей механізм, ми створимо веб-сервіс, який у відповідь на переданий запит повертає одне з трьох значень: «Привіт!», «Поки що!», «Не розумію»:

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

Публікація веб-сервісу відбувається з пункту меню Адміністрування->Публікація на веб-сервері.

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

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

Отримаємо дані з нашого ресурсу

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

У 1С передбачено дві можливості для звернення до стороннього Web-сервісу:

  • Шляхом безпосереднього створення нового об'єкта конфігурації WS-посилання;
  • Програмно створивши посилання, не торкаючись структури бази даних.

Розглянемо перший варіант.

В результаті створення нашого Web-сервісу «Общалка» ми отримали деякий ресурс, розміщений за відомою нам адресою. Саме цю адресу нам необхідно буде ввести у діалогове вікно, виведене під час створення WS-посилання (Рис.5)

Рис.5

Віртуальна карта нашого сервісу буде створена автоматично та відобразиться у дереві Конфігуратора. Зокрема, буде відображено операцію «Привітання» та її єдиний параметр.

Тепер з нашої бази ми можемо звертатися до Web-сервісу як до іншого об'єкта. Зокрема, використовувати його у звітах та обробках.

Найпростіший код, що дозволяє отримати відгук від нашого Web-сервісу, представлений на Рис.6

У першому рядку коду ми створюємо та визначаємо параметри підключення, у другому запускаємо операцію, з переданим до неї параметром (можна створити реквізит форми для його введення).

Щоб, не вносячи зміни до конфігурації, використовувати наш сервіс, необхідно у представленому на Рис.6 коді перший рядок замінити на два (Рис.7):

Рис.7

Таким чином, створення нового об'єкта метаданих ми замінили на його визначення, а послідовність та алгоритм дій залишилися незмінними.

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

Знаю, що на хабрі не дуже шанують багатостраждальну 1С. Хоча з виходом платформи 8.3 (з клієнтами під Linux) її стали любити дещо більше. До речі, так само зовсім недавно інтерфейс однієї з основних розробок 1С - конфігурація Управління виробничим підприємством - був повністю перекладений англійською мовою. Багато разів я зустрічав питання, чому тут не пишуть про 1С. Відповідь на них досить очевидна – існує безліч спеціалізованих ресурсів, де можна оперативно обговорити всі питання та щось почитати.

Є всі підстави вважати, що ця стаття тут не виживе, але я все ж таки ризикну, тому що в 1С є деякі цікаві речі, про які варто розповісти.

З деяких пір у 1С 8.х з'явилася можливість використання веб-сервісів: 1С може бути як постачальником, так і споживачем. У цій статті я покажу, як використовувати 1С як споживач на прикладі отримання курсів валют із сервера ЦБР.

Веб-сервіс

Центробанк має веб-сервіс для отримання щоденних даних: курси валют, новини, динаміка курсів і т.д. Опис сервісу можна знайти тут http://www.cbr.ru/scripts/Root.asp?Prtid=DWS. Нас цікавить один із методів цього сервісу: GetCursOnDate(On_date)- Отримання курсів валют на задану дату. У метод передається один аргумент On_date– це дата, яку потрібно отримати курси. В результаті повертається XML, що містить таблицю ValuteCursOnDate(Самі курси та супутня інформація).

Конфігурування

Для розробки я взяв 1С 8.2 (8.2.15.317 у моєму випадку) та створив порожню конфігурацію. Для використання зовнішніх веб-сервісів передбачено об'єкт WS-посилання, але використовувати його не обов'язково, до сервісу можна звертатися з коду динамічно. Я використовуватиму перший варіант, а потім покажу, як можна використовувати другий. У конфігурації створив обробку та назвав її «ЗавантаженняКурсовВалютЦБР». Додав форму (керовану) та зробив її основною. На формі я створив реквізити та розмістив елементи управління так, як показано на малюнку.

Зараз найголовніше – створюємо посилання опис веб-сервісу. У конфігурації додаємо новий об'єкт типу WS-посилання. У вікні вказуємо посилання на WSDL (опис даного формату виходить за рамки статті, ви можете почитати про нього на Вікіпедії): http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL .

1С на основі отриманого опису автоматично створить візуальну картку веб-сервісу. Можна побачити назву веб-сервісу, подивитися які у нього доступні операції, а також типи даних, що використовуються.

Конфігурування на цьому майже закінчено, залишилося зробити пару штрихів для того, щоб наш додаток виглядав естетичнішим. Клацніть правою кнопкою миші по корені конфігурації та викличемо меню «Відкрити командний інтерфейс робочого столу». У вікні необхідно зняти прапор «Видимість» навпроти обробки «Завантаження курсів валют ЦБР». Натисніть кнопку Ок. Далі ще правий клік по корені конфігурації та викличемо меню «Відкрити робочу область робочого столу», там зробимо налаштування як на малюнку:

Ці налаштування дозволять нам відобразити форму обробки прямо на робочому столі (мається на увазі робочий стіл програми 1С) у режимі 1С Підприємство.

Програмування

Тепер залишилося наповнити змістом нашу обробку: змусити її отримувати курси валют та відображати у таблиці на формі. У режимі редагування форми необхідно додати нову команду форми, назвемо її Завантажити Валюти. Цю команду необхідно зв'язати із кнопкою, розташованою на формі. Дію для команди заповнимо наступним кодом (прим. автора: нічого собі, на хабрі є підсвічування коду 1С, правда вона працює не коректно):

&НаКлієнті Процедура ЗавантажитиВалюти(Команда) Якщо НЕ ЗначенняЗаповнено(ДатаЗавантаження) Тоді Повідомити("Не вибрано дату завантаження!", СтатусПовідомлення.Важливе); Повернення; КінецьЯкщо; ТаблицяКурсовВалют.Очистити(); ЗавантажитиКурсиВалют(ДатаЗавантаження); КінецьПроцедури
Тут спочатку перевіряється, чи заповнена дата (якщо не заповнена, то повідомляємо про це користувачеві і більше нічого не робимо). Потім очищається таблиця, розташована на формі і викликається процедура Завантажити Курси Валют(), в яку передається дата.

Код процедури ЗавантажитиКурсиВалют(), пояснення наведено в коментарях до коду:

Процедура ЗавантажитиКурсиВалют(фДатаЗагрузки) //Створюємо проксі для звернення до зовнішнього веб-сервісу // передаємо в функцію URI простору імен, ім'я сервісу, ім'я порту. Проксі = WSПосилання.CBR_DailyInfoWebServ.СтворитиWSПроксі("http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap"); //Отримуємо тип параметра, який передається метод GetCursOnDate. ТипWSПараметри = Проксі.ФабрикаXDTO.Пакети.Отримати("http://web.cbr.ru/").Отримати("GetCursOnDate"); //Створюємо параметр з урахуванням типу і заповнюємо значення параметра On_Date. WSПараметр = Проксі.ФабрикаXDTO.Створити(ТипWSПараметра); WSПараметр.On_Date = фДатаЗавантаження; // Викликаємо метод веб-сервісу, записуємо результат у змінну курси валют. КурсиВалют = Проксі.GetCursOnDate(WSПараметр); //Перебираємо таблицю ValuteCursOnDate, кожне значення таблиці // додаємо до таблиці на формі (колонки заповнюємо відповідними значеннями). Для кожного елемента з курсів Валют. НоваРядокТЗ.НазваВалюти = Елемент.Vname; НоваРядокТЗ.Номінал = Елемент.Vnom; НовийРядокТЗ.ЦифровийКодВалюти = Елемент.Vcode; НовийРядокТЗ.СимвольнийКодВалюти = Елемент.VChCode; НоваРядокТЗ.КурсВалюти = Елемент.Vcurs; КінецьЦикл; КінецьПроцедури
Тепер можна оновлювати конфігурацію БД (F7) та запускати 1С Підприємство (F5). Якщо все зробили правильно, то маємо побачити вікно як на малюнку нижче:

Щоб перевірити результат, нам потрібно запровадити дату, на яку хочемо отримати курси валют та натиснути на кнопку «Завантажити валюти». У разі успішного запиту таблиця на формі заповниться значеннями курсів:

Насамкінець хочу показати, як можна звернутися динамічно до зовнішнього веб-сервісу, тобто без додавання об'єкта WS-посилання. Таким чином ми можемо використовувати такі веб-сервіси із зовнішніх обробок без прив'язки до конфігурації.

У процедурі ЗавантажитиКурсиВалют() рядок

Визначення = Новий WSВизначення ("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL"); Проксі = Новий WSПроксі (Визначення, "http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap");
Спочатку ми створюємо звані визначення для веб-сервісу з його WSDL. Потім створюємо проксі для звернення до нього.

Як видно, використовувати зовнішні веб-сервіси з 1С загалом досить просто (хоча і є певна складність у розумінні визначення типів, у мене в тому числі).

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

Вітаю.

Я не зупинятимусь на питанні що таке веб-сервіси 1С, тому що в мережі дуже багато статей на цю тему. Просто спробую коротко показати, яким способом можлива робота з веб-сервісами 1С на php.

Тож почнемо.

В першу чергу для PHP треба підключити модуль для роботи з протоколом SOAP. Для windows треба у файлі php.ini або розкоментувати або дописати рядки
extension=php_soap.dll

Під windows помічено таку особливість - файл php.ini треба обов'язково покласти до папки C:\Windows. Також необхідно перезапустити веб-сервер, якщо PHP встановлено як модуль.

Розглянемо 2 випадки:

  1. Коли параметр методу веб-сервісу необхідно передати рядок
  2. Коли параметр методу веб-сервісу необхідно передати об'єкт пакету XDTO, який описаний в 1С

Приймемо одну умову, що відповідь веб-сервіс 1С надсилає у форматі JSON. На жаль, підтримка формату JSON на рівні методів платформи з'явилася лише у версії «1С Підприємство 8.3.6». Щоб використовувати формат JSON в попередніх версіях платформи є хороша обробка, якою можна скористатися, а можна і написати щось своє, т.к. даний форматПередача даних не складна.
Відповідь веб-сервісу 1С буде у форматі JSON з параметрами «Status» та «Message» (у даному прикладі я не використовував обробку, а описав відповідь сам):

НашеПовідомлення = "Якесь повідомлення" ТекстВідповідіВебСервісів = "(" + Символи.ПС + """Status""" + ":" + """Ok""" + "," + Символи.ПС + """Message """ + ":" + """" + НашеПовідомлення + """" + Символи.ПС + ")";

1 випадок. Передає параметр у вигляді рядка.

// Необхідно вимкнути кешування для SOAP. Якщо цього зробити, // функції веб-сервісів працюватимуть некоректно. ini_set("soap.wsdl_cache_enabled", 0); ini_set("soap.wsdl_cache_ttl", 0); $client = new SoapClient("//localhost:8080/ExampleBase/ws/ExampleWebService.1cws?wsdl", array("login" => "1C", //логін користувача до бази 1С "password" => "54321" , // пароль користувача до бази 1С "soap_version" => SOAP_1_2, // версія SOAP "cache_wsdl" => WSDL_CACHE_NONE, "trace" => true, "features" => SOAP_USE_XSI_ARRAY_TYPE)); //Заповнимо масив параметрів, що передаються $ParametrStroka = "TestStroka"; $params["ParametrStroka"] = $ParametrStroka; //Виконуємо операцію $result = $client->ExampleMethod($params); //ExampleMethod - це спосіб веб-сервісу 1С, який описаний у конфігурації. //Обробимо результат, що повертається $jsResult = $result->return; $dataResult = json_decode($jsResult); $StatusResult = $dataResult->Status; //отримаємо значення параметра Status, який був сформований за відповіді веб-сервісу 1С $MessageResult = $dataResult->

2 випадок. Передача параметра у вигляді пакета XDTO 1C.
Допустимо параметр XDTO — це документ «замовлення клієнта», який має реквізити: номер документа, ПІБ покупця, таблична частина «Товари» (реквізити — штрих-код товару, найменування товару, ціна, кількість, сума). Для нашого прикладу пакет XDTO набуде вигляду

// Необхідно вимкнути кешування для SOAP. Якщо цього зробити, // функції веб-сервісів працюватимуть некоректно. ini_set("soap.wsdl_cache_enabled", 0); ini_set("soap.wsdl_cache_ttl", 0); $client = new SoapClient("//localhost:8080/ExampleBase/ws/ExampleWebService.1cws?wsdl", array("login" => "1C", //логін користувача до бази 1С "password" => "54321" , // пароль користувача до бази 1С "soap_version" => SOAP_1_2, // версія SOAP "cache_wsdl" => WSDL_CACHE_NONE, "trace" => true, "features" => SOAP_USE_XSI_ARRAY_TYPE)); //Заповнимо масив параметрів, що передаються $ParametrXDTO= Array("DocumentNumber" => "0000001", "NameCustomer" => "Андрій Петрович", "Goods" => Array("Product" => array("ProductBarCod" => " 8718863003152", "ProductName" => "Телевізор PHILIPS 40PFT4100/60", "Count" => 1, "Price" => 25000, "Summa" => 25000); $params["ParametrXDTO"] = $ParametrXD /Виконуємо операцію $result = $client->ExampleMethod($params); //ExampleMethod - це метод веб-сервісу 1С, який описаний у конфігурації. ($jsResult);$StatusResult = $dataResult->Status; відповіді веб-сервісу 1С

На цьому все. Як бачите, нічого складно немає. Будуть запитання — питайте.

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

Прикладами таких веб-сервісів можна назвати:
http://www.cbr.ru/scripts/Root.asp?Prtid=DWS веб-сервіс Центробанку, для отримання щоденних даних.
http://api.yandex.ru/speller/doc/dg/concepts/api-overview.xml веб-сервіс Яндекса перевірки правопису.
https://www.flightstats.com/developers/bin/view/Web+Services/WSDL ряд веб-сервісів авіастатистики, для моніторингу польотів, відомостей про погоду, і.т.п.
WSDL ( Web Services Description Language) - мова опису веб-сервісів та доступу до них, що базується на мові XML. (Специфікація http://www.w3.org/TR/wsdl).

SOAP (Simple Object Access Protocol – простий протокол доступу до об'єктів) – протокол обміну структурованими повідомленнями в розподіленому обчислювальному середовищі. SOAP використовується для обміну довільними повідомленнями формат XMLта віддаленого виклику процедур (RPC). (Специфікація http://www.w3.org/TR/soap/).

XDTO (XML Data Transfer Objects) – механізм об'єктного моделювання даних, що описуються за допомогою схеми XML (докладніше http://v8.1c.ru/overview/xdto.htm).

Більшість примітивних типів серіалізованих об'єктів розроблена компанія W3 та їх опис знаходиться у просторі імен «http://www.w3.org/2001/XMLSchema».
і так:
Завдання 1: Встановлення платформи 1С: Підприємство, встановлення компонентів IIS сервера, зв'язок Web-Розширення 1С із сервером IIS.

Під час встановлення платформи 1С: Підприємство необхідно встановити Web-Розширення.

Мал. 1. Вибрані компоненти в момент встановлення 1С

У меню «Панель керуванняВсі елементи панелі керуванняПрограми та компоненти» Необхідно виконати встановлення додаткових компонентів Windows"Увімкнення або вимкнення компонентів Windows" де вказати всі компоненти IIS (за винятком FTP, для поточної роботи він не потрібний). Після встановлення рекомендується перезапустити операційну систему.

Мал. 2. Вибрані компоненти під час встановлення IIS

У меню «Панель керуванняВсі елементи панелі керуванняАдміністрування» запустити консоль «Диспетчер служб IIS», де відкрити елемент «Пули додатків» відкрити пул «DefaultAppPool» у контекстному меню вибрати « Додаткові параметри…» де елемент «Дозволено 32-розрядні програми» треба встановити «True». Це потрібно роботи Web-Расширения 1С, т.к. воно є 32-бітовим приладом.

У тій же консолі "Диспетчер служб IIS", вибрати елемент "Default Web Site", вибрати дію "Автоматичні перевірки" де необхідно включити варіанти: "Анонімна автентифікація", "Звичайна автентифікація", "Перевірка автентичності Windows".

Тепер можлива публікація Web-сервісів 1С на сервері IIS. Але щоб було можливо виконати цю публікацію, необхідно запустити Конфігуратор 1С: Підприємства від імені користувача «Адміністратор».

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

Мал. 3. Структура даних у створеній конфігурації 1С

Довідник "Номенклатура", без додаткових реквізитів. У реквізитах «за замовчуванням» міститься інформація про найменування та код номенклатури.

Документ «Замовлення покупця», який міститиме табличну частину«Товари», кожен рядок якої матиме інформацію про номенклатуру (елемент типу «Довідник Посилання.Номенклатура») та кількість (елемент «Кількість» типу «Число» беззнакове з 15 знаками до коми та 3 після).

Завдання 3: Створення та публікація Веб-сервісу 1С.
У групуванні "Загальні" конфігурації створити новий елемент типу "XDTO-пакети", спочатку для передачі номенклатури. Його можна назвати, наприклад "NomenclatureXDTO". URL простір імен, відповідно до специфікації WSDL, необхідно призначити у вигляді URL адреси специфікації даного пакета, наприклад
"company.com/1C/Nomenclature". У цьому пакеті необхідно створити тип об'єкта, наприклад Nomenclature, в якому є реквізити Code і Name, з відповідним типом string (http://www.w3.org/2001/XMLSchema).
Тепер потрібно створити другий XDTO пакет, який міститиме інформацію про замовлення покупців, його можна назвати "ClientOrderXDTO" у просторі імен "company.com/1C/ClientOrder". Насамперед необхідно підключити директиву імпорту «company.com/1C/Nomenclature», щоб можна було використовувати створений нами пакет серіалізації номенклатури. Це необхідно передачі номенклатури, що міститься в табличній частині документа «Замовлення покупців».

Тепер потрібно створити тип об'єкта «ClientOrderRow», що містить один рядок табличної частини. Цей тип складатиметься з сукупності реквізитів Nomenclature і Count, відповідно для номенклатури необхідно вказати тип об'єкта Nomenclature (http://company.com/1C/Nomenclature), а для кількості double (http:// www.w3.org/2001/XMLSchema)».
Тип об'єкта, що містить саме замовлення можна назвати «ClientOrder» повинен містити номер замовлення, дату створення та масив елементів із табличної частини замовлення. "Number" типу рядок, "Date" типу "dateTime (http://www.w3.org/2001/XMLSchema)" і "Products" типу "ClientOrderRow (http://company.com/1C/ClientOrder)", при цьому необхідно вказати, що мінімальна кількість «0», а максимальна кількість -1, це говорить про те, що цей об'єкт буде масивом.

Але, оскільки необхідно повернути список замовлень, необхідно створити тип об'єкта, що містить цей масив, тому треба створити ще один елемент, званий «ArrayOfClientOrders», у якого буде всього один реквізит, званий «ClientOrder» типу «ClientOrder (http://company .com/1C/ClientOrder)».


Рис 4. Структури XDTO пакетів у 1С

У цьому створення опису переданих значень вважатимуться закінченим. Необхідно описати сам веб-сервіс та його методи.
У групуванні «Загальні» конфігурації необхідно створити об'єкт, Web-сервісу. Його можна назвати "Service". У вкладці «Інше» потрібно вказати простір імен, якому належить веб-сервіс, наприклад «company.com/1C», а також список XDTO пакетів, що містить щойно створені пакети «company.com/1C/Nomenclature, company.com/ 1C/ClientOrder». У вкладці «Операції» створити метод GetClientOrders, який повертатиме значення ArrayOfClientOrders (http://company.com/1C/ClientOrder), при цьому встановити можливість повертати порожні значенняі натиснути на поле з лупою, що називається «Ім'я методу», тим самим у модулі веб-сервісу буде створено функцію, яка буде викликана при зверненні до даним методомвеб-сервіс.

Для того, щоб коректно описати функцію, що отримує з бази даних та повертає список замовлень покупців, необхідно знати внутрішню мову 1С, тому код цієї функції знаходиться в додатку 1. Пояснення потребує те, що «Фабрика XDTO», це деякий менеджер, який виконує серіалізацію об'єктів і цей серіалізований об'єкт необхідно повернути. При цьому відбувається вибірка всіх замовлень, що містяться в базі даних, серіалізація полів номера, дати та рядків табличної частини, при цьому номенклатура потребує додаткової серіалізації, і вже упакований об'єкт вставляється в загальну структуру. Збирається масив упакованих об'єктів, серіалізується до пакету масиву. І відправляється клієнту, як наслідок викликаної функції.
Для публікації веб-сервісу в меню конфігуратора 1С вибрати «АдміністраціяПублікація на веб-сервері…», після чого вказати назву публікації веб-сервісу, наприклад «Company», ім'я сервісу, наприклад, «Service» та адресу «service.1cws», а так ж вказати шлях для публікації, наприклад «C: inetpub www root Company».

Після цього WSDL структура Web-сервісу буде доступна за адресою "localhost/Company/ws/service.1cws?wsdl"

Завдання 4: Створення клієнта C# платформы.NET 4.0.
У Visual Studioстворити нову консольну програму C#.

Далі викликати контекстне менюнад елементом проекту «Reference», і виконати дію «Add service reference…», у меню натиснути на кнопку «Advanced…», відкриється вікно, де необхідно натиснути на кнопку «Add Web Reference…».
Відкриється меню, в яке необхідно вставити посилання на WSDL опис веб-сервісу.


Мал. 5. Підключення веб-сервісу до проекту на C#

Для створеного в 1С веб-сервісу це посилання матиме вигляд «localhost/Company/ws/service.1cws?wsdl», після коректного отримання опису веб-сервісу треба вказати назву простору імен.NET, з якого буде доступне звернення до веб- сервісу, наприклад "CompanyService", потім натиснути на кнопку "Add Reference ...", Visual Studio автоматично згенерує класи за цим описом. У проекті достатньо буде викликати методи згенерованого класу, при цьому серіалізація та виклик виконуватимуть платформу .NET.

Далі необхідно написати програму, яка звертатиметься до веб сервісу, і виводити користувачеві отримані дані. Для цього необхідно знати мову C#, код програми представлений у додатку 2. З цього коду треба пояснити, що створення об'єкта «Service», є що інше, як створення менеджера звернення до сервісу. Від цього імені викликатимуть методи веб-сервісу.
«_1CWebServiceClientConsole» - це загальний простір імені проекту, який вибирається під час створення. Простір імені веб-сервісу, отриманий з WSDL структури, повністю включений у простір імені проекту, що дозволяє викликати віддалені методи «як свої».

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

Додаток 1: код функції GetClientOrders мовою 1С
Код 1C v 8.2 УП Функція GetClientOrders()
МасивЗамовленьПокупцівТип = ФабрикаXDTO.Тип("http://company.com/1C/ClientOrder", "ArrayOfClientOrders");
Замовлення Покупця Тип = Фабрика XDTO. Тип ("http://company.com/1C/ClientOrder", "ClientOrder");
Замовлення ПокупцяРядокТип = ФабрикаXDTO.Тип("http://company.com/1C/ClientOrder", "ClientOrderRow");
НоменклатураТип = ФабрикаXDTO.Тип("http://company.com/1C/Nomenclature", "Nomenclature");
Запит = Новий Запит;
Запит.Текст =
"ВИБРАТИ
| Замовлення Покупця. Посилання,
| Замовлення Покупця. Номер,
| Замовлення Покупця.

| Документ.Заказ Покупця ЯК Замовлення Покупця";
Результат = Запит.Виконати();
Вибірка = Результат.Вибрати();
Якщо Вибірка.Кількість() = 0 Тоді
Повернення Null;
КінецьЯкщо;
МасивЗамовленьПокупців = ФабрикаXDTO.Створити(МасивЗамовленьПокупцівТип);

Поки Вибірка.Наступний() Цикл
Замовлення Покупця = Фабрика XDTO. Створити (Замовлення Покупця Тип);
Замовлення Покупця.Number = Вибірка.Номер;
Замовлення Покупця.Date = Вибірка.Дата;
Для кожного Рядок З Вибірка.Посилання.Товари Цикл
Замовлення ПокупцяРядок = ФабрикаXDTO.Створити(ЗамовленняПокупцяРядокТип);
Номенклатура = Фабрика XDTO. Створити (Номенклатура Тип);
Номенклатура.Code = Рядок.Номенклатура.Код;
Номенклатура.Name = Рядок.Номенклатура.Найменування;
Замовлення ПокупцяРядок.Nomenclature = Номенклатура;
Замовлення ПокупцяРядок.Count = Рядок.Кількість;
ЗамовленняПокупця.Products.Додати(ЗамовленняПокупцяРядок);
КінецьЦикл;
МасивЗамовленьПокупців.ClientOrder.Додати(ЗамовленняПокупця);
КінецьЦикл;
Повернення МасивЗамовлень Покупців;
КінецьФункції

Додаток 2: код програми на C# здійснює звернення до веб-сервісу
Код

using System;
using _1CWebServiceClientConsole.CompanyService;

Namespace _1CWebServiceClientConsole
{
class Program
{
static void Main(string args)
{
using ( Service service= new Service())
{
var arrayOfClientOrders = service.GetClientOrders();

If (arrayOfClientOrders == null)
Console.WriteLine("Не знайдена");

Foreach (var clientOrder in arrayOfClientOrders)
{
Console.WriteLine("Замовлення покупця №" + clientOrder.Number + "від" + clientOrder.Date);
Console.WriteLine("************************************************** ********");
foreach (var clientOrderRow in clientOrder.Products)
{
Console.WriteLine(clientOrderRow.Nomenclature.Name + " " + clientOrderRow.Count);
}
Console.WriteLine("************************************************** ********n");
}
}
Console.ReadKey();
}
}
}