Имя: Пароль:
1C
1С v8
Помогите переделать запрос
0 breezee
 
30.05.15
11:49
Есть запрос, который выбирает текущую цену номенклатуру, цена которой изменялась за период, текущую цену и предпоследнюю цену для этой номенклатуры, а потом выводит количество номенклатры. Как его переделать чтобы он вбирал то же самое, только столько же раз сколько регистраторов у него было за период, т.е. если цена за период изменялась 2 раза - нужно выбрать эти 2 документа, вывести номенклатуру для них, даже если она одинаковая, вывести цену на номенклутуру на момент докумнта и предпоследнюю цену. Исходный запрос

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    втЦеныНоменклатуры.Номенклатура,
    ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) КАК ЦенаСтарая,
    втЦеныНоменклатуры.Цена КАК ЦенаНовая,
    втЦеныНоменклатуры.Цена - ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) КАК Разница,
    втЦеныНоменклатуры.Регистратор,
    втЦеныНоменклатуры.Характеристика
ПОМЕСТИТЬ ВыборкаБезКоличества
ИЗ
    втЦеныНоменклатуры КАК втЦеныНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        ПО втЦеныНоменклатуры.Номенклатура = ЦеныНоменклатуры.Номенклатура
            И втЦеныНоменклатуры.ПредыдущаяДата = ЦеныНоменклатуры.Период
            И (ЦеныНоменклатуры.ВидЦены = &ВидЦены)
            И втЦеныНоменклатуры.Характеристика = ЦеныНоменклатуры.Характеристика
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВыборкаБезКоличества.Номенклатура,
    ВыборкаБезКоличества.ЦенаСтарая,
    ВыборкаБезКоличества.ЦенаНовая,
    ВыборкаБезКоличества.Разница,
    ВыборкаБезКоличества.Регистратор,
    ВыборкаБезКоличества.Характеристика,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) КАК Остаток
ИЗ
    ВыборкаБезКоличества КАК ВыборкаБезКоличества
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
        ПО ВыборкаБезКоличества.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
            И ВыборкаБезКоличества.Характеристика = ТоварыНаСкладахОстатки.Характеристика
1 breezee
 
30.05.15
11:56
(0) Ут 11, забыл написать
2 breezee
 
30.05.15
12:14
АП
3 breezee
 
30.05.15
12:52
В общем вот у меня выбирается последняя номенклатура и предпоследняя цена для неё в первой аблице и те позиции для которой нужно найти предпоследнюю цену во второй таблице

http://i.imgur.com/WdBdNoC.png
4 breezee
 
30.05.15
13:03
Получается мне нужно для каждого поля из 2 таблицы полчать остатки, я пытлся сделать это вложенным запросом - не получилось, может подкинете идею, пожалуйста?)
5 RomanYS
 
30.05.15
13:09
тебе нужно получать остатки на моменты изменения цены?

По твоим темам мало понятно, что тебе надо и что у тебя не получается.
6 breezee
 
30.05.15
13:23
(5) Да, но вначле мне нужно на момент изменения цен полчить еще и предыдущую цену на номенклатуру
7 breezee
 
30.05.15
13:37
АП!
8 RomanYS
 
30.05.15
13:48
(6) если и это у тебя до сих пор не получилось, то вряд ли какие-то советы помогут тебе осилить задачу с остатками.

По остаткам: соединяя таблицу ОстаткиИОбороты саму с собой получить ВТ с периодом изменения остатка. Потом соединить
с ценами
по Цена.Период между ВТ.Период и ВТ.ПериодИзменения

Идея такова
9 breezee
 
30.05.15
14:18
(8) Я вроде понял - так получим все изменения на каждый преиод в указанном отрзке времени и потом просто добавм туда цены. Но для того чтобы получить цены нужно так же получить все прериоды из физической таблицы(просто запрос к физ. таблицы за период), потом найти максимально приближенное не последние значение - выбираю по финкции МАКСИМУМ(период таблицы физической) - полусются даты таким образом предпоследняя, последняя; предпоследняя, последняя; ...
Потом для каждой даты я выбираю цену - просто свзяь с физической таблицей и таблицей дат и из полученной таблицы я выбираю(вот тут финя полчается)предпоследний период, послдний период и только одно значение из цены, потому что нельзя же установить свзяь таблиц сразу по двум периодам чтобы мне выдавались цены на оба период
10 Sj
 
31.05.15
01:14
Добавь еще одну такую же таблицу и её соединяй по второму периоду