Имя: Пароль:
1C
1С v8
Как конвертировать валюту в запросе?
0 breezee
 
29.12.15
10:31
У меня есть регистр, в который могут поступать деньги в любой валюте. И валюта, в которой надо вывести результат. В регистре курсы валют содержаться курсы валют. Я получаю курс валют, в который нужно выводить. Потом делаю вычисляемое поле, в котором смотрю - если валюта в регистре совпадает с валютой, в которой нужно вывести - вывожу, если не совпадает - смотрю - если валюта в рублях - сразу умножаю на курс валюты, в которой нужно вывести. Если какая-то другая валюта - пытаюсь получить курс на эту валюту, умножаю на саму валюту - получаю рубли и рубли уже делю(перевожу) в валюту, которую мне нужно для вывода. У меня ругается на то что я в поле пытаюсь выбрать курс. "Синтаксическая ошибка "ВЫБРАТЬ"" Что мне сделать? Код вычисляемого поля:

ВЫБОР
    КОГДА МойРегист.ВалютаДоговора = втВалют.ВалютаЯчейки ТОГДА МойРегист.ГрафикПогашенияСумма
    ИНАЧЕ  ВЫБОР
               КОГДА МойРегист.ВалютаДоговора = втВалют.ВалютаРубль ТОГДА МойРегист.ГрафикПогашенияСумма /  КурсыВалютСрезПоследних.Курс
               Иначе (ВЫБРАТЬ
                         КурсыВалютСрезПоследних.Курс
                     ИЗ
                         РегистрСведений.КурсыВалют.СрезПоследних(&КонецПериода,
                         Валюта = втВалют.ВалютаЯчейки
                         ) КАК КурсыВалютСрезПоследних) *  МойРегист.ГрафикПогашенияСумма) / КурсыВалютСрезПоследнихЯчейки.Курс
                Конец
           Конец    
P.S. - Нужно именно в запросе
1 ObjectRelation Model
 
29.12.15
10:33
параметр виртуальной таблицы так не прокатит, условие в соедининение пропиши
2 breezee
 
29.12.15
10:42
ВЫБОР
    КОГДА МойРегист.ВалютаДоговора = втВалют.ВалютаЯчейки ТОГДА КредитныйПортфель.ГрафикПогашенияСумма
    ИНАЧЕ  ВЫБОР
               КОГДА МойРегист.ВалютаДоговора = втВалют.ВалютаРубль ТОГДА МойРегист.ГрафикПогашенияСумма /  КурсыВалютСрезПоследних.Курс
               Иначе (ВЫБРАТЬ
                         КурсыВалют.Курс
                     ИЗ
                         втВалют КАК втВалют
                             ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
                             ПО втВалют.ВалютаЯчейки = КурсыВалют.Валюта) *  МойРегист.ГрафикПогашенияСумма) / КурсыВалютСрезПоследнихЯчейки.Курс
                Конец
           Конец      

Не помогло. Или я не так понял?
3 los_hooliganos
 
29.12.15
10:44
(0) Конвертация валют можно только в хранимой процедуре.
Но это будет в версии 8.4
4 ObjectRelation Model
 
29.12.15
10:44
слишком много условий

достаточно умножить на курс валюты регистра и разделить на курс требуемой валюты, без всяких условий
5 ObjectRelation Model
 
29.12.15
10:45
(3) ХП 1С не сдюжит, как и ООП
6 breezee
 
29.12.15
10:45
(3) Хреново. Мне вообще ни как запросом не выцепить?
7 breezee
 
29.12.15
10:49
(4) НУ так курс валюты регистра мне все равно надо получать прямо в поле.
8 MadJhey
 
29.12.15
11:02
Запрос.Текст =
    "
    |ВЫБРАТЬ
    |    ЕстьNULL(ВЫРАЗИТЬ(&Упаковка КАК Справочник.УпаковкиНоменклатуры).Коэффициент, 1)
    |    * ЕстьNULL(ЦеныНоменклатурыСрезПоследних.Цена,0)/ЕстьNULL(ЦеныНоменклатурыСрезПоследних.Упаковка.Коэффициент,1)
    |    * ВЫБОР
    |        КОГДА &Валюта <> ЦеныНоменклатурыСрезПоследних.Валюта
    |            ТОГДА ВЫБОР
    |                    КОГДА ЕСТЬNULL(КурсыВалютыЦены.Кратность, 0) > 0
    |                        И ЕСТЬNULL(КурсыВалютыЦены.Курс, 0) > 0
    |                        И ЕСТЬNULL(КурсыВалюты.Кратность, 0) > 0
    |                        И ЕСТЬNULL(КурсыВалюты.Курс, 0) > 0
    |                    ТОГДА
    |                        (КурсыВалютыЦены.Курс * КурсыВалюты.Кратность)
    |                        / (КурсыВалюты.Курс * КурсыВалютыЦены.Кратность)
    |                    ИНАЧЕ 0
    |                КОНЕЦ
    |        ИНАЧЕ 1
    |    КОНЕЦ КАК Цена
    |ИЗ
    |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(КОНЕЦПЕРИОДА(&Дата, ДЕНЬ),
    |                ВидЦены = ВЫРАЗИТЬ(&ВидЦены КАК Справочник.ВидыЦен)
    |                И Номенклатура = ВЫРАЗИТЬ(&Номенклатура КАК Справочник.Номенклатура)
    |                И Характеристика = ВЫРАЗИТЬ(&Характеристика КАК Справочник.ХарактеристикиНоменклатуры)
    |) КАК ЦеныНоменклатурыСрезПоследних
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |    РегистрСведений.КурсыВалют.СрезПоследних(&Дата, ) КАК КурсыВалютыЦены
    |ПО
    |    ЦеныНоменклатурыСрезПоследних.Валюта = КурсыВалютыЦены.Валюта
    |    
    |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &Валюта) КАК КурсыВалюты
    |    По Истина
    |";