#include BL.Derde.KlantSpecifiek #include BL.Derde.LevSpecifiek #include Prod.Product MRPRES ;Reservatie van halffabrikaten [ 11/29/2003 8:15 AM ] CLEAN(TOENr) Set FabKey=TOENr_";" For Set FabKey=$O(^HADPR("F",FabKey)) Quit:$P(FabKey,";")'=TOENr Do .Set Rec=^HADPR("F",FabKey) .Kill ^HADPR("F",FabKey) .Set ^HADPR("F",FabKey)=Rec Quit ONEPK(CRef,FabKey,PRNr,QtyToe,Status) ; Produktieklaar maken, laatste controle voor reservatie en eventueel aanmaak van transfer orders ;Status via .Local ;Do ONERES(CRef,FabKey,PRNr,QtyToe,"FPW",.Status) ; De hercalculatie gebeurt globaal op voorhand, niet meer individueel ; Nakijken of een transfer order nodig is ;If ((Status["W")!(Status["F")!(Status["P")),(Status'["X") Do Quit:##class(OBJTimpl.CheckObjectiveFase).IsProductieSysteemMES(PRNr) ; deze producten worden verwerkt door het OBJT MES Set Status="" Set ForeCastDagen=3 ; aantal forecast dagen voor werkvloerproducten op voorraad Do BLDTORD(CRef,FabKey,PRNr,ForeCastDagen) Quit BLDTORD(CRef,FabKey,PRNr,ForeCastDagen) ; Controle welke halffabrikaten moeten opgenomen worden in een transferorder New HFCode,HFPRNr,DimBrut,HFQty,ARRec,HFRec,HFRecD Quit:$P($G(^HADPR("F",FabKey,"K")),D,3)="A" ; Reeds productie klaar Set (HFCode)="" For Set HFCode=$O(^HADPR("F",FabKey,"AR",HFCode)) Quit:HFCode="" Do . Set ARRec=^HADPR("F",FabKey,"AR",HFCode) . Set HFRec=$G(^PRBS("BS",PRNr,HFCode)) ; als de bouwstenen gewijzigd werden nadat het product geactiveerd was. . Quit:$P(HFRec,D,3)'="H" ; Geen halffabrikaat . Set HFRecD=$G(^PRBS("BS",PRNr,HFCode,"D")) . Set HFPRNr=$P(HFRec,D,1) . Quit:('$P(^KPR(HFPRNr,2),D,15))&&($$GETSTOCK^PRODUKT4(HFPRNr,"F",,0,1)<1) ; Werkvloer product zonder voorraad in magazijn . Quit:($$$ProductGet(HFPRNr,$$$WerkvloerSubMag)?1"KANBAN".E) ; Kanban niet opnemen in transferorder . If HFCode?1(1"PRBOONDE.",1"PRKOPLI.",1"PRKOPRE.",1"PRFRONTB.",1"PRFB.")3N,($$PRODGRP^PRODUKT(PRNr)="TA.B"),$$IsGemonteerdeBinnenlade(PRNr) Do ;TA'OR onderdelen te monteren bij binnenlade . . Set @CRef@("TAX ASSEMBLAGE",HFPRNr,FabKey)=$P(ARRec,D,2)_"\"_$P(HFRecD,D,2) . If $L($P($G(^KPR(HFPRNr,15)),D,5)) Do ; Er is een herbestelpunt ingevuld daarom overlaten aan de SCAN^MRPSTOCK . . Set @CRef@("SCANONE",HFPRNr,FabKey)=$P(ARRec,D,2)_"\"_$P(HFRecD,D,2) ; deze moeten absoluut opgenomen worden in de SCANONE^MRPSTOCK omdat deze klaargezet is (ook al is deze meerdere dagen verder) . Else If ($P(ARRec,D,6)="W")||($P(ARRec,D,6)="P")||($P(ARRec,D,6)="F") Do ; Te kort op werkvloer wordt bepaald door ACTIVERING . . Set DimBrut=$P(HFRecD,D,2) . . Set HFQty=$P(ARRec,D,2) ; Aantal HFprodukten = QtyToe*QtyHFperAfgewerkStuk . . Set @CRef@("TO",HFPRNr,FabKey,HFCode)=HFQty . . Set:$L(HFRecD) @CRef@("TO",HFPRNr,FabKey,HFCode,"D")=HFRecD Quit IsGemonteerdeBinnenlade(PRNr) Set ConfiguratorService = ##class(APPS.VKP.Maatwerk.impl.ConfiguratorService).%New() Set AppsNaarEconConverter = ##class(ECONimpl.PM.Maatwerk.AppsConverter).%New() #dim IngegevenKenmerken As APPS.PM.Maatwerk.dto.IngegevenKenmerken = ConfiguratorService.GeefOnverwerkteKenmerkenVanProduct(PRNr) Quit:'##class(APPS.PM.Maatwerk.impl.IngegevenKenmerkenTypeAPI.IsGemonteerdeLadeBepaler).%New().IsGemonteerdeLade(IngegevenKenmerken) -1 #dim arKenmerken As %ArrayOfDataTypes = AppsNaarEconConverter.ConverteerAppsNaarEcon(IngegevenKenmerken).ToArray() Quit arKenmerken.GetAt("Data.Kenmerken.Isbinnenlade")="true" ONERES(CRef,FabKey,PRNr,QtyToe,Opties,Status,NoResDel) ; Controle en reservatie van HFprods ; Status via .Local ; Opties: wat te controleren F=Fysische stock,Praktische stock, W=werkvloer magazijn, T=toelevering, Z = Alles of niets Set Status="" Quit:##class(OBJTimpl.CheckObjectiveFase).IsProductieSysteemMES(PRNr) ; deze producten worden verwerkt door het OBJT MES Do DELONE(FabKey,PRNr,.Status,$G(NoResDel)) Quit:Status="LCK" ; HF gelockt Do CHKONE(CRef,FabKey,PRNr,QtyToe,Opties,.Status) Do MARK(FabKey,PRNr,QtyToe,Status,$TR(Opties,"TZ","")_"X") Quit SCANZonderActivering New NoActivering Set NoActivering=1 SCAN New Scan Set Scan=1 Write @F11,@F1,@FMTI," CONTROLE Reservatie halffabrikaten"," - ",QN,@FMTi NIGHT New D,FabKey,Batch,VolgNr,CRef,Time,HFCode,HFRec,HFPRNr,PRNr,RecO,QtyWV,Qty,Cnt Set D="\",CRef=$$OPEN^MRPRES() Set PRNr=0 Set ScanWeek=$$EXTDATE^vhLib.DataTypes($$CALCDATE^vhLib.DataTypes($H,"A",5),"DW") ; week tot waar de SCANONE de halffabrikaten mag sommeren Set (Cnt,OrdCnt)=0 If $G(Scan) Set FP=2301 Write @F,@F2,"Opzoeken gereserveerde halffabrikaten" ; Herreservatie (zonder toelevering) Set CRef=$$OPEN() Set (Batch,VolgNr)="" ; Doorlopen van alle batches For Set Batch=$O(^HADPR("O",Batch)) Quit:Batch="" Do . For Set VolgNr=$O(^HADPR("O",Batch,VolgNr)) Quit:VolgNr="" Do .. Set RecO=^HADPR("O",Batch,VolgNr) .. Set PRNr=$P(RecO,D,3) .. Quit:PRNr'?4.7N .. Quit:'$D(^PRBS("BS",PRNr)) ; Alleen producten met halffabrikaten ! .. Set FabKey=$$FABKEYB^HADOPV(RecO) .. ;Write:'$D(^TO("IU",$P(FabKey,";"),$P(FabKey,";",2))) "Does not exist FabKey",Batch," ",VolgNr," ",FabKey,! .. If '$D(^HADPR("F",FabKey,"A")),'$G(NoActivering),$P($$GENTYP^HAD(PRNr),D,1,2)'=("TBX"_D_"PR+") Do ; Opzetten van Activering markering ... Quit:$$CheckContract^HADOPV(FabKey) ; geen contracten ... Set Qty=##class(BL.Legacy.HaluxProductieOpvolging).MARKPR(FabKey,"A","+",$P(RecO,D,7),$H) .. Set Time=$P($G(^HADPR("F",FabKey,"A")),D,2) ; tijdstip van activering, belangrijk voor herbereken reservering .. Quit:'Time .. Set Cnt=Cnt+1 .. If $G(Scan),Cnt#10=0 Set FP=2325 Write @F,@F2,Cnt .. If $P($G(^HADPR("F",FabKey,"K")),D,3)'="A" Do ; Niet In productie ... Set @CRef@("S",Time,FabKey)=RecO ; bijhouden voor activering & Sorteren volgens activerings tijdstip .. Else Do ; Cumul van de reservatie van HFprod nog in productie ... Set HFCode="" ... For Set HFCode=$O(^HADPR("F",FabKey,"AR",HFCode)) Quit:HFCode="" Do .... Set HFRec=^HADPR("F",FabKey,"AR",HFCode) .... Set HFPRNr=$P(HFRec,D) .... Set QtyWV=$P(HFRec,D,3) .... ; Alleen indien het halffabrikaat nog op de werkvloer staat en nog niet op 'HalfFabrikaat' .... Set:$P(HFRec,D,8)'="H" @CRef@("P",HFPRNr)=$G(@CRef@("P",HFPRNr))+QtyWV ; Wissen van de reservatie door gelijk te stellen aan de productie reservatie Set HFPRNr="" If $G(Scan) Set FP=2301 Write @F,@F2,"Wissen werkvloerreservering " For Set HFPRNr=$O(^PRSTOCK("D",HFPRNr)) Quit:HFPRNr="" Do . Do SETWVRES^MRPSTOCK(HFPRNr,$G(@CRef@("P",HFPRNr))) ;+$P(^PRSTOCK("D",HFPRNr),D,9)) ; gewijzigd PV 12/08/2014 - kind producten moeten niet bij de werkvloer bijgeteld en zeker niet als het om een teruggave gaat ; Herberekenen reservatie If $G(Scan) Set FP=2301 Write @F,@F2,"Herberekenen reservering" Set (Time,FabKey)="" For Set Time=$O(@CRef@("S",Time)) Quit:Time="" Do . For Set FabKey=$O(@CRef@("S",Time,FabKey)) Quit:FabKey="" Do .. Set RecO=@CRef@("S",Time,FabKey) .. Set PRNr=$P(RecO,D,3) .. Set Qty=$P(RecO,D,7) .. Do ONERES(CRef,FabKey,PRNr,Qty,"WFP",.Status,1) ;Set TmpNr=$O(^PVMRP(""),-1)+1 ;Set ^PVMRP(TmpNr)=$zdt($H,3) ;m ^PVMRP(TmpNr,1)=@CRef Kill @CRef@("S") Do CLOSE(CRef) Quit ExceedHFLeverTermijn(FabKey) ; Bepalen of de gevraagde levertermijn van het eindproduct groter is dan max. levertermijn van de halffabrikaten Set TLNr=^TO("IU",$P(FabKey,";"),$P(FabKey,";",2)) Set TLRec=^KTO(6332,$P(FabKey,";"),TLNr) Set TLLeverWeek=$$INTDATE^vhLib.DataTypes($P(TLRec,D,25),"DW") Set HFLeverTermijn=$$LeverTermijn^PRBS($P(TLRec,D,2),1) Set HFLeverWeek=$$CALCDATE^vhLib.DataTypes($H,"AW",HFLeverTermijn) Quit:TLLeverWeek>HFLeverWeek 1 Quit 0 OPEN() ; Aanmaak van de cache New %J Set %J=$$%J^vhRtn1() Kill ^HULP(%J) Quit $NAME(^HULP(%J)) CLOSE(CRef) ; Aan te maken transfer order met eventueel KOMtoelevering : ; @CRef@("TO",HFPRNr)=Qty\SubMag ; @CRef@("TO",HFPRNr,FabKey,HFCode)=QtyHF\DimUitv\SubMag If $D(@CRef@("TO"))||$D(@CRef@("SCANONE")) Do . Set TimeStamp=$H . Merge ^MRPRESLog($P(TimeStamp,",",1),$P(TimeStamp,",",2),"MARK")=@CRef . Do ScanVoorraadProducten^MRPSTOCK(CRef,2) . Merge ^MRPRESLog($P(TimeStamp,",",1),$P(TimeStamp,",",2),"FETCH")=@CRef . ;Do BalanceLiRe(CRef) . ;Merge ^MRPRESLog($P(TimeStamp,",",1),$P(TimeStamp,",",2),"BALANCE")=@CRef@("TO") . Do SplitSubMag(CRef) . Kill @CRef@("TO") . Merge ^MRPRESLog($P(TimeStamp,",",1),$P(TimeStamp,",",2),"SPLIT")=@CRef@("STO") . Do BLD^MRPTORD($NAME(@CRef@("STO"))) . Merge ^MRPRESLog($P(TimeStamp,",",1),$P(TimeStamp,",",2),"ORDER")=@CRef@("STO") . Do ControleProductenNietInOrder^MRPTORD($NAME(@CRef@("STO")),$NAME(@CRef@("MISSING"))) . Merge ^MRPRESLog($P(TimeStamp,",",1),$P(TimeStamp,",",2),"MISSING")=@CRef@("MISSING") . If $D(@CRef@("MISSING")) Do . . Do ToonProductenNietInOrder($NAME(@CRef@("MISSING"))) . Do AddAssemblageSubMag(CRef) ; Onderdelen naar de assemblage werkpost te brengen voor TAX . Kill @CRef@("TAX ASSEMBLAGE") Do CleanHistoriek() Quit RETRY ; stap 0 : meer uitleg in documentatie bij zoektermen 'Klaarzetten en doorsturen van transferorders crashes' ; stap 1 : Opzoeken van de TimeStamp in MRPRESLog en hieronder de waarden 99999,99999 vervangen (uitgedrukt in $H) ; stap 2 : de niet verwerkte SPLIT groepen mergen naar een tijdelijke local ; stap 3 : BLD^MRPTORD uitvoeren met de tijdelijke local Set CRef="cache" For SplitGroepKey="C","G","~" Do //splitgroepen uit stap 2 gebruiken!! . Merge @CRef@("STO",SplitGroepKey)=^MRPRESLog(99999,99999,"SPLIT",SplitGroepKey) //timestamp van stap 1 invullen!!! Do BLD^MRPTORD($NAME(@CRef@("STO"))) q RETRY2 ; stap 0 : meer uitleg in documentatie bij zoektermen 'Klaarzetten en doorsturen van transferorders crashes' ; stap 1 : Opzoeken van de TimeStamp in MRPRESLog ; stap 2 : de niet verwerkte SPLIT groepen mergen naar een tijdelijke local ; stap 3 : BLD^MRPTORD uitvoeren met de tijdelijke local Set CRef="cache" Kill cache Merge @CRef=^MRPRESLog(66778,55603,"MARK") zw @CRef Do CLOSE(CRef) Quit RETRYMARK ; stap 0 : meer uitleg in documentatie bij zoektermen 'Klaarzetten en doorsturen van transferorders crashes' ; stap 1 : Opzoeken van de TimeStamp in MRPRESLog ; stap 2 : de niet verwerkte SPLIT groepen mergen naar een tijdelijke local ; stap 3 : BLD^MRPTORD uitvoeren met de tijdelijke local Set CRef="cache" Kill cache Read "Geef Horolog datum en tijd met , seperated: ",Horolog Quit:(+$P(Horolog,",")=0)||(+$P(Horolog,",",2)=0) ; foutieve ingave Quit:$D(^MRPRESLog($P(Horolog,","),$P(Horolog,",",2)))'>1 ;geen subnodes Merge @CRef=^MRPRESLog($P(Horolog,","),$P(Horolog,",",2),"MARK") zw @CRef Do CLOSE(CRef) Quit CleanHistoriek() New Datum Set Datum=$H-60 For Set Datum=$O(^MRPRESLog(Datum),-1) Quit:Datum="" Do . Kill ^MRPRESLog(Datum) Quit AddAssemblageSubMag(CRef) ; Toevoegen aan de speciale pickopdracht 999999 in Pickstar Do ##class(APPS.Halux.PPS.DocumentGenerator.PickingOnderdelenNaarAssemblage).%New().GenereerDocument($Name(@CRef@("TAX ASSEMBLAGE"))) Quit ToonProductenNietInOrder(OntbrekendeCRef) New Body,SubMag,PRNr,Aantal Set Body="Bij het klaarzetten werden volgende halffabrikaten niet opgenomen in een order :" Set SubMag="" For Set SubMag=$O(@OntbrekendeCRef@(SubMag)) Quit:SubMag="" Do . Set PRNr="" . For Set PRNr=$O(@OntbrekendeCRef@(SubMag,PRNr)) Quit:PRNr="" Do . . Set Aantal=$P(@OntbrekendeCRef@(SubMag,PRNr),"\") . . Set Body= Body_$C(13)_SubMag_" | "_$J(PRNr,7,0)_" : "_$$$PRGet($$$KortTekst)_" | "_$J(Aantal,0,0) Do SendMiniMail^vhLib.Mail("klaarzetten@halux.be",$lb("planning@halux.be"),"Aanmaak transferorder : ontbrekende producten",Body) Quit VoegKenmerkToe(lbKenm, Kenmerk) New tmp //kenmerk opvragen Set tmp=$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TB",PRNr,Kenmerk)) //omdraaien als LiRe li->re; re->li If Kenmerk = "LiRe" do . Set tmp = $S(tmp="LI":"RE",tmp="RE":"LI",1:tmp) // toevoegen aan lijst Set:$L(tmp) lbKenm=lbKenm_$lb($lb(Kenmerk,tmp)) Quit GetMirrorPRNr(PRNr) // Het rechts/links mirror product ophalen van een product adhv de kenmerken ; KLNr is optioneel het kan zijn het product beperkt wordt New blMetaKenm, lbKenm, LiRe, MirrorLiRe ; Het mirrorproduct wordt opgehaald adhv de kenmerken van het referentie product ; (alle kenmerken worden opgevraagd, en als ze gedefineerd zijn, toegevoegd aan de kenmerklijst) ; (LiRe is speciaal geval : het moet omgedraaid worden li->re; re->li Set lbKenm="" Do VoegKenmerkToe(.lbKenm, "BasisType") Do VoegKenmerkToe(.lbKenm, "GlijderType") Do VoegKenmerkToe(.lbKenm, "Verpakking") Do VoegKenmerkToe(.lbKenm, "LadeDiepte") Do VoegKenmerkToe(.lbKenm, "DraagKracht") Do VoegKenmerkToe(.lbKenm, "Design") Do VoegKenmerkToe(.lbKenm, "Opties") Do VoegKenmerkToe(.lbKenm, "FrontType") Do VoegKenmerkToe(.lbKenm, "BreedteIntern") Do VoegKenmerkToe(.lbKenm, "Kleur") Do VoegKenmerkToe(.lbKenm, "ZijwandHoogte") Do VoegKenmerkToe(.lbKenm, "RugHoogte") Do VoegKenmerkToe(.lbKenm, "RugBreedte") Do VoegKenmerkToe(.lbKenm, "FBevestiging") Do VoegKenmerkToe(.lbKenm, "LiRe") Set Actief=$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TB",PRNr,"Actief")) ; Actief geeft soms de klantnr Set KLNr=$S(Actief?4.6N:Actief,1:"") ; lijst van mirrorproducten ophalen (we kunnen er enkel iets mee doen als het er slechts 1 is) ; Set blMetaKenm=##class(Prod.GAMeta.ItemPR).%New() ; Set PRList=blMetaKenm.GetProductViaKenm("TB",lbKenm, "") Set lbPR=$$PRGetProductViaKenmerkLijst^Prod.GAMeta.Item.tmpDev("TB",lbKenm,KLNr) Quit:lbPR="" "" Quit:$LL(lbPR)>1 "" Quit $LI(lbPR) BalanceLiRe(CRef) New PRNr, MirrorPRNr, RefQty, MirrorQty,Actief,KLNr Kill @CRef@("BAL") ; Balance Set PRNr="" For Set PRNr=$O(@CRef@("TO",PRNr)) Quit:PRNr="" Do . Do CNTRDEF^MRP(PRNr) ; controle default . Quit:$D(@CRef@("BAL",PRNr)) . Set LiRe=$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TB",PRNr,"LiRe")) ; Links Of rechts . Quit:(LiRe'="LI")&&(LiRe'="RE") . Set MirrorPRNr=$$GetMirrorPRNr(PRNr) . Quit:MirrorPRNr="" . Set RefQty=$P($G(@CRef@("TO",PRNr)),D) . Set MirrorQty=$P($G(@CRef@("TO",MirrorPRNr)),D) . //Set:MirrorQty'=RefQty $P(@CRef@("TO",MirrorPRNr),D)=$S(MirrorQty rollback . Kill ToeCache ; Deel is niet gelukt dan geen toelevering aanmaken . Do DELONE(FabKey,PRNr) . Set Status="STOP" Merge @CRef@("TO")=ToeCache Quit ; controleren of het losse onderdelen zijn die voor klant DeDecker ; opm : de losse onderdelen worden door DeDecker separaat als Proforma besteld CheckLosDedecker(TOENrOrFabKey,PRNr,BSRec) New KLNr Quit:$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TBX",PRNr,"VERPAK"))'?1(1"A",1"B") 0 ; alleen verpakking = VHOSS Quit:$P(BSRec,D,19)'="LOS" 0 ; alleen losse onderdelen Quit:$P(TOENrOrFabKey,";")="" 0 Set KLNr=$P(^KTO($$$LevHalux,$P(TOENrOrFabKey,";"),1),"\",8) Quit KLNr=$$$KlantDedecker CHKHF(FabKey,PRNr,HFCode,HFPRNr,QtyToe,Opties,HFStatus,QtyRes,QtyEenh,ToeCache) ; Controle en reservatie van een halffabrikaat ; HFStatus, QtyRes,QtyEenh,ToeCache via .Local ; opties: wat te controleren F=fysische stock, P=praktische stock, W=werkvloer magazijn, T=toelevering New FysStock,Rec15,Rec0,Rec1,Rec2,MetaTag,WVStock,WVRes,HFRec,QtyHF,HFRecD,NetDim,BrutDim,UitvDim,QtyReq,QtyMagReq,QtyWVRes,QtyWVReq,TotHFSt,StockE,TotMagSt,RecJ If '$D(^KPR(HFPRNr,0)) Do Quit ; HalfFabrikaat bestaat niet .Set HFStatus="X" .Set (QtyRes,QtyEenh)=0 Lock +^PRSTOCK(HFPRNr):5 Else Do Quit . Set HFStatus="LCK",(QtyRes,QtyEenh)=0 Set PrakStock=$$GETSTOCK^PRODUKT4(HFPRNr,"P") Set FysStock=$$GETSTOCK^PRODUKT4(HFPRNr,"F") Set Rec0=$G(^KPR(HFPRNr,0)) Set Rec1=$G(^KPR(HFPRNr,1)) Set Rec2=$G(^KPR(HFPRNr,2)) Set Rec15=$G(^KPR(HFPRNr,15)),StockRec=$G(^PRSTOCK("D",HFPRNr)) Set MetaTag=$P(Rec15,D,10) Set WVStock=$P(StockRec,D,5) Set WVRes=$P(StockRec,D,6) Set HFRec=^PRBS("BS",PRNr,HFCode) Set QtyHF=$P(HFRec,D,2) If "PR"[MetaTag { Set HFRecD="1\1\1" } Else ; Het product is aangegeven als zijnde inkortbaar met een lengte -> "PR1DIM" { Set HFRecD=$G(^PRBS("BS",PRNr,HFCode,"D")) } Set NetDim=$P(HFRecD,D,1) Set BrutDim=$P(HFRecD,D,2) Set UitvDim=$P(HFRecD,D,3) Set (QtyRes,QtyReq)=QtyToe*QtyHF,HFStatus="" Set QtyMagReq=$$TELMAGST^MRP(HFPRNr,QtyReq,1,BrutDim,NetDim) Set (QtyWVRes,QtyWVReq)=$$CV2WV^MRP(HFPRNr,0,QtyRes,UitvDim,$P(Rec15,D,7)) // Do ##class(vhLib.Logger).%New("MAATWERK FRAMEWORK").Warning("MRPRES.mac debug", "MPRNr='"_PRNr_"'") If QtyHF,Opties["W" Do ;Kijken of in het werkvloer magazijn voldoende producten zijn . ; Aantal HF mogelijk met de WV voorraad . If ($P(Rec15,D,5)="")&&(+($P(Rec2,D,15))'=0) Do ;Er wordt geen voorraad gehouden van dit product Of het product, dus steeds bij bestellen - toegevoegd PV 15/02/02009 . . Set HFStatus="W" . Else Do . . Set TotHFSt=$$TELHFST^MRP(HFPRNr,WVStock-WVRes,BrutDim,NetDim) . . If TotHFSt<(QtyReq) Do ; te weinig in voorrraad . . . Set HFStatus="W" If QtyHF,Opties["P",HFStatus["W" Do ; Kijken of er voldoende praktische stock is . Set StockE=$$CV2EENH^MRP(HFPRNr,PrakStock)+WVStock-WVRes . Set TotHFSt=$$TELHFST^MRP(HFPRNr,StockE,BrutDim,NetDim) . If TotHFSt0 Do .Do MODWVRES^MRPSTOCK(HFPRNr,QtyWVRes) Do SETHFAR(FabKey,HFCode,HFPRNr,HFStatus,QtyRes,QtyWVRes,QtyReq,QtyWVReq) Lock -^PRSTOCK(HFPRNr) Set:QtyHF QtyRes=QtyRes\QtyHF ; aantal eindproducten ; via .Local HFStatus;AantalEindProducten;AantalHalffabrikaten Quit SETHFAR(FabKey,HFCode,HFPRNr,HFStatus,QtyRes,QtyWVRes,QtyReq,QtyWVReq) ; Opzetten van het activatie/reservering record in ^HADPR New HFRec Set HFRec=$G(^HADPR("F",FabKey,"AR",HFCode)) Set $P(HFRec,D,1)=HFPRNr Set $P(HFRec,D,2)=QtyRes Set $P(HFRec,D,3)=QtyWVRes Set $P(HFRec,D,4)=QtyReq Set $P(HFRec,D,5)=QtyWVReq Set $P(HFRec,D,6)=HFStatus Set $P(HFRec,D,7)=$H Set ^HADPR("F",FabKey,"AR",HFCode)=HFRec Quit PROPAGA(HFStatus,QtyHF,HFPRNr,Status,QtyRes) ; Propagatie: overbrengen van de halffabricaat status naar de product status ; QtyRes en Status doorgeven via .Local If HFStatus="LCK" Set QtyRes=0,Status=HFStatus ; Halffabrikaat was gelockt For I=1:1:$L(HFStatus) Do . Set StatChar=$E(HFStatus,I) . Quit:Status[StatChar ; reeds aanwezig . ;Quit:Status="W",HFPRNr in Magazijn "M" . Set Status=Status_StatChar Set:QtyRes>QtyHF QtyRes=QtyHF Quit DELONE(FabKey,PRNr,Status,NoResDel,QtyRcp) ; Reservatie van alle halffabrikaten verwijderen van een eindprod New HFCode Quit:$P($G(^HADPR("F",FabKey,"K")),D,3)="A" ; Reeds productie klaar Set (Status,HFCode)="" For Set HFCode=$O(^HADPR("F",FabKey,"AR",HFCode)) Quit:HFCode="" Do Quit:Status="LCK" . Quit:$P(^HADPR("F",FabKey,"AR",HFCode),D,8)="H" ; Reeds op HalfFabrikaat gezet reservatie is reeds verwijderd . If $D(QtyRcp) && $D(^PRBS("BS",PRNr,HFCode)) Do .. Set QtyHFRcp=QtyRcp*$P(^PRBS("BS",PRNr,HFCode),D,2) .. Do DELHF(FabKey,HFCode,.Status,$G(NoResDel),QtyHFRcp) ; Gedeelte reservatie verwijderen . Else Do DELHF(FabKey,HFCode,.Status,$G(NoResDel),$G(QtyRcp,1)) ; Bestaande reservatie verwijderen Quit DELHF(FabKey,HFCode,Status,NoResDel,QtyHFRcp) ; Verwijderen van de reservatie op een halffabrikaten ; Status via .Local New HFRec,StockRec,HFPRNr Set Status="" Set HFRec=^HADPR("F",FabKey,"AR",HFCode) Set HFPRNr=$P(HFRec,D,1) Quit:'$P(HFRec,D,2) ; Niets gereserveerd dus ook niet wissen If $D(QtyRcp) Do ; Verwijderen van de reservatie beperkt tot gerecepteerd aantal . Set QtyWVRes=$P(HFRec,D,5)*QtyHFRcp/$P(HFRec,D,4) . Set:QtyWVRes>$P(HFRec,D,3) QtyWVRes=$P(HFRec,D,3),QtyHFRcp=$P(HFRec,D,2) . If 'NoResDel,$$MODWVRES^MRPSTOCK(HFPRNr,-QtyWVRes,5) ; Reservatie verwijderen . Else If 'NoResDel Set Status="LCK" Quit . Set $P(HFRec,D,2)=$P(HFRec,D,2)-QtyHFRcp . Set $P(HFRec,D,3)=$P(HFRec,D,3)-QtyWVRes . Set ^HADPR("F",FabKey,"AR",HFCode)=HFRec Else Do ; Volledige reservatie aantal verwijderen . Set QtyWVRes=$P(HFRec,D,3) . If 'NoResDel,$$MODWVRES^MRPSTOCK(HFPRNr,-QtyWVRes,5) ; Reservatie verwijderen . Else If 'NoResDel Set Status="LCK" Quit . Set $P(HFRec,D,2)="" . Set $P(HFRec,D,3)="" . Set $P(HFRec,D,6)=$TR($P(HFRec,D,6),"FPW","") ; Verwijderen van de status F, P en W . Set $P(HFRec,D,7)="" ; Tijdstip . Set ^HADPR("F",FabKey,"AR",HFCode)=HFRec Quit