Вход | Регистрация


Не получается выбрать курс валюту на каждую дату в запросе

Не получается выбрать курс валюту на каждую дату в запросе
Я
   Nyarlathotep
 
26.12.18 - 16:41
Всем привет!

Есть изначально вот такой запрос:

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

Нужно добавить к нему пересчет валюты в рубли по курсу на дату регистратора, почитал вот тут:

http://catalog.mista.ru/public/77568/

после чего сделал в запросе вот так

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

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

////////////////////////////////////////////////////////////////////////////////

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

СГРУППИРОВАТЬ ПО
    втБезКурса.ВариантОтчета,
    втБезКурса.Регистратор,
    втБезКурса.ПериодСекунда,
    втБезКурса.ПериодМинута,
    втБезКурса.ПериодЧас,
    втБезКурса.ПериодДень,
    втБезКурса.ПериодНеделя,
    втБезКурса.ПериодДекада,
    втБезКурса.ПериодМесяц,
    втБезКурса.ПериодКвартал,
    втБезКурса.ПериодПолугодие,
    втБезКурса.ПериодГод,
    втБезКурса.ФизЛицо,
    втБезКурса.Валюта
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    втМаксПериод.ВариантОтчета,
    втМаксПериод.Регистратор,
    втМаксПериод.ПериодСекунда,
    втМаксПериод.ПериодМинута,
    втМаксПериод.ПериодЧас,
    втМаксПериод.ПериодДень,
    втМаксПериод.ПериодНеделя,
    втМаксПериод.ПериодДекада,
    втМаксПериод.ПериодМесяц,
    втМаксПериод.ПериодКвартал,
    втМаксПериод.ПериодПолугодие,
    втМаксПериод.ПериодГод,
    втМаксПериод.ФизЛицо,
    втМаксПериод.НачальныйОстатокПоЗайму,
    втМаксПериод.КонечныйОстатокПоЗайму,
    втМаксПериод.ПолучениеЗайма,
    втМаксПериод.ВозвратЗайма,
    втМаксПериод.Валюта,
    ВЫБОР
        КОГДА втМаксПериод.Валюта.Наименование <> "руб."
            ТОГДА втМаксПериод.НачальныйОстатокПоЗайму * КурсыВалют.Курс / КурсыВалют.Кратность
        ИНАЧЕ втМаксПериод.НачальныйОстатокПоЗайму
    КОНЕЦ КАК НачальныйОстатокРубли,
    ВЫБОР
        КОГДА втМаксПериод.Валюта.Наименование <> "руб."
            ТОГДА втМаксПериод.КонечныйОстатокПоЗайму * КурсыВалют.Курс / КурсыВалют.Кратность
        ИНАЧЕ втМаксПериод.КонечныйОстатокПоЗайму
    КОНЕЦ КАК КонечныйОстатокРубли,
    ВЫБОР
        КОГДА втМаксПериод.Валюта.Наименование <> "руб."
            ТОГДА втМаксПериод.ПолучениеЗайма * КурсыВалют.Курс / КурсыВалют.Кратность
        ИНАЧЕ втМаксПериод.ПолучениеЗайма
    КОНЕЦ КАК СуммаПриходРубли,
    ВЫБОР
        КОГДА втМаксПериод.Валюта.Наименование <> "руб."
            ТОГДА втМаксПериод.ВозвратЗайма * КурсыВалют.Курс / КурсыВалют.Кратность
        ИНАЧЕ втМаксПериод.ВозвратЗайма
    КОНЕЦ КАК СуммаРасходРубли
ИЗ
    втМаксПериод КАК втМаксПериод
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
        ПО втМаксПериод.Валюта = КурсыВалют.Валюта
            И втМаксПериод.Период = КурсыВалют.Период

в итоге получаются какие-то фантастически большие суммы, все рассчитывается неправильно. Что я сделал неправильно? Как мне правильно написать запрос, чтобы сделать пересчет в рубли на дату регистратора?
 
 
   timurhv
 
1 - 26.12.18 - 16:46
Почему максимум от периода?
   IvanGorbunov
 
2 - 26.12.18 - 16:48
(1) чтобы симитировать срез последнего
   timurhv
 
3 - 26.12.18 - 16:48
(2) Ссори, подумал сравнение наоборот на >=
   timurhv
 
4 - 26.12.18 - 16:50
Вам суммировать поля в "втМаксПериод" нельзя.
   IvanGorbunov
 
5 - 26.12.18 - 16:51
у вас получаются фантистические цифры курса, либо ваших полей, аля "НачальныйОстатокРубли"?
   Nyarlathotep
 
6 - 26.12.18 - 16:54
(5) Моих полей
   Nyarlathotep
 
7 - 26.12.18 - 16:55
(4) Попробовал, все равно суммы нереальные, только поле "Получение займа" считает нормально
   Nyarlathotep
 
8 - 26.12.18 - 17:01
Убрал группировку и суммы в запросе втБезКурса, все равно суммы слишком большие.
   IvanGorbunov
 
9 - 26.12.18 - 17:30
А если поделить получившиеся цифры на ожидаемые, тогда будет целое число? Если да, значит где-то есть поля, по которым идет дополнительное суммирование одних и тех же сумм.
   timurhv
 
10 - 27.12.18 - 09:43
(8) Так группировка-то нужна, вот это оставляйте:
МАКСИМУМ(КурсыВалют.Период) КАК Период

А СУММА(...) в втБезКурса - убирайте. Вам для каждой строки необходимо ТОЛЬКО определить максимальную дату.

Для того, чтобы понять где ошибка - вытащите поля в конечном запросе:
втМаксПериод.КонечныйОстатокПоЗайму,
КурсыВалют.Курс,
КурсыВалют.Кратность
 
 Рекламное место пустует

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