Разработка обработок для 1С

Загрузка курсов валют Национального банка Республики Беларусь

Иногда требуется получать Официальный курс белорусского рубля по отношению к иностранным валютам, устанавливаемый Национальным банком Республики Беларусь.

Поговорим об этом...

Полное описание формата файла для загрузки курсов можно найти по ссылке:

API получения официального курса белорусского рубля по отношению к иностранным валютам, устанавливаемого Национальным банком Республики Беларусь

Средствами 1С (8.3) организовать загрузку курсов валют можно приблизительно так: 

ДатаКурса = НачалоПериодаЗагрузки;
Пока ДатаКурса <= ОкончаниеПериодаЗагрузки Цикл
	//Пример запроса (Швейцарский франк) https://www.nbrb.by/api/exrates/rates/130?parammode=1&ondate=2020-12-06
	//Выполняем запрос и делаем запись в регистр
	ШаблонЗапроса = "API/ExRates/Rates/%1?parammode=1&onDate=%2";
	ЗапросКурсаВалютыНаДату = СтрШаблон(ШаблонЗапроса, Валюта.Код, Формат(ДатаКурса, "ДФ=yyyy-MM-dd")); 
		ССЛ = Новый ЗащищенноеСоединениеOpenSSL(
		Новый СертификатКлиентаWindows(),
		Новый СертификатыУдостоверяющихЦентровWindows()); 
	ХТТПСоединение = Новый HTTPСоединение("www.nbrb.by",,,,ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"),,ССЛ);
	ХТТПОтвет = ХТТПСоединение.Получить(ЗапросКурсаВалютыНаДату, ПолучитьИмяВременногоФайла());
	Если ХТТПОтвет.КодСостояния = 200 Тогда
		ЧтениеЖСОН = Новый ЧтениеJSON;
		ЧтениеЖСОН.ОткрытьПоток(ХТТПОтвет.ПолучитьТелоКакПоток());
		ИнформацияОКурсеВалюты = ПрочитатьJSON(ЧтениеЖСОН);			
		НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.Валюта.Установить(Валюта.Валюта);
		НаборЗаписей.Отбор.Период.Установить(ДатаКурса);
		Запись = НаборЗаписей.Добавить();
		Запись.Валюта = Валюта.Валюта;
		Запись.Период = ДатаКурса;
		Запись.Курс = ИнформацияОКурсеВалюты.Cur_OfficialRate;
		Запись.Кратность = ИнформацияОКурсеВалюты.Cur_Scale;				
		НаборЗаписей.Записать();			
	Иначе
		ИмяСобытия = ИмяСобытияЖурналаРегистрации();
		ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , ,
			НСтр("en='Error loading currency rates';ru='Ошибка при загрузке курсов валют'"));
	КонецЕсли;		
	ДатаКурса = ДатаКурса + 24*60*60; 
КонецЦикла;

Надеемся, идея понятна. Организовать чтение JSON каждый сможет на свое усмотрение. 

Здесь часть процедуры получения курса валюты. В процедуру передается период загрузки курса валюты и сама валюта.

Замечание: работоспособность проверялась на платформе 8.3.15.* и выше - работает. На версии 8.3.6.* HTTPСоединение и его метод Получить() не отрабатывают с SSL-соединением. Скорее, на платформах ниже 8.3.6.* тоже не будет отрабатывать. Работоспособность кода на версиях между 8.3.6* и 8.3.15.*  не проверялась. Подозреваем, что будет работать начиная с версии 8.3.7 или 8.3.10, т.к. в этих версиях методы HTTPСоеднинения претерпели некоторые изменения.

Оставлять комментарии могут только зарегистрированные пользователи

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Еще почитать: