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^vhLib.DataTypes($$CALCDATE^vhLib.DataTypes($H,"M",-6),"DM4") Set OneYear=$$EXTDATE^vhLib.DataTypes($$CALCDATE^vhLib.DataTypes($H,"M",-12),"DM4") Set (TotLines,PRNr)=0 For Set PRNr=$O(^KPR(PRNr)) Quit:'PRNr Do .Set CumLines=0 .If $P(^KPR(PRNr,0),D,3)'="" Set ^HULP(%J,"C",PRNr)="" ; Afgeleid product .Else If '$P(^KPR(PRNr,1),D,20) Set ^HULP(%J,"C",PRNr)="" ; NIET stock is automatisch "C" .Else If $$IsMoederMetStockOverKinderen^Stat.Statistiek.OpbouwenArtikelKlantAnalyse(PRNr) Set ^HULP(%J,"C",PRNr)="" ;Moederproduct met StockOverKinderen .Else Do .. ; Laatste halfjaar .. Set R=$$COUNTMOVE(PRNr,0,FMonth_" ") .. Set SubHalux=$$COUNTMOVE(PRNr,7587,FMonth_" ") .. Set CumLines=CumLines+R-SubHalux,TotLines=TotLines+R-SubHalux .. ; Laatste jaar .. Set R=$$COUNTMOVE(PRNr,0,OneYear_" ") .. Set SubHalux=$$COUNTMOVE(PRNr,7587,OneYear_" ") .. Set ^HULP(%J,"?",CumLines,+R-SubHalux,PRNr)="" Set ABC("A")=TotLines*75\100,ABC("B")=TotLines*90\100,ABC("C")=TotLines Set OldABC="" Write !!,"Grenswaarde",! ZWrite TotLines Write ! ZWrite ABC 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) ...;Write !, ABC,PRCount," ",CumLines," ",PRNr," ",$P(^KPR(PRNr,0),D,1) ... ;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 COUNTMOVE(PRNr,KLNr,Begin) New I,Cumul,Maand,Rec Set KLNr=$G(KLNr),Begin=$G(Begin) Set Maand=$O(^KSTPR(PRNr,KLNr,Begin),-1) Set Cumul=0 For Set Maand=$O(^KSTPR(PRNr,KLNr,Maand)) Quit:Maand="" Do . Set Rec=^KSTPR(PRNr,KLNr,Maand) . Set Cumul=Cumul+$P(Rec,D,2) Set MPRNr="" For Set MPRNr=$O(^PRBS("IP",PRNr,MPRNr)) Quit:MPRNr="" Do . Quit:'$$IsMoederMetStockOverKinderen^Stat.Statistiek.OpbouwenArtikelKlantAnalyse(MPRNr) ; Geen moederproduct met StockOverKinderen . Set BSKey="" . For Set BSKey=$O(^PRBS("IP",PRNr,MPRNr,BSKey)) Quit:BSKey="" Do . . Quit:^PRBS("IP",PRNr,MPRNr,BSKey)'="K" ; Alleen KIND producten geen halffabrikaten . . Set Maand=$O(^KSTPR(MPRNr,KLNr,Begin),-1) . . For Set Maand=$O(^KSTPR(MPRNr,KLNr,Maand)) Quit:Maand="" Do . . . Set Rec=^KSTPR(MPRNr,KLNr,Maand) . . . Set Cumul=Cumul+$P(Rec,D,2) Quit Cumul ; 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^vhLib.DataTypes($$CALCDATE^vhLib.DataTypes($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