elmiq pisze:Ja tylko dodam, że coś takiego będzie Ci działać tylko jeśli dla danej dostawy masz 1 dokument MMP. Załóżmy, że masz dostawę na 1000kg na MAG01 (np. dokument PW). Robisz przesunięcie 200kg na MAG02 dokumentem MMW -> MMP1. Następnie robisz przesunięcie 200kg na MAG02 dokumentem MMW - MMP2. W efekcie system końcowym w TwrZasoby będzie jeden wpis na 400kg, ponieważ to ta sama dostawa.
Chyba będzie działać i przy wielu MMP. Dodane zapytanie zwraca numer MMP, ilość przyjętą na magazyn numer 1 dla danej pozycji (zasobu) z raportu głównego. Będzie przez to wiele rekordów (tyle co było MMP z danego zasobu). Nie jestem pewien czy o to chodzi autorowi postu.
Jeżeli mają być ilości tylko z MMP to powinien wystarczyć taki prosty select:
SELECT
CDN.NumerDokumentuTRN(TrN_GIDTyp,TrN_SpiTyp,TrN_TrnTyp,TrN_TrnNumer,TrN_TrnRok,TrN_TrnSeria) AS [MMP]
,CDN.TsToDate(TrN_Data2,0) AS [Data MMP]
,SUM(TrS_Ilosc) AS [Ilość MMP]
,Twr_Kod AS [Kod]
,(SELECT SUM(A.TwZ_IlMag) FROM CDN.TwrZasoby A WHERE A.TwZ_TwrTyp=Twr_GIDTyp AND A.TwZ_TwrNumer=Twr_GIDNumer AND A.TwZ_MagNumer=1) AS [Ilość MAG]
FROM CDN.TraNag
JOIN CDN.TraElem ON TrE_GIDTyp=TrN_GIDTyp AND TrE_GIDNumer=TrN_GIDNumer
JOIN CDN.TraSElem ON TrS_GIDTyp=TrE_GIDTyp AND TrS_GIDNumer=TrE_GIDNumer AND TrS_GIDLp=TrE_GIDLp
JOIN CDN.Dostawy ON Dst_GIDTyp=TrS_DstTyp AND Dst_GIDNumer=TrS_DstNumer
JOIN CDN.TwrZasoby ON TwZ_DstTyp=Dst_GIDTyp AND TwZ_DstNumer=Dst_GIDNumer
JOIN CDN.TwrKarty ON Twr_GIDtyp=TwZ_TwrTyp AND Twr_GIDNumer=TwZ_TwrNumer
WHERE TrN_GIDTyp=1604 AND TrN_MagDNumer=1 AND TwZ_MagNumer=1
GROUP BY TrN_GIDTyp,TrN_SpiTyp,TrN_TrnTyp,TrN_TrnNumer,TrN_TrnRok,TrN_TrnSeria,TrN_Data2,Twr_Kod,Twr_GIDTyp,Twr_GIDNumer
Zdarzają się sytuację w których nie będzie można określić które MMP rzeczywiście przyjęło towar znajdujący się na magazynie, chyba że mamy 100% pewność stosowania FIFO - wtedy możemy obliczyć czy wcześniejsze dokumenty MMP powinny się pojawić w zestawieniu, a jeśli tak to z jaką ilością. Może być tak, że na zasobie mamy 200kg, a z powiedzmy 3 dokumentów MMP uzbieramy 300kg - wtedy, w teorii, ten pierwszy nie powinien być uwzględniony. Ale takie kombinowanie zależy już od autora i tego co chce uzyskać
wydaje mi się ze select będzie OK. Dam jeszcze znać tylko sobie go przeanalizuje na spokojnie. thx Wacek zauważyłem tylko że jeżeli na MMP dostawa składa się z dwóch PZ to pobiera tylko tą ostatnią (np. 10 szt - 7 z PZ1 + 3 z PZ2 pokazuje tylko te 3 ) ale to chyba nie zrobi mi większego problemu
ewentualnie czy można by wy filtrować aby pokazał tylko ostatni dokument mmp ?
max pisze:zauważyłem tylko że jeżeli na MMP dostawa składa się z dwóch PZ to pobiera tylko tą ostatnią (np. 10 szt - 7 z PZ1 + 3 z PZ2 pokazuje tylko te 3 )
Pewnie zasobów z tej dostawy już nie ma. Zobacz dla tego towaru czy w jego kartotece na zakładce zasoby masz linie z tej dostawy.
Dla tych co szukają rozwiązania, poniżej skrypt który pokazuje zasób ilość i datę oraz MMP na dany sklep z którego został przyjęty towar. Na 98% działa poprawnie:
with CTE_MMPZasoby as
(
SELECT
TrE_Ilosc as IloscMMP
,CDN.NumerDokumentuTRN(TrN_GIDTyp,TrN_SpiTyp,TrN_TrnTyp,TrN_TrnNumer,TrN_TrnRok,TrN_TrnSeria) as MMP
,CDN.TSToDate(TrN_Data3,0) as DataMMP
,TwZ_DstTyp
,TwZ_DstNumer
,TrN_MagDNumer
,TwZ_MagNumer
FROM
CDN.TraNag
JOIN CDN.TraElem ON TrE_GIDTyp=TrN_GIDTyp AND TrE_GIDNumer=TrN_GIDNumer
JOIN CDN.TraSElem ON TrS_GIDTyp=TrE_GIDTyp AND TrS_GIDNumer=TrE_GIDNumer AND TrS_GIDLp=TrE_GIDLp
JOIN CDN.Dostawy ON Dst_GIDTyp=TrS_DstTyp AND Dst_GIDNumer=TrS_DstNumer
JOIN CDN.TwrZasoby ON TwZ_DstTyp=Dst_GIDTyp AND TwZ_DstNumer=Dst_GIDNumer
where
TrN_GIDTyp=1604
)
SELECT
TwZ_Ilosc as 'Zasób ilość'
,CDN.NumerDokumentuTRN(TrN_GIDTyp,TrN_SpiTyp,TrN_TrnTyp,TrN_TrnNumer,TrN_TrnRok,TrN_TrnSeria) AS PZ
,convert(date,DATEADD( ss, TwZ_DataP,CONVERT(DATETIME,'19900101',11))) as 'PZ Zasób data'
,IloscMMP
,MMP
,DataMMP
from
CDN.TwrZasoby tz
inner join cdn.Dostawy ds on tz.TwZ_DstNumer=ds.Dst_GIDNumer
inner join cdn.TraNag tn on ds.Dst_TrnTyp=tn.TrN_GIDTyp and ds.Dst_TrnNumer=tn.TrN_GIDNumer
inner join CDN.TwrKarty ON Twr_GIDtyp=TwZ_TwrTyp AND Twr_GIDNumer=TwZ_TwrNumer
inner join CTE_MMPZasoby cte on cte.TwZ_DstTyp=tz.TwZ_DstTyp and cte.TwZ_DstNumer=tz.TwZ_DstNumer and cte.TrN_MagDNumer=tz.TwZ_MagNumer AND cte.TwZ_MagNumer=tz.TwZ_MagNumer
and TwZ_TwrNumer=tz.TwZ_TwrNumer
where
tz.TwZ_Ilosc>0 and
tz.TwZ_MagNumer=ID_MAGZYNU
and Twr_Kod=KOD_TOWARU