PRABC ;Berekening van de ABC classificatie van produkten [ 02/10/2003 12:13 PM ] Quit ;Er zijn twee verschillende soorten van ABC klassificaties : ; 1 : Volgens het aantal bewegingen (= #faktuurlijnen/jaar), deze klassificatie wordt gebruikt voor stockage in het magazijn (dicht of ver van de pickpost) ; 2 : Volgens de stockwaarde op jaarbasis, de duurste en meestverkochte produkten krijgen de belangrijkste ranking, deze klassificatie wordt gebruikt om de belangrijkheid van een produkt aan te duiden voor het stockbeheer ; MOVE New ; ABC klassificatie van de beweging van de produkten Do ^cA105,^cA106 Set %J=$$%J^vhRtn1(),D="\" Kill ^HULP(%J) Set FMonth=$$EXTDATE^vhDTyp($$CALCDATE^vhDTyp($H,"M",-6),"DM4") Set OneYear=$$EXTDATE^vhDTyp($$CALCDATE^vhDTyp($H,"M",-12),"DM4") Set (TotLines,PRNr)=0 For Set PRNr=$O(^KPR(PRNr)) Quit:'PRNr Do .Set CumLines=0 .Set HoofdGr=$E($$SORTKEY^PRODUKT(PRNr),3,4) .If HoofdGr="DE"!(HoofdGr="AL") Set ^HULP(%J,"C",PRNr)="" .If '$P(^KPR(PRNr,1),D,20) Set ^HULP(%J,"C",PRNr)="" ; NIET stock is automatisch "C" .Else Do ..Set MPRNr="" ..For Set MPRNr=$O(^PRLINK("IKM",PRNr,MPRNr)) Quit:MPRNr="" Do ...Set R=$$PROD^STAT(MPRNr,,FMonth_" ",,2),CumLines=CumLines+R,TotLines=TotLines+R ..Set R=$$PROD^STAT(PRNr,,FMonth_" ",,2),CumLines=CumLines+R,TotLines=TotLines+R ..Set R=$$PROD^STAT(PRNr,,OneYear_" ",,2) ..Set ^HULP(%J,"?",CumLines,+R,PRNr)="" Set ABC("A")=TotLines*70\100,ABC("B")=TotLines*90\100,ABC("C")=TotLines Set OldABC="" Write !!,"Grenswaarde",! ZWrite TotLines Write ! ZWrite ABC Write ?30,"<--- ",$S($D(HoofdGr):"Alle produkten min de deuren",1:"Alle stockprodukten") Set TotLines=0,CumLines="",PRCount=0 Write "K Pick Cumul #Prod",! For Set CumLines=$O(^HULP(%J,"?",CumLines),-1) Quit:CumLines="" Do .Set CumYear="" .For Set CumYear=$O(^HULP(%J,"?",CumLines,CumYear),-1) Quit:CumYear="" Do ..Set PRNr="" ..For Set PRNr=$O(^HULP(%J,"?",CumLines,CumYear,PRNr),-1) Quit:'PRNr Do ...Set TotLines=TotLines+CumLines,ABC="",PRCount=PRCount+1 ...For Set ABC=$O(ABC(ABC)) Quit:ABC="" Quit:TotLines'>ABC(ABC) ...;Tonen van overzicht ...If ABC=$P(OldABC,D) Set $P(OldABC,D,2)=CumLines,$P(OldABC,D,3)=TotLines,$P(OldABC,D,4)=PRCount ...Else Do ....Write !,$P(OldABC,D),$J($P(OldABC,D,2),5),$J($P(OldABC,D,3),7),$J($P(OldABC,D,4),7) ....Set $P(OldABC,D)=ABC,$P(OldABC,D,2)=CumLines,$P(OldABC,D,3)=TotLines,$P(OldABC,D,4)=PRCount ....Write !!,$P(OldABC,D),$J($P(OldABC,D,2),5),$J($P(OldABC,D,3),7),$J($P(OldABC,D,4),7) ...;Wegschrijven indien ABC gewijzigd ...If $P($P(^KPR(PRNr,0),D,8),"#")'=ABC Set ABCRec=$P(^KPR(PRNr,0),D,8),$P(ABCRec,"#")=ABC,$P(^KPR(PRNr,0),D,8)=ABCRec Do ZEND^EWPR(PRNr) Write !,$P(OldABC,D),$J($P(OldABC,D,2),5),$J($P(OldABC,D,3),7),$J($P(OldABC,D,4),7),!!,"----------------------------",!! Set PRNr="" For Set PRNr=$O(^HULP(%J,"C",PRNr)) Quit:'PRNr Do .If $P($P(^KPR(PRNr,0),D,8),"#")'="C" Set ABCRec=$P(^KPR(PRNr,0),D,8),$P(ABCRec,"#")="C",$P(^KPR(PRNr,0),D,8)=ABCRec Do ZEND^EWPR(PRNr) Kill ^HULP(%J) Write # Quit ; VKP ;ABC klassificatie volgens de aankoopwaarde (aantal verkocht/jaar * ciffppl) ;Deze routine draait het best op de 1ste van de maand om exact 12 maanden te bekomen. New Do ^cA105,^cA106 Set %J=$$%J^vhRtn1(),D="\" Kill ^HULP(%J) Set OneYear=$$EXTDATE^vhDTyp($$CALCDATE^vhDTyp($H,"M",-12),"DM4")_" " Set PRNr=0 For Set PRNr=$O(^KPR(PRNr)) Quit:PRNr="" Do .Set JaarVKP=0 .Set MPRNr="" .For Set MPRNr=$O(^PRLINK("IKM",PRNr,MPRNr)) Quit:MPRNr="" Do ..Set JaarVKP=JaarVKP+$$PROD^STAT(MPRNr,,OneYear_" ",,1) .Set JaarVKP=JaarVKP+$$PROD^STAT(PRNr,,OneYear_" ",,1) .Set Key=$O(^KPR(PRNr,"J")) Quit:$E(Key)'="J" .Set CiffPPL=$P(^KPR(PRNr,Key),D,23) .Set Key=$O(^KPR(PRNr,"I")) Quit:$E(Key)'="I" .Quit:$E($P(^KPR(PRNr,Key),D),3,4)="DE" .Set Value=JaarVKP*CiffPPL .Set IsStock=$P(^KPR(PRNr,1),D,20) .Set ^HULP(%J,+IsStock,Value,PRNr)=JaarVKP_D_CiffPPL_D_$P(^KPR(PRNr,0),D) .Set Som(+IsStock)=$G(Som(+IsStock))+Value For IsStock=0,1 Do .Set Lim80=Som(IsStock)*.8 .Set Lim95=Som(IsStock)*.95 .Set Cumul=0 .Set (Value,PRNr)="" .For Set Value=$O(^HULP(%J,IsStock,Value),-1) Quit:Value="" Do ..For Set PRNr=$O(^HULP(%J,IsStock,Value,PRNr)) Quit:PRNr="" Do ...Set Cumul=Cumul+Value ...Set ABC=$S(Cumul'>Lim80:"A",Cumul'>Lim95:"B",1:"C") ...Set Cnt(IsStock,ABC)=$G(Cnt(IsStock,ABC))+1 ...;Write !,$P(^KPR(PRNr,0),D)," ",ABC ...If $P($P(^KPR(PRNr,0),D,8),"#",2)'=ABC Set ABCRec=$P(^KPR(PRNr,0),D,8),$P(ABCRec,"#",2)=ABC,$P(^KPR(PRNr,0),D,8)=ABCRec zw Cnt