Загрузка курсов любых валют. "Экзотические", не котируемые центробанками.

31.03.15

Учетные задачи - Банковские операции

С помощью этой обработки вы сможете наладить загрузку любых курсов валют в базу 1С.

Скачать исходный код

Наименование Файл Версия Размер
ЗагрузкаКотировок.epf
.epf 8,40Kb
39
.epf 8,40Kb 39 Скачать
Загрузка котировок (Управляемая форма)
.epf 10,42Kb
56
.epf 10,42Kb 56 Скачать


С сайта ЦБ РФ с помощью веб-сервиса загружаются в базу все курсы за выбранный период по валютам в справочнике "Валюты". В справочнике "валюты" есть список валют. Эта обработка автоматически загрузит все курсы валют с ЦБ РФ, которые есть в справочнике. По "экзотическим" с сайта возьмёт только те, которые есть в списке справочника. Код обработки сделан только для AED, RSD. Если есть в справочнике - загрузятся. Нет - ничего не произойдёт. 

С сайта http://ru.exchange-rates.org/ загружаются валюты:

  • Арабский дирхам    AED (784)
  • Сербский динар      RSD (941)

Данную обработку можно легко расширить для загрузки любых других валют, не являющихся свободно конвертируемыми.

Пользователю будет полезна как быстрая и легкая загрузка валют с ЦБ РФ, по сравнению с типовой загрузкой с сайта РБК.

Программисту будет интересна не только как инструмент для загрузки, но и как пример работы с сайтами.
Используются технологии получения страничек сайта с помощью встроенного в Windows объекта работы с XML,WEB.
XHR    = Новый COMОбъект("MSXML2.XMLHTTP.6.0");
Обладает большими преимуществами, по сравнению с объектами, встроенными в платформу 1С.
Так для работы с RSS, либо XML (выдаваемым по ссылке с сайта) этот объект сразу предоставит "разобранный" объект DOM.
Не потребуется дополнительный разбор с помощью средств 1С.

В этой же обработке используется разбор странички HTML с помощью встроенных объектов в платформу 8.2.

Загрузка любых валют

См. также

Автоматическая обработка банковских выписок и документов в 1С

Банковские операции Обмен с интернет-банком Эквайринг/ридер магнитных карт Программист Бухгалтер Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Устали вручную дозаполнять и корректировать документы по банку после загрузки банковской выписки? С помощью правил обработки банковской выписки вы сможете автоматически определять правильный вид хозяйственной операции, заполнять расшифровку, аналитику платежа и многое другое.

15000 руб.

21.03.2023    8890    50    12    

48

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    16233    14    18    

14

Интеграция 1С и Битрикс 24 — модуль синхронизации для обмена задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    18401    10    15    

16

1С обмен данными с клиентом банка для БП 3.0, ERP 2.4, ERP 2.5 с дополнительными правилами загрузки

Обмен с интернет-банком Банковские операции Программист Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Модуль представляет собой комплексную автоматизацию обмена данными 1С с банком для БП 3.0, ERP 2.4, ERP 2.5. Выписка клиент-банка загружается и обрабатывается по Вашим правилам. Заполнение реквизитов документов, анализ назначения платежа. Работа с клиент банком не отличается от типового варианта, а документы автоматически заполняются так, как нужно вам. Дополнительная обработка, работающая совместно с основным расширением позволяет подключать собственные произвольные алгоритмы.

20400 руб.

03.04.2013    123317    247    377    

161

Обмен с клиентом банка для Беларуси

Банковские операции Обмен с интернет-банком Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Беларусь Россия Бухгалтерский учет Платные (руб)

Типовая обработка "Клиент-банк" из конфигурации 1С "Бухгалтерия для Беларуси, редакция 2.1" корректно работает с выписками только банка "Дабрабыт", до 28.01.2019 "Москва-Минск". А бухгалтеру нужно работать и с другими банками и с другими конфигурациями. Для этого было разработано расширение, которое позволит решить данную проблему!

10.10.2017    36788    71    Xershi    41    

58
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. mednoe 29.05.20 14:01 Сейчас в теме
1C8_Бухгалтерия 30_текущий релиз - обработка работает ?
2. GVasiliy 23 06.06.20 22:59 Сейчас в теме
да, скорее всего должна работать
3. ico 08.06.20 10:00 Сейчас в теме
Не работает!
Функция ПолучитьДанныеInternet(СтрокаПараметраПолучения) в попытке на операторе XHR.send(null); вываливается на exception и возвращает нулевой курс. А данные на сайте есть.
4. ico 08.06.20 13:29 Сейчас в теме
XHR = Новый COMОбъект("MSXML2.XMLHTTP.6.0");
Этот объект точно в любой Винде? Не надо ничего доустанавливать?
6. GVasiliy 23 21.06.20 10:48 Сейчас в теме
(4)Да, он есть в любой винде, устанавливать ничего не надо
В любой винде есть аналоги:

xhr  = Новый COMОбъект("MSXML2.XMLHTTP");
xhr  = Новый COMОбъект("MSXML2.ServerXMLHTTP");
xhr  = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
xhr  = Новый COMОбъект("MSXML2.ServerXMLHTTP.6.0");
5. ico 09.06.20 20:08 Сейчас в теме
Посидел, поковырялся... Разобрался. Глянул на дату публикации, удивился - как это такое старенькое попало в рассылку новинок. И мысля шевельнулась... Протоколы у нас теперь другие. http теперь не в моде, надо смотреть в сторону https.
Только вот инструмент MSXML2.XMLHTTP.6.0 не прокатит. Он не про этот протокол.
Надо WinHttp.WinHttpRequest.5.1 использовать.

Таким образом функция получения данных с сайта надо написать так:
Функция ПолучитьДанныеInternet(Запрос) Экспорт
	
	XMLHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
	XMLHttp.Option(4, 13056); //intSslErrorIgnoreFlags
	Попытка
		XMLHttp.Open("GET", Запрос, Ложь);
	Исключение
		Ошибка = ОписаниеОшибки();
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Ошибочный OPEN "+Ошибка+"("+Запрос+")";
		Сообщение.Сообщить();
		Возврат Ложь;
	КонецПопытки;	
	//Отправка запроса      
	Попытка
		XMLHttp.Send();
		Текст	= XMLHttp.responseText;
	Исключение
	КонецПопытки;
	
	Возврат Текст;
	
КонецФункции
Показать

А процесс парсинга текста странички тоже по другому пишем (там идентификаторы тэгов на сайте убрали за какой-то невидимой надобностью):
Функция ПолучитьКурсВалютыССайта_RSD(ДатаЗагрузки) Экспорт
	
	СтрокаПараметраПолучения	= "https://ru.exchange-rates.org/Rate/RSD/RUB/"+Формат(ДатаЗагрузки,"ДФ=dd.MM.yyyy");
	
	Страничка	= ПолучитьДанныеInternet(СтрокаПараметраПолучения);		
	
	ЧтениеHTML = Новый ЧтениеHTML;
	ЧтениеHTML.УстановитьСтроку(Страничка);
	ПостроительDOM = Новый ПостроительDOM;
	ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
	
	Состояние(ДокументHTML.Заголовок);
	
	ТекстовоеСодержимое = ДокументHTML.ПолучитьЭлементПоИдентификатору("ratesTable").ТекстовоеСодержимое;
	НачалоТекстаКурса = СтрНайти(ТекстовоеСодержимое, "равно") + СтрДлина("равно ");
	КонецТекстаКурса = СтрНайти(ТекстовоеСодержимое,  " по состоянию");
	Курс = Число(Сред(ТекстовоеСодержимое, НачалоТекстаКурса, КонецТекстаКурса - НачалоТекстаКурса));
	
	Возврат Курс;
	
КонецФункции
Показать

Ну и в функции записи значения валюты кратность ставим равную 1.
Revan102; nikson_1987; +2 Ответить
8. Night_Trap 15.06.23 16:09 Сейчас в теме
(5)
ТекстовоеСодержимое = ДокументHTML.ПолучитьЭлементПоИдентификатору("ratesTable").ТекстовоеСодержимое;


