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