Подсистема «Валюты» также как и подсистема «Банки» (смотри мою статью http://1clancer.ru/article/bsp_banki_1147) без доработок может использоваться только при разработке для российских заказчиков, поскольку ориентирована на российские реалии. Состоит система из нескольких общих модулей, справочника «Валюты», регистра «КурсыВалют» и обработки «ЗагрузкаКурсовВалют». Если не вдаваться в детали, то очень похоже на подсистему «Банки» которую я выше вспоминал. Работа с данной подсистемой сводиться к тому, что в справочник валют добавляются те валюты, с которыми мы работаем, здесь реализован подход, про который я уже писал, в справочнике находятся не все валюты, а только те с которыми мы работаем, но в случае необходимости мы можем подобрать нужную нам валюту из классификатора валют. После этого можно загрузить курсы валют в соответствующий реквизит с сайта cbrates.rbc.ru.
Классификаторы России и Украины совпадают, по крайней мере, в нескольких позициях, поэтому, наверное, можно данную подсистему использовать и в конфигурациях для Украины. А вот загрузку курсов валют использовать, к сожалению не удастся. Можно конечно использовать загрузку курсов валют из «Бухгалтерии для Украины» но там пройдется переписывать всю обработку практически с нуля, да и загружать данные вы сможете только за текущий день все остальные данные платные практически 25 долларов в месяц.
Ну что попробуем написать свое решение, поскольку не у всех есть лишних 25 долларов. Брать валюту мы будем с сайта НБУ (Национального Банка Украины) апи не предусмотрено, поэтому будем парсить хтмл документ, обратившись по адресу
http://www.bank.gov.ua/control/ru/curmetal/currency/search?formType=searchFormDate&time_step=daily&date=21.08.2013&execute=%D0%92%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D1%8C и вместо 21.08.2013 подставив нужную мне дату мы получим приблизительно такую страницу :
Создадим внешнюю обработку для загрузки курсов. Внешний вид скопируем со стандартной обработки.
Как впрочем, и логику кнопки «Добавить все валюты». Основной код сконцентрирован в обработчике кнопки «Загрузить».
&НаСервере Процедура ЗагрузитиНаСервере() // Вставити вміст обробника. КопироватьФайл("http://www.bank.gov.ua/control/ru/curmetal/currency/search?formType=searchFormDate&time_step=daily&date="+Формат(объект.НачалоПериодаЗагрузки, "ДФ=""дд.ММ.гггг""")+"&execute=%D0%92%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D1%8C", "C:\0001.htm"); ТекстДок=новый ТекстовыйДокумент ; ТекстДок.Прочитать("C:\0001.htm"); ЧтениеHTML = Новый ЧтениеHTML; ЧтениеHTML.ОткрытьФайл("C:\0001.htm","UTF-8"); ПостроительDOM = новый ПостроительDOM ; дом =ПостроительDOM.Прочитать(ЧтениеHTML); х=0; для каждого елемент из дом.ПолучитьЭлементыПоИмени("table").Элемент(5).ДочерниеУзлы цикл если х=0 тогда иначе для каждого валюта из объект.СписокВалют цикл если валюта.КодВалюты= елемент.ПолучитьЭлементыПоИмени("td").Элемент(0).ТекстовоеСодержимое тогда РегистрКурсыВалют = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); РегистрКурсыВалют.Период = объект.НачалоПериодаЗагрузки; РегистрКурсыВалют.Валюта = валюта.Валюта; РегистрКурсыВалют.Курс = елемент.ПолучитьЭлементыПоИмени("td").Элемент(4).ТекстовоеСодержимое; РегистрКурсыВалют.Кратность = елемент.ПолучитьЭлементыПоИмени("td").Элемент(2).ТекстовоеСодержимое; РегистрКурсыВалют.Записать(); конецесли; конеццикла; конецесли; х=1; конеццикла; КонецПроцедуры
Ознакомившись с кодом страницы валют НБУ я увидел, что в 6 table находится нужная мне информация. Проведя сравнение с кодом валюты вытаскиваю кратность, и курс, после чего записываю в регистр. Обратите внимание, что для получения файла с интернета не использую никаких подсистем БСП, а просто процедуру КопироватьФайл, в большинстве случаев этого должно хватить. Это конечно не универсальная обработка, но я за нее и денег не требую (хотя мысль написать платную обработку с поэтессами и преферансом появилась).