1С. Получение учетных цен драгоценных металлов

Требуется получение учетных цен драгоценных металлов с сайта Центрального банка РФ через web-сервис, для этого пишем свой пример

Задача

Получать учетные цены драгоценных металлов с сайта Центрального банка РФ.

Решение

Читаем хорошо составленную документацию о web-сервисе, по которой пишем код. При разработке позаботимся о типовом решении и будем создавать WSОпределение программно. без включения в конфигурацию.

&НаСервере
Процедура ЗагрузитьЦенуДрагоценныхМеталловССайтаЦБРФ(НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки) Экспорт 

    // Создадим WSОпределение прямо с сайта, дольше чем из 
    // конфигурации, но оставим последнюю без изменений
    Определения	= Новый WSОпределения("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL");
	
    // Создадим WSПрокси на основании WSОпределения
    Прокси		= Новый WSПрокси(Определения, "http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap");
	
    // Установим параметры
    ТипWSПараметра	= Прокси.ФабрикаXDTO.Пакеты.Получить("http://web.cbr.ru/").Получить("DragMetDynamic");
    WSПараметр		= Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
    WSПараметр.FromDate	= НачалоПериодаЗагрузки;
    WSПараметр.ToDate	= ОкончаниеПериодаЗагрузки;
	
    // Получим цены драг. металлов
    ЦеныДрагоценныхМеталов = Прокси.DragMetDynamic(WSПараметр);
	
    Попытка
	ХДТОДрагМет = ЦеныДрагоценныхМеталов.DragMetDynamicResult.diffgram.Получить("DragMetall")
    Исключение
	// Опытным путем выяснилось, что если курса
        // на дату(НачалоПериодаЗагрузки = ОкончаниеПериодаЗагрузки)
	// нет, то получим исключение
	Возврат;
    КонецПопытки; 
	
    Для Каждого ЗаписьЦеныДрагоценногоМетала Из ХДТОДрагМет.DrgMet Цикл 
		
 	// Из документации: таблица DrgMet содержит поля
	//	- DateMet -	Дата котирования
	//	- CodMet  -	Тип металла (1-Золото, 2-Серебро, 3-Платина, 4-Палладий)
	//	- price   -	Учетная цена
	
	// Для примера будем получать курс и дату для золота
	Если ЗаписьЦеныДрагоценногоМетала.CodMet = "1" Тогда 
			
		ДатаКурсаСтр = ЗаписьЦеныДрагоценногоМетала.DateMet;
		ДатаКурса    = Дата(Лев(ДатаКурсаСтр,4), Сред(ДатаКурсаСтр,6,2), Сред(ДатаКурсаСтр,9,2));
		
		Курс      = ЗаписьЦеныДрагоценногоМетала.price;
			
		// Здесь необходимо описать код по работе с полученным курсом и датой
			
	КонецЕсли;
		
    КонецЦикла;
	
КонецПроцедуры	

Для уменьшения времени создания WSОпределения в современных конфигурациях на БСП есть регистр для хранения программно созданных.  Можно адаптировать представленный код для этого механизма, но в рамках данной статьи разбора не будет)

Литература: Сайт Центрального банка РФ

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *