Имя: Пароль:
1C
1C 7.7
v7: подскажите по прямому запросу
0 monsterZE
 
13.08.13
17:45
смысл замута - достать последние приходные цены на товар относительно документа реализации.. т.е. реализация от 01-05-2013, приходы на товар1 от 01-03, 02-04, 15-04 - нужна цена из 15-04

    ТекстЗапроса = "
    |SELECT
    |     Жур.IDDoc as [Док $Документ.ПриходнаяНал]
    |    ,$ДокСтр.Товар as [Товар $Справочник.Товары]
    |    ,$ДокСтр.Цена as Цена
    |FROM
    |    _1SJourn as Жур (NOLOCK)
    |INNER JOIN
    |    $Документ.ПриходнаяНал as Док (NOLOCK) ON Док.IDDoc = Жур.IDDoc
    |INNER JOIN
    |    $ДокументСтроки.ПриходнаяНал as ДокСтр (NOLOCK) ON ДокСтр.IDDoc = Жур.IDDoc
    |WHERE
    |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |   AND $Док.Клиент = :ГП
    |    AND $Док.ПризнакНакладной = $Перечисление.ПризнПрихНакл.Закупка
    |ORDER BY Жур.IDDoc
    |";
1 monsterZE
 
13.08.13
17:48
т.е. как этот запрос "сгруппировать" по товару с учетом даты документа, дабы впендюрить последнюю цену =)
2 Ёпрст
 
13.08.13
17:49
ORDER BY Жур.IDDoc ... и чего ты хочешь от этого ?
:)
3 Ёпрст
 
13.08.13
17:50
сортируй desc по позиции документа.
4 Ёпрст
 
13.08.13
17:50
ну и top 1
5 Ёпрст
 
13.08.13
17:52
взять.. если номенклатур много, то получить последние max(позиция) по group by номенклатурка в подзапрос и в основном уже брать цены, когда позиция дока = позиция из подзапроса.
6 monsterZE
 
13.08.13
17:52
(2) =) ты не понял, этот запрос просто выбирает ВСЕ строки из всех приходников со всем товаром
интересуюсь именно как его "ужать до нужного"
7 monsterZE
 
13.08.13
17:54
(4) топ 1 - вернет мне одну запись =) а мне надо все
8 monsterZE
 
13.08.13
17:56
т.е. в идиале - вот расходник с товар1, товар2, товар3
на эти товары было по 1,2,3 прихода
одним запросом выбрать цены из последних приходов
9 Ёпрст
 
13.08.13
17:56
см. (5)
10 monsterZE
 
13.08.13
18:00
(9) ага, понял =)
11 monsterZE
 
13.08.13
18:03
к (5) мне даже не надо их сравнивать с моим доком
надо просто получить табличку цен по максимальной позиции приходника до позиции расходника
12 monsterZE
 
13.08.13
18:05
можно просто отсортировать и получать первый найденный в таблице, но таблица будет уж очень большая
13 Ёпрст
 
13.08.13
18:15
(11) и ?
14 monsterZE
 
14.08.13
11:48
в итоге, что получилось:

    ТекстЗапроса = "
    |SELECT
    |     $ДокСтр.Товар as [Товар $Справочник.Товары]
    |    ,$ДокСтр.Цена as Цена
    |FROM
    |    _1SJourn as Жур (NOLOCK)
    |INNER JOIN
    |    $Документ.ПриходнаяНал as Док (NOLOCK) ON Док.IDDoc = Жур.IDDoc
    |INNER JOIN
    |    $ДокументСтроки.ПриходнаяНал as ДокСтр (NOLOCK) ON ДокСтр.IDDoc = Жур.IDDoc
    |INNER JOIN
    |    (SELECT
    |        $ДокСтрПод.Товар as Товар
    |    FROM
    |        _1SJourn as ЖурПод (NOLOCK)
    |    INNER JOIN
    |        $Документ.ПриходнаяНал as ДокПод (NOLOCK) ON ДокПод.IDDoc = ЖурПод.IDDoc
    |    INNER JOIN
    |        $ДокументСтроки.ПриходнаяНал as ДокСтрПод (NOLOCK) ON ДокСтрПод.IDDoc = ЖурПод.IDDoc
    |    WHERE
    |        ЖурПод.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |        AND $ДокПод.Клиент = :ГП
    |        AND $ДокПод.ПризнакНакладной = $Перечисление.ПризнПрихНакл.Закупка
    |    GROUP BY $ДокСтрПод.Товар
    |    ) as Подзапрос ON Подзапрос.Товар = $ДокСтр.Товар
    |WHERE
    |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |   AND $Док.Клиент = :ГП
    |    AND $Док.ПризнакНакладной = $Перечисление.ПризнПрихНакл.Закупка
    |ORDER BY Жур.Date_Time_IDDoc DESC
    |";
15 Ёпрст
 
14.08.13
11:51
(14) как бэ... всё в топку :)
16 monsterZE
 
14.08.13
11:52
(15) да?.. почему? =) вроде работает..
17 monsterZE
 
14.08.13
11:53
вот тока сортировку оставить как есть или вырезать до иддок?
18 Ёпрст
 
14.08.13
11:55
а чего "работает" ?

можешь выкинуть подзапрос и будет так же "работать"
19 monsterZE
 
14.08.13
11:57
(18) а чего не работает?
запрос отсортированный обрезается по товару.. чего я не догоняю?
20 monsterZE
 
14.08.13
12:04
(19) не, не обрезается =)
21 monsterZE
 
14.08.13
12:06
как же обрезать табличку с движухой по табличке с товаром?
22 Ёпрст
 
14.08.13
12:06
тебе же последние цены с прихода нужны были.. или нет ?
23 dk
 
14.08.13
12:08
запрос 3-этажный надо
1. получить список товар - док (максимум по дате)
2. получить товар - док (максимум по дате)- цена
3. основной запрос
24 monsterZE
 
14.08.13
12:09
(22) да. но я потом в этой табличке еще рыться буду.. зачем мне там лишние строки?.. =\
25 monsterZE
 
14.08.13
12:16
(23) непонял
1. получить список товара отсорт. по дата-время
почему сразу из него цену не достать?

у меня сейчас получается табличка отсортированная и сжатая по товару.. отсортированную по сжатой обрезать никак? =)
26 dk
 
14.08.13
12:18
(25) попробуй )
27 monsterZE
 
14.08.13
12:23
ну можно положить отсортированную в ВТ а потом из ВТ сделать селект top 1 для каждой позиции =) не, не должен быть способ заджойнить из таблицы только первую подходящую строку
28 monsterZE
 
14.08.13
12:23
Salimbek подкинь идею =)
29 Ёпрст
 
14.08.13
12:25
на вот, цены и товар с последних приходов.

    |SELECT
    |     $ДокСтр.Товар as [Товар $Справочник.Товары]
    |    ,$ДокСтр.Цена as Цена
    |FROM
    |    $ДокументСтроки.ПриходнаяНал as ДокСтр (NOLOCK)
    |
    |
    |inner join
    |    (SELECT
    |        $ДокСтрПод.Товар as Товар,
    |        max(ЖурПод.Date_Time_IDDoc) as Date_Time_IDDoc
    |    FROM
    |        $ДокументСтроки.ПриходнаяНал as ДокСтрПод (NOLOCK)
    |    INNER JOIN
    |        $Документ.ПриходнаяНал as ДокПод (NOLOCK) ON ДокПод.IDDoc = ДокСтрПод.IDDoc
    |    INNER JOIN
    |        _1SJourn as ЖурПод (NOLOCK) ON ДокСтрПод.IDDoc = ЖурПод.IDDoc
    |    WHERE
    |        ЖурПод.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |        and ЖурПод.iddocdef = $ВидДокумента.ПриходнаяНал
    |        AND $ДокПод.Клиент = :ГП
    |        AND $ДокПод.ПризнакНакладной = $Перечисление.ПризнПрихНакл.Закупка
    |    GROUP BY $ДокСтрПод.Товар
    |    ) as Подзапрос ON Подзапрос.Товар = $ДокСтр.Товар and ДокСтр.iddoc = right(Подзапрос.Date_Time_IDDoc,9)
    |";
30 monsterZE
 
14.08.13
12:28
(29) спасибо конечно =)
31 monsterZE
 
14.08.13
12:30
подзапрос выбирает товар с макс док_ид а основной просто весь товар из приходов? =)
32 monsterZE
 
14.08.13
12:32
и клеится по ид-док..
вобщем спасибо.. мог бы и на русском написать, я бы попробывал сам =)
33 Ёпрст
 
14.08.13
12:36
(32) см. (5)
34 Ёпрст
 
14.08.13
12:37
(31) только основной выбирает не весь товар, а который подзапрос вернул.
35 monsterZE
 
14.08.13
12:39
(33) да, есть такое. =) сейчас понятно
36 Stella0608
 
14.08.13
14:13
А select top 1 with ties не пойдет? С сортировкой по дате документа. Не помню, в 1с такой конструкцией еще не пользовалась, но чисто в sql было дело.
37 Ёпрст
 
14.08.13
14:37
(36) ему несколько много товаров надо, а не 1
38 monsterZE
 
14.08.13
15:08
да, написал чего надо было - сказали спасибо. адресую его Епрст =)
выкриживали косячные доки по розничным точкам (доков оч. много и ассртимент огромный)
недобросовестные - выписывали товар по приходной цене