Имя: Пароль:
1C
1C 7.7
v7: Добавить в выборку значений из списка
0 zenon46
 
12.12.19
14:59
Доброго дня!
Есть Список значений с номенклатурой, получаем по каждой номенклатуре за период, документы поступления и количество из этого поступления. Проблема состоит в том что, в результат выборки нужно добавить ту номенклатуру из переданного списка по которой не было поступлений, заполнив поля пустыми значениями. Вот это собственно и не выходит текст запроса ниже:

    |SELECT
    |    СпрНоменклатура.Code [Код],  
    |    t1.Номенклатура [Номенклатура $Справочник.Номенклатура],
    |    t1.Количество Количество,
    |    t1.ТекДок [Док $Документ.ПоступлениеТМЦ_Склад],
    |    t1.Контрагент [Контр $Справочник.Контрагенты]
    |FROM  
    |(
    |SELECT
    |   Жур.IDDoc AS [ТекДок],
    |   Жур.IDDocDef AS ТекДок_вид,
    |   $Документ.ПоступлениеТМЦ_Склад.Контрагент AS [Контрагент],
    |   $ДокументСтроки.ПоступлениеТМЦ_Склад.Номенклатура [Номенклатура],
    |   $ДокументСтроки.ПоступлениеТМЦ_Склад.Количество [Количество]
    |FROM
    |   _1SJourn Жур
    |LEFT JOIN
    |    $Документ.ПоступлениеТМЦ_Склад AS ПоступлениеТМЦ_Склад With (NOLOCK) ON Жур.IDDOC = ПоступлениеТМЦ_Склад.IDDOC    
    |INNER JOIN
    |    $ДокументСтроки.ПоступлениеТМЦ_Склад AS Док ON Док.IDDoc = Жур.IDDoc  
    |WHERE
    |   (Жур.CLOSED&1=1) AND
    |   Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
    |   Жур.iddocdef=$ВидДокумента.ПоступлениеТМЦ_Склад AND
    |    ($ДокументСтроки.ПоступлениеТМЦ_Склад.Номенклатура IN (SELECT Val FROM #TempTable))
    |UNION ALL
    |SELECT
    |    VAL,
    |    VAL,
    |    VAL,
    |   VAL,
    |   0
    |FROM  
    |    #TempTable    
    |) t1
    |INNER JOIN
    |    $Справочник.Номенклатура AS СпрНоменклатура ON СпрНоменклатура.ID=t1.Номенклатура
1 Djelf
 
12.12.19
15:13
Исходя из
  ($ДокументСтроки.ПоступлениеТМЦ_Склад.Номенклатура IN (SELECT Val FROM #TempTable))
Вот это не верно
INNER JOIN $Справочник.Номенклатура AS СпрНоменклатура ON СпрНоменклатура.ID=t1.Номенклатура
Что в t1.Номенклатура? descr? Ну так, тогда так
INNER JOIN $Справочник.Номенклатура AS СпрНоменклатура ON СпрНоменклатура.ID=t1.Val
2 zenon46
 
12.12.19
15:20
(1) Все работает как надо, без :
    |UNION
    |SELECT
    |    VAL,
    |    VAL,
    |    VAL,
    |   VAL,
    |   0
    |FROM  
    |    #TempTable  

Я пытаюсь в рельтирующую таблицу добавить ту номенклатуру из #TempTable которая не попадет в :
|SELECT
    |   Жур.IDDoc AS [ТекДок],
    |   Жур.IDDocDef AS ТекДок_вид,
    |   $Документ.ПоступлениеТМЦ_Склад.Контрагент AS [Контрагент],
    |   $ДокументСтроки.ПоступлениеТМЦ_Склад.Номенклатура [Номенклатура],
    |   $ДокументСтроки.ПоступлениеТМЦ_Склад.Количество [Количество]
    |FROM
    |   _1SJourn Жур
    |LEFT JOIN
    |    $Документ.ПоступлениеТМЦ_Склад AS ПоступлениеТМЦ_Склад With (NOLOCK) ON Жур.IDDOC = ПоступлениеТМЦ_Склад.IDDOC    
    |INNER JOIN
    |    $ДокументСтроки.ПоступлениеТМЦ_Склад AS Док ON Док.IDDoc = Жур.IDDoc  
    |WHERE
    |   (Жур.CLOSED&1=1) AND
    |   Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
    |   Жур.iddocdef=$ВидДокумента.ПоступлениеТМЦ_Склад AND
    |    ($ДокументСтроки.ПоступлениеТМЦ_Склад.Номенклатура IN (SELECT Val FROM #TempTable))
3 Djelf
 
12.12.19
15:25
А. да. Недосмотрел слегка. Вроде должно работать...
Ну покрути отдельно UNION SELECT
4 zenon46
 
12.12.19
15:27
(3) ошибки сыпятся по несовпадению типов, хотя мне не понятно, а какие типы, если в выборке нет этой записи по номенклатуре.
5 Djelf
 
12.12.19
15:31
Несовпадение типов либо потому что val,val,val это все номенклатура, а в итоговых колонках другая типизация.
Типизация $Документ.ПоступлениеТМЦ_Склад, видимо совсем не соответствует.
6 zenon46
 
12.12.19
15:32
(5) да, это я уже понял, вот и прошу помочь, что вместо VAL использовать что нормально типизировать поля где будет 0 по количеству.
7 Sserj
 
12.12.19
15:32
|UNION ALL
|SELECT
|  $ПустойИД,
|  $ВидДокумента.ПоступлениеТМЦ_Склад,
|  $ПустойИД,
|  val,
|  0
|FROM  
|    #TempTable
8 zenon46
 
12.12.19
15:35
(7) вот точно! как обычно Sserj - красавчик!