Имя: Пароль:
1C
1С v8
УТ11 Помогите с запросом, еще раз, пожалуйста
0 breezee
 
27.05.15
07:57
Извините что создаю 3 тему за 2 дня, просто вообще не могу разобраться. Мне помогли с запросом.  В итоге у меня должны получится цены номенклатуры за прошлый период относительно даты конца и за текущий, этот запрос получает будущие данные, не могу понять где ошибка + не могу понять где ставить ограничение на начальный период (пользователь выбирает переоценки с какой-то по какую-то дату)
ВЫБРАТЬ
    ЦеныНоменклатуры.ВидЦены,
    ЦеныНоменклатуры.Номенклатура,
    ЦеныНоменклатуры.Характеристика,
    МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период,
    ЦеныНоменклатурыСрезПоследних.Цена
ПОМЕСТИТЬ втПредпослПериод
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКонец, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
        ПО ЦеныНоменклатуры.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
            И ЦеныНоменклатуры.ВидЦены = ЦеныНоменклатурыСрезПоследних.ВидЦены
            И ЦеныНоменклатуры.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика
            И ЦеныНоменклатуры.Период < ЦеныНоменклатурыСрезПоследних.Период
ГДЕ
    ЦеныНоменклатуры.ВидЦены = &ВидЦены

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЦеныНоменклатуры.ВидЦены,
    ЦеныНоменклатуры.Номенклатура,
    ЦеныНоменклатуры.Характеристика,
    ЦеныНоменклатуры.Период,
    ЦеныНоменклатуры.Цена,
    ЦеныНоменклатуры.Регистратор,
    втПредпослПериод.Цена КАК ЦенаСтарая
ИЗ
    втПредпослПериод КАК втПредпослПериод
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        ПО втПредпослПериод.ВидЦены = ЦеныНоменклатуры.ВидЦены
            И втПредпослПериод.Номенклатура = ЦеныНоменклатуры.Номенклатура
            И втПредпослПериод.Характеристика = ЦеныНоменклатуры.Характеристика
            И втПредпослПериод.Период = ЦеныНоменклатуры.Период
ГДЕ
    ЦеныНоменклатуры.ВидЦены = &ВидЦены
1 DCKiller
 
27.05.15
08:02
Что значит " за прошлый период относительно даты конца "?
2 breezee
 
27.05.15
08:05
(1) Простите, криво написал. Предпоследнюю цену товара - относительно последнего документа "Установка цен номенклатуры", в котором для данной номенклатуры устанавливались цены и оттуда брать старую цену
3 breezee
 
27.05.15
08:19
Вот чёрт, я только что нашел в гугле то что пытался сделать сам. Думаю вывод этой истории - я  идиот.
4 marty0701
 
27.05.15
08:54
(3)Аплодирую стоя, самокритика очень хорошее качество.
5 breezee
 
27.05.15
09:02
Нет, ни черта не работает. В тестовой базе задаю цену на вентилятор следующие цены
21.05.2015 2115р
23.05.2015 2315р
25.05.2015 2515р.
делаю выборку на 21 число выбирается цена 2115 - старая 2515 для всех выбирается текущее значение нормально, а предыдущее 2515. Что за фигня? Все брал из гугла, вот запрос

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    втЦеныНоменклатуры.Номенклатура,
    втЦеныНоменклатуры.Цена,
    ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) КАК ПредыдущаяЦена,
    ЦеныНоменклатуры.Регистратор
ИЗ
    втЦеныНоменклатуры КАК втЦеныНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        ПО втЦеныНоменклатуры.Номенклатура = ЦеныНоменклатуры.Номенклатура
            И втЦеныНоменклатуры.ПредыдущаяДата = ЦеныНоменклатуры.Период
            И (ЦеныНоменклатуры.ВидЦены = &ВидЦены)
ГДЕ
    ЦеныНоменклатуры.Номенклатура = &Номенклатура
6 breezee
 
27.05.15
09:07
Все, там в запросе было <>,а не < в сусловиях связи, если у кого есть акк на инфорстарте - сообщите пожалуйста автору об описке http://catalog.mista.ru/public/185506/
7 Desna
 
27.05.15
09:21
этот запрос из серии множества "срез последних на каждую дату"
8 СвинТуз
 
27.05.15
09:30
(6)
Если не через срез последних
то решение подобной задачи есть в книге
там где общие механизмы платформы описываются
(справочники, регистры накопления и т.п.)
9 breezee
 
27.05.15
09:32
И последний вопрос, я так понял, когда ставлю  ЕСТЬNULL, - поле становится функцией и для него формат теряется, можно ли как-то в СКД вывести для него 2 знака после заятой?
10 breezee
 
27.05.15
09:36
Нашел формат. Надеюсь больше проблем не будет. Всем спасибо.
11 Cyberhawk
 
27.05.15
09:39
(6) у автора все правильно, т.к. у него таблица среза последних не ограничивается параметром-датой, в этом случае всегда берется последняя запись таблицы, и поэтому можно использовать "<>" (т.к. записей с большей датой, чем самая последняя, в регистре нет)
12 breezee
 
27.05.15
09:42
(11) Ок, просто было бы логичнее все равно поставить знак меньше, просто следую обычной логике, мне кажется.

Как можно добавить нумератор в выборку? Т.е. у меня для каждой строки стоит цифра
13 breezee
 
27.05.15
10:02
Т.е. У меня есть несколько документов - регистраторов  по которому идет группировка для этих документов есть номенклатура - при построении отчете - выбираю системные поля - нумератор в группировке и все нормально для не группируемых полей, можно как-нибудь нумеровать поля по которым идет группировка?