В раздел FAQ добавлен пример пользовательского приложения (VBS) для загрузки курса доллара в Парус-8хх. Загружает курсы доллара с последней зарегистрированной даты по текущую. Протестировано для версии 852. Замечания и пожелания на мыло.
----------------------------------- Sub Main()
' Для фунциклирования необходимо наличие подключения к ИНТЕРНЕТ и MS XML ' и наличия хотя бы одной записи изменения курса доллара ' сервис получения данных по валютам здесь http://www.cbr.ru/scripts/Root.asp?Prtid=SXML
Query.SQL.Text = "Select Rn From V_CURNAMES Where CURCODE = 840" Query.Open IF Not Query.IsEmpty Then nUSDRN = Query.FieldByName("Rn").Value Else MsgBox "Валюта с кодом 840 (Доллары США) не найдена в словаре ",,"Ошибка" Exit sub End If
Query.SQL.Text = "Select INTCODE From V_CURNAMES Where CURCODE = 643" Query.Open IF Not Query.IsEmpty Then sRUB = Query.FieldByName("INTCODE").Value Else MsgBox "Валюта с кодом 643 (Российские рубли) не найдена в словаре ",,"Ошибка" Exit sub End If
Query.SQL.Text = "Select max(H.DCURDATEBEG) CURDATEBEG From V_CURNAMES C, " & _ "V_CURHIST H Where H.NPRN = C.RN And C.CURCODE = 840 and " & _ "C.VERSION = " & FindVersion("CURNAMES") Query.Open
IF Not Query.IsEmpty Then BeginDate = CDate(Query.FieldByName("CURDATEBEG").Value)
' Объект для работы с XML Set Xml = CreateObject("MSXML2.DOMDocument")
' Лог файл LogPath = ExtractFilePath(ParamStr(0)) + "ExchangeRateLoad.Log" Set FSO = CreateObject("Scripting.FileSystemObject") Set LogFile = FSO.OpenTextFile(LogPath, 2,true) WriteLog LogFile, "Протокол загрузки курсов валют " & "за период с " & Cstr(BeginDate) & " по " & Cstr(Date) WriteLog LogFile, "" LogChanged = False
For dDate = BeginDate + 1 to Date If DataLoaded(CSTR(dDate), Xml) Then ExchangeRateValue = GetXmlExchangeRate(Xml) If ExchangeRateValue > 0 Then P_CURHIST_INSERT CSTR(dDate), ExchangeRateValue, nUSDRN, sRUB WriteLog LogFile, CSTR(dDate) & " : 1 USD - " & ExchangeRateValue & " РУБ" LogChanged = True End IF Else MsgBox "Не могу загрузить курс валюты...",,"Ошибка" Exit sub End If Next
IF not LogChanged then WriteLog LogFile, "Нет изменений" End IF
LogFile.Close
' Открыть лог в блокноте Set WshShell = CreateObject("Wscript.Shell") Comand = "Notepad.exe " & LogPath WshShell.Run Comand, 1, False
End IF
End Sub
Private Function FindVersion(sUNIT)
StoredProc.StoredProcName = "FIND_VERSION_BY_COMPANY" StoredProc.ParamByName("nCOMPANY").Value = COMPANY StoredProc.ParamByName("sUNITCODE").Value = sUNIT StoredProc.ExecProc FindVersion = StoredProc.ParamByName("nVERSION").Value
End Function
Private sub P_CURHIST_INSERT(dDate, nEQUALSUM, nUSDRN, sRUB)
StoredProc.StoredProcName = "P_CURHIST_INSERT" StoredProc.ParamByName("nCOMPANY").Value = COMPANY StoredProc.ParamByName("nPRN").Value = nUSDRN StoredProc.ParamByName("sEQUALCUR").Value = sRUB StoredProc.ParamByName("nCURSUM").Value = 1 StoredProc.ParamByName("nEQUALSUM").Value = nEQUALSUM StoredProc.ParamByName("dCURDATEBEG").Value = dDate StoredProc.ParamByName("nOPERSIGN").Value = 1 StoredProc.ParamByName("nPLANSIGN").Value = 0 StoredProc.ParamByName("sACCTYPE").Value = Null StoredProc.ParamByName("nUSESIGN").Value = 0 StoredProc.ExecProc
End sub
Private Function DataLoaded(sDate, Xml)
ImportLink = "http://www.cbr.ru/scripts/XML_dynamic.asp?" & _ "date_req1=" & sDate & _ "&date_req2=" & sDate & _ "&VAL_NM_RQ=" & "R01235"
Xml.async = False
If Xml.Load(ImportLink) Then bDataLoaded = True Else bDataLoaded = False End If
DataLoaded = bDataLoaded End Function
Private Function GetXmlExchangeRate(Xml)
Set objNode = Xml.selectNodes("//Value").Item(0)
If Not objNode Is Nothing Then GetXmlExchangeRate = CDbl(objNode.Text) Else GetXmlExchangeRate = 0 End If
End Function
Private Function WriteLog (LogFile, Line)
LogFile.WriteLine(Line)
End Function
-----------------------------------
|