Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯчейки, Док, ТекстВЯчейке, ТабКурсов; Url = "http://www.bank.gov.ua/control/uk/curmetal/currency/search?formType=searchFormDate&time_step=" + ?(Ежедневно = 1, "daily", "monthly") + "&date=" + Формат(ДатаКурса, "ДДДММГГГГ") + "&outer=table&execute=run&time=" + _GetPerformanceCounter(); Сообщить(Url); Reader = СоздатьОбъект("MSXML2.XMLHTTP"); Reader.Open("Get", Url, 0); Reader.Send(); Пока Reader.ReadyState <> 4 Цикл Состояние("Чтение данных за <" + ДатаКурса + "> "); КонецЦикла; Док = СоздатьОбъект("HtmlFile"); Док.open("text/html"); Док.write(Reader.ResponseText); Док.close(); HtmlTab = Док.getElementsByTagName("table").item(5); ТабКурсов = СоздатьОбъект("ТаблицаЗначений"); ТабКурсов.НоваяКолонка("ЦифрКод" , "Строка", 3, , "Цифр. код"); ТабКурсов.НоваяКолонка("БуквКод" , "Строка", 3, , "Букв. код"); ТабКурсов.НоваяКолонка("Название" , "Строка"); ТабКурсов.НоваяКолонка("Курс" , "Число" ,14, 4); ТабКурсов.НоваяКолонка("Кратность" , "Число" , 9, 0); Строк = HtmlTab.rows.length; Для НомСтроки = 1 По Строк Цикл Р = HtmlTab.rows(НомСтроки - 1); Если (НомСтроки = 1) Или (Р.cells.length <> 5) Тогда // 1 - я заголовок, остальные не с данными Продолжить; КонецЕсли; ТабКурсов.НоваяСтрока(); ТабКурсов.ЦифрКод = СокрЛП(Р.cells(0).innerText); ТабКурсов.БуквКод = СокрЛП(Р.cells(1).innerText); ТабКурсов.Название = СокрЛП(Р.cells(3).innerText); ТабКурсов.Курс = 0 + СтрЗаменить(СокрЛП(Р.cells(4).innerText), " ", ""); ТабКурсов.Кратность = 0 + СтрЗаменить(СокрЛП(Р.cells(2).innerText), " ", ""); КонецЦикла; Reader = 0; ТабКурсов.ВыбратьСтроку(, "Курсы за " + ДатаКурса); Возврат ТабКурсов; КонецФункции
Функция ПолучитьТаблицуКурсов(ДатаКурса) Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯчейки, Док, ТекстВЯчейке, ТабКурсов; Reader = СоздатьОбъект("MSXML2.XMLHTTP"); Url = "http://tables.finance.ua/ru/currency/official/-/1/" + ДатаГод(ДатаКурса) + "/" + ДатаМесяц(ДатаКурса) + "/" + ДатаЧисло(ДатаКурса) + "?time=" + _GetPerformanceCounter(); Сообщить(Url); Reader.Open("Get", Url, 0); Reader.Send(); Пока Reader.ReadyState <> 4 Цикл Состояние("Чтение данных за <" + ДатаКурса + "> "); КонецЦикла; Док = СоздатьОбъект("HtmlFile"); Док.open("text/html"); Док.write(Reader.ResponseText); Док.close(); HtmlTab = Док.getElementByID("currency-official-table"); Строк = HtmlTab.rows.length; ТабКурсов = СоздатьОбъект("ТаблицаЗначений"); ТабКурсов.НоваяКолонка("ЦифрКод" , "Строка", 3, , "Цифр. код"); ТабКурсов.НоваяКолонка("БуквКод" , "Строка", 3, , "Букв. код"); ТабКурсов.НоваяКолонка("Название" , "Строка"); ТабКурсов.НоваяКолонка("Курс" , "Число" ,14, 4); ТабКурсов.НоваяКолонка("Кратность" , "Число" , 9, 0); Для НомСтроки = 1 По Строк Цикл Р = HtmlTab.rows(НомСтроки - 1); Если (НомСтроки = 1) Или (Р.cells.length <> 7) Тогда // 1 - я заголовок, остальные не с данными Продолжить; КонецЕсли; ТабКурсов.НоваяСтрока(); ТабКурсов.ЦифрКод = СокрЛП(Р.cells(0).innerText); ТабКурсов.БуквКод = СокрЛП(Р.cells(1).innerText); ТабКурсов.Название = СокрЛП(Р.cells(3).innerText); ТабКурсов.Курс = 0 + СтрЗаменить(СокрЛП(Р.cells(4).innerText), " ", ""); ТабКурсов.Кратность = 0 + СтрЗаменить(СокрЛП(Р.cells(2).innerText), " ", ""); КонецЦикла; Reader = 0; ТабКурсов.ВыбратьСтроку(, "Курсы за " + ДатаКурса); Возврат ТабКурсов; КонецФункции