AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.12.2010, 09:11   #1  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
298 / 224 (8) ++++++
Регистрация: 07.05.2009
Адрес: Москва
:( Загрузка курсов валют с сайта НБУ
Всем привет!

Кто-нибудь сталкивался с импортом валют с сайта ЦБ Украины (НБУ)?

В принципе есть сама ссылка на сайт откуда качать "http://fin.1c.ua" но как запрос сформировать, мне не понятно.
Пробовал сделать по аналогии загрузки курсов с сайта ЦБ России, не получилось.
Старый 10.12.2010, 15:33   #2  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
В прикрепленном файле часть нашей процедуры загрузки курсов валют (к нас загрузка идет по нескольким странам, в классе то, что касается именно НБУ).
Это не полный функционал нашего механизма загрузки, но по нему можно понять как идет загрузка с www.bank.gov.ua
Вкратце: читаем страничку сайта и парсим её (в вызывающих классах идет разбор результатов, приводить их не буду).
Можете что-то на основе этого реализовать свое. Загружать нужно после 19-00 по Московскому времени курсы на следующий день. Следует учесть, что на Российском ЦБ в пятницу курс устанавливается на субботу и действует в субботу, воскресенье, понедельник. ЦБУ же в пятницу (после закрытия торгов) устанавливает курс на понедельник, поэтому на субботу и воскресенье действует курс пятницы.
Вложения
Тип файла: xpo Class_LoadCurrencyNBU_OVK.xpo (11.5 Кб, 551 просмотров)
Старый 10.12.2010, 17:54   #3  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
298 / 224 (8) ++++++
Регистрация: 07.05.2009
Адрес: Москва
Спасибо. Посмотрю на выходных. Думаю можно будет что-то придумать, в любом случае на клиенте еще и Proxy лочит коннект к сайту.

Старый 10.12.2010, 18:11   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Ну прокси можно настроить. А насчет клиента, хорошее замечание. Данный класс будет работать только на клиенте. Возможно, winInet.internetOpenUrl можно настроить на работу на сервере, но нам это не удалось (для России, Беларусии загрузка из XML спокойно работает на сервере, а вот для HTTP работа на сервере нам не удалась).
Старый 10.12.2010, 22:24   #5  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
298 / 224 (8) ++++++
Регистрация: 07.05.2009
Адрес: Москва
Слушай, а можно поподробней. Я имел в виду (клиента) это компания на которую я сейчас работаю. У них админы не могут дать права службе (NETWORK_SERVICE). Я пытаюсь добиться от них этого путем убеждения, что в тупую прописать адреса на доступ к инету для админа (исключения на Proxy при передаче IP) - недостаточно. Они же утверждают, что доступ к интернету из терминала есть у всех пользователей, но не у всех служб.
Теперь, ты пишешь, что "winInet.internetOpenUrl можно настроить на работу на сервере, но нам это не удалось (для России, Беларусии загрузка из XML спокойно работает на сервере, а вот для HTTP работа на сервере нам не удалась)." Что такое winInet.internetOpenUrl? И что такое настройки для HTTP, и почему настройки на сервере у Вас не получились?

Походу я чего-то не понимаю.
Старый 11.12.2010, 19:38   #6  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Dreadlock Посмотреть сообщение
Походу я чего-то не понимаю.
Не ты один, я тоже не понимаю. В админских делах я полный профан.
Единственное, знаю, что разрешения давались не на конкретный логин, а на машины. То есть, для всех серверов AOS, с которых нужен был выход за курсами валют и списками банков, был дан доступ на определенные сайты. Так же, был дан доступ для машины, на которой крутится пакетный сервер (у нас DAX4, поэтому пакетник работает в клиенте). Как это было сделано не имею ни малейшего представления, нужно спрашивать админов. В любом случая, я знаю, что доступ давался не пользователям, а машинам.
Старый 13.12.2010, 01:14   #7  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
298 / 224 (8) ++++++
Регистрация: 07.05.2009
Адрес: Москва
ОК.
В любом случае, огромное спасибо!
Старый 13.12.2010, 11:45   #8  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
298 / 224 (8) ++++++
Регистрация: 07.05.2009
Адрес: Москва
Сайт http://fin.1c.ua не работает, ну или не так как мне это надо.
Есть украинский сайт, который предоставляет информацию о курсах валют с сайта НБУ в xml формате.

Собственно сам сайт: http://pfsoft.com.ua/services/kursy-...bu/export.html

Параметры запроса: http://www.pfsoft.com.ua/service/currency/?date=%1, где %1 - дата в формате дд:мм:гггг без разделителей (например 10122010).

Пробовал разобраться с парсингом сайта в HTML, но это долгий вариант и мне не совсем подходит, да и класса WinInet в АХ2009 я не нашел. Зато нашел, как это делается через .Net.

Вот ссылка на статью, в которой рассказывается, как считать сайт в HTML формате.

Надеюсь, кому-нибудь пригодится.
Старый 13.12.2010, 13:17   #9  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Dreadlock Посмотреть сообщение
Есть украинский сайт, который предоставляет информацию о курсах валют с сайта НБУ в xml формате.
Собственно сам сайт: ...
Есть такой, у меня и загрузка с него есть
Только, во первых, это неофициальный сайт. А во вторых, нужно учесть, что информация на нем появляется позже, чем на сайте НБУ (на НБУ всегда около 19-00 Московского времени есть данные на следующий день, а на Pfsoft несколько раз бывало, что курсы появляются только утром нужного дня).
Вложения
Тип файла: xpo Class_LoadCurrencyPSoft_OVK.xpo (7.7 Кб, 445 просмотров)
Старый 14.12.2010, 13:23   #10  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Можно использовать такой вариант.
Курсы забираются с www.bank.gov.ua через объект XMLHTTP. На выходе получаем контейнер с курсами валют (данные соответствуют таблице на странице с курсами)
Метод работает как на клиенте, так и на сервере. Настройки для прокси берутся из IE, так что, в случае необходимости, надо будет настроить его для пользователя, под которым запускается AOS
X++:
static server container GetExchRate(TransDate _exchDate = systemDateGet())
{
    Com xmlhttp;
    InteropPermission   InteropPermission;
    TextBuffer      tb = new TextBuffer();
    container rows;
    void GetRows(str _class)
    {
        int pos;
        str s;
        int pos1;
        int len;
        int posRowStart;
        int posRowEnd;
        container row;
        TextBuffer  tbRow = new TextBuffer();
        ;
        while (tb.find(strfmt(@'\<tr class="%1"', _class), pos))
        {
            pos1 = tb.matchPos();
            len = tb.matchLen();
            if (tb.find(@"\<td", pos1))
            {
                posRowStart = tb.matchPos();
                if (tb.find(@"\</tr\>", posRowStart))
                {
                    posRowEnd = tb.matchPos();
                    s = tb.subStr(posRowStart, posRowEnd - posRowStart);
                    s = StrReplace(s, '\r\n', "");
                    s = StrReplace(s, '\t', "");

                    tbRow.setText(s);
                    pos1 = 1;
                    row = connull();
                    while (tbRow.find(@'\>[^\<]*\</td\>', pos1))
                    {
                        s = tbRow.subStr(tbRow.matchPos()+1, tbRow.matchLen()-6);
                        row += [s];
                        pos1 = tbRow.matchPos()+tbRow.matchLen();
                    }
                    rows += [row];
                    pos = tb.matchPos() + tb.matchLen();
                }
                else
                    pos = pos1+len;
            }
            else
                pos = pos1+len;
        }
    }
    ;
    InteropPermission = new InteropPermission(InteropKind::ComInterop);
    InteropPermission.assert();
    xmlhttp = new Com(@"Msxml2.XMLHTTP.3.0");
    xmlhttp.open(@"GET", strfmt(@"http://www.bank.gov.ua/Fin_ryn/OF_KURS/Currency/FindByDate.aspx?Text1=%1&__EVENTTARGET=Gr1",
        date2str(_exchDate, 123, 2, 2, 2, 2, 4)), false);
    xmlhttp.setRequestHeader(@"Accept", @"*/*");
    xmlhttp.setRequestHeader(@"Accept-Language", @"ru-RU");
    xmlhttp.setRequestHeader(@"User-Agent", @"Axapta");
    xmlhttp.setRequestHeader(@"Connection", @"Keep-Alive");
    xmlhttp.setRequestHeader(@"Content-Type", @"application/x-www-form-urlencoded");

    xmlhttp.setRequestHeader(@"If-Modified-Since", @"Sat, 1 Jan 2000 00:00:00 GMT"); // Для отключения кэша
    xmlhttp.send();
    if (xmlhttp.status() == 200)
    {
        tb.setText(xmlhttp.responseText());
        GetRows(@"G1");
        GetRows(@"w1");
    }
    CodeAccessPermission::revertAssert();
    return rows;
}
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: NeveB (1).
Старый 14.12.2010, 13:36   #11  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Возможно, winInet.internetOpenUrl можно настроить на работу на сервере, но нам это не удалось.
Возможно, причина в том, что есть различное поведение функции InternetOpen() в WindowsXP и в серверных виндах.
При вызове ее на сервере требуется, при отсутствии прокси, передавать не пустую строку, а null, в качестве имени прокси-сервера

В class declaration добавил
X++:
    DLLFunction _internetOpenProxy;
Переделал метод new(str _proxy='', str _bypassProxy='')
X++:
...
    _internetOpen = new DLLFunction(_winInet,'InternetOpenA');
    _internetOpen.returns(ExtTypes::DWORD);
    _internetOpen.arg(ExtTypes::STRING);
    _internetOpen.arg(ExtTypes::DWORD);
    _internetOpen.arg(ExtTypes::DWORD);
    _internetOpen.arg(ExtTypes::DWORD);
    _internetOpen.arg(ExtTypes::DWORD);

    _internetOpenProxy = new DLLFunction(_winInet,'InternetOpenA');
    _internetOpenProxy.returns(ExtTypes::DWORD);
    _internetOpenProxy.arg(ExtTypes::STRING);
    _internetOpenProxy.arg(ExtTypes::DWORD);
    _internetOpenProxy.arg(ExtTypes::STRING);
    _internetOpenProxy.arg(ExtTypes::STRING);
    _internetOpenProxy.arg(ExtTypes::DWORD);
...
   _handle = this.internetOpen('Axapta',0,_proxy,_bypassProxy,0);
и метод internetOpen()
X++:
int internetOpen(str 255 agent,int accessType,str 255 proxyName,str 255 proxyByPass,int flags)
{
    ;
    if (!proxyName)
        return _internetOpen.call(agent,accessType,0,0,flags);
    else
        return _internetOpenProxy.call(agent,accessType,proxyName,proxyByPass,flags);
}
__________________
Axapta v.3.0 sp5 kr2
Старый 20.05.2011, 18:44   #12  
Omeo is offline
Omeo
Участник
 
129 / 50 (2) ++++
Регистрация: 18.03.2004
Адрес: Moscow
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
В прикрепленном файле часть нашей процедуры загрузки курсов валют (к нас загрузка идет по нескольким странам, в классе то, что касается именно НБУ).
некоторые валюты грузятся только в помесячном режиме, у вас для 2-х режимов один url и всегда по нему грузится ежедневные валюты
не подскажете как сделать так чтобы можно было загружать помесячные ?
Старый 14.04.2013, 19:13   #13  
Галина_ is offline
Галина_
Участник
 
1 / 10 (1) +
Регистрация: 14.04.2013
Импорт курсов валют с сайта НБУ
Здесь есть готовая UDF функция для импорта курсов валют с сайта НБУ:
http://moonexcel.ho.ua/index.php?page=tip_kursNBU_ua
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Загрузка валют с сайта ЦБ natterru DAX: Администрирование 31 17.11.2020 07:29
Еще один импорт курсов валют Андре DAX: База знаний и проекты 24 23.12.2009 11:59
Загрузка курсов валют Alenka DAX: Функционал 5 20.01.2009 11:50
загрузка валют с сайта ЦБ в Axapta 4.0 Jup DAX: Программирование 3 08.10.2008 18:09
Кэширование курсов валют Tony Green DAX: Программирование 8 09.02.2007 10:02

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:55.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.