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

v7: Прямой запрос к регистру с подвохом

v7: Прямой запрос к регистру с подвохом
Я
   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
   ikea
 
1 - 05.02.20 - 10:17
Создаете временную таблицу, куда помещаете "запрещенные контрагентов".
INNER JOIN по постащику к  $Регистр.ПартииНаличие


А потом в условии $Рег.Поставщик NOT IN(SELECT val FROM #ЗапрещенныеКонтрагенты)
   zenon46
 
2 - 05.02.20 - 10:18
(1) отличная идея, спасибо!
   zenon46
 
3 - 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.ДатаПослПрихода
   olegves
 
4 - 05.02.20 - 20:18
(3) ну так isnull() и используй для своей даты
   olegves
 
5 - 05.02.20 - 20:19
+(4) во внутреннем запросе
   olegves
 
6 - 05.02.20 - 20:20
(5) а не посмотрел, что у тебя партии во внешнем, CAST применяй к '17530101'

Список тем форума
Рекламное место пустует  Рекламное место пустует
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.