Как в запросе получить срез последних на Каждую Дату. Получить курс валюты 1с на дату


1С. Получение курса валюты на дату каждого документа

Задача

Получить курс валюты на дату каждого документа «Поступление товаров и услуг» из указанного периода.

Решение

Необходимые данные будем получать в запросе при помощи ТЕТА-соединения, действия в запросе прокомментированы.

// Получим таблицу ВТ_ПТиУ с полями "Ссылка", "Дата", "ДатаЗаписи" за указанный период // где: // "ДатаЗаписи" это дата документа на начало дня ВЫБРАТЬ РАЗРЕШЕННЫЕ ПоступлениеТоваровУслуг.Ссылка КАК Ссылка, ПоступлениеТоваровУслуг.Дата, НАЧАЛОПЕРИОДА(ПоступлениеТоваровУслуг.Дата, ДЕНЬ) КАК ДатаЗаписи ПОМЕСТИТЬ ВТ_ПТиУ ИЗ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг ГДЕ ПоступлениеТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода И ПоступлениеТоваровУслуг.Проведен И НЕ ПоступлениеТоваровУслуг.ПометкаУдаления ; //////////////////////////////////////////////////////////////////////////////// // Получим таблицу ВТ_ЗаписиРегистра левым соединением РС.КурсыВалют и ВТ_ПТиУ // по условию ВТ_ПТиУ.ДатаЗаписи >= КурсыВалют.Период и отбором по указанной валюте // с полями "ДатаЗаписи", "Период", "Валюта" // где: // "Период" это максимум поля "Период" из РС.КурсыВалют // // Для получения уникальных записей и получения максимальной даты // группируем таблицу по полям "ДатаЗаписи" И "Валюта" ВЫБРАТЬ ВТ_ПТиУ.ДатаЗаписи, МАКСИМУМ(КурсыВалют.Период) КАК Период, КурсыВалют.Валюта ПОМЕСТИТЬ ВТ_ЗаписиРегистра ИЗ ВТ_ПТиУ КАК ВТ_ПТиУ ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют ПО ВТ_ПТиУ.ДатаЗаписи >= КурсыВалют.Период И (КурсыВалют.Валюта = &Валюта) СГРУППИРОВАТЬ ПО ВТ_ПТиУ.ДатаЗаписи, КурсыВалют.Валюта ; //////////////////////////////////////////////////////////////////////////////// // Получим итоговую таблицу соединением РС.КурсыВалют и ВТ_ЗаписиРегистра по периоду и валюте // с полями "ДатаЗаписи", "Валюта", "Курс" ВЫБРАТЬ ВТ_ЗаписиРегистра.ДатаЗаписи КАК ДатаЗаписи, КурсыВалют.Валюта, КурсыВалют.Курс ИЗ ВТ_ЗаписиРегистра КАК ВТ_ЗаписиРегистра ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют ПО ВТ_ЗаписиРегистра.Период = КурсыВалют.Период И ВТ_ЗаписиРегистра.Валюта = КурсыВалют.Валюта УПОРЯДОЧИТЬ ПО ДатаЗаписи Guesto 24.09.2014 6412

guesto.ru

8.х - Курс валют на дату документа, помогите модифицировать запрос. | 1C-pro.ru

Вот запрос.

Код:

"ВЫБРАТЬ | ЧекККМТовары.Ссылка.Склад КАК Склад, | ЧекККМТовары.Ссылка.Продавец КАК Продавец, | СУММА(ВЫБОР | КОГДА ЧекККМТовары.Ссылка.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Возврат) | ТОГДА ЧекККМТовары.Сумма * -1 / КурсыВалютСрезПоследних.Курс | ИНАЧЕ ЧекККМТовары.Сумма / КурсыВалютСрезПоследних.Курс | КОНЕЦ) КАК Факт, | ЧекККМТовары.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры, | СУММА(ЧекККМТовары.Количество) КАК Количество, | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЧекККМТовары.Ссылка) КАК КоличествоЧеков, | СУММА(ЧекККМТовары.Цена / КурсыВалютСрезПоследних.Курс) КАК Цена, | КОНЕЦПЕРИОДА(ЧекККМТовары.Ссылка.Дата, ДЕНЬ) КАК Период, | КОНЕЦПЕРИОДА(ЧекККМТовары.Ссылка.Дата, МЕСЯЦ) КАК ПериодМесяц |{ВЫБРАТЬ | Склад.*, | Продавец.*, | Факт, | ВидНоменклатуры.*, | Количество, | КоличествоЧеков.*, | Цена} |ИЗ | Документ.ЧекККМ.Товары КАК ЧекККМТовары, | РегистрСведений.КурсыВалют.СрезПоследних(&ДатаКонца, Валюта = &Валюта) КАК КурсыВалютСрезПоследних |ГДЕ | ЧекККМТовары.Ссылка.Проведен | И ЧекККМТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца | И ЧекККМТовары.Ссылка.ОтчетОРозничныхПродажах.Проведен |{ГДЕ | ЧекККМТовары.Ссылка.Склад.*, | ЧекККМТовары.Ссылка.Продавец.*} | |СГРУППИРОВАТЬ ПО | ЧекККМТовары.Ссылка.Склад, | ЧекККМТовары.Ссылка.Продавец, | ЧекККМТовары.Номенклатура.ВидНоменклатуры, | КОНЕЦПЕРИОДА(ЧекККМТовары.Ссылка.Дата, ДЕНЬ), | КОНЕЦПЕРИОДА(ЧекККМТовары.Ссылка.Дата, МЕСЯЦ) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | Склады.Ссылка, | NULL, | СУММА(ПродажиОбороты.СтоимостьОборот), | ПродажиОбороты.Номенклатура.ВидНоменклатуры, | СУММА(ПродажиОбороты.КоличествоОборот), | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиОбороты.Регистратор), | СУММА(ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот), | КОНЕЦПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ), | КОНЕЦПЕРИОДА(ПродажиОбороты.Период, МЕСЯЦ) |ИЗ | РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаКонца, Регистратор, ДоговорКонтрагента <> ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка)) КАК ПродажиОбороты | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады | ПО ПродажиОбороты.Подразделение = Склады.Подразделение |{ГДЕ | Склады.Ссылка.* КАК Склад} | |СГРУППИРОВАТЬ ПО | ПродажиОбороты.Номенклатура.ВидНоменклатуры, | Склады.Ссылка, | КОНЕЦПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ), | КОНЕЦПЕРИОДА(ПродажиОбороты.Период, МЕСЯЦ) | |УПОРЯДОЧИТЬ ПО | Склад, | ПериодМесяц |ИТОГИ | СУММА(Факт), | СУММА(Количество), | СУММА(КоличествоЧеков), | СУММА(Цена) |ПО | Склад, | Продавец, | ПериодМесяц"

1c-pro.ru

Срез последних на каждую дату в запросе 1С

Иногда требуется запросом получить из периодического регистра сведений данные на несколько дат сразу. Типичный пример — работа с курсами валют. Рассмотрим алгоритм решение данной задачи на примере.

Постановка задачи

В базе создан документ «РеализацияТоваровУслуг», в шапке которого есть реквизит «Валюта». Запросом требуется для каждого документа получить актуальный курс валюты из шапки на дату документа. Хранение курсов валют осуществляется в периодическом регистре сведений «КурсыВалют«.Решением «в лоб» этой задачи мог бы быть запрос в цикле: получение всех документов с их датами и валютой и в выборке обращение к виртуальной таблице среза последних регистра «КурсыВалют». Но т.к. запрос в цикле — это «плохо», попробуем реализовать задачу одним запросом.

Решение

Для решения задачи будем использовать факт, что таблицы в запросе можно соединять не только на равенство полей.

ВЫБРАТЬ     РеализацияТоваровУслуг.Ссылка,     РеализацияТоваровУслуг.Валюта,     МАКСИМУМ(КурсыВалют.Период) КАК Период ПОМЕСТИТЬ ВТПериодыУстановкиКурсов ИЗ     Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг         ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют         ПО РеализацияТоваровУслуг.Валюта = КурсыВалют.Валюта             И РеализацияТоваровУслуг.Дата >= КурсыВалют.Период СГРУППИРОВАТЬ ПО     РеализацияТоваровУслуг.Ссылка,     РеализацияТоваровУслуг.Валюта ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ     ВТПериодыУстановкиКурсов.Ссылка,     ВТПериодыУстановкиКурсов.Валюта,     КурсыВалют.Курс ИЗ     ВТПериодыУстановкиКурсов КАК ВТПериодыУстановкиКурсов         ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют         ПО ВТПериодыУстановкиКурсов.Период = КурсыВалют.Период             И ВТПериодыУстановкиКурсов.Валюта = КурсыВалют.Валюта

Порядок действий в запросе:

  1. Получение для каждого документа периода установки курса валюты. Документы соединяются с ФИЗИЧЕСКОЙ таблицей «КурсыВалют». Здесь следует обратить внимание на условия соединения. Валюты должны быть равны, а дата документа >= периоду регистра сведений.В результате такого соединения для каждого документа будет получено множество строк, удовлетворяющих условию: все записи курсов по валюте документа, установленные не позже даты документа.Завершающим этапом будет группировка строк с получением максимального периода курса. В результате для каждого документа будет получен требуемый период установки курса для нужной валюты (максимальная дата установки курса валюты, но не больше даты документа). Результат помещается во временную таблицу ВТПериодыУстановкиКурсов.
  2. Получение курса. Временная таблица ВТПериодыУстановкиКурсов соединяется с ФИЗИЧЕСКОЙ таблицей «КурсыВалют». Соединение происходит по Валюте документа и периоду установки курса, определенному во второй временной таблице.

 

Смотри также:

Программное получение информации о компьютере и конфигурацииКак установить отбор в табличной части программноКак получить список открытых окон 1С

pro1c8.ru

Как получить Срез Последних значений на Каждую Дату

Данный способ подходит для отчетов. Из очевидных плюсов - если курс (или другие данные) не нужны для построения отчета, то СКД не будет их получать. Однако быстродействие такого отчета может оказаться и несколько ниже, чем в первом способе.

Для примера сделаем отчет - список заказов покупателей. Для этого создадим набор данных "Документы" - запрос:

Код 1C v 8.х ВЫБРАТЬ ЗаказПокупателя.Ссылка КАК ЗаказПокупателя, ЗаказПокупателя.Дата КАК Дата, ЗаказПокупателя.ВалютаДокумента КАК ВалютаДокумента, ЗаказПокупателя.СуммаДокумента КАК СуммаДокумента {ВЫБРАТЬ ЗаказПокупателя.*, Дата, ВалютаДокумента.*, СуммаДокумента} ИЗ Документ.ЗаказПокупателя КАК ЗаказПокупателя {ГДЕ ЗаказПокупателя.Ссылка.* КАК ЗаказПокупателя, ЗаказПокупателя.СуммаДокумента}

Для того, чтобы потом успешно свзать наборы данных, в запрос необходимо включить поля "Дата" и "ВалютаДокумента". Чтобы они не появлялись в списке доступных полей, если это необходимо, их можно убрать, установив флажки ограничений в таблице "Поля" схемы компоновки. В остальном запрос вряд ли требует комментариев.title

Для того, чтобы получить информацию о курсах валют, добавим второй набор данных-запрос, "Курсы валют":

Код 1C v 8.х ВЫБРАТЬ &Дата КАК Дата, КурсыВалютСрезПоследних.Валюта КАК Валюта, КурсыВалютСрезПоследних.Курс КАК Курс, КурсыВалютСрезПоследних.Кратность КАК Кратность {ВЫБРАТЬ Дата, Валюта.*, Курс, Кратность} ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &Валюта) КАК КурсыВалютСрезПоследних {ГДЕ КурсыВалютСрезПоследних.Курс, КурсыВалютСрезПоследних.Кратность}

В этом запросе имеются 2 параметра: "Дата" и "Валюта". Эти параметры будут установлены СКД при соединении наборов. Кроме того, параметр "Дата" указан в выбранных полях - это нужно для соединения таблиц. Для ненужный полей "Дата" и "Валюта" также устанавливаем флажки ограничений, чтобы они не появлялись в доступных полях.title

Перейдем к соединению наборов. На странице "Связи наборов данных" добавим 2 связи: 1. Источник связи - набор "Документы", приемник - набор "Курсы валют". Выражение источник - "Дата", выражение приемник - "Дата", Параметр - "Дата" 2. Источник связи - набор "Документы", приемник - набор "Курсы валют". Выражение источник - "ВалютаДокумента", выражение приемник - "Валюта", Параметр - "Валюта"title

Главное здесь - параметры связи. При соединении наборов данных, если указан параметр, СКД передает в подчиненный набор (в нашем случае - запрос "Курсы валют") параметры, указанные в соединении. Значениями параметров будут значения соответствующих полей набора-источника.

Перейдем к вычисляемым полям. Добавим вычисляемое поле "СуммаВВалютеУпрУчета". Выражение поля - "СуммаДокумента * Курс / Кратность".title

Также укажем поля "СуммаДокумента" и "СуммаВВалютеУпрУчета" как ресурсыtitle

Настроим отчет. Добавим одну группировку "Детальные записи", в выбранных полях укажем "ЗаказПолкупателя", "Курс" и "Кратность". Добавим ресурсы "СуммаДокумента" и "СуммаВВалютеУпрУчета"title

Можно формировать отчетtitle

Defender aka LINN

Как получить Срез Последних на Каждую Дату

То же самое простым запросом

helpf.pro

Как в запросе получить срез последних на Каждую Дату » Запросы » FAQ » HelpF.pro

Данная задача может быть решена как с использованием вложенных запросов, так и с помощью. временных таблиц. Попробуем решить задачу, используя временные таблицы. Сначала приведем весь текст запроса, а потом кратко разберем по частям принцип его работы.

Текст запроса:

Код 1C v 8.х ВЫБРАТЬ ПродажиОбороты.Период КАК Дата, ПродажиОбороты.Контрагент КАК Контрагент, ПродажиОбороты.Номенклатура КАК Номенклатура, СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество, СУММА(ПродажиОбороты.СтоимостьОборот) КАК Стоимость ПОМЕСТИТЬ втБезЦены ИЗ РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ПродажиОбороты

СГРУППИРОВАТЬ ПО ПродажиОбороты.Период, ПродажиОбороты.Контрагент, ПродажиОбороты.Номенклатура

ИНДЕКСИРОВАТЬ ПО Номенклатура, Дата, Контрагент ;

//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втБезЦены.Дата КАК Дата, втБезЦены.Контрагент КАК Контрагент, втБезЦены.Номенклатура КАК Номенклатура, втБезЦены.Количество, втБезЦены.Стоимость, МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период ПОМЕСТИТЬ втМаксПериод ИЗ втБезЦены КАК втБезЦены ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ПО втБезЦены.Номенклатура = ЦеныНоменклатуры.Номенклатура И втБезЦены.Дата >= ЦеныНоменклатуры.Период

СГРУППИРОВАТЬ ПО втБезЦены.Дата, втБезЦены.Контрагент, втБезЦены.Номенклатура, втБезЦены.Количество, втБезЦены.Стоимость

ИНДЕКСИРОВАТЬ ПО Номенклатура, Дата, Контрагент, Период ;

//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втМаксПериод.Дата, втМаксПериод.Контрагент, втМаксПериод.Номенклатура, втМаксПериод.Количество, втМаксПериод.Стоимость, ЦеныНоменклатуры.Цена ИЗ втМаксПериод КАК втМаксПериод ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ПО втМаксПериод.Номенклатура = ЦеныНоменклатуры.Номенклатура И втМаксПериод.Период = ЦеныНоменклатуры.Период ГДЕ ЦеныНоменклатуры.ТипЦен = &ТипЦен АВТОУПОРЯДОЧИВАНИЕ

Данный пакетный запрос содержит три подзапроса. Рассмотрим их подробнее.

Первый запрос пакета группирует данные по периоду, контрагенту и номенклатуре и помещает их во временную таблицу втБезЦены. Далее мы будем соединять эту таблицу с таблицей цен номенклатуры и получим небольшой выигрыш в том, что соединять будем уже сгруппированные данные.

