По теме из базы знаний
- Загрузка курсов валют из Национального банка Республики Беларусь
- Загрузка курсов валют НБРБ (обычная и управляемая форма)
- Загрузка курсов валют с сайта Нацбанка Республики Беларусь (МиСОФТ 1С 7.7 )
- Загрузка курсов валют с сайта Национального банка РБ
- Загрузка курсов валют НБ РБ для Республики Беларусь (управляемые формы)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Скорее всего да (трудно сказать за Белорусь). Такие сервисы 1с предоставляет бесплатно, но при наличии ИТС и часто проф.
Проще говоря, нужен логин и пароль, которые получаешь при подписке на ИТС.
Альтернатива - если есть бесплатный сервис писать самому код.
Проще говоря, нужен логин и пароль, которые получаешь при подписке на ИТС.
Альтернатива - если есть бесплатный сервис писать самому код.
(1) В новых конфигурациях изменили с бесплатного на "платный".
Можете в старых УТ или Бух для "Беларуси" поискать обработку КурсыВалютНБРБ.
Можете в старых УТ или Бух для "Беларуси" поискать обработку КурсыВалютНБРБ.
Процедура ЗагрузитьКурсыНБРБ() Экспорт
Перем HTTP;
Если НЕ ЗначениеЗаполнено(НачДата) ИЛИ НЕ ЗначениеЗаполнено(КонДата) Тогда
ЗафиксироватьОшибку("Укажите даты");
Возврат;
КонецЕсли;
Если Год(НачДата) <> Год(КонДата) Тогда
ЗафиксироватьОшибку("Период не в рамках одного года");
Возврат;
КонецЕсли;
Если Год(НачДата)<2000 Тогда
ЗафиксироватьОшибку("Курсы валют на сайте представлены начиная с 2000-го года");
Возврат;
КонецЕсли;
//Если Началодня(КонДата) > НачалоДня(ТекущаяДата())Тогда
// Сообщить("Конечная дата должна быть не больше текущей");
// Возврат;
//КонецЕсли;
СтруктураПоиска = Новый Структура("ЗагружатьКурс", Истина);
МассивВыбранныеВалюты = СписокВалют.НайтиСтроки(СтруктураПоиска);
Если МассивВыбранныеВалюты.Количество()>0 Тогда
РегистрКурсыВалют = РегистрыСведений.КурсыВалют;
ЗаписьКурсовВалют = РегистрКурсыВалют.СоздатьМенеджерЗаписи();
// таблица с полученными курсами
ТаблицаКурсы = Новый ТаблицаЗначений;
ТаблицаКурсы.Колонки.Добавить("Период" , ОбщегоНазначения.ПолучитьОписаниеТиповДаты(ЧастиДаты.Дата));
ТаблицаКурсы.Колонки.Добавить("Валюта");
ТаблицаКурсы.Колонки.Добавить("Кратность", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(10,0));
ТаблицаКурсы.Колонки.Добавить("Курс" , ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(10,4));
ПустаяВалюта = Справочники.Валюты.ПустаяСсылка();
СерверИсточник = "www.nbrb.by";
//ОбработкаПолученияФайлов = Обработки.ПолучениеФайловИзИнтернета.Создать();
Адрес = "Services/XmlExRates.aspx?ondate=";
ВремКаталог = КаталогВременныхФайлов() + "tempKurs";
СоздатьКаталог(ВремКаталог);
Попытка
УдалитьФайлы(ВремКаталог,"*.*");
Исключение
ЗафиксироватьОшибку("Ошибка блокировки временных файлов");
Возврат;
КонецПопытки;
ОдинДень = 0;
Пока (НачалоДня(НачДата)+ОдинДень) <= НачалоДня(КонДата) Цикл
// очистка каталога
Попытка
УдалитьФайлы(ВремКаталог,"*.*");
Исключение
ЗафиксироватьОшибку("Ошибка блокировки временных файлов");
Возврат;
КонецПопытки;
// адрес для запроса
ДеньВФормате = Формат((НачалоДня(НачДата)+ОдинДень), "ДФ=MM/dd/yyyy");
АдресДня = Адрес + ДеньВФормате;
// получение файла
ИмяВходящегоФайла = "" + ВремКаталог + "\" + ИмяФайла;
СтрокаПараметраПолучения = АдресДня;
Если ПолучитьФайлССервера(СерверИсточник, СтрокаПараметраПолучения, ИмяВходящегоФайла) <> Истина Тогда
ЗафиксироватьОшибку("Не удалось получить интернет-ресурс. Курсы валют не будут загружены");
Возврат;
КонецЕсли;
ВходящийФайл = Новый Файл(ИмяВходящегоФайла);
Если НЕ ВходящийФайл.Существует() Тогда
ЗафиксироватьОшибку("Не удалось получить данные. Курсы валют не будут загружены");
Возврат;
КонецЕсли;
// читаем файл
ЧтениеХМЛ = Новый ЧтениеXML;
ЧтениеХМЛ.ОткрытьФайл(ИмяВходящегоФайла);
ПостроительДОМ = Новый ПостроительDOM;
ДокументДом = ПостроительДОМ.Прочитать(ЧтениеХМЛ);
ЧтениеХМЛ.Закрыть();
КорневойДОМ = ДокументДом.ЭлементДокумента;
// читаем узлы Currency
ЭтотУзел = "";
Для Каждого Узел Из КорневойДОМ.ДочерниеУзлы Цикл
Для Каждого УзелВалюта Из Узел.ДочерниеУзлы Цикл
Если УзелВалюта.ТипУзла = ТипУзлаDOM.Элемент Тогда
Если УзелВалюта.ИмяЭлемента = "NumCode" Тогда
Код = УзелВалюта.ТекстовоеСодержимое;
Валюта = Справочники.Валюты.НайтиПоКоду(Код);
Если Валюта <> ПустаяВалюта Тогда
НоваяСтрока = ТаблицаКурсы.Добавить();
НоваяСтрока.Период = (НачалоДня(НачДата)+ОдинДень);
НоваяСтрока.Валюта = Валюта;
ЭтотУзел = Узел.ТекстовоеСодержимое;
Иначе
Продолжить;
КонецЕсли;
ИначеЕсли УзелВалюта.ИмяЭлемента = "Scale" И Узел.ТекстовоеСодержимое = ЭтотУзел Тогда
НоваяСтрока.Кратность = Число(УзелВалюта.ТекстовоеСодержимое);
ИначеЕсли УзелВалюта.ИмяЭлемента = "Rate" И Узел.ТекстовоеСодержимое = ЭтотУзел Тогда
НоваяСтрока.Курс = Число(УзелВалюта.ТекстовоеСодержимое);
Иначе
Продолжить;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
// увеличим счетчик
ОдинДень = ОдинДень + 60*60*24;
КонецЦикла;
УдалитьФайлы(ВремКаталог,"*.*");
// запись курсов
Для Каждого ВыбраннаяВалюта Из МассивВыбранныеВалюты Цикл
МассивСтрок = ТаблицаКурсы.НайтиСтроки(Новый Структура("Валюта", ВыбраннаяВалюта.Валюта));
Для Каждого СтрокаМассива Из МассивСтрок Цикл
ЗаписьКурсовВалют.Валюта = СтрокаМассива.Валюта;
ЗаписьКурсовВалют.Период = СтрокаМассива.Период;
ЗаписьКурсовВалют.Прочитать();
ЗаписьКурсовВалют.Валюта = СтрокаМассива.Валюта;
ЗаписьКурсовВалют.Период = СтрокаМассива.Период;
ЗаписьКурсовВалют.Курс = СтрокаМассива.Курс;
ЗаписьКурсовВалют.Кратность = СтрокаМассива.Кратность;
ЗаписьКурсовВалют.Записать();
КонецЦикла;
КонецЦикла;
Сообщить("Загрузка курсов валют завершена");
КонецЕсли;
КонецПроцедуры // ЗагрузитьКурсыНБРБ()
Функция ПолучитьФайлССервера( пСерверИсточник, пСтрокаПараметраПолучения, пИмяВходящегоФайла )
Результат = Истина;
HTTP = Новый HTTPСоединение(пСерверИсточник);
Попытка
HTTP.Получить(пСтрокаПараметраПолучения, пИмяВходящегоФайла);
Исключение
Результат = Ложь;
ЗафиксироватьОшибку("Ошибка при получении файла с сервера: " + ПолучитьПричинуОшибки(ИнформацияОбОшибке()).Описание);
КонецПопытки;
Возврат Результат;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот