Курс доллара/евро по кнопке

8 5

Не так давно передо мной встала задача, лёгкого и быстрого способа получения курса волют на момент формирования записи справочника, причём чтобы эти значения сохранились и уже спустя некоторое время с момента заведения записи. Так сказать посмотреть какой курс был на момент сделки.  Решение пришло быстро. Добавить кнопку которая залезет в интернет и получит курс доллара. Вот что получилось, спасибо за это Александру Тишину!

Без долгих рассуждений и обсуждений перехожу сразу к коду кнопки:

 // ссылка со страницей с курсами
 URL = "http://www.cbr.ru/scripts/XML_daily.asp"
 
 // может быть полно причин - которые вызовут ошибки, поэтому исключения поставим
 FreeException()
 ExceptionsOff()
 // в интернет эксплорере загрузим страницу с курсами
 objIE = CreateObject("InternetExplorer.Application")
 objIE.Visible = 0
 objIE.Silent = 0
 objIE.Navigate(URL)
 while objIE.readyState<4
   // Ждем пока загрузится
 endwhile
 // здесь должна быть XML
 XMLText = Replace(objIE.Document.body.outerText; "- <"; "<")
 objIE.Quit()
 
 // теперь пройдемся по XML
 XMLDoc = CreateObject("MSXml.DomDocument")
 XMLDoc.loadXML(XMLText)
 
 ValutesNode = XMLDoc.selectNodes("ValCurs/Valute")
 i = 0
 while i < ValutesNode.Length
   // Код валюты
   ValNode = ValutesNode.item(i).selectNodes("CharCode")
   // евро
   if ValNode.item(0).Text == "EUR"
     Curs = ValutesNode.item(i).selectNodes("Value")
     //Окно(Curs.item(0).Text)
     eur = (Curs.item(0).Text)
     //Окно(eur)
   Object.РЕКВИЗИТ1 = eur // ВАШ РЕКВИЗИТ!
   endif
   // доллар
   if ValNode.item(0).Text == "USD"
     Curs = ValutesNode.item(i).selectNodes("Value")
    // Окно("Курс доллора "& Curs.item(0).Text)
    usd = (Curs.item(0).Text)
    Object.РЕКВИЗИТ2 = usd // ВАШ РЕКВИЗИТ!

   endif
   i = i+1
 endwhile
 ExceptionsOn()

 

 Вот так вот просто и легко получили курс без всяких заморочек, расписаний и прочего. При желании можно этот код и на событие "Открытие" поставить. Но это уже Ваше творческое поле =) Спасибо за внимание господа!

Евгений Обозный

Николай,

большое спасибо за статью!

Каждый продавец гордится успешными Заказчиками. Спасибо за поводы для этого!

Алексей Немцев

Николай, спасибо большое за решение.

А подскижите пожалуйста, как из данного XML документа вытащить дату, на которую устанавливается курс валюты?

Тарас Асачёв

Современный вариант:

 // ссылка со страницей с курсами
 URL = "http://www.cbr.ru/scripts/XML_daily.asp"
 
 // может быть полно причин - которые вызовут ошибки, поэтому исключения поставим
 //FreeException()
 //ExceptionsOff()
   HTTP = CreateObject("MSXML2.XMLHTTP")
   oADOStream = CreateObject("ADODB.Stream")
   oADOStream.Mode = 3
   oADOStream.Type = 1 
   HTTP.Open("Get"; URL; FALSE)
   oADOStream.Open() 
   HTTP.Send()              
   oADOStream.Write(HTTP.responseBody)
   oADOStream.SaveToFile("C:\Temp\Cur.xml")
   
   XMLDoc = CreateObject("MSXML2.DomDocument")
   XMLDoc.LoadXML(ReadFile("C:\Temp\Cur.xml"))
    
   XMLText = Replace(XMLDoc.Text; "- <"; "<")
 
 ValutesNode = XMLDoc.selectNodes("ValCurs/Valute")
 i = 0
 while i < ValutesNode.Length 
   // Код валюты
   ValNode = ValutesNode.item(i).selectNodes("CharCode")
   // евро
   if ValNode.item(0).Text == "EUR"
     Curs = ValutesNode.item(i).selectNodes("Value")
     //Окно(Curs.item(0).Text)
     eur = (Curs.item(0).Text)
     //Окно(eur)
     MessageBox("Евро"; eur)
   //Object.РЕКВИЗИТ1 = eur // ВАШ РЕКВИЗИТ!
   endif
   // доллар
   if ValNode.item(0).Text == "USD"
     Curs = ValutesNode.item(i).selectNodes("Value")
    // Окно("Курс доллора "& Curs.item(0).Text)
    usd = (Curs.item(0).Text)
    MessageBox("Доллар"; usd)
    //Object.РЕКВИЗИТ2 = usd // ВАШ РЕКВИЗИТ!
   endif
   i = i+1
 endwhile
 //ExceptionsOn()
 УдалитьФайл("C:\Temp\Cur.xml")

 

Тарас Асачёв

Для обновления данных прямо в карточке документа или справочника, посмотрите как называется ваши реквизиты "Буквенный код" и "Курс валюты". и внесите правки в вышеуказанный код начиная со строки ValNode = ValutesNode.item(i).selectNodes("CharCode"):

ValNode = ValutesNode.item(i).selectNodes("CharCode")
   if ValNode.item(0).Text == СжПроб(Object.Буквенный_Код)
     Curs = ValutesNode.item(i).selectNodes("Value")
     val = (Curs.item(0).Text)
     Object.Курс_Валюты = val
   endif

 

Максим Ремизов

Спасибо, за данную статью, очень выручила.

Правда долго разбирался с кодировкой XML-файла. Оказалось, что  строчка в коде XMLDoc.LoadXML(ReadFile("C:\Temp\Cur.xml"))  неточна и DomDocument неправильно определял кодировку. Изменил на

XMLDoc.Load("C:\Temp\Cur.xml")) и все стало отлично.

 

Авторизуйтесь, чтобы написать комментарий