Во втором подзапросе мы соединяем временную таблицу с регистром сведений «ЦеныНоменклатуры» при этом из регистра сведений мы выбираем МАКСИМАЛЬНУЮ дату из меньших или равных дат. Результат этого подзапроса также помещаем во временную таблицу (втМаксПериод). Посмотрим, какие данные попадают в эту таблицу:titleРис. 8 Временная таблица втМаксПериод

В последнем запросе пакета, мы еще раз соединяем временную таблицу с таблицей цен номенклатуры. На этот мы соединяем таблице по номенклатуре и периоду.

Итоговый результат запроса:title

То же самое средсвами СКД

helpf.pro

Курсы валют 1С - как обновить вручную и автоматически, пробуем всё

Чтобы вести учет курсовых разниц в 1С в соответствии с законодательством РФ, необходимо ежедневно обновлять курсы валют 1С. Можно обновлять курсы валют вручную, но лучше настроить автоматическую загрузку курсов в 1С регламентным заданием. Заинтересовались? Читайте далее и узнаете оба способа.

В рамках этой пошаговой инструкции обновим курсы валют в Бухгалтерия 1С 8.3: узнаем как заполнить справочник Валюты, настроим программу на учет обязательств, выраженных в иностранной валюте, проверим регистр сведений где находятся актуальные курсы валют, настроим регламентное задание на обновление курсов валют.

Открываем программу в пользовательском режиме.

Курсы валют 1С

Открываем пользовательский режим

В первую очередь нам нужно настроить (или проверить, если все настройки уже выполнены) функциональность на учет обязательств, выраженных в иностранной валюте в т.ч. с оплатой в рублях. Переходим блок Главное — Функциональность.

Курсы валют 1С

Настраиваем функциональность программы

Переходим в закладку Расчеты и проверяем блок учет по договорам, если галки не проставлены, проставляем.

Курсы валют 1С

Настраиваем учет обязательств

Теперь нужно наполнить справочник валютами, которые будем обновлять. Переходим в Главное меню – Все функции. Если при нажатии на Главное меню вы не найдете команду Все функции, значит она у вас скрыта, ее нужно активировать, если не знаете как, в помощь инструкция — Команда Все функции в 1С.

Курсы валют 1С

Переходим в команду Все функции

В открывшемся окне сначала выбираем Справочники, нажимаем на надпись два раза мышью или нажимаем на плюс слева от надписи.

Курсы валют 1С

Переходим в справочники

Далее в открывшемся списке ищем справочник Валюты и открываем его — нажимаем два раза мышью на него или один раз на него (выделяем мышью) и затем команду Открыть.

Курсы валют 1С

Открываем справочник Валюты

Выбираем все нужные валюты из классификатора.

Курсы валют 1С

Переходим в классификатор валют

Я создам себе стандартные валюты — USD, EURO, JPY, GBP. В подборе из Классификатора можно выбирать сразу несколько валют, удерживая клавишу Ctrl. По завершению выбора нажимаем Выбрать

Курсы валют 1С

Выбираем валюты из классификатора

Обновление курсов валют 1С вручную

Теперь, когда подобрали все необходимые валюты, нужно их Загрузить. Нажимаем Загрузить курсы валют… И настраиваем загрузку (период, выделяем необходимые валюты) и нажимаем Загрузить.

Курсы валют 1С

Настраиваем обработку загрузки валют

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

Теперь проверим регистр сведений, где в хронологическом порядке содержатся и периодически добавляются все курсы наших валют. Переходим Главное меню — Все функции — Регистры сведений.

Курсы валют 1С

Открываем регистры сведений

В открывшемся списке ищем регистр Курсы валют и открываем его — нажимаем два раза мышью на него или один раз на него (выделяем мышью) и затем команду Открыть.

Курсы валют 1С

Переходим в регистр сведений Курсы валют

В регистре Курсы валют у нас заполнены все курсы за тот период времени, который мы указали в обработке.

Курсы валют 1С

Содержание регистра сведений Курсы валют

Чтобы каждый день (неделю/месяц) не забывать обновлять курсы валют, можно создать регламентное задание и настроить его под себя (ежедневно, еженедельно, ежемесячно). Также при необходимости можно и отключить автоматическое обновление курсов.

Автоматическое обновление курсов валют 1С

Переходим в блок Администрирование, далее — Поддержка и обслуживание.

Курсы валют 1С

Переходим в настройки программы

Далее переходим в Регламентные и фоновые задания.

Курсы валют 1С

Переходим в список регламентных заданий

Если в списке регламентных заданий вы не найдете Загрузку курсов валют, то можно ее добавить. Справа нажимаем Еще — Добавить. Но как правило после вышеуказанные шагов, регламентное задание уже включено.

Курсы валют 1С

Выбираем или добавляет регламентное задание

После того как нажали добавить, открывается окно с новым регламентным заданием и предлагается выбор заданий, выбираете Загрузка курсов валют, нажимаете ОК. После создания регламентного задания не забудьте поставить галку Включено.

Курсы валют 1С

Создание нового регламентного задания

Теперь можно настроить расписание под себя. Нажимаем Настроить расписание и корректируем настройки.

Курсы валют 1С

Настройка расписания регламентного задания

Теперь вы знаете как обновить курсы валют 1С 8.3

Что еще почитать:

Как загрузить классификатор банков 1СКак загрузить адресный классификатор 1СКак загрузить внешнюю обработку 1С

1c-wizard.ru

Загрузка курсов валют из ЦБ РФ в 1С

Одним из источников курсов валют, является сайт ЦБРФ (Центральный Банк Российской Федерации). Запросить данные с сайта можно с помощью объекта HTTPСоединение. В Интернете можно найти множество источников для загрузки курсоров валют. Широко применяется загрузка курсов валют с сайта РБК.

Строка запроса данных с сайта ЦБРФ

Коды валют ЦБРФЕвро - R01239Доллар США - R01235Японская иена - R01820Весь список валют

Запрос для получения курсов всех валют на последнюю датуЗапрос: www.cbr.ru/scripts/XML_daily.asp

Запрос для получения курсов всех валют на 24.08.2016Шаблон: www.cbr.ru/scripts/XML_daily.asp?date_req=День/Месяц/ГодЗапрос: www.cbr.ru/scripts/XML_daily.asp?date_req=24/08/2016

Запрос для получения курсов Евро за период с 20/08/2016 по 24/08/2016Шаблон: www.cbr.ru/scripts/XML_dynamic.asp?date_req1=День/Месяц/Год&date_req2=День/Месяц/Год&VAL_NM_RQ=КодВалютыЗапрос: www.cbr.ru/scripts/XML_dynamic.asp?date_req1=20/08/2016&date_req2=24/08/2016&VAL_NM_RQ=R01239

Загрузить курсы валют

При запросе с сайта ЦБРФ возвращается xml-файл. При запросе курсов на определенную дату или за период структура xml-файла отличается.Функция ПолучитьКурсыВалют()

//Сервер Сервер = "www.cbr.ru";

//Курс всех валют на последнюю дату Адрес = "scripts/XML_daily.asp";

//Курс всех валют определенную дату Адрес = "scripts/XML_daily.asp?date_req=24/08/2016";

//Курс Евро за период Адрес = "scripts/XML_dynamic.asp?date_req1=20/08/2016&date_req2=24/08/2016&VAL_NM_RQ=R01239";

ПопыткаHTTP = Новый HTTPСоединение(Сервер);ИсключениеСообщить("Не удалось подключиться");Возврат Ложь;КонецПопытки;

HTTPЗапрос = Новый HTTPЗапрос(Адрес); HTTPОтвет = HTTP.Получить(HTTPЗапрос);Текст = HTTPОтвет.ПолучитьТелоКакСтроку("windows-1251");

ЧтениеXML = Новый ЧтениеXML;ЧтениеXML.УстановитьСтроку(Текст);

//В переменной Текст содержится текс в XML-формате //Перебор узлов формируется в зависимости от структуры XML Пока ЧтениеXML.Прочитать() Цикл

Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента ТогдаЕсли ЧтениеXML.ЛокальноеИмя = "ИмяТэга" ТогдаЧитаем = Истина;КонецЕсли;ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст ТогдаЕсли Читаем ТогдаЗначение = XMLЗначение(Тип("Строка"), ЧтениеXML.Значение);Читаем = Ложь;КонецЕсли;КонецЕсли;

КонецЦикла;

КонецФункции

1clenta.ru