Каталог решений - Получение курса валюты по списку дат

Получение курса валюты по списку дат

Получение курса валюты по списку дат

В наличии

Иногда у меня возникала необходимость в запросе получить значение курсов валют на разные даты, причем заранее список дат неизвестен. Естественно было желание сделать все одним запросом. Буквально вчера нашел я оптимальное решение задачи. Т.к. подобные задачи могут возникать и у других, то решил результат здесь.

Категория:

Описание

Итак исходные условия: любая конфигурация 1с 8, в которой присутствует регистр сведений курсы валют. Для получения списка дат я использовал список периодов валюты Тест1.

Предварительно я заполнил регистр вот такимим данными:

   
ПериодВалютаКурс
10.03.2010Тест212,0000
12.03.2010Тест2142,0000
15.03.2010Тест2100,0000
16.03.2010Тест20,0000
19.03.2010Тест2213,0000
20.03.2010Тест40,0000

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

Далее собственно запрос:

ВЫБРАТЬ
    КурсыВалют.Курс КАК Курс2,
    КурсыВалют.Период КАК Период2
ПОМЕСТИТЬ Курсы2
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
    КурсыВалют.Валюта.Наименование = "Тест2"
;

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

А вот результат выполнения запроса:

    
Курс1Период1Курс2Период2
20,000016.03.2010100,000015.03.2010
40,000020.03.2010213,000019.03.2010

т.е. я получил значение курса второй валюты действовавшее на дату периода установки курса первой валюты.

 

 

 

has been added to your cart:
Оформление заказа