Итак исходные условия: любая конфигурация 1с 8, в которой присутствует регистр сведений курсы валют. Для получения списка дат я использовал список периодов валюты Тест1.
Предварительно я заполнил регистр вот такимим данными:
Период | Валюта | Курс |
10.03.2010 | Тест2 | 12,0000 |
12.03.2010 | Тест2 | 142,0000 |
15.03.2010 | Тест2 | 100,0000 |
16.03.2010 | Тест | 20,0000 |
19.03.2010 | Тест2 | 213,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,0000 | 16.03.2010 | 100,0000 | 15.03.2010 |
40,0000 | 20.03.2010 | 213,0000 | 19.03.2010 |
т.е. я получил значение курса второй валюты действовавшее на дату периода установки курса первой валюты.