Имя: Пароль:
1C
1С v8
Срез последних на каждую дату в СКД и в запросе
,
0 alpha78
 
24.09.15
13:31
добрый день, коллеги
хочу создать отчет, в котором отображаются приходные накладные, суммы в инвалюте. Нужно в отчете добавить колонку с курсом валют и расчитать сумму в нац.валюте
Особая сложность - курс валюты.
Для каждого документа есть дата создания. Так вот для каждого документа нужно получить актуальный на дату создания документа курс валют с периодического регистра сведений - КурсыВалют
Вот создал запрос, состоящий из 2 временных таблиц
В результате в колонке "Курсы валют" ничего нет
Помогите, пожалуйста, может что-то не то делаю
Заранее спасибо. Удачи Вам в программированию.
PS Делал путем создания двух наборов записей и их соединения - тот же эффект

ВЫБРАТЬ
    ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор КАК ПриходнаяНакладная,
    ПартииТоваровНаСкладахОстаткиИОбороты.Период КАК Дата,
    ПартииТоваровНаСкладахОстаткиИОбороты.СуммаПриход КАК СуммаUSD
ПОМЕСТИТЬ втБезКурса
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(, , Регистратор, , ) КАК ПартииТоваровНаСкладахОстаткиИОбороты

СГРУППИРОВАТЬ ПО
    ПартииТоваровНаСкладахОстаткиИОбороты.Период,
    ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор,
    ПартииТоваровНаСкладахОстаткиИОбороты.СуммаПриход

ИНДЕКСИРОВАТЬ ПО
    Дата,
    ПриходнаяНакладная,
    СуммаUSD
;

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

СГРУППИРОВАТЬ ПО
    втБезКурса.Дата,
    втБезКурса.ПриходнаяНакладная,
    втБезКурса.СуммаUSD,
    КурсыВалютСрезПоследних.Период

ИНДЕКСИРОВАТЬ ПО
    ПриходнаяНакладная,
    Период,
    Дата,
    СуммаUSD
;

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

УПОРЯДОЧИТЬ ПО
    ПриходнаяНакладная
1 zhig75
 
24.09.15
13:33
Срез последних на каждую дату в запросе только через физические таблицы. В СКД два набора данных во второй передается параметром период.
2 The_SpecialOne
 
24.09.15
13:44
Была такая же задача.
Не знаю насколько это оптимально, но вот так сделал:

ВЫБРАТЬ
    ПоступлениеТоваровУслуг.Ссылка,
    ПоступлениеТоваровУслуг.Дата,
    ПоступлениеТоваровУслуг.ВалютаДокумента,
    КурсыВалют.Курс,
    КурсыВалют.Кратность
ИЗ
    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
        ПО (КурсыВалют.Период В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    КурсыВалют.Период
                ИЗ
                    РегистрСведений.КурсыВалют КАК КурсыВалют
                ГДЕ
                    КурсыВалют.Валюта = ПоступлениеТоваровУслуг.ВалютаДокумента
                    И КурсыВалют.Период <= ПоступлениеТоваровУслуг.Дата
                УПОРЯДОЧИТЬ ПО
                    КурсыВалют.Период УБЫВ))
            И (КурсыВалют.Валюта = ПоступлениеТоваровУслуг.ВалютаДокумента)
3 Nuobu
 
24.09.15
13:58
4 bolobol
 
24.09.15
14:03
(2) Вау! Даже в книгу знаний внесли!
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс