|
v7: Прямой запрос к регистру с подвохом | ☑ | ||
---|---|---|---|---|
0
zenon46
05.02.20
✎
09:50
|
Доброго дня!
Есть прямой запрос, который по переданному списку номенклатуры, находит последний документ прихода...вот только выяснилось что документы надо еще отсеивать по контрагентам из определенной папки, т.е. если последний приход в котором контрагент из "запретной" папки, то нужно найти что был до него, сейчас имею вот такой запрос, по логике нужно соединиться со справочником контрагентов и добавить условие, но как сделать пока не сообразил : |select |temp.val, |Спр.Code AS Код, |subsel.Номенклатура AS [Номенклатура $Справочник.Номенклатура], |subsel.ДатаПослПрихода |from #TempTable |temp left join |( |SELECT | $Рег.Номенклатура AS [Номенклатура], | CAST(LEFT(MAX(Рег.Date_Time_IDDOC),8) AS datetime) AS ДатаПослПрихода |FROM | $Регистр.ПартииНаличие as Рег |INNER JOIN | _1Sjourn as ЖурналДок ON ЖурналДок.IDDoc = Рег.IDDoc |LEFT JOIN | $Справочник.Номенклатура AS Спр ON Спр.ID = $Рег.Номенклатура |WHERE | ЖурналДок.iddocdef = $ВидДокумента.ПоступлениеТМЦ_Склад AND | $Рег.Номенклатура IN (SELECT val FROM #TempTable) AND | $Рег.Фирма = :ВбрФирма |GROUP BY | $Рег.Номенклатура |) subsel on temp.val = subsel.Номенклатура |LEFT JOIN |$Справочник.Номенклатура AS Спр ON Спр.ID = temp.val |
|||
1
ikea
05.02.20
✎
10:17
|
Создаете временную таблицу, куда помещаете "запрещенные контрагентов".
INNER JOIN по постащику к $Регистр.ПартииНаличие А потом в условии $Рег.Поставщик NOT IN(SELECT val FROM #ЗапрещенныеКонтрагенты) |
|||
2
zenon46
05.02.20
✎
10:18
|
(1) отличная идея, спасибо!
|
|||
3
zenon46
05.02.20
✎
17:05
|
Продолжу темку, ибо развивается запрос, как избавиться от ошибки "Ошибка преобразования даты или времени из символьной строки." Дело в том что во временной таблицы у номенклатуры может и не быть прихода...потому нужно как то работать с пустым значением. Спасибо за подсказку. (Вроде как '17530101' - должна быть для 1С пустой датой)
|SELECT | temp.val, | Спр.Code AS Код, | subsel.Номенклатура AS [Номенклатура $Справочник.Номенклатура], | CAST(LEFT(Isnull(Рег.Date_Time_IDDOC,'17530101'),8) AS datetime) [ДатаПрих] |FROM | #TempTable | temp left join |( |SELECT | $Рег.Номенклатура AS [Номенклатура], | MAX(CAST(LEFT((Рег.Date_Time_IDDOC),8) AS datetime)) AS ДатаПослПрихода |FROM | $Регистр.ПартииНаличие as Рег |INNER JOIN | _1Sjourn as ЖурналДок ON ЖурналДок.IDDoc = Рег.IDDoc |INNER JOIN | $Справочник.Партии AS СпрП ON СпрП.ID = $Рег.Партия |INNER JOIN | $Справочник.Контрагенты AS СпрК ON СпрК.ID = $СпрП.Поставщик |WHERE | ЖурналДок.iddocdef = $ВидДокумента.ПоступлениеТМЦ_Склад AND | $Рег.Номенклатура IN (SELECT val FROM #TempTable) AND | $Рег.Фирма = :ВбрФирма AND | $СпрП.Поставщик NOT IN (SELECT val FROM #TableKontr) |GROUP BY | $Рег.Номенклатура |) subsel on temp.val = subsel.Номенклатура |INNER JOIN | $Справочник.Номенклатура AS Спр ON Спр.ID = temp.val |LEFT JOIN | $Регистр.ПартииНаличие AS Рег ON $Рег.Номенклатура = subsel.Номенклатура AND Рег.Date_time_iddoc=subsel.ДатаПослПрихода |
|||
4
olegves
05.02.20
✎
20:18
|
(3) ну так isnull() и используй для своей даты
|
|||
5
olegves
05.02.20
✎
20:19
|
+(4) во внутреннем запросе
|
|||
6
olegves
05.02.20
✎
20:20
|
(5) а не посмотрел, что у тебя партии во внешнем, CAST применяй к '17530101'
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |