Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как получить курсы валют для документа

Как получить курсы валют для документа
Я
   nikitas2020
 
12.12.20 - 23:03
Как запросом получить курсы валют для соответствующих документов. Курс может быть задан не на каждую дату: в примере нет курса USD на 03.01.2009, а документ есть. Должна получиться таблица Ссылка|Курс.

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

ИНДЕКСИРОВАТЬ ПО
    Валюта,
    ДатаКалендаря
   H A D G E H O G s
 
1 - 12.12.20 - 23:19
Зачем производственный календарь?
   RomanYS
 
2 - 12.12.20 - 23:31
О! Первый вопрос в ветке появился :) ТС как будто похвастаться пришел
   H A D G E H O G s
 
3 - 12.12.20 - 23:46
(2) ТС как будто пытается лопнуть мои глазоньки
   RomanYS
 
4 - 12.12.20 - 23:55
(3) Загадал ТС ребус :)) Зачем "на каждую дату" при условии РеализацияТоваровУслуг.Ссылка = &Ссылка?
   youalex
 
5 - 12.12.20 - 23:58
Это бест-практикс?
   RomanYS
 
6 - 12.12.20 - 23:59
(3) В соседней ветке вон гораздо интереснее: утверждается что кривоватый коррелированный запрос будет работать быстро.
Как в запросе выбрать ПЕРВЫЕ 1 для ЛЕВОЕ СОЕДИНЕНИЕ ?
Выскажешь мнение?
   nikitas2020
 
7 - 13.12.20 - 00:04
Получилось вот так:
ВЫБРАТЬ
    ВложенныйЗапрос.Валюта КАК Валюта,
    ВложенныйЗапрос.Ссылка,
    ВложенныйЗапрос.ДатаКурса,
    КурсыВалют.Курс
ПОМЕСТИТЬ КурсыВалют
ИЗ
    (ВЫБРАТЬ РАЗЛИЧНЫЕ
        МАКСИМУМ(КурсыВалют.Период) КАК ДатаКурса,
        КурсыВалют.Валюта КАК Валюта,
        РеализацияТоваровУслуг.Ссылка КАК Ссылка,
        РеализацияТоваровУслуг.Дата КАК Дата
    ИЗ
        Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
            ПО РеализацияТоваровУслуг.Дата >= КурсыВалют.Период
                И РеализацияТоваровУслуг.ВалютаДокумента = КурсыВалют.Валюта
    ГДЕ
        КурсыВалют.Валюта = &Валюта
        И КурсыВалют.Период <= РеализацияТоваровУслуг.Дата
    
    СГРУППИРОВАТЬ ПО
        КурсыВалют.Валюта,
        РеализацияТоваровУслуг.Ссылка,
        РеализацияТоваровУслуг.Дата) КАК ВложенныйЗапрос
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
        ПО ВложенныйЗапрос.ДатаКурса = КурсыВалют.Период
            И ВложенныйЗапрос.Валюта = КурсыВалют.Валюта

ИНДЕКСИРОВАТЬ ПО
    Валюта
   H A D G E H O G s
 
8 - 13.12.20 - 00:04
(6) На моей практике коррелирующие запросы работали так, как от них это ожидается, вызывая в цикле коррелирующую часть по числу внешних строк.
Никаких там сканов или tablespool не попадалось. Ничего криминального.
Но, епстественно, я бы им не доверял и пользовал только в крайних случаях, например, в динсписках.
   H A D G E H O G s
 
9 - 13.12.20 - 00:07
(7) Что, прям все РТУ нужны с курсами?
   youalex
 
10 - 13.12.20 - 00:22
(6) имхуется, что основная проблема коррелирующих запросов в том, что они сильно зависят от среды исполнения, конкретно от СУБД и ее настроек. В файловых версиях - это сразу смерть. в PG, наверное от настроек, в MS - нормальная практика по умолчанию. Более того, в официальных курсах от MS коррелирующие запросы приводятся как нечто само собой разумеющееся. Чего не скажешь про 1С.
   nikitas2020
 
11 - 13.12.20 - 00:23
Нужно получить курс валюты на тот же день.
   hhhh
 
12 - 13.12.20 - 00:33
(11) тогда и получить курс на день. Зачем нужно курсы грузить за 15 лет?

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.