Здравствуйте, коллеги!
Так как курсы валют меняются каждый день, целесообразно написать свою функцию, которая будет "подтягивать" свежие курсы и записывать в справочник "Курсы валют".
Ниже приведен пример такой функции.
В параметр cur_code передается код валюты (840 - Доллар США, 978 - Евро и т.д.), после чего, в зависимости от указанного кода, в справочник "Курсы валют" записывается курс на текущую дату.
{
var CurDate = new Date();
var year = CurDate.getFullYear().toString();
var month = CurDate.getMonth().toString();
if (month.length == 1)
{
month = "0" + month;
}
var day = CurDate.getDate().toString();
if (day.length == 1)
{
day = "0" + day;
}
var webAddress = "http://cbrates.rbc.ru/tsv/" + cur_code.toString() + "/" + year +"/" + month +"/" + day + ".tsv";
var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.6.0");
//xmlHttpReq.open("GET", "http://cbr.ru/scripts/XML_daily.asp", false);
xmlHttpReq.open("GET", webAddress, false);
xmlHttpReq.send();
var RUB_USD_curs = xmlHttpReq.responseText.replace(/\s/g, "");
//получаем текущий курс
RUB_USD_curs= parseFloat(RUB_USD_curs);
//записываем тукущий курс
var Dataset = Services.GetNewItemByUSI('ds_CurrencyRate');
var CurrencyID = '';
var Currency = '';
switch (cur_code)
{
//840 - код доллара США, для других валют другой код, соответсвенно другой CurrencyID
case 840:
CurrencyID = '{D18AAED6-14F9-435C-9606-0E90CAE816F7}';
Currency = 'Доллар США';
break;
}
ApplyDatasetFilter(Dataset, 'CurrencyID', CurrencyID, true);
Dataset.Open();
Dataset.Append();
Dataset.Values('Rate') = RUB_USD_curs;
Dataset.Values('InternalRate') = RUB_USD_curs;
Dataset.Values('StartDate') = GetLocalDate();
Dataset.Values('CurrencyID') = CurrencyID;
Dataset.Values('CurrencyName') = Currency;
Dataset.Post();
Dataset.Close();
}
Данную функцию можно запускать, к примеру, при старте Terrasoft, а также добавить кнопку "Получить последние курсы" для справочника "Валюты" и в обработчике OnClick для кнопки вызвать функцию приведенную выше.
Пример интересный. Но в качестве источника для курсов валют я бы советовал использовать веб сервис ЦБР, который находится здесь.
В приведенной функции выше, есть закоментированная строка:
//xmlHttpReq.open("GET", "http://cbr.ru/scripts/XML_daily.asp", false);
Здесь используется веб сервис ЦБР, который возвращает xml файл с курсами всех основных валют по отношению к российскому рублю на текущую дату:
var RUB_USD_curs = xmlHttpReq.responseText;
Можно также использовать этот сервис, "распарсив" xml.
Спасибо, Дмитрий! Напомню, что ранее функции по получению курсов валют уже публиковал Андрей Кихтенко: http://www.community.terrasoft.ua/blogs/2508
Баг #1
var month = CurDate.getMonth().toString();
возвращает например для марта значение '2', потом запрос к rbc идет с датой на месяц раньше:smile:
поэтому меняем на
var month = (CurDate.getMonth()+1).toString();
Баг #2
переменная получает например значение
RUB_USD_curs = 129.8923
что как бы еще не курс:smile: и записывать это в справочник курсов валют нельзя
поэтому например так
var RUB_USD_curs = xmlHttpReq.responseText.replace(/\s/g, "");
RUB_USD_curs = parseFloat(RUB_USD_curs.substr(1, RUB_USD_curs.length));
вот теперь будет 29.8923
Feature #3
строка при создании новой записи ближе к концу
Dataset.Values('CurrencyName') = Currency;
совсем ни к чему
аналогично совсем ни к чему
ApplyDatasetFilter(Dataset, 'CurrencyID', CurrencyID, true);
Dataset.Open();
и Dataset.Close() в конце, вы же пользуетесь Append, зачем предварительно открывать да фильтровать датасет?
+ я бы полученный курс писал к валюте рубль (меняем CurrencyID)
Я просто оставлю это здесь: реализация на стороне сервера.
Добрый день!
Скажите, пожалуйста, можно ли загрузить курсы валют ЦБ Чехии и каким образом?
http://www.cnb.cz
Курсы нужны только для трех валют Рубль, Доллар и Евро
Марина, аналогично с примером приведенным Выше.
Только отправлять запрос к веб-серверу по ссылке http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/d… , и соответственно парсить его в соответствии с его форматом.
Добрый день!
Получилось в переменную записать данные с сайта.
Дмитрий, подскажите, пожалуйста, каким образом выбирать данные из переменной.
Здравствуйте Марина.
Не совсем понял суть вопроса. Можно поподробнее, желательно добавить код.
По сути Вам нужно отправить запрос:
var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.6.0"); xmlHttpReq.open("GET", webAddress, false); xmlHttpReq.send();
Далее, получаем ответ от сервера:
var RUB_USD_curs = xmlHttpReq.responseText;
В этой переменной и будут курсы. Далее разбейте эту строку на массив по ентеру (каждый элемент массива - курс отдельной валюты). И для нужных валют среди"мусора" выделите сам курс и преобразуйте полученное значение с типа строка в тип дробное число, и запишите в датасет.
//получаем текущий курс RUB_USD_curs= parseFloat(RUB_USD_curs); //записываем тукущий курс var Dataset = Services.GetNewItemByUSI('ds_CurrencyRate'); //....
Здравствуйте! Дмитрий, спасибо! Получилось записать курсы. Сделала следующим образом:
var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.6.0"); xmlHttpReq.open("GET", URL, false); xmlHttpReq.send(); var Curs = xmlHttpReq.responseText.replace(/\s/g, ""); var ArrayCurr = Curs.split('|');
И уже из созданного массива выбирала нужные курсы.
Марина, не за что! Если буду дополнительные вопросы - обращайтесь.