Имя: Пароль:
1C
1С v8
Как в запросе выбрать из периодического регистра сведений за период..
,
0 realevgenius
 
31.01.17
22:59
Всем - привет!

Начинающий, сильно не ругайте.

Задачка, например, есть несколько документов Покупка, с табличными частями.
Надо проставить цены из регистра сведений. Но дата среза должна равняться дате очередного документа.

Типа такого текста запроса - не работает, значение null.

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

Помогите, люди добрые?! Спасибо!
1 mkalimulin
 
31.01.17
23:04
Это называется "срез последних на каждую дату в запросе".
Можно посмотреть тут:
Книга знаний: Срез последних на каждую дату в запросе
и в гугле.
Пользуйтесь конструктором JUG. Там есть библиотека шаблонов (и этот случай тоже).
http://catalog.mista.ru/public/569569/
2 realevgenius
 
31.01.17
23:07
Спасибо!

Полез читать!
Пробовал гуглить, но, видимо сформулировал неправильно
3 Fram
 
31.01.17
23:09
(1) необязательно.
(0) соединяй с основной таблицей регистра а не виртуальной с условием ДатаДока >= ПериодРегистра. потом Максимум по Периоду Регистра
4 Fram
 
31.01.17
23:10
Потом по этому периоду опять соединяешь с регистром и получаешь цены
5 realevgenius
 
31.01.17
23:17
(4) Честно, не осилил... Что и как соединять... Опыта нет...(((
6 Fram
 
31.01.17
23:18
(5) а как  ты (0) наваял?
7 realevgenius
 
31.01.17
23:23
(6) Ну вот, что-то с чем-то слепил... )) Я делал подобное, но приходилось в одном запросе выборку сделать, потом в выборке получать цену из другого запроса, подставляя дату... Чушь, в общем.... Попытался соединить...
8 Fram
 
31.01.17
23:26
(7) извини, но тогда это получается "не по Сеньке шапка". не способен ты еше писать такие запросы.
попроси у шефа задание попроще.
9 realevgenius
 
31.01.17
23:27
(8) Ну, вот, стараюсь понять, вникнуть... Тебе хорошо, ты уже при рождении писал запросы любые... ))
10 realevgenius
 
31.01.17
23:32
Почитал статьи... Профи пишет как это делается, не вдаваясь в подробности, видимо для других профи. Ценность статьи с точки зрения обучения = "0", ибо начинающий не поймет, а для профи оно не надо, им итак все известно... )))
11 Fram
 
31.01.17
23:32
(9) алгоритм я описал:
- соединяешь документ с регистром (не срез последних!) по ДатаВходДока >= ПериодРегистра
- вычисляешь максимальную (последнюю дату) для каждого набора данных
- результат соединяешь опять с регистром и получаешь цены

дальше сам
12 realevgenius
 
31.01.17
23:39
(11) ВЫБРАТЬ
    ВложенныйЗапрос.Ссылка,
    ВложенныйЗапрос.Номенклатура,
    ЦеныНоменклатуры.Цена
ИЗ
    (ВЫБРАТЬ
        ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка,
        ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
        МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период
    ИЗ
        Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
            ПО ПоступлениеТоваровУслугТовары.Номенклатура = ЦеныНоменклатуры.Номенклатура
                И ПоступлениеТоваровУслугТовары.Ссылка.ДатаВходящегоДокумента >= ЦеныНоменклатуры.Период
    ГДЕ
        ПоступлениеТоваровУслугТовары.Ссылка.Дата >= &Дата1
        И ПоступлениеТоваровУслугТовары.Ссылка.Дата <= &Дата2
    
    СГРУППИРОВАТЬ ПО
        ПоступлениеТоваровУслугТовары.Ссылка,
        ПоступлениеТоваровУслугТовары.Номенклатура) КАК ВложенныйЗапрос
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        ПО ВложенныйЗапрос.Номенклатура = ЦеныНоменклатуры.Номенклатура
            И ВложенныйЗапрос.Период = ЦеныНоменклатуры.Период
13 Fram
 
31.01.17
23:41
(12) можешь когда захочешь ))
половину вознаграждения мне
14 realevgenius
 
31.01.17
23:42
(13) Ок! "0" / 2 = "0" )))
Но могу сказать  - Спасибо большое! )))
15 Fram
 
31.01.17
23:43
(12) Тип цены наверно еще должен быть. И единицу измерения цены учесть не забудь
16 realevgenius
 
31.01.17
23:44
Статья на Мисте - ни о чем...
Вот больмене https://helpf.pro/faq/view/964.html
Ну и Fram  - спасибо!
17 realevgenius
 
31.01.17
23:45
(15) Да, это понятно... Там много чего...
Прицепить не мог саабразить как
18 Fram
 
31.01.17
23:46
(16) Срез на кажлый день это бред неприменимый в реальной жизни. за 20 лет в 1С ни разу не понадобилось
19 realevgenius
 
31.01.17
23:49
(18) Ну например, задача - проверять входящие цены, сравнивая с установленными... Не зашкаливают ли... Проверять в каждом документе, на дату не документа, а поставщика... Давай сотовый, могу денег закинуть за подсказку, кстаьт..
20 Fram
 
31.01.17
23:51
(19) я не про твою задачу, я про буквальный срез на каждый день
21 realevgenius
 
31.01.17
23:53
(20) Ну у мя тоже была мысля сделать вложенный запрос, с каждодневным срезом... ))))Но, глупость, канешн
Ошибка? Это не ошибка, это системная функция.