On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
администратор




Пост N: 1511
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.02.20 17:17. Заголовок: Курсы ЦБ РФ на дату


потребовалось часто и быстро дергать курсы валют с ЦБ РФ , за пару часов написал функцию. Может кому сгодиться
на оригинальность не претендую , но работает . Возвращает массив значений на дату .
 
FUNC GetCBR( dDate)
LOCAL oHttp, cHtml, oNode, oDoc, oVal, oIterator, oCurrent
LOCAL aArray := {}
LOCAL cNumCode, cCharCode ,cNominal, cName, cValue
LOCAL aCur := {}
LOCAL cDate := StrZero(Day( dDate ),2,0) + "/" + StrZero(month( dDate ),2,0) + "/" + StrZero(year( dDate ),4,0)

oHttp := TIpClientHttp():new( "http://www.cbr.ru/scripts/XML_daily.asp?date_req=" + cDate )
IF ! oHttp:open()
MsgBox( "Connection error:", oHttp:lastErrorMessage() )
RETURN {}
ENDIF

cHtml := oHttp:readAll()
oHttp:close()
oDoc := TXMLDocument():New( cHtml, 8 ) // см. hbxml.ch
IF oDoc:nError != 0
MsgBox( "xml file parsing error " + hb_ntos( oDoc:nError ) )
RETURN {}
ENDIF

oVal := oDoc:findfirst( "Valute" )
IF oVal == NIL
MsgBox( "no Valute found" )
RETURN {}
ENDIF

DO WHILE .T.

oIterator := TXMLIterator():New( oVal )

DO WHILE .T.
oCurrent := oIterator:Next()
IF oCurrent == NIL
EXIT
ELSE

switch oCurrent:cName
case "CharCode"
cCharCode := oCurrent:cData
exit
case "NumCode"
cNumCode := oCurrent:cData
exit
case "Nominal"
cNominal := oCurrent:cData
exit
case "Name"
cName := oCurrent:cData
exit
case "Value"
cValue := CharRepl(",", oCurrent:cData, ".")
exit
end switch

ENDIF

ENDDO
AAdd(aCur, {cCharCode, cNumCode, Val(cNominal), cName, Val(cValue)} )
oVal := oDoc:findnext()
IF oVal == NIL
EXIT
ENDIF
ENDDO
RETURN aCur


Спасибо: 1 
ПрофильЦитата Ответить
Ответов - 46 , стр: 1 2 3 All [только новые]


администратор




Пост N: 1547
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.05.20 20:51. Заголовок: SergKis пишет: Вот ..


SergKis пишет:

 цитата:
Вот что получилось


Отлично. Погоня в понедельник. её

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 78
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 04.05.20 07:27. Заголовок: SergKis пишет: Прим..


SergKis пишет:

 цитата:
Пример demo5.prg и h_tbrowse.prg тут https://TransFiles.ru/zkhi1



Не открывается ...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6647
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.05.20 08:01. Заголовок: Alex_Cher пишет: Не..


Alex_Cher пишет:

 цитата:
Не открывается ...


Только что скачал и открыл архив.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1548
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 04.05.20 15:56. Заголовок: Вот что получилось h..



 цитата:
Вот что получилось hmg 20.04.


Сергей, отлично работает
Из предложений - разделить переменную на две - xMarginL и xMarginR, продублировать в колонках ( чтоб иметь независимый отступ по колонкам ).
В целом отличное дополнение в TSB.

ЗЫ не разбирался и к теме не относится , а чего навигация по массиву так тупит ? при перемещении вправо идет перерисовка всего бровса . Так и задумано ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3165
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.05.20 16:39. Заголовок: Haz пишет .Из предло..


Haz пишет
 цитата:
.Из предложений - разделить переменную на две - xMarginL и xMarginR, продублировать в колонках ( чтоб иметь независимый отступ по колонкам ).


Думал на эту тему, мне кажется, это лишнее в данном случае. Переменные нужны, если нет блока кода,
но тогда надо заполнять переменные oCol:xMarginL и oCol:xMarginR в др. блоке oCol:bData, oCol:bValue, oCol:bDecode.
Т.е. :nCellMarginLR := 1 и вычисляем, пишем в заменяющие значения в колонке в блоках выше. Или как сейчас
:nCellMarginLR := {|nc,ob,oc,na,no| iif( na == DT_LEFT .and. oc:cName == 'GRNAME', (ob:cAlis)->NGRU, 1 ) }
т.е. все прижатия влево, вправо сместятся на пробел от линии, а колонка GRNAME от значения индекса смещения в таблице

 цитата:
не разбирался и к теме не относится , а чего навигация по массиву так тупит ? при перемещении вправо идет перерисовка всего бровса . Так и задумано ?


То же обратил внимание, но не знаю почему.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3166
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.05.20 17:05. Заголовок: PS Прорисовка идет п..


PS
Прорисовка идет при работе с массивом, с dbf такого нет

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 46 , стр: 1 2 3 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 29
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет