Курсы валют на разные даты в одном запросе. Делаем свой нестандартный срез последних.
Часто возникает потребность в этом, например, отложенное формирование проводок (или построение отчета) в валюте регламентировано учета (обычно «руб») для документов (или других данных) введенным в у.е. (например USD или EUR).
Во вложении готовый пример, обработка.
Пример запроса с комментариями:
// Исходные данные передаем в запрос
"ВЫБРАТЬ
| ИсходныеДанные.Регистратор,
| ИсходныеДанные.Дата,
| ИсходныеДанные.Валюта,
| ИсходныеДанные.Сумма
|ПОМЕСТИТЬ ИсходныеДанные
|ИЗ
| &ИсходныеДанные КАК ИсходныеДанные
|;
|
// Выбираем для каких валют на какие даты надо получить курсы валют
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ИсходныеДанные.Дата,
| ИсходныеДанные.Валюта
|ПОМЕСТИТЬ ДатаВалюта
|ИЗ
| ИсходныеДанные КАК ИсходныеДанные
|;
|
// Выбираем ближайшую дату для курса валют
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДатаВалюта.Дата,
| ДатаВалюта.Валюта,
| МАКСИМУМ(КурсыВалют.Период) КАК Период
|ПОМЕСТИТЬ ДатаКурса
|ИЗ
| ДатаВалюта КАК ДатаВалюта
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
| ПО ДатаВалюта.Валюта = КурсыВалют.Валюта
| И ДатаВалюта.Дата >= КурсыВалют.Период
|
|СГРУППИРОВАТЬ ПО
| ДатаВалюта.Дата,
| ДатаВалюта.Валюта
|;
|
// Получаем курсы валют на все даты, которые нужны
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДатаКурса.Дата,
| ДатаКурса.Валюта,
| ДатаКурса.Период,
| КурсыВалют.Курс,
| КурсыВалют.Кратность
|ПОМЕСТИТЬ КурсыВалютСрез
|ИЗ
| ДатаКурса КАК ДатаКурса
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
| ПО ДатаКурса.Валюта = КурсыВалют.Валюта
| И ДатаКурса.Период = КурсыВалют.Период
|;
|
// Объединяем исходные данные с курсами валют
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ИсходныеДанные.Регистратор,
| ИсходныеДанные.Дата,
| ИсходныеДанные.Валюта,
| ИсходныеДанные.Сумма,
| КурсыВалютСрез.Период,
| КурсыВалютСрез.Курс,
| КурсыВалютСрез.Кратность,
| ИсходныеДанные.Сумма * КурсыВалютСрез.Курс / КурсыВалютСрез.Кратность КАК Итог
|ИЗ
| ИсходныеДанные КАК ИсходныеДанные
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ КурсыВалютСрез КАК КурсыВалютСрез
| ПО ИсходныеДанные.Валюта = КурсыВалютСрез.Валюта
| И ИсходныеДанные.Дата = КурсыВалютСрез.Дата";
Есть вопросы по запросам пишите, постараюсь ответить.