MRPSTOCK ; Stock en reservatie van de werkvloer [ 11/08/2003 8:40 PM ] #include %Prod.Product Quit STAT Set %J=$$%J^vhRtn1() Kill ^HULP(%J) Set BeginM=$G(BeginM,$$CALCDATE^vhDTyp($H,"M","FD")) ;Set BeginM="" ; Indien geen BeginMaand gewenst ; Opbouw sorteerglobal Set PRNr="" For Set PRNr=$O(^PRSTOCK("D",PRNr)) Quit:PRNr="" Do .Quit:$P(^PRSTOCK("D",PRNr),D,5)="" .Quit:'$D(^KPR(PRNr)) .Quit:$P(^KPR(PRNr,0),D,1)["*KP*" ; Geen kindproducten .Set ^HULP(%J,$$SORTKEY^PRODUKT(PRNr))=PRNr ; Export van sorteerglobal Set Dev=0 Set Dev=$$OPEN^vhDEV(,"WVStock Stat.txt","W") Use Dev Write $TR("Plaats;PRNr;Korttekst;WV Stock;HBPunt;HBQty;Jaar;HalfJaar;LstMaand",";",$C(9)),! Set Key="" For Set Key=$O(^HULP(%J,Key)) Quit:Key="" Do .Set PRNr=^HULP(%J,Key) .Set Rec0=^KPR(PRNr,0) .Set KeyI=$O(^KPR(PRNr,"J")) .Set CiffPPL=$P(^KPR(PRNr,KeyI),D,23) .Set Rec15=$G(^KPR(PRNr,15)) .Set RecST=^PRSTOCK("D",PRNr) .Set BeginFS=$P(RecST,D,5) .Set Jaar=$$PROD^STAT(PRNr,0,"2006.05 ","2007.04 ",1) .Set HalfJaar=$$PROD^STAT(PRNr,0,"2006.11 ","2007.04 ",1) .Set Maand=$$PROD^STAT(PRNr,0,"2007.04 ","2007.04 ",1) .Write $P(Rec15,D,12),$C(9),PRNr,$C(9),$P(Rec0,D,1),$C(9),$TR(+$J($P(RecST,D,5),0,2),".",","),$C(9),$$QTYDISP(PRNr,$P(Rec15,D,4)),$C(9),$$QTYDISP(PRNr,$P(Rec15,D,5)),*9,$J(Jaar,0,0),*9,$J(HalfJaar,0,0),*9,$J(Maand,0,0) .;Write $C(9),$TR(+$J(CiffPPL,0,4),".",","),$C(9),$TR(+$J(BeginFS,0,4),".",",") .Write ! Close:0'[Dev Dev Quit LIST Set %J=$$%J^vhRtn1() Kill ^HULP(%J) Set BeginM=$G(BeginM,$$CALCDATE^vhDTyp($H,"M","FD")) ;Set BeginM="" ; Indien geen BeginMaand gewenst ; Opbouw sorteerglobal Set PRNr="" For Set PRNr=$O(^PRSTOCK("D",PRNr)) Quit:PRNr="" Do . Quit:$P(^PRSTOCK("D",PRNr),D,5)="" . Quit:'$D(^KPR(PRNr)) . Quit:$P(^KPR(PRNr,0),D,1)["*KP*" ; Geen kindproducten . Set BasisType=$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TB",PRNr,"BasisType")) . If BasisType="" Do . . Set BasisType=$LG(##class(Prod.Kenmerk.DataDefinitie).Get("KAD",PRNr,"BasisType")) . . Set:BasisType'="" BasisType=BasisType="KAD:"_BasisType . Set ^HULP(%J,$S(BasisType="":"*",1:BasisType),$$SORTKEY^PRODUKT(PRNr))=PRNr ; Export van sorteerglobal Set Dev=0 Set Dev=$$OPEN^vhDEV(,"WVStock.txt","W","T") Use Dev Write $TR("Plaats;PRNr;Korttekst;WV Stock;HBPunt;HBQty;CiffPPL;BeginMnd",";",$C(9)),! Set (BasisType,Key)="" For Set BasisType=$O(^HULP(%J,BasisType)) Quit:BasisType="" Do . For Set Key=$O(^HULP(%J,BasisType,Key)) Quit:Key="" Do . . Set PRNr=^HULP(%J,BasisType,Key) . . Set Rec0=^KPR(PRNr,0) . . Set KeyI=$O(^KPR(PRNr,"J")) . . Set CiffPPL=$P(^KPR(PRNr,KeyI),D,23) . . Set Rec15=$G(^KPR(PRNr,15)) . . Set RecST=^PRSTOCK("D",PRNr) . . Set BeginFS=$P(RecST,D,5) . . If BeginM Do . . Set VolgNr="",Found=0 . . . For Set VolgNr=$O(^PRHIST(PRNr,VolgNr),-1) Quit:VolgNr="" Do Quit:Found . . . . Quit:$P(^PRHIST(PRNr,VolgNr),D,5)'="W" . . . . If +$P(^PRHIST(PRNr,VolgNr),D,1)0",! .Do STORE^PRSTOCK("W","S",PRNr,-WVStock,Ref) Quit ZEROHF ;Het op NUL zetten van de halffabrikaten voorraad (producten die reeds gedeeltelijk zijn geproduceerd) New PRNr,HFStock Set PRNr="" For Set PRNr=$O(^PRSTOCK("D",PRNr)) Quit:PRNr="" Do ZEROHFPR(PRNr) Quit ZEROHFPR(PRNr) ;Het op NUL zetten van de halffabrikaten voorraad New HFStock Quit:'$D(^KPR(PRNr)) Set HFStock=$P(^PRSTOCK("D",PRNr),D,10) Quit:'HFStock Write PRNr_" ",$P(^KPR(PRNr,0),D,1),": ",HFStock,"->0",! Set $P(^PRSTOCK("D",PRNr),D,10)="" Quit ; Opslaan van de werkvloer stock ; kan opgeroepen worden van uit excel STOREWV(PRNr,WVStock) Set Q="K",D="\",U=";" Set DT=$$EXTDATE^vhDTyp($H,"DKP") Set %Q1="^KBA(""%1"",$I)" Set Delta=$J(WVStock-$P($G(^PRSTOCK("D",PRNr)),D,5),0,4) Quit:'+Delta "EQ" ;Quit +$P($G(^PRSTOCK("D",PRNr)),D,5)_":"_+WVStock Set:$G(Ref)="" Ref="INV "_$$EXTDATE^vhDTyp($H,"J4") Do STORE^PRSTOCK("W","S",PRNr,Delta,Ref) Quit "OK" QTYDISP(PRNr,QtyVpk) New String Quit:QtyVpk="" "" Set String=$$QTYVPK^MRP(PRNr,QtyVpk) Set:+String'=+$$TRIMN^vhRtn1(QtyVpk) String=String_" ("_QtyVpk_")" Quit String ; ;---VOORRAAD--- MODHFST(PRNr,QtyHF,DimUitV,TimeOut) ; Wijzigen van de werkvloervoorraad rekenighouden met de dimensie van het halffabrikaat ; Op te roepen als functie of procedure afh. Timeout New QtyWV Set QtyWV=$$CV2WV^MRP(PRNr,0,QtyHF,$G(DimUitV)) Quit:$G(TimeOut) $$MODLCK(PRNr,QtyWV,5,TimeOut) Do MODLCK(PRNr,QtyWV,5,"") Quit:TimeOut MODWVST(PRNr,QtyWV,TimeOut) ; Wijzigen van de werkvloervoorraad ; Op te roepen als functie of procedure afh. Timeout Quit:$G(TimeOut) $$MODLCK(PRNr,QtyWV,5,TimeOut) Do MODLCK(PRNr,QtyWV,5,"") Quit SETWVST(PRNr,QtyWV,TimeOut) ; Zetten van de werkvloervoorraad ; Op te roepen als functie of procedure afh. Timeout Quit:$G(TimeOut) $$MODLCK(PRNr,QtyWV,5,TimeOut,1) Do MODLCK(PRNr,QtyWV,5,"",1) Quit MODHalfFabrStock(PRNr,QtyHF,TimeOut) ; Wijzigen van de HALFFABRIKAAT voorraad ; Op te roepen als functie of procedure afh. Timeout Quit:$G(TimeOut) $$MODLCK(PRNr,QtyHF,10,.TimeOut) Do MODLCK(PRNr,QtyHF,10,"") Quit MODHalfFabrDimStock(PRNr,QtyHF,DimUitV,TimeOut) ; Wijzigen van de HALFFABRIKAAT voorraad rekenighouden met de dimensie van het halffabrikaat ; Op te roepen als functie of procedure afh. Timeout New HFNetDim,QtyWV Set HFNetDim=$P($G(^KPR(PRNr,15)),D,7) Set QtyWV=$$CV2WV^MRP(PRNr,0,HFNetDim,QtyHF,$G(DimUitV)) Quit:$G(TimeOut) $$MODLCK(PRNr,QtyWV,10,TimeOut) Do MODLCK(PRNr,QtyWV,10,"") Quit ;---RESERVATIE --- MODHFRES(PRNr,QtyHF,DimUitV,TimeOut) ; Wijzigen van de werkvloerreservatie rekenighouden met de dimensie van het halffabrikaat ; Op te roepen als functie of procedure afh. Timeout New HFNetDim,QtyWV Set HFNetDim=$P($G(^KPR(PRNr,15)),D,7) Set QtyWV=$$CV2WV^MRP(PRNr,0,HFNetDim,QtyHF,$G(DimUitV)) Quit:$G(TimeOut) $$MODLCK(PRNr,QtyWV,6,TimeOut) Do MODLCK(PRNr,QtyWV,6,"") Quit MODWVRES(PRNr,QtyWV,TimeOut) ; Wijzigen van de werkvloerreservatie ; Op te roepen als functie of procedure afh. Timeout Quit:$G(TimeOut) $$MODLCK(PRNr,QtyWV,6,TimeOut) Do MODLCK(PRNr,QtyWV,6,"") Quit SETWVRES(PRNr,QtyWV,TimeOut) ; Zetten van de werkvloerreservatie ; Op te roepen als functie of procedure afh. Timeout Quit:$G(TimeOut) $$MODLCK(PRNr,QtyWV,6,TimeOut,1) Do MODLCK(PRNr,QtyWV,6,"",1) Quit MODHFSTOCK(PRNr,QtyHF,TimeOut) ; Wijzigen van de HALFFABRIKAAT voorraad ; Op te roepen als functie of procedure afh. Timeout Quit:$G(TimeOut) $$MODLCK(PRNr,QtyHF,10,.TimeOut) Do MODLCK(PRNr,QtyHF,10,"") Quit ;--- STOCK SCAN --- SCAN Write @F11,@F1,@FMTI," STOCKSCAN van de WERKVLOERVOORRAAD"," - ",QN,@FMTi Set CRef=$$OPEN^MRPRES() Set PRNr=0 Set (Cnt,OrdCnt)=0 Set FP=2301 Write @F,"Producten verwerkt : " For Set PRNr=$O(^KPR(PRNr)) Quit:PRNr="" Do . Set Cnt=Cnt+1 . If Cnt#100=0 Set FP=2322 Write @F,@F2,Cnt . Do SCANONE(CRef,PRNr,"RL") zw CRef ;Do CLOSE^MRPRES(CRef) Quit SCANONE(CRef,PRNr,Opties,TotWeek) ; Controle van 1 product ; Optie bevat "R" Controle op reservatie ; Optie bevat "L" Controle op limiet Set Rec15=$G(^KPR(PRNr,15)) Set HerbQty=$$QTYVPK^MRP(PRNr,$P(Rec15,D,5)) Set PRStock=$G(^PRSTOCK("D",PRNr)) Set Stock=$P(PRStock,D,5) ;Set Res=$P(PRStock,D,6) ; Set Res=$P($$VerkoopKinderen^PRODUKT4(PRNr,.TotWeek),D,2) ; gewijzigd PV 16/10/2008 alleen halffabrikaten, geen kindproducten (bv Orgalux) Set BestQty=0 If Opties["R" Do ; controle reservatie . New VPQty,BestQty2 . Set Faktor=HerbQty*.1 ; Zekerheidsfaktor voor goederen die op de werkvloer op voorraad liggen : 10% . Quit:Res+Faktor'>Stock ;voldoende of juist voldoende voorraad . Set VPQty=$$RNDVPK^MRP(PRNr,1) . Set BestQty=$$RNDVPK^MRP(PRNr,Res+Faktor-Stock+HerbQty) . Set BestQty2=Res+Faktor-Stock+HerbQty . ;Als er slecht 1 verpakking genomen wordt betekend dit dat het gaat over een niet courant product OF dat er veel in een verpakking zitten. . ;het heeft dan geen zin om een extra doos op reserve uit het mag. te halen. . ;de volgende test beperkt de extra doos . If BestQty-BestQty2>(VPQty/5),VPQty>5,HerbQty=VPQty Set BestQty=BestQty-VPQty Else If Opties["L" Do ; controle limiet . Set HerbPunt=$P(Rec15,D,4) . Set HerbPunt=$$QTYVPK^MRP(PRNr,HerbPunt) . Quit:'$L(HerbPunt) . Set BestQty=$S(HerbPunt>Stock:$S(BestQty>HerbQty:BestQty,1:HerbQty),1:BestQty) ; Indien herbestelpunt bereikt dan kijken wat groter is verschil reservatie of herbestelqty ; Indien onvoldoende praktische voorraad dan juist het nodige If $$GETSTOCK^PRODUKT4(PRNr,"P")0 Set @CRef@("TO",PRNr)=BestQty Quit ;--- LOWLEVEL --- MODLCK(PRNr,QtyWV,Piece,TimeOut,IsSet) ; Wijzigen van reservatie of stock ; Op te roepen als functie of procedure afh. Timeout ; De lock wordt met of zonder timeout uitgevoerd, ; indien met timeout dan return = true ls de lock succesvol is If TimeOut Lock +^PRSTOCK("D",PRNr):TimeOut Else Quit 0 Else Lock +^PRSTOCK("D",PRNr) Set $P(^PRSTOCK("D",PRNr),D,Piece)=$S($G(IsSet):0,1:$P($G(^PRSTOCK("D",PRNr)),D,Piece))+QtyWV Lock -^PRSTOCK("D",PRNr) Quit:TimeOut 1 Quit