Добрый день. В полученном документе не находит теперь "ratesTable". Возможно структуру таблицы изменили :((((

Есть возможность подсказать, куда копать?
Файл с ответом запроса вложу
ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
В ДокументHTML приходит такой текст.
Как получить данные, которые в строке 809?
Прикрепленные файлы:
Текст ДокументHTML.txt
7. Afanasyev.sv@mail.ru 02.11.22 18:37 Сейчас в теме
Добрый день,
уточню на всякий случай. С помощью обработки сейчас получится загружать Дирхам ОАЭ (AED)?
По последним данным ЦБ курсы по данной валюте они не предоставляют.
polyplastnm; +1 Ответить
9. Pank_in 2 09.11.23 11:27 Сейчас в теме
Добрый день! Колхозное решение по этой обработке:

в функции получения курса пишем-

Функция ПолучитьКурсВалютыССайта_AED(ДатаЗагрузки = Неопределено) Экспорт
	УстановитьПривилегированныйРежим(Истина);
	Если ДатаЗагрузки = Неопределено ИЛИ Формат(ДатаЗагрузки,"ДФ=dd.MM.yyyy") = Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy") Тогда 
		Возврат 0;
		//ДатаЗагрузки = ТекущаяДата();	
	КонецЕсли;	
    СтрокаПараметраПолучения    = "https://ru.exchange-rates.org/Rate/AED/EUR/"+Формат(ДатаЗагрузки,"ДФ=dd.MM.yyyy");
    Страничка    = ПолучитьДанныеInternet(СтрокаПараметраПолучения);        
    ЧтениеHTML = Новый ЧтениеHTML;
    ЧтениеHTML.УстановитьСтроку(Страничка);
    ПостроительDOM = Новый ПостроительDOM;
    ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
	//ТекстовоеСодержимое = ДокументHTML.ПолучитьЭлементПоИдентификатору("ratesTable").ТекстовоеСодержимое; 
    //НачалоТекстаКурса = СтрНайти(ТекстовоеСодержимое, "равно") + СтрДлина("равно ");
    //КонецТекстаКурса = СтрНайти(ТекстовоеСодержимое,  " по состоянию");
    //Курс = Число(Сред(ТекстовоеСодержимое, НачалоТекстаКурса, КонецТекстаКурса - НачалоТекстаКурса));
	ТекстовоеСодержимое = ДокументHTML.ПоследнийДочерний.ТекстовоеСодержимое;
	НачалоТекстаКурса = СтрНайти(ТекстовоеСодержимое, "Курс AED/EUR на " + Формат(ДатаЗагрузки,"ДФ=dd.MM.yyyy")) + СтрДлина("Курс AED/EUR на " + Формат(ДатаЗагрузки,"ДФ=dd.MM.yyyy"));
	КонецТекстаКурса = СтрНайти(ТекстовоеСодержимое,  "Курс AED/EUR сегодня");   
	КурсТекст = СокрЛП(Сред(ТекстовоеСодержимое, НачалоТекстаКурса, КонецТекстаКурса - НачалоТекстаКурса));
	КурсТекст = СтрЗаменить(КурсТекст, "1 AED = ", "");
	КурсТекст = СтрЗаменить(КурсТекст, " EUR", "");
	Попытка
    	Курс = Число(КурсТекст);
	Исключение
		Возврат 0;
	КонецПопытки;
	Вал = Справочники.Валюты.НайтиПоКоду("784"); // AED
	НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Период.Установить(ДатаЗагрузки);
	НаборЗаписей.Отбор.Валюта.Установить(Вал);
	НовЗапись = НаборЗаписей.Добавить(); 
	НовЗапись.Период      	= ДатаЗагрузки;
	НовЗапись.Курс      	= Курс;
	НовЗапись.Кратность 	= 1; 
	НовЗапись.Валюта      	= Вал;
	НаборЗаписей.Записать(Истина);
	УстановитьПривилегированныйРежим(Ложь);
    Возврат Курс;
    
КонецФункции
Показать



Обязательно посмотрите что курс на текущую дату получить нельзя, т.к. ответ сайта "страница не найдена"
Прикрепленные файлы:
Оставьте свое сообщение