Иногда требуется получать Официальный курс белорусского рубля по отношению к иностранным валютам, устанавливаемый Национальным банком Республики Беларусь.
Поговорим об этом...
Полное описание формата файла для загрузки курсов можно найти по ссылке:
Средствами 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Соеднинения претерпели некоторые изменения.