Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Количество документов в запросе

v7: Количество документов в запросе
Я
   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 не надо, ему же количество доков надо
   dk
 
6 - 08.11.19 - 13:27
ну и напоследок не забываем про (NOLOCK) в запросах )
   palpetrovich
 
7 - 08.11.19 - 13:52
(6) не, напослеждок не забываем про оконные функции https://habr.com/ru/post/268983/ :)
   zenon46
 
8 - 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 в селекте
   palpetrovich
 
12 - 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 #СпТоваров)

есичё - у нас используются предствления, ДокументТ_РасходнаяНакладная =  $ДокументСтроки.РасходнаяНакладная
   dk
 
13 - 08.11.19 - 15:50
а зачем nolock на представления?
   Ёпрст
 
14 - 08.11.19 - 15:51
(12) щас тс сообщит, что у него 2000 скуль и нема оконных функций.. (
   palpetrovich
 
15 - 08.11.19 - 15:55
(13) дык, представление - это всего-лишь "обертка"
SELECT
[IDDOC] [ИдДокумента],
...
FROM DT15
   dk
 
16 - 08.11.19 - 16:03
я сразу внутри представления нолоков напихал
а то есть товарищи которые будут пользоваться представлениями, но про нолок забывать
   trad
 
17 - 08.11.19 - 16:52
(16) а если вдруг понадобится чисто почитать?
   zenon46
 
18 - 08.11.19 - 17:47
(14) ха ха, 2000-й скуль у мну
   Ёпрст
 
19 - 08.11.19 - 18:10
(18) тогда делай по-старинке
   zenon46
 
20 - 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 Номенклатура
   palpetrovich
 
21 - 11.11.19 - 12:07
(20) |GROUP BY $Док.Номенклатура во вложенном наверное лишняя
   zenon46
 
22 - 11.11.19 - 12:35
(21) ды уже убирал, ошибка один фиг остается "Неправильный синтаксис около конструкции ")"."
   ДенисЧ
 
23 - 11.11.19 - 12:37
|from  
|    #TempTable 
|) AS t1
|GROUP BY Номенклатура
   zenon46
 
24 - 11.11.19 - 12:51
(23) Благодартсвую. Работает.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.