Имя: Пароль:
1C
 
УТ11 Установка цен номенклаутры. Как выбирать предпоследнюю запись цены
0 breezee
 
25.05.15
13:01
В УТ11 Во внешнем отчете нужно выбрать последнюю цену и предпоследнюю на определенную дату. Как это сделать? Как просто выбирать последнюю - понятно, но как на предпоследнюю? Вот запрос на последнюю цену(потом еще установлю условие на тип цен- пока что это не основная проблема)
ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Цена,
    ЦеныНоменклатурыСрезПоследних.ВидЦены
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Период = &Период) КАК ЦеныНоменклатурыСрезПоследних
1 Maniac
 
25.05.15
13:02
замучаешся
2 Maniac
 
25.05.15
13:03
только выборкой в цикле запросом каждой позиции
3 Maniac
 
25.05.15
13:03
и не через срез последних
4 breezee
 
25.05.15
13:04
(3) Понятно, будут через объект в СКД делать, спасибо.
5 mehfk
 
25.05.15
13:10
(2) Зачем херню советуешь?
6 breezee
 
25.05.15
13:12
(5) Скажи как правильно, пожалуйста!
7 Basilio
 
25.05.15
13:18
ВЫБРАТЬ
    ЦеныНоменклатуры.ВидЦены,
    ЦеныНоменклатуры.Номенклатура,
    ЦеныНоменклатуры.Характеристика,
    МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период
ПОМЕСТИТЬ втПредпослПериод
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
        ПО ЦеныНоменклатуры.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
            И ЦеныНоменклатуры.ВидЦены = ЦеныНоменклатурыСрезПоследних.ВидЦены
            И ЦеныНоменклатуры.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика
            И ЦеныНоменклатуры.Период < ЦеныНоменклатурыСрезПоследних.Период
ГДЕ
    ЦеныНоменклатуры.ВидЦены = &ВидЦены

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЦеныНоменклатуры.ВидЦены,
    ЦеныНоменклатуры.Номенклатура,
    ЦеныНоменклатуры.Характеристика,
    ЦеныНоменклатуры.Период,
    ЦеныНоменклатуры.Цена
ИЗ
    втПредпослПериод КАК втПредпослПериод
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        ПО втПредпослПериод.ВидЦены = ЦеныНоменклатуры.ВидЦены
            И втПредпослПериод.Номенклатура = ЦеныНоменклатуры.Номенклатура
            И втПредпослПериод.Характеристика = ЦеныНоменклатуры.Характеристика
            И втПредпослПериод.Период = ЦеныНоменклатуры.Период
ГДЕ
    ЦеныНоменклатуры.ВидЦены = &ВидЦены
8 breezee
 
25.05.15
13:22
(7) БОЛЬШУЩИЕ СПАСИБО!  Сейчас разберусь как работает только)
9 Basilio
 
25.05.15
13:22
здесь правда не будет товаров, для которых предпоследней цены нет (т.е. указана цена только 1 раз). Их несложно добавить соединением со срезом последних.
10 Cyberhawk
 
25.05.15
13:34
(8) "Сейчас разберусь как работает" // в свое время начала карьеры попотел, разбираясь с такого рода запросами, поэтому немного помогу с объяснением:
1. Сначала во временную таблицу втПредпослПериод выбираем данные из соединения двух таблиц: полной (ЦеныНоменклатуры) и среза последних, но на их соединение накладываем условие: чтобы в полной таблице период был меньше, чем в периоде среза последних. И группируем все записи из полной таблицы по максимальному периоду. Тем самым получаем для каждого товара (точнее комбинации товар-видцены-характеристика) предпоследний период.
2. Ну а далее из полной таблицы ЦеныНоменклатуры выбираем значение ресурса с соединением по этому предпоследнему периоду.
11 breezee
 
25.05.15
13:37
(10) БООООЛЬШУЩЕЕ СПАСИБО! Я хотел ссам спросить) ибо не понял с максимумом, у меня были идеи когда услышал задание что нужно было брать из среза последних последние значение и (тут я хотел брать последнее из среза первых, но понял ошибку), еще раз спасибо!
12 breezee
 
25.05.15
14:36
Еще раз всем спасибо! Добра Вам!