Имя: Пароль:
1C
1С v8
СКД .Найти цену на период в Регистр сведений ЦеныНоменклатурыСрезПоследних
0 bogdan51
 
03.07.14
13:53
Добрый день.

Не получается выбрать из регистра сведений ЦеныНоменклатурыСрезПоследних цены,которая действовала на дату Регистратора в Регистре накопления

Запрос.
ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход КАК Приход,
    ВЫРАЗИТЬ(ЦеныНоменклатурыСрезПоследнихП.Цена * ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход КАК ЧИСЛО(11, 2)) КАК СуммаПрихода_в_ЗакупочныхЦенах
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты({(&НачалоПериода)}, {(&КонецПериода)}, Регистратор, Движения, ) КАК ТоварыНаСкладахОстаткиИОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних({()}, ВидЦены = &ЦенаЗакупок) КАК ЦеныНоменклатурыСрезПоследнихП
        ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследнихП.Номенклатура
            И ТоварыНаСкладахОстаткиИОбороты.Регистратор.Дата >= ЦеныНоменклатурыСрезПоследнихП.Регистратор.Дата

Буду благодарен за подсказку. Как правильно построить такой запрос в отчете на СКД?
1 Бешеная Нога
 
03.07.14
13:56
нужно обращаться не к ЦеныНоменклатурыСрезПоследних , а к ЦеныНоменклатуры.
Поиском по форуму найдешь кучу примеров решения "ресурс на каждую дату запроса", "цена на дату регистратора"
2 Mitriy
 
03.07.14
14:24
Как-то так:

Запрос.

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

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

СГРУППИРОВАТЬ ПО
    ВТ_Номенклатура.Номенклатура,
    ЦеныНоменклатуры.ТипЦен
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Номенклатура.Номенклатура,
    ВТ_Номенклатура.Приход,
    ВЫРАЗИТЬ(ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) * ВТ_Номенклатура.Приход КАК ЧИСЛО(11, 2)) КАК СуммаПрихода_в_ЗакупочныхЦенах,
    ВТ_Номенклатура.Период
ИЗ
    ВТ_Номенклатура КАК ВТ_Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Периоды КАК ВТ_Периоды
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
            ПО ВТ_Периоды.Период = ЦеныНоменклатуры.Период
                И ВТ_Периоды.Номенклатура = ЦеныНоменклатуры.Номенклатура
                И ВТ_Периоды.ТипЦен = ЦеныНоменклатуры.ТипЦен
        ПО ВТ_Номенклатура.Номенклатура = ВТ_Периоды.Номенклатура
3 Mitriy
 
03.07.14
14:25
ТипЦен на ВидЦены поменяй только...
4 bogdan51
 
03.07.14
16:11
Спасибо.
5 floody
 
03.07.14
16:24
в СКД можно еще через соединение наборов, а так (2)
6 echo77
 
04.07.14
06:34
(5) можно, но это работает как запрос в цикле - не стоит учить людей плохому :)