Имя: Пароль:
1C
1C 7.7
v7: "Пятничный" прямой запрос.
,
0 zenon46
 
29.11.19
16:19
Доброго вечера! Подскажите почему не срабатывает запрос.
Итак, есть в базе документ Комплектация у него два вида операции - Разборка и Сборка. Есть реквизит Номенклатура он есть как в шапке так и в ТЧ. Пытаюсь составить запрос который бы подсчитал, сколько доков Комплектация(Сборка) в ТЧ и Комплектация(Разборка) в Шапке, встречались по выбранной номенклатуре. Но срабатывает только что-то одно то что стоит первое в соединении с журналом.

Кусок запроса в котором это делается для наглядности скриншот (https://prnt.sc/q3um9b) зеленым выделено то что не попало, если поменять в соединении местами, то станет наоборот:

    |LEFT JOIN(      
    |SELECT
    |  SUBSTRING(Жур.Date_Time_IDDoc, 1, 8)                                                                       as [Дата],
    |  coalesce($ДокВ.Номенклатура,$ДокКомплектацияТМЦРазборка.Номенклатура,$ДокКомплектацияСборка.Комплект) as [Товар],
    |  count(coalesce(ДокВ.IDDOC,ДокКомплектацияТМЦРазборка.IDDOC,ДокКомплектацияСборка.IDDOC))                 as [Приход]
    |FROM                                  
    |  _1SJourn AS Жур
    |  LEFT JOIN $ДокументСтроки.ВозвратОтПокупателя as ДокВ ON ДокВ.IDDoc = Жур.IDDoc
    |  LEFT JOIN $ДокументСтроки.КомплектацияТМЦ as ДокКомплектацияТМЦРазборка ON ДокКомплектацияТМЦРазборка.IDDoc = Жур.IDDoc
    |  LEFT JOIN $Документ.КомплектацияТМЦ as ДокКомплектацияТМЦРазборкаШапка ON ДокКомплектацияТМЦРазборкаШапка.IDDoc = Жур.IDDoc    
    |  LEFT JOIN $Документ.КомплектацияТМЦ as ДокКомплектацияСборка ON ДокКомплектацияСборка.IDDoc = Жур.IDDoc        
    |  LEFT JOIN #TempTable as фильтрТоваров ON coalesce($ДокВ.Номенклатура,$ДокКомплектацияТМЦРазборка.Номенклатура,$ДокКомплектацияСборка.Комплект) = фильтрТоваров.val
    |WHERE
    |   Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
    |   (Жур.iddocdef = $ВидДокумента.ВозвратОтПокупателя OR Жур.iddocdef = $ВидДокумента.КомплектацияТМЦ) AND
    |   (($ДокКомплектацияТМЦРазборкаШапка.КодОперации = :ТипКомплектации) OR ($ДокКомплектацияСборка.КодОперации = :ТипКомплектации_1)) AND    
    |   Жур.Closed & 1 = 1
    |GROUP BY
    |  SUBSTRING(Жур.Date_Time_IDDoc,1,8), coalesce($ДокВ.Номенклатура,$ДокКомплектацияТМЦРазборка.Номенклатура,$ДокКомплектацияСборка.Комплект)


Заранее откликнувшимся спасибо !
1 Sserj
 
29.11.19
16:43
Да нут тебя с твоим 2000-ым, там мозги надо напрягать, думать что сработает а что нет :)
А по факту сделай просто обхединением двух запросов отдельно по шапке и отдельно по табличной части. И быстрее будет и надежнее и вон тот непонятный возврат исчезнет.
2 zenon46
 
29.11.19
16:44
(1) возврат тоже нужен ))
3 palpetrovich
 
29.11.19
16:45
(0) "составить запрос который бы подсчитал, сколько доков Комплектация(Сборка) в ТЧ и Комплектация(Разборка) в Шапке, встречались по выбранной номенклатуре."

а при чем здесь строки?
4 zenon46
 
29.11.19
16:47
(3) а как выбрать номенклатуру из ТЧ не используя ДокументСтроки ?
5 palpetrovich
 
29.11.19
16:59
(4) наверное я не понимаю задачи, во-всяком сдлучае из описания в (0) - строки не нужны
зы: пытаться понять из текста запроса что нужно получить - не хочется
6 Sserj
 
29.11.19
17:00
И кстати в твоем варианте все равно не учесть возможности нескольких позиций нужной номенклатуры в ТЧ. Т.е. один и тот же документ будет считаться несколько раз если в ТЧ несколько позиций из фильтра.
7 Franchiser
 
гуру
29.11.19
17:01
Так есть же Отладка(1)
8 Franchiser
 
гуру
29.11.19
17:03
Наверно тебе нужно определить еще связь с _1SJourn AS Жур2
9 Sserj
 
29.11.19
17:04
(7) Отладка то есть, только у него SQL2000 на котором что ни предложи то ни работает, то вроде как и работает но с другим синтаксисом.
10 Ёпрст
 
29.11.19
18:06
(0) дык хрень же получишь в итоге, это не количество доков будет хотя бы дистиникт в каунт пихай.. тогда что ле
11 zenon46
 
29.11.19
20:59
(1) надеюсь скоро перееду на 2008й (6) да я же написал это кусок запроса. (1) сделаю так, по моему, это самый простой вариант.