Каталог решений - Использование внешних веб­сервисов в 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, каждое значение таблицы

    // добавляем в таблицу на форме (колонки заполняем соответствующими значениями).

    Для Каждого Элемент Из КурсыВалют.GetCursOnDateResult.diffgram.ValuteData.ValuteCursOnDate Цикл 

        НоваяСтрокаТЗ = ТаблицаКурсовВалют.Добавить();

        НоваяСтрокаТЗ.НазваниеВалюты      = Элемент.Vname;

        НоваяСтрокаТЗ.Номинал             = Элемент.Vnom;

        НоваяСтрокаТЗ.ЦифровойКодВалюты   = Элемент.Vcode;

        НоваяСтрокаТЗ.СимвольныйКодВалюты = Элемент.VChCode;

        НоваяСтрокаТЗ.КурсВалюты          = Элемент.Vcurs;

    КонецЦикла;

КонецПроцедуры

Теперь можно обновлять конфигурацию БД (F7) и запускать 1С Предприятие (F5). Если все сделали верно, то должны увидеть окно как на рисунке ниже:

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

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

В процедуре ЗагрузитьКурсыВалют() строку

Прокси = WSСсылки.CBR_DailyInfoWebServ.СоздатьWSПрокси(«http://web.cbr.ru/», «DailyInfo», «DailyInfoSoap»);

необходимо заменить двумя следующими строками

Определения = Новый WSОпределения(«http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL»);

Прокси = Новый WSПрокси(Определения, «http://web.cbr.ru/», «DailyInfo», «DailyInfoSoap»);

Сначала мы создаем так называемые определения для веб-сервиса из его WSDL. Затем так же создаем прокси для обращения к нему.

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

Если данная публикация найдет здесь отклик, то есть еще несколько тем, о которых можно рассказать. 

По ссылке можно скачать конфигурацию с примером (cf-файл).


Впервые опубликовано на habrahabr.ru

has been added to your cart:
Оформление заказа