Автор | Сообщение |
|
| |
Пост 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
|
|
|
Ответов - 46
, стр:
1
2
3
All
[только новые]
|
|
|
| |
Пост N: 1547
Зарегистрирован: 20.02.11
|
|
Отправлено: 03.05.20 20:51. Заголовок: SergKis пишет: Вот ..
SergKis пишет: Отлично. Погоня в понедельник. её
|
|
|
|
| |
Пост N: 78
Зарегистрирован: 18.06.15
|
|
Отправлено: 04.05.20 07:27. Заголовок: SergKis пишет: Прим..
SergKis пишет: Не открывается ...
|
|
|
|
| постоянный участник
|
Пост N: 6647
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.05.20 08:01. Заголовок: Alex_Cher пишет: Не..
Alex_Cher пишет: Только что скачал и открыл архив.
|
|
|
|
| |
Пост N: 1548
Зарегистрирован: 20.02.11
|
|
Отправлено: 04.05.20 15:56. Заголовок: Вот что получилось h..
цитата: | Вот что получилось hmg 20.04. |
| Сергей, отлично работает Из предложений - разделить переменную на две - xMarginL и xMarginR, продублировать в колонках ( чтоб иметь независимый отступ по колонкам ). В целом отличное дополнение в TSB. ЗЫ не разбирался и к теме не относится , а чего навигация по массиву так тупит ? при перемещении вправо идет перерисовка всего бровса . Так и задумано ?
|
|
|
|
| постоянный участник
|
Пост 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 от значения индекса смещения в таблице цитата: | не разбирался и к теме не относится , а чего навигация по массиву так тупит ? при перемещении вправо идет перерисовка всего бровса . Так и задумано ? |
| То же обратил внимание, но не знаю почему.
|
|
|
|
| постоянный участник
|
Пост N: 3166
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.05.20 17:05. Заголовок: PS Прорисовка идет п..
PS Прорисовка идет при работе с массивом, с dbf такого нет
|
|
|
Ответов - 46
, стр:
1
2
3
All
[только новые]
|
|