Имя: Пароль:
1C
1C 7.7
v7: Количество документов в запросе
,
0 zenon46
 
08.11.19
12:27
Доброго дня!
Как получить по каждой номенклатуре из СЗ в запросе количество документов в ТЧ которых она встречается.
Делаю так : но получаю только одно общее число в TempTable - лежат элементы справочника номенклатура

    |SELECT
    |    count(distinct Док.IDDOC)AS КолПоступ
    |FROM
    |    _1SJourn Жур
    |INNER JOIN
    |    $ДокументСтроки.ПоступлениеТМЦ_Склад AS Док ON Док.IDDoc = Жур.IDDoc
    |WHERE
    |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
    |    ($ДокументСтроки.ПоступлениеТМЦ_Склад.Номенклатура IN (SELECT Val FROM #TempTable))
1 ДенисЧ
 
08.11.19
12:29
Добавь в выбор номенклатуру
и сгруппируй по иддок, номенклатура
2 Волшебник
 
08.11.19
12:30
нужно добавить
SELECT Номенклатура, count(*)
...
GROUP BY Номенклатура
...
3 Ёпрст
 
08.11.19
13:14
(2) это не верно, если одна и таже номенклатура в разных строчках, в каунт надо не * пихать
4 Волшебник
 
08.11.19
13:15
(3) Точно
5 Ёпрст
 
08.11.19
13:15
(1) группировать по iddoc не надо, ему же количество доков надо
6 dk
 
08.11.19
13:27
ну и напоследок не забываем про (NOLOCK) в запросах )
7 palpetrovich
 
08.11.19
13:52
(6) не, напослеждок не забываем про оконные функции https://habr.com/ru/post/268983/ :)
8 zenon46
 
08.11.19
15:01
Запрос не возвращает 0, по тем позициям из СЗ, которые не нашлись в документах, как это можно побороть ?
9 Ёпрст
 
08.11.19
15:04
(8) union all select 0,val from  #TempTable
10 Ёпрст
 
08.11.19
15:04
и сверху group by
11 Ёпрст
 
08.11.19
15:06
ну или в селект из временной и левое соединение с фильтром к табличной части дока + nullif или coalesce в селекте
12 palpetrovich
 
08.11.19
15:47
имхо, так интересней все-же

select distinct
    ДокТ.Товар
    ,Count(IsNull(ДокТ.ИдДокумента, 0)) OVER (PARTITION BY ДокТ.Товар) КвоДок
from dbo.ДокументТ_РасходнаяНакладная as ДокТ with (NoLOck)
join dbo.Журнал as Жур with (NoLOck) On ДокТ.ИдДокумента = Жур.ИдДокумента
    and Жур.Позиция > '20191001' -- если нужно ограничить по дате
Where 1=1
    and ДокТ.Товар in (SELECT Val FROM #СпТоваров)

есичё - у нас используются предствления, ДокументТ_РасходнаяНакладная =  $ДокументСтроки.РасходнаяНакладная
13 dk
 
08.11.19
15:50
а зачем nolock на представления?
14 Ёпрст
 
08.11.19
15:51
(12) щас тс сообщит, что у него 2000 скуль и нема оконных функций.. (
15 palpetrovich
 
08.11.19
15:55
(13) дык, представление - это всего-лишь "обертка"
SELECT
[IDDOC] [ИдДокумента],
...
FROM DT15
16 dk
 
08.11.19
16:03
я сразу внутри представления нолоков напихал
а то есть товарищи которые будут пользоваться представлениями, но про нолок забывать
17 trad
 
08.11.19
16:52
(16) а если вдруг понадобится чисто почитать?
18 zenon46
 
08.11.19
17:47
(14) ха ха, 2000-й скуль у мну
19 Ёпрст
 
08.11.19
18:10
(18) тогда делай по-старинке
20 zenon46
 
11.11.19
09:32
Появилась необходимость, в результат выполнения запроса добавить и номенклатуру из TempTable, не особо получается ругается на синтаксис ")" а вот почему не понятно, вроде все обернуто нормально в скобки.

     |SELECT
     |Номенклатура [Номенклатура $Справочник.Номенклатура],    
     |sum(КолПоступ)
     |FROM
     |(
     |SELECT
     |    $ДокументСтроки.ПоступлениеТМЦ_Склад.Номенклатура [Номенклатура],    
     |    count(distinct Док.IDDOC)AS КолПоступ
     |FROM
     |   _1SJourn Жур
     |INNER JOIN
     |   $ДокументСтроки.ПоступлениеТМЦ_Склад AS Док ON Док.IDDoc = Жур.IDDoc
     |WHERE
     |   Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
     |   ($ДокументСтроки.ПоступлениеТМЦ_Склад.Номенклатура IN (SELECT Val FROM #TempTable))
     |GROUP BY $Док.Номенклатура
     |union all
     |select
     |    val,
     |    0
     |from  
     |    #TempTable
     |)
         |GROUP BY Номенклатура
21 palpetrovich
 
11.11.19
12:07
(20) |GROUP BY $Док.Номенклатура во вложенном наверное лишняя
22 zenon46
 
11.11.19
12:35
(21) ды уже убирал, ошибка один фиг остается "Неправильный синтаксис около конструкции ")"."
23 ДенисЧ
 
11.11.19
12:37
|from  
|    #TempTable
|) AS t1
|GROUP BY Номенклатура
24 zenon46
 
11.11.19
12:51
(23) Благодартсвую. Работает.