Имя: Пароль:
1C
 
Запрос: вывод цены на заданную дату
0 Олеся999
 
10.10.17
08:02
Подскажите пожалуйста какое условие нужно задать в запросе, что бы не выводились обведенные на скрине записи?

Скрин : http://img.donnet.ru/i/2017/10/10/5a492d.png


Запрос:
ВЫБPATЬ
    Дoкумeнт1TaбличнaяЧасть1.Сcылка КАК Ccылка,
    Дoкумeнт1TaбличнaяЧасть1.Номенклатура КАК Номенклатура,
    СУММА(Дoкумeнт1TaбличнaяЧасть1.количество) КАК количество
ПOМЕСТИТЬ ВТ
ИЗ
    Дoкумент.Документ1.TaбличнаяЧaсть1 КАК Дoкумeнт1TaбличнaяЧасть1

СГРУППИРОВАТЬ ПО
    Дoкумeнт1TaбличнaяЧасть1.Номенклатура,
    Дoкумeнт1TaбличнaяЧасть1.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Ссылка КАК Ссылка,
    ВТ.Номенклатура КАК Номeнклатура,
    ВТ.количество КАК кoличество,
    РегистрСведений1.Цена КАК Цена
ИЗ
    ВТ КАК ВТ
        ЛЕВОЕ СОЕДИНЕНИЕ PегистрСведений.РегистрСведений1 КАК PeгистрСвeдений1
        ПО ВТ.Номенклатура.Ссылка = РегистрСведений1.Номенклатура.Ссылка
ГДЕ
    PeгистрСвeдений1.Период <= ВТ.Ссылка.Дата

УПOРЯДОЧИТЬ ПО
    PeгистрСвeдений1.Период УБЫВ,
    Ссылка
1 Fram
 
10.10.17
08:06
а почему бы не написать
ПО ВТ.Номенклатура.Ссылка.Ссылка.Ссылка.Ссылка = РегистрСведений1.Номенклатура.Ссылка.Ссылка.Ссылка.Ссылка
2 Fram
 
10.10.17
08:07
(0) а по поводу вопроса погугли виртуальные таблицы срезов
3 catena
 
10.10.17
08:08
Не, гуглить надо срез последних на каждую дату.
4 Fram
 
10.10.17
08:09
(3) зачем на каждую?
5 Олеся999
 
10.10.17
08:11
(1) ну да что то лишканула :))
6 мистер игрек
 
10.10.17
08:32
(5) EУ меня есть отчет на СКД. Вдруг поможет?
7 catena
 
10.10.17
08:35
(4)Потому что, судя по запросу, ей надо на дату каждого документа
8 Олеся999
 
10.10.17
08:35
Попробовала так :


ВЫБРАТЬ
    Дoкумeнт1TaбличнaяЧасть1.Ссылка КАК Ссылка,
    Дoкумeнт1TaбличнaяЧасть1.Номенклатура КАК Номенклатура,
    СУММА(Дoкумeнт1TaбличнaяЧасть1.количество) КАК количество
ПOМЕСТИТЬ ВТ

ИЗ
    Документ.Документ1.ТабличнаяЧасть1 КАК Документ1ТабличнаяЧасть1

СГРУППИРОВАТЬ ПО
    Дoкумeнт1TaбличнaяЧасть1.Номенклатура,
    Дoкумeнт1TaбличнaяЧасть1.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Ссылка КАК Ссылка,
    ВТ.Номенклатура КАК Номенклатура,
    ВТ.количество КАК количество,
    РегистрСведений1.Цена КАК Цена
ИЗ
    ВТ КАК ВТ
        ЛЕВОЕ СОЕДИНЕНИЕ PeгистрСведений.PeгистрСведений1 КАК PeгистрСведений1
        ПО ВТ.Номенклатура.Ссылка = PeгистрСведений1.Номенклатура.Ссылка
            И ВТ.Ссылка.Дата <= PeгистрСведений1.Период

УПОРЯДОЧИТЬ ПО
    РегистрСведений1.Период УБЫВ,
    Ссылка





Скрин: http://img.donnet.ru/i/2017/10/10/31a5486.png

Но нет цены, так полагаю что что то с группировками не так
9 Олеся999
 
10.10.17
08:36
(7) Да верно цену надо на дату каждого документа
10 catena
 
10.10.17
08:38
(9)Срез последних на каждую дату.

1. Делаешь таблицу номенклатур и дат
2. Под эти даты находишь МАКСИМУМ период в регистре
3. к найденому периоду регистра находишь значение в регистре.
11 Mankubus
 
10.10.17
08:41
В СКД можно наборами данных решить
http://catalog.mista.ru/public/77568/
12 Олеся999
 
10.10.17
08:51
(10) Так вот ?))

ВЫБРАТЬ
    Дoкумeнт1TaбличнaяЧасть1.Ссылка КАК Ссылка,
    Дoкумeнт1TaбличнaяЧасть1.Номенклатура КАК Номенклатура,
   СУММА(Дoкумeнт1TaбличнaяЧасть1.количество) КАК количество
ПОМЕСТИТЬ ВТ
ИЗ
    Документ.Документ1.ТабличнаяЧасть1 КАК Дoкумeнт1TaбличнaяЧасть1

СГРУППИРОВАТЬ ПО
    Документ1ТабличнаяЧасть1.Номенклатура,
    Документ1ТабличнаяЧасть1.Ссылка
;

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

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

УПОРЯДОЧИТЬ ПО
    Ссылка
13 Fram
 
10.10.17
08:53
(12) нет, так ты получишь максимальную дату для каждой конкретной цены (не типа цен, а именно цены)
14 catena
 
10.10.17
09:02
(12)Сначала нужно найти максимум период в разрезе номенклатура/дата. Я ж не зря этот пункт отдельно написала.
15 Олеся999
 
10.10.17
09:07
(14) Добавила вот

ВЫБРАТЬ
    Документ1ТабличнаяЧасть1.Ссылка КАК Ссылка,
    Документ1ТабличнаяЧасть1.Номенклатура КАК Номенклатура,
    СУММА(Документ1ТабличнаяЧасть1.количество) КАК количество,
    МАКСИМУМ(Документ1ТабличнаяЧасть1.Ссылка.Дата) КАК Дата
ПОМЕСТИТЬ ВТ
ИЗ
    Документ.Документ1.ТабличнаяЧасть1 КАК Документ1ТабличнаяЧасть1

СГРУППИРОВАТЬ ПО
    Документ1ТабличнаяЧасть1.Ссылка,
    Документ1ТабличнаяЧасть1.Номенклатура
;

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

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

УПОРЯДОЧИТЬ ПО
    Ссылка
16 catena
 
10.10.17
09:11
(15)И снова мимо. Не максимум дат документов, а максимум периодов регистра тебе нужен.
17 Олеся999
 
10.10.17
09:14
(16) Так вот же максимум период регистра  МАКСИМУМ(РегистрСведений1.Период) КАК Период
18 catena
 
10.10.17
09:14
Выбрать Номенклатура, ДатаДок поместить ВтНоменклатураСДатойДляСреза;
Выбрать Номенклатура, ДатаДок, Максимум(Период) поместить ВтНоменклатураСПЕриодомСреда
из ВтНоменклатураСДатойДляСреза левое соединение регистр по
номенклатура=номенклатура и ДатаДок>=Период;
Выбрать Номенклатура, Цена
из ВтНоменклатураСПЕриодомСреда левое соединение регистр по
номенклатура=номенклатура и ПериодМакс=Период
19 catena
 
10.10.17
09:14
(17)В РАЗРЕЗЕ НОМЕНКЛАТУРА/ДАТА, а у тебя там еще и цена болтается.
20 Олеся999
 
10.10.17
09:28
(18)


ВЫБРАТЬ
    Документ1ТабличнаяЧасть1.Ссылка КАК Ссылка,
    Документ1ТабличнаяЧасть1.Номенклатура КАК Номенклатура,
    СУММА(Документ1ТабличнаяЧасть1.количество) КАК количество,
    МАКСИМУМ(Документ1ТабличнаяЧасть1.Ссылка.Дата) КАК Дата
ПОМЕСТИТЬ ВТ
ИЗ
    Документ.Документ1.ТабличнаяЧасть1 КАК Документ1ТабличнаяЧасть1

СГРУППИРОВАТЬ ПО
    Документ1ТабличнаяЧасть1.Ссылка,
    Документ1ТабличнаяЧасть1.Номенклатура
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Номенклатура КАК Номенклатура,
    ВТ.количество КАК количество,
    ВТ2.Цена КАК Цена
ИЗ
    ВТ КАК ВТ
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2
        ПО ВТ.Номенклатура = ВТ2.Номенклатура
            И ВТ.Дата = ВТ2.Период
21 catena
 
10.10.17
09:42
(20)Плохо. Фу.

Где группировка во втором запросе?
Где соединение с РЕГИСТРОМ в третьем запросе?
Ну и максимум по дате документа хуже не делает, конечно, но и смысловой нагрузки не несет.
22 Олеся999
 
10.10.17
09:51
ДА точно, сейчас добавила группировку, а связи то есть вот :

ВТ КАК ВТ
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2
        ПО ВТ.Номенклатура = ВТ2.Номенклатура
            И ВТ.Дата = ВТ2.Период
Мы же делаем ВТ левое соединение ВТ2 или я ошибаюсь ?

Запрос:

(21) ВЫБРАТЬ
    Документ1ТабличнаяЧасть1.Ссылка КАК Ссылка,
    Документ1ТабличнаяЧасть1.Номенклатура КАК Номенклатура,
    СУММА(Документ1ТабличнаяЧасть1.количество) КАК количество,
    МАКСИМУМ(Документ1ТабличнаяЧасть1.Ссылка.Дата) КАК Дата
ПОМЕСТИТЬ ВТ
ИЗ
    Документ.Документ1.ТабличнаяЧасть1 КАК Документ1ТабличнаяЧасть1

СГРУППИРОВАТЬ ПО
    Документ1ТабличнаяЧасть1.Ссылка,
    Документ1ТабличнаяЧасть1.Номенклатура
;

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Номенклатура КАК Номенклатура,
    ВТ.количество КАК количество,
    ВТ2.Цена КАК Цена
ИЗ
    ВТ КАК ВТ
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2
        ПО ВТ.Номенклатура = ВТ2.Номенклатура
            И ВТ.Дата = ВТ2.Период
23 catena
 
10.10.17
09:58
(22)Нету связи.
Связь должна быть с регистром.
Связь должна быть с регистром.
Связь должна быть с регистром.
Связь должна быть с регистром.
Связь должна быть с регистром.


И про второй запрос: подумай, что будет, если номенклатуре не установили цену?
24 Олеся999
 
10.10.17
10:03
(23) Связь ВТ2 с регистром ?)
25 catena
 
10.10.17
10:06
(24)Малыш, я ж тебе в (18) дословно написала в каком месте и с чем. Перечитай.
26 Олеся999
 
10.10.17
10:30
(25)

ВЫБРАТЬ
    Документ1ТабличнаяЧасть1.Ссылка.Дата КАК Дата,
    Документ1ТабличнаяЧасть1.Номенклатура КАК Номенклатура,
    Документ1ТабличнаяЧасть1.количество КАК количество,
    Документ1ТабличнаяЧасть1.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТ
ИЗ
    Документ.Документ1.ТабличнаяЧасть1 КАК Документ1ТабличнаяЧасть1
;

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

СГРУППИРОВАТЬ ПО
    РегистрСведений1.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РегистрСведений1.Номенклатура КАК Номенклатура,
    РегистрСведений1.Цена КАК Цена
ИЗ
    ВТ2 КАК ВТ2
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСведений1 КАК РегистрСведений1
        ПО ВТ2.Номенклатура = РегистрСведений1.Номенклатура
            И ВТ2.Период = РегистрСведений1.Период
27 Олеся999
 
10.10.17
10:32
Все по инструкции вроде бы сделала ))
28 catena
 
10.10.17
10:52
ВЫБРАТЬ
    Документ1ТабличнаяЧасть1.Ссылка.Дата КАК Дата,
    Документ1ТабличнаяЧасть1.Номенклатура КАК Номенклатура,
    Документ1ТабличнаяЧасть1.количество КАК количество,
    Документ1ТабличнаяЧасть1.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТ
ИЗ
    Документ.Документ1.ТабличнаяЧасть1 КАК Документ1ТабличнаяЧасть1
;

////////////////////////////////////////////////////////////////////////////////

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

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

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВТ2.Номенклатура КАК Номенклатура,
    РегистрСведений1.Цена КАК Цена
ИЗ
    ВТ2 КАК ВТ2
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСведений1 КАК РегистрСведений1
        ПО ВТ2.Номенклатура = РегистрСведений1.Номенклатура
            И ВТ2.Период = РегистрСведений1.Период
29 VS-1976
 
10.10.17
11:01
Олеся999 не сдавайся
30 Fram
 
10.10.17
17:05
(27) тут надо не по инструкции. Тут надо своим умом дойти.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой