Рассмотрим работу 1С со сторонними web-ресурсами на примере ЦБ РФ. Описание публикуемых web-сервисов можно найти здесь http://www.cbr.ru/scripts/root.asp.
Разработка будет вестись в новой конфигурации, в режиме управляемого приложения.
Мы можем подключиться к стороннему ресурсу, используя объект WSОпределения.
В итоге должно получиться следующее:
После этого можно обратиться к нашему сервису через менеджер WSСсылки:
Создадим справочник "Валюты", реквизиты пока добавлять не будем, создаем форму списка, добавляем команду "ЗаполнитьСправочник", выносим ее на форму, пишем код:
Сохраняем конфигурацию, запускаем отладку и смотрим, какое значение у нас содержится в ДанныеВалюта.
Необходимые нам данные содержатся по следующему пути ДанныеВалюта.EnumValutesResult.diffgram.ValuteData.EnumValutes
Теперь можно внести дополнительные настройки в справочник Валюты. Поля Vcode, Vname пойдут в Код, Наименование справочника, для остальных добавим соответствующие реквизиты. Так же я отключил автонумерацию справочника.
Я сделал наименования реквизитов один в один как названия колонок, чтобы можно было воспользоваться методом ЗаполнитьЗначенияСвойств, а не приравнивать значения каждому реквизиту. Дописываем процедуры:
Файл конфигурации
Разработка будет вестись в новой конфигурации, в режиме управляемого приложения.
Мы можем подключиться к стороннему ресурсу, используя объект WSОпределения.
Новый WSПрокси(Новый WSОпределения("http://www.cbr.ru/dailyinfowebserv/dailyinfo.asmx?WSDL"),
"http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap");Так же, мы можем предварительно загрузить описание ws-ссылки в метаданные 1С. Для этого находим в дереве метаданных группу WS-ссылка, добавляем описание:
После этого можно обратиться к нашему сервису через менеджер WSСсылки:
WSСсылки.Daily.СоздатьWSПрокси("http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap");Попробуем для начала получить справочник валют ЦБ и заполнить на его основании свой.
Создадим справочник "Валюты", реквизиты пока добавлять не будем, создаем форму списка, добавляем команду "ЗаполнитьСправочник", выносим ее на форму, пишем код:
&НаСервере Процедура ЗаполнитьСправочникСервер() СервВалюты = WSСсылки.Daily.СоздатьWSПрокси("http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap"); ТипБулево = СервВалюты.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "boolean"); ЗначениеБулево = СервВалюты.ФабрикаXDTO.Создать(ТипБулево, Истина); //обращаемся к методу EnumValutes, передаем значение Истина, которое заранее привели к типу XDTO //если передать без преобразования, возникнет ошибка несоответствия типов ДанныеВалюта = СервВалюты.EnumValutes(ЗначениеБулево); КонецПроцедуры // ЗаполнитьСправочникСервер() &НаКлиенте Процедура ЗаполнитьСправочник(Команда) ЗаполнитьСправочникСервер(); КонецПроцедуры
Сохраняем конфигурацию, запускаем отладку и смотрим, какое значение у нас содержится в ДанныеВалюта.
Необходимые нам данные содержатся по следующему пути ДанныеВалюта.EnumValutesResult.diffgram.ValuteData.EnumValutes
Теперь можно внести дополнительные настройки в справочник Валюты. Поля Vcode, Vname пойдут в Код, Наименование справочника, для остальных добавим соответствующие реквизиты. Так же я отключил автонумерацию справочника.
Я сделал наименования реквизитов один в один как названия колонок, чтобы можно было воспользоваться методом ЗаполнитьЗначенияСвойств, а не приравнивать значения каждому реквизиту. Дописываем процедуры:
&НаСервере Процедура ЗаполнитьСправочникСервер() СервВалюты = WSСсылки.Daily.СоздатьWSПрокси("http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap"); ТипБулево = СервВалюты.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "boolean"); ЗначениеБулево = СервВалюты.ФабрикаXDTO.Создать(ТипБулево, Истина); //обращаемся к методу EnumValutes, передаем значение Истина, которое заранее привели к типу XDTO //если передать без преобразования, возникнет ошибка несоответствия типов ДанныеВалюта = СервВалюты.EnumValutes(ЗначениеБулево); спВалюты = ДанныеВалюта.EnumValutesResult.diffgram.ValuteData.EnumValutes; Для Каждого элВалюта Из спВалюты Цикл спВалюта = Справочники.Валюты.НайтиПоКоду(СокрЛП(элВалюта.Vcode)); Если спВалюта.Пустая() Тогда обВалюта = Справочники.Валюты.СоздатьЭлемент(); обВалюта.Код = элВалюта.Vcode; обВалюта.Наименование = элВалюта.Vname; Иначе обВалюта = спВалюта.ПолучитьОбъект(); КонецЕсли; ЗаполнитьЗначенияСвойств(обВалюта, элВалюта); обВалюта.Записать(); КонецЦикла; КонецПроцедуры // ЗаполнитьСправочникСервер() &НаКлиенте Процедура ЗаполнитьСправочник(Команда) ЗаполнитьСправочникСервер(); Элементы.Список.Обновить(); КонецПроцедурыЗапускаем, переходим в справочник, запускаем нашу команду.
Файл конфигурации
Спасибо, хороший пример! С уважением Алексей.
ОтветитьУдалитьКогда Web-сервер на стороне SAP - так просто передать структуру даже из двух строковых полей не получится. К сожалению.
ОтветитьУдалить