Autor Wątek: Zestawienie remanent z uwzględnieniem pustych magazynów  (Przeczytany 1501 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline peter1031

  • Nowy użytkownik
  • *
  • Wiadomości: 16
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4
Zestawienie remanent z uwzględnieniem pustych magazynów
« dnia: Styczeń 14, 2020, 19:42:37 »
Witam wszystkich! Przerobiłem sobie orginalne zestawienie "Remanent na dzień dowolny" w taki taki sposób, że pokazuje mi tylko nazwy magazynów i ich wartość. Chciałbym jednak, żeby pokazywało wszystkie magazyny (magazyny które nie mają towarów i ich wartość wynosi 0). Próbowałem kombinować przy joinach i z wyrzuceniem linijki and  A.mr_ilosc > isnull(R.mr_ilosc,0)  ale nie udaje mi się osiągnąć zamierzonego celu. Prosił bym o wsparcie. Oto kod zestawienia:

 select    
 M.mag_Nazwa as Magazyn,
 sum(dbo.fnInsMul( (A.mr_ilosc-isnull(R.mr_ilosc,0))  , W.mw_cena, 2 ))  as [Wartość magazynowa]
 from dok_magruch A 
 inner join vwDokMagWart W on A.mr_SeriaId = W.mw_SeriaId 
 left join ((select isnull( sum( C.mr_ilosc ), 0 ) mr_ilosc, C.mr_doId
          from dok_magruch C
          where C.mr_data<={D:Data}
          group by C.mr_doId)
         ) R on R.mr_DoId = A.mr_id 
  inner join sl_Magazyn M on M.mag_Id = A.mr_MagId
  where    W.mw_pozid in (SELECT TOP 1 T.mw_pozid 
                  FROM vwDokMagWart T 
                  WHERE T.mw_SeriaId = W.mw_seriaid and T.mw_data<={D:Data} 
                  ORDER BY mw_data DESC, mw_pozid DESC)
   and A.mr_MagId is not null
   and (A.mr_MagId in ({CHL_DB:select -1, '(dowolny)' union all SELECT mag_Id, mag_Symbol FROM sl_Magazyn order by 2:magazyn:-1:(dowolny)})
            or -1 in ({CHL_DB:select -1, '(dowolny)' union all SELECT mag_Id, mag_Symbol FROM sl_Magazyn order by 2:magazyn:-1:(dowolny)}))
   and A.mr_data<={D:Data}
   and  A.mr_ilosc > isnull(R.mr_ilosc,0) 
group by M.mag_Nazwa
order by M.mag_Nazwa

Offline yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1246
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie remanent z uwzględnieniem pustych magazynów
« Odpowiedź #1 dnia: Styczeń 15, 2020, 09:34:45 »
Robione na kolanie ale da efekt jakiego oczekujesz. Można to zrobić ładniej ale nie miałem czasu na przepisywanie joinów i testowanie.

WITH remanent as
 (
 select   
 M.mag_Nazwa as Magazyn, m.mag_Id,
 sum(dbo.fnInsMul( (A.mr_ilosc-isnull(R.mr_ilosc,0))  , W.mw_cena, 2 ))  as [Wartość magazynowa]
 from dok_magruch A
 inner join vwDokMagWart W on A.mr_SeriaId = W.mw_SeriaId
 left join ((select isnull( sum( C.mr_ilosc ), 0 ) mr_ilosc, C.mr_doId
          from dok_magruch C
          where C.mr_data<={D:Data}
          group by C.mr_doId)
         ) R on R.mr_DoId = A.mr_id
  inner join sl_Magazyn M on M.mag_Id = A.mr_MagId
  where    W.mw_pozid in (SELECT TOP 1 T.mw_pozid
                  FROM vwDokMagWart T
                  WHERE T.mw_SeriaId = W.mw_seriaid and T.mw_data<={D:Data}
                  ORDER BY mw_data DESC, mw_pozid DESC)
   and A.mr_MagId is not null
   /*and (A.mr_MagId in ({CHL_DB:select -1, '(dowolny)' union all SELECT mag_Id, mag_Symbol FROM sl_Magazyn order by 2:magazyn:-1:(dowolny)})
            or -1 in ({CHL_DB:select -1, '(dowolny)' union all SELECT mag_Id, mag_Symbol FROM sl_Magazyn order by 2:magazyn:-1:(dowolny)}))*/
   and A.mr_data<={D:Data}
   and  A.mr_ilosc > isnull(R.mr_ilosc,0)
group by M.mag_Nazwa,m.mag_Id
)
select slm.mag_Nazwa as magazyn
,"Wartość magazynowa"=isnull(remanent.[Wartość magazynowa],0)
 from sl_Magazyn slm
left join remanent on slm.mag_Id=remanent.mag_id

order by slm.mag_Nazwa

Offline peter1031

  • Nowy użytkownik
  • *
  • Wiadomości: 16
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4
Odp: Zestawienie remanent z uwzględnieniem pustych magazynów
« Odpowiedź #2 dnia: Styczeń 15, 2020, 10:46:08 »
Wielki dzięki. Właśnie o to mi chodziło.

Forum Użytkownikow Subiekt GT

Odp: Zestawienie remanent z uwzględnieniem pustych magazynów
« Odpowiedź #2 dnia: Styczeń 15, 2020, 10:46:08 »