Есть банальный запрос, который возвращает курс валюты на дату документов выбранных за период:
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка КАК Ссылка,
МАКСИМУМ(КурсыВалют.Период) КАК Период,
КурсыВалют.Валюта КАК Валюта
ПОМЕСТИТЬ МаксДатыРегистраВалют
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
ПО (РеализацияТоваровУслуг.ВалютаДокумента = КурсыВалют.Валюта)
И (РеализацияТоваровУслуг.Дата >= КурсыВалют.Период)
ГДЕ
РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНач И &ДатаКон
СГРУППИРОВАТЬ ПО
РеализацияТоваровУслуг.Ссылка,
КурсыВалют.Валюта
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МаксДатыРегистраВалют.Ссылка КАК Ссылка,
КурсыВалют.Валюта КАК Валюта,
КурсыВалют.Курс КАК Курс,
МаксДатыРегистраВалют.Период КАК Период
ИЗ
МаксДатыРегистраВалют КАК МаксДатыРегистраВалют
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
ПО МаксДатыРегистраВалют.Валюта = КурсыВалют.Валюта
И МаксДатыРегистраВалют.Период = КурсыВалют.Период
Как можно его оптимизировать, что бы был один запрос (если это возможно) и что бы работал быстрее при большом количестве данных?
(0) Например, как в примере ниже (это ЕРП):
ВЫБРАТЬ
ТТ.Регистратор
,ТТ.ВалютаДокумента
,ТТ.СуммаВВалютеДокумента
,ТТ.Период
,ТТ.СуммаВыручки
,ТТ.СуммаВыручкиСНДСРегл
,Курсы.Период
,Курсы.Курс
ИЗ
РегистрНакопления.ВыручкаИСебестоимостьПродаж КАК ТТ
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК Курсы
ПО Курсы.Период <= ТТ.Период
И Курсы.Валюта = &ВалютаУпр
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК Будущее
ПО Будущее.Период > Курсы.Период
И Будущее.Период <= ТТ.Период
И Будущее.Валюта = &ВалютаУпр
ГДЕ
Будущее.Период ЕСТЬ NULL
Подумать и приготовить по аналогии.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший