Добрый день.
1С8,2 Альфа-Авто 4.1
Валюта управл. = USD
Валюта регл. = ГРН
Справочник валюты
USD
ГРН
ЕВРО
РУБ
Сейчас пересчет производится в цикле через вызов штатной функции.
Подскажите пожалуйста, как правильно выполнить пересчет значений по курсу в указанной(ых) валюте(ах) непосредственно в запросе.
Замечена такая закономерность, что пересчет между USD и ГРН производится "напрямую", а вот остальные валюты рассчитываются через ГРН.
Например чтобы получить цену в РУБ, цена в USD умножается на курс ГРН и делится на курс РУБ (2,55*28/0,5 = 142.8)
Делаю таким образом (в данном случае пересчитывается себестоимость)
ВЫБРАТЬ
ПартииТоваровКомпанииОстатки.Номенклатура,
ПартииТоваровКомпанииОстатки.СуммаУпрОстаток * КурсыВалютСрезПоследних.Курс/ПартииТоваровКомпанииОстатки.КоличествоОстаток КАК СуммаДол,
0 КАК СуммаГрн,
0 КАК СуммаЕвр,
0 КАК СуммаРуб,
ПартииТоваровКомпанииОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсыВалютСрезПоследних
ПО (КурсыВалютСрезПоследних.Валюта = &ВалютаДол)
ГДЕ
ПартииТоваровКомпанииОстатки.Номенклатура = &Номенклатура
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПартииТоваровКомпанииОстатки.Номенклатура,
0,
ПартииТоваровКомпанииОстатки.СуммаУпрОстаток * КурсыВалютСрезПоследних.Курс/ПартииТоваровКомпанииОстатки.КоличествоОстаток,
0,
0,
ПартииТоваровКомпанииОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсыВалютСрезПоследних
ПО (КурсыВалютСрезПоследних.Валюта = &ВалютаГрн)
ГДЕ
ПартииТоваровКомпанииОстатки.Номенклатура = &Номенклатура
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПартииТоваровКомпанииОстатки.Номенклатура,
0,
0,
ПартииТоваровКомпанииОстатки.СуммаУпрОстаток * КурсыВалютСрезПоследних.Курс/ПартииТоваровКомпанииОстатки.КоличествоОстаток,
0,
ПартииТоваровКомпанииОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсыВалютСрезПоследних
ПО (КурсыВалютСрезПоследних.Валюта = &ВалютаЕвро)
ГДЕ
ПартииТоваровКомпанииОстатки.Номенклатура = &Номенклатура
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПартииТоваровКомпанииОстатки.Номенклатура,
0,
0,
0,
ПартииТоваровКомпанииОстатки.СуммаУпрОстаток * КурсыВалютСрезПоследних.Курс/ПартииТоваровКомпанииОстатки.КоличествоОстаток,
ПартииТоваровКомпанииОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсыВалютСрезПоследних
ПО (КурсыВалютСрезПоследних.Валюта = &ВалютаРуб)
ГДЕ
ПартииТоваровКомпанииОстатки.Номенклатура = &Номенклатура
Номенклатура СуммаДол СуммаГрн СуммаЕвр СуммаРуб
Фильтр маслянный ( 26300-35505 ) 76,174723
Фильтр маслянный ( 26300-35505 ) 2,720526
Фильтр маслянный ( 26300-35505 ) 81,615775
Фильтр маслянный ( 26300-35505 ) 1,142621
При этом значения СуммаДол должна соответствовать 2,720526, а СуммаГрн - 76,174723 - ну тут наверное можно переподставить валюты в этих запросах.
СуммаЕвр - вроде нормально.
Но вот СуммаРуб - тут неверно считает, т.к. должно быть 181,368375.
В валютах у Руб курс выставлен 0,42 - это видимо связано с тем, что УпрВалюта = Доллар, а РеглВалюта = ГРН.
Думаю, что если бы Упр и Регл валюты были ГРН, то такой проблемы не возникло.
Подскажите пожалуйста, как можно этот момент обойти?
P.S. В данном примере все валюты я объединил в одном запросе, но на самом деле валюта будет одна. Она будет выбираться в ПолеВыбора и передаваться в запрос параметром.
Думаю с Евро и Грн не должно возникнуть проблем, но с Руб будут неверно считаться суммы.