Имя: Пароль:
 
1C
 
Помогите оптимизировать запрос
0 Demetri__
 
15.04.18
20:10
Есть банальный запрос, который возвращает курс валюты на дату документов выбранных за период:

ВЫБРАТЬ
    РеализацияТоваровУслуг.Ссылка КАК Ссылка,
    МАКСИМУМ(КурсыВалют.Период) КАК Период,
    КурсыВалют.Валюта КАК Валюта
ПОМЕСТИТЬ МаксДатыРегистраВалют
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
        ПО (РеализацияТоваровУслуг.ВалютаДокумента = КурсыВалют.Валюта)
            И (РеализацияТоваровУслуг.Дата >= КурсыВалют.Период)
ГДЕ
    РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНач И &ДатаКон

СГРУППИРОВАТЬ ПО
    РеализацияТоваровУслуг.Ссылка,
    КурсыВалют.Валюта
;

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



Как можно его оптимизировать, что бы был один запрос (если это возможно) и что бы работал быстрее при большом количестве данных?
1 Ботаник Гарден Меран
 
15.04.18
20:13
Ссылка здесь зачем?
2 H A D G E H O G s
 
15.04.18
20:16
(0) Никак.
Только хранить курс в документе (как в типовых), либо в отдельном РС.
3 Лефмихалыч
 
15.04.18
21:42
(0) денормализация только спасет
4 Волшебник
 
15.04.18
22:05
5 drei
 
15.04.18
22:07
6 vvp91
 
15.04.18
22:30
(0) Например, как в примере ниже (это ЕРП):

ВЫБРАТЬ
    ТТ.Регистратор
    ,ТТ.ВалютаДокумента
    ,ТТ.СуммаВВалютеДокумента
    ,ТТ.Период
    ,ТТ.СуммаВыручки
    ,ТТ.СуммаВыручкиСНДСРегл
    ,Курсы.Период
    ,Курсы.Курс
ИЗ
    РегистрНакопления.ВыручкаИСебестоимостьПродаж КАК ТТ
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК Курсы
        ПО Курсы.Период <= ТТ.Период
        И Курсы.Валюта = &ВалютаУпр
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК Будущее
        ПО Будущее.Период > Курсы.Период
        И Будущее.Период <= ТТ.Период
        И Будущее.Валюта = &ВалютаУпр
ГДЕ
    Будущее.Период ЕСТЬ NULL


Подумать и приготовить по аналогии.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший