Загрузить курсы валют с сайта Национального Банка РБ https://www.nbrb.by/bel без использования сторонних сервисов.
1. Использование "Файл"->"Открыть". Курсы загружаются с предыдущей даты загрузки по текущий день. Загружаются курсы всех валют, отмеченных способом "Загружается из Интернета"
2. Подключение в справочнике "Администрирование"->"Дополнительные отчеты и обработки"
Для данного варианта можно настроить загрузку курсов валют ежедневно по расписанию.
Подключаемся через HTTPСоединение
Примеры адресов API для валют:
//https://www.nbrb.by/api/exrates/rates/840?parammode=1 - получение внутреннего кода валюты "Cur_ID"
//https://www.nbrb.by/API/ExRates/Rates/Dynamics/431?startDate=2022-3-1&endDate=2022-3-10 курс валюты за период 1 файлом
Функция ПолучитьHTTPСоединение() Экспорт
Соединение = Неопределено;
SSL = Новый ЗащищенноеСоединениеOpenSSL();
Попытка
Соединение = Новый HTTPСоединение("www.nbrb.by",,,,,, SSL);
Исключение
Сообщить("Ошибка создания соединения");
Возврат Неопределено;
КонецПопытки;
Возврат Соединение;
КонецФункции
Функция ЗапросHTTP_курс(Код)
ЗапросHTTP = Новый HTTPЗапрос();
//ЗапросHTTP.АдресРесурса = "/api/exrates/rates/" + 840 + "?parammode=1&ondate=" + Формат(Дата, "ДФ=yyyy-M-d");
ЗапросHTTP.АдресРесурса = "/api/exrates/rates/" + Код + "?parammode=1";
Возврат ЗапросHTTP;
КонецФункции
Функция ЗапросHTTP_курсы(Код, НачалоПериода, КонецПериода)
//https://www.nbrb.by/API/ExRates/Rates/Dynamics/431?startDate=2022-3-1&endDate=2022-3-10 курс валюты за период 1 файлом //Доллар
ЗапросHTTP = Новый HTTPЗапрос();
ЗапросHTTP.АдресРесурса = "/API/ExRates/Rates/Dynamics/" + Код + "?startDate="+Формат(НачалоПериода, "ДФ=yyyy-M-d")+ "&endDate=" + Формат(КонецПериода, "ДФ=yyyy-M-d");
Возврат ЗапросHTTP;
КонецФункции
Непосредственно загрузка:
Процедура ЗагрузитьКурсыВалютПоПараметрам(СписокВалют, НачалоПериода, КонецПериода, ПриЗагрузкеВозниклиОшибки)
//https://www.nbrb.by/api/exrates/rates/840?parammode=1 - получение внутреннего кода валюты "Cur_ID"
//https://www.nbrb.by/API/ExRates/Rates/Dynamics/431?startDate=2022-3-1&endDate=2022-3-10 курс валюты за период 1 файлом
Соединение = ПолучитьHTTPСоединение();
Если Соединение = Неопределено Тогда
Возврат;
КонецЕсли;
Для каждого Валюта из СписокВалют Цикл
ВнутрКод = "";
ЗапросHTTP = ЗапросHTTP_курс(Валюта.КодВалюты);
Ответ = Соединение.Получить(ЗапросHTTP);
Если Ответ.КодСостояния = 200 ИЛИ Ответ.КодСостояния = 204 Тогда
Иначе
Возврат;
КонецЕсли;
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
ПП = ПрочитатьОтветJSON(ТелоОтвета);
ВнутрКод = ПП["Cur_ID"];
Кратность = Число(ПП["Cur_Scale"]);
ЗапросHTTP = ЗапросHTTP_курсы(ВнутрКод, НачалоПериода, КонецПериода);
Ответ = Соединение.Получить(ЗапросHTTP);
Если Ответ.КодСостояния = 200 ИЛИ Ответ.КодСостояния = 204 Тогда
Иначе
Возврат;
КонецЕсли;
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
ПП = ПрочитатьОтветJSON(ТелоОтвета);
Для каждого Эл из ПП Цикл
Курс = Число(Эл["Cur_OfficialRate"]);
Дата = ВДату(Эл["Date"]);//"2021-07-09T00:00:00"
ЗаписатьКурсВалюты(Валюта.Валюта, Дата, Курс, Кратность)
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Функция ПрочитатьОтветJSON(СтрокаJSON) Экспорт
Результат = Неопределено;
Попытка
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
Результат = ПрочитатьJSON(ЧтениеJSON, Истина,,,"ПреобразованиеJSON", );
Исключение
Возврат Неопределено;
КонецПопытки;
Возврат Результат;
КонецФункции
Тестировалось на версиях конфигураций Управление торговлей, редакция 3.4 и Бухгалтерия для Беларуси, редакция 2.1. Локализация для Республики Беларусь. Версия платформы 1С 8.3.15. Подойдет для любой конфигурации на базе БСП.