![]() |
![]() |
|
Загрузка курса валют с сайта ЦБ РФ | ☑ | ||
---|---|---|---|---|
0
Михаил Анянов
26.06.09
✎
13:08
|
Недавно занялся изучением 1С, задался вопросом как в своей конфигурации загружать курс валют автоматически. Нигде не нашел ответа, написал функцию сам.
Может кому пригодится. Итак - Регистр сведений - КурсыВалют Написал функцию // <Описание функции> // // Параметры // НаДату - тип Дата - указывает на какую дату необходимо получить // - курс доллара. Если же дата не указана, // - то будет возвращен курс на текущую дату. // - В случае, если указана дата с давностью // - более 1 месяца, то будет возвращен курс // - на дату месячной давности. // // Возвращаемое значение: // Число с точностью 4 - Курс доллара на указанную дату // // В случае ошибки (нет подключения к сети Интернет) // возвращаемое значение будет неопределено. // Функция КурсДоллараНаДату(НаДату = Неопределено) Экспорт перем СтрокаВалют; перем СтрокаКурса; перем ВремСтрока; перем КурсНаДату; перем АдресЦБРФ; // Если при вызове функции дата не указана // то значение курса будет получено для текущей даты Если (НаДату = Неопределено) ИЛИ (НаДату = '00010101') Тогда НаДату = ТекущаяДата(); КонецЕсли; // АдресЦБРФ равен путь к файлу XML + КурсНаДату // КурсНаДату должен содержать дату вида "01.01.2009" КурсНаДату = Лев(НаДату,10); АдресЦБРФ = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=" + КурсНаДату; // Пробуем загрузить XML-файл с курсами валют // В случае исключение возвращаем значение Неопределено Чт = Новый ЧтениеXML; Попытка Чт.ОткрытьФайл(АдресЦБРФ); Исключение Возврат Неопределено; КонецПопытки; Пока Чт.Прочитать() Цикл // при обработке XML-файла с курсами валют от ЦБ РФ нам необходимы строки // только с пустым полем ЛокальноеИмя Если Чт.ЛокальноеИмя = "" Тогда // считываем во временную переменную значение ВремСтрока = Чт.Значение; //---------------------------------------------- // если предыдущая строка содержала указанную запись, то теперь // ВремСтрока будет содержать его курс на данный момент. Если СтрокаВалют = "USD" Тогда СтрокаКурса = ВремСтрока; КонецЕсли; // Если СтрокаВалют = "EUR" Тогда // СтрокаКурса = ВремСтрока; // КонецЕсли; //---------------------------------------------- // если временная строка содержит указанную запись, сохраняем результат Если ВремСтрока = "Доллар США" Тогда СтрокаВалют = "USD"; КонецЕсли; // Если ВремСтрока = "Евро" Тогда // СтрокаВалют = "EUR"; // КонецЕсли; //---------------------------------------------- // если мы получили имя валюты и ее курс - то заносим в регистр сведений Если СтрДлина(СтрокаКурса) > 0 Тогда Возврат СтрокаКурса; КонецЕсли; КонецЕсли; КонецЦикла; КонецФункции // КурсДоллараНаДату() |
|||
1
ТелепатБот
гуру
26.06.09
✎
13:08
|
||||
2
Михаил Анянов
26.06.09
✎
13:10
|
Для формы курса валют написал цикл при воборе дат:
Процедура Кнопка1Нажатие(Элемент) ДатаНачала = ВыборДатыОт; ДатаОкончания = ВыборДатыДо; Если (ДатаНачала < ДатаОкончания) Тогда ЭлементыФормы.НадписьЗагрузка.Видимость = Истина; ЭлементыФормы.ИндЗагрузки.Видимость = Истина; ЭлементыФормы.ИндЗагрузки.МинимальноеЗначение = 0; ЭлементыФормы.ИндЗагрузки.МаксимальноеЗначение = (Цел((ДатаОкончания - ДатаНачала) / 86400)) * 2; Набор = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); Пока ДатаНачала <> ДатаОкончания Цикл ДатаНачала = ДатаНачала + 86400; КурсДоллара = КурсДоллараНаДату(ДатаНачала); НовЗапись = Набор.Добавить(); НовЗапись.Валюта = "USD"; НовЗапись.Период = ДатаНачала; НовЗапись.Курс = КурсДоллара; ЭлементыФормы.ИндЗагрузки.Значение = ЭлементыФормы.ИндЗагрузки.Значение + 1; КурсЕвро = КурсЕвроНаДату(ДатаНачала); НовЗапись = Набор.Добавить(); НовЗапись.Валюта = "EUR"; НовЗапись.Период = ДатаНачала; НовЗапись.Курс = КурсЕвро; ЭлементыФормы.ИндЗагрузки.Значение = ЭлементыФормы.ИндЗагрузки.Значение + 1; КонецЦикла; Набор.Записать(Истина); ЭлементыФормы.НадписьЗагрузка.Заголовок = "Загрузка курсов валют завершена успешно."; КонецПроцедуры |
|||
3
Михаил Анянов
26.06.09
✎
13:12
|
Если поправите где в нецелесообразности, или логике алгоритма - буду рад услышать и поправить.
Решил написать аналогично для сайта РБК, но там проблема в том, что XML не вормирует. В итоге - ставим на форму ПолеHTMLДокумента, загружаем в него составленный запрос, и обрабатываем, но пока не реализовал, через некоторое время думаю сделаю. |
|||
4
Sammo
26.06.09
✎
13:13
|
Заходим в любую типовую и берем оттуда КурсыВалютРБК
|
|||
5
Михаил Анянов
26.06.09
✎
13:16
|
Не было у меня типовых конфигураций под рукой
|
|||
6
Михаил Анянов
26.06.09
✎
13:17
|
К тому же я вижу что побыстрее импорт можно сделать, чем в типовых конфигурациях конкретно для РБК. Сделаю, выложу :)
|
|||
7
Михаил Анянов
26.06.09
✎
13:19
|
Ну и - альтернативы тоже нужны.
|
|||
8
Sidney
26.06.09
✎
13:55
|
"Нигде не нашел ответа"
А где искал то ? |
|||
9
Михаил Анянов
26.06.09
✎
14:01
|
Где ищут7 Яндекс, Гугл. Запросы вида - "автоматическая загрузка курсов валют в 1с". Где исходных текстов не было. Где деньги просили за это.
|
|||
10
kiruha
26.06.09
✎
14:06
|
А официальные банковские счета клиента грузануть
можно откуда нибудь? Откуда регистрацию клиента по ИНН брать - знаю, но там нет р/с |
|||
11
DSatan
26.06.09
✎
14:08
|
(10) попробней можно про "Откуда регистрацию клиента по ИНН" ?
|
|||
12
kiruha
26.06.09
✎
14:18
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |