UglyPickingCNTs 0 BL.Lib.BaseObj 1 %Library.Boolean Heeft data maar geen kinderen . Set PBLine=@@airefPB ;airefPB is bijv. aiPB(...), @airefPB is bijv. aPB(...), dus @@airefPB is de data-inhoud van aPB(...) . Quit:($P(PBLine,SEP,2)'=0) ;Enkel lijnen met BKVolgNr=0, de andere zijn gemaakte koppelingen . Set ProductNr=$P(PBLine,SEP,3) . ;Kijken of een toelevering aan de lijn is gekoppeld . Set tmpTLNr=$P(PBLine,SEP,13) . If tmpTLNr'="" Do Quit ;Sluit indien gekoppeld, verder opzoekwerk is overbodig .. Set:('$D(aTLNrsToCheck(tmpTLNr,ProductNr))) aTLNrsToCheck(tmpTLNr,ProductNr)=1 . ;Zoeken naar toelevering(en) voor product . Set lbTLNrsForProd=##class(BL.MB.UGLYPicking.Receptie).GetTLNrsViaProdNr(ProductNr) . Quit:($LL(lbTLNrsForProd)'=1) ;Producten aanwezig in meer dan één (of geen) toelev.: negeren . Set tmpTLNr=$LI(lbTLNrsForProd) . Set:('$D(aTLNrsToCheck(tmpTLNr,ProductNr))) aTLNrsToCheck(tmpTLNr,ProductNr)=1 New AllIsCoupled Set AllIsCoupled=1 ;Opgebouwde lijst met toeleveringen controleren ;lbMarkedProds: hier komen de producten in te staan welke deel uitmaken van een niet volledig ;gekoppelde of gescande toelevering New TLNr Set TLNr="" Set ProductNr="" For Set TLNr=$O(aTLNrsToCheck(TLNr)) Quit:(TLNr="") Do . Do ##class(BL.MB.UGLYPicking.ReceptieProductie).aBuildSortedProdArrayViaToelev(TLNr) . If $O(@airefPTP@(0,""))'="" Do ;Er zijn producten die niet volledig gedaan zijn! .. Set AllIsCoupled=0 .. For Set ProductNr=$O(aTLNrsToCheck(TLNr,ProductNr)) Quit:(ProductNr="") Do ... If '$LF(lbMarkedProds,ProductNr) Do .... ;Quit:(##class(BL.MB.UGLYPicking.ReceptieProductie).GetGekoppeldeCnt(ProductNr)=0) .... Set lbMarkedProds=lbMarkedProds_$LB(ProductNr) Quit AllIsCoupled ]]> aPB aPT aiPB aiPT aiPTP temp_t01.msg 1 %String 1 bfrRGID:%Library.String,bfrVolgNr:%Library.String,bfrLijnNr:%Library.String cache 0 %Library.String document literal 1 ProductNr:%Library.String cache 0 %Library.Boolean document literal 1 BufferKey:%Library.String,bfrRGID:%Library.String,bfrVolgNr:%Library.String,bfrLijnNr:%Library.String cache 0 document literal 1 ProductNr:%Library.String cache 0 %Library.Integer document literal 1 ProductNr:%Library.String cache 0 %Library.Integer document literal 1 ProductNr:%Library.String,UseThisTLNr:%Library.String cache 0 %Library.Integer document literal 1 ProductNr:%Library.String,UseThisTLNr:%Library.String cache 0 %Library.Integer document literal 1 ProductNr:%Library.String cache 0 %Library.Integer document literal 1 ProductNr:%Library.String cache 0 %Library.Integer document literal 1 ProductNr:%Library.String cache 0 %Library.String document literal meer dan één toelevering voor een product ; geen toeleveringen voor product New TLNr Set TLNr=$O(@arefPT@(ProductNr,"")) If TLNr="" Do . Set Status=Status_"Z" Else Do . Set TLNr=$O(@arefPT@(ProductNr,TLNr)) . If TLNr'="" Do .. Set Status=Status_"T" ; ===================================================================================================== If Status'["Z" Do ;Indien Z->geen toelevs voor product->dan ook geen '+' of '-' aanduidingen . ; <+> aantal hoger dan aantal in toeleveringen . ; <-> aantal lager dan aantal in toeleveringen . ; SOM TOELEVERING QTYs . New PTSumQtyAvailable ;PBQtyRequestSum: zie boven . Set PTSumQtyAvailable=##class(BL.MB.UGLYPicking.ReceptieProductie).GETPTSumQtyAvailable(ProductNr) . ; COMPARE . If PBSumQtyAvailable>PTSumQtyAvailable Do .. Set Status=Status_"+" . Else If PBSumQtyAvailable 1 BufferKey:%Library.String cache 0 %Library.String document literal 1 ProductNr:%Library.String,BufKey:%Library.String cache 0 %Library.String document literal 1 TLNr:%Library.String,TLUNr:%Library.String cache 0 %Library.String document literal 1 ProductNr:%Library.String cache 0 %Library.Integer document literal 1 ProductNr:%Library.String cache 0 %Library.List document literal of = # gescand? New PBSumQtyAvailable,PTSumQtyAvailable Set PBSumQtyAvailable=##class(BL.MB.UGLYPicking.ReceptieProductie).GETPBSumQtyAvailable(ProductNr) Set PTSumQtyAvailable=##class(BL.MB.UGLYPicking.ReceptieProductie).GETPTSumQtyAvailable(ProductNr) Quit:(PTSumQtyAvailable 1 cache 0 %Library.List document literal 1 toelevering OF ; * 1 bufferlijn -> meerdere toeleveringen OF ; * meerdere bufferlijnen -> 1 toelevering New arefPT,arefPB Set arefPT=..#aPT Set arefPB=..#aPB New ProductNr,TLNr,TLUNr,BufKey New KoppelStr,KoppelCnt,Status New PBSumQtyAvailable,PTSumQtyAvailable,AssocToelev,SEP New MeerdereBufferlijnen,MeerdereToeleveringen New ToeleveringID,ToeleveringLijnID Set ProductNr="", SEP=##class(BL.MB.UGLYPicking.Receptie).GetBufferSeperator() Set KoppelStr="", KoppelCnt=0 Set ProductNr=$O(@arefPT@(ProductNr)) While ProductNr'="" { $$$WriteToLog("KoppelAuto : ProductNr = "_ProductNr) Set AssocToelev="" Set MeerdereBufferlijnen=($O(@arefPB@(ProductNr,$O(@arefPB@(ProductNr,""))))'="") ;dubbele $order Set MeerdereToeleveringen=(##class(BL.MB.UGLYPicking.ReceptieProductie).GetToelevCnt(ProductNr)>1) If MeerdereToeleveringen { $$$WriteToLog("Meerdere toeleveringen gevonden voor ProductNr : "_ProductNr) } If 'MeerdereBufferlijnen { ;Ophalen van eventueel geassocieerde toelevering (één bufferlijn voor dit product) Set BufKey=$O(@arefPB@(ProductNr,"")) $$$WriteToLog("KoppelAuto AssocToelev $P(13): "_@arefPB@(ProductNr,BufKey,0)) Do ##class(vhLib.Logger).%New("UGLYPICKING").Info("KoppelAuto","AssocToelev $P(13): "_@arefPB@(ProductNr,BufKey,0)) Set AssocToelev=$P($G(@arefPB@(ProductNr,BufKey,0)),SEP,13) Set:(AssocToelev'="") MeerdereToeleveringen=0 ;A la carte zal de bufferlijn met de AssocToelev koppelen Do ..KoppelALACARTEViaBuffer() }ElseIf(MeerdereBufferlijnen && MeerdereToeleveringen){ Do ..KoppelMANUEELViaBuffer(ProductNr) }Else{ Do ..KoppelALACARTEViaBuffer() } Set ProductNr=$O(@arefPT@(ProductNr)) } Quit:(KoppelCnt=0) $LB(2,"Er zijn geen automatische koppelingen uitgevoerd.") Quit $LB(1,KoppelCnt_" automatische koppeling(en) uitgevoerd: "_$C(13,10)_KoppelStr) ]]> 1 ProductID:%String 1 0 1 aPTArray:%String,ProductID:%String,ToeleveringID:%String,Aantal:%Integer 1 %Integer 1 1 0 koppelen (tenzij beiden =0)! --- Set PBSumQtyAvailable=##class(BL.MB.UGLYPicking.ReceptieProductie).GETPBSumQtyAvailable(ProductNr) Set PTSumQtyAvailable=##class(BL.MB.UGLYPicking.ReceptieProductie).GETPTSumQtyAvailable(ProductNr,AssocToelev) $$$WriteToLog("KoppelAuto PBSumQtyAvailable<=PTSumQtyAvailable : "_PBSumQtyAvailable_"<="_PTSumQtyAvailable) Do ##class(vhLib.Logger).%New("UGLYPICKING").Info("KoppelAuto","PBSumQtyAvailable<=PTSumQtyAvailable : "_PBSumQtyAvailable_"<="_PTSumQtyAvailable) If (PBSumQtyAvailable<=PTSumQtyAvailable) && (PBSumQtyAvailable'=0) { Set Status=##class(BL.MB.UGLYPicking.ReceptieProductie).KoppelALACARTE(ProductNr) ;alles maken, sum is toch identiek If $LI(Status)>0 { Set KoppelStr=KoppelStr_$C(13,10)_"- Product "_ProductNr_" (gelijk aantal: "_PBSumQtyAvailable_")." Set KoppelStr=KoppelStr_$C(13,10)_" "_$LI(Status,2) Set KoppelCnt=KoppelCnt+1 } } ]]> 1 ProductNr:%Library.String,BufferKey:%Library.String,TLNr:%Library.String,TLUNr:%Library.String,OverwriteQtyToTakeFromToelev:%Library.String=0 cache 0 %Library.List document literal koppel 'aantal gescand' .. Set QtyToTakeFromToelev=PBQtyAvailable . Else Do .. Set QtyToTakeFromToelev=PTQtyAvailable ;Aantal gescand > of = Aantal besteld -> koppel 'aantal besteld' Else Do . Set QtyToTakeFromToelev=OverwriteQtyToTakeFromToelev ;KIJKEN OF QTY TO TAKE FROM TOELEV '> PBQTYAvailable New MaxToTake If ##class(BL.MB.UGLYPicking.ReceptieProductie).GetToelevCnt(ProductNr)=1 Do . Set MaxToTake=PBQtyAvailable ;Er kan meer gescand zijn dan het aantal in toelevs (toelaten om scanaantal te nemen) Else Do . Set MaxToTake=PTQtyAvailable ;Default Quit:(QtyToTakeFromToelev>MaxToTake) $LB(-3,"Het maximum aantal dat gekoppeld kan worden is "_MaxToTake_".") ; ========================================================================================================== ; REAL KOPPEL STUFF ; ========================================================================================================== ; --- UPDATE aPB met BKVolgNr=0 --- New PBKlantID,PTKlantID,PBTLNr Set $P(PBLine,SEP,10)=$P(PBLine,SEP,10)+QtyToTakeFromToelev ;QtyReserved augmenteren Set PBKlantID=$P(PBLine,SEP,6) Set PTKlantID=$P(PTLine,SEP,3) If PBKlantID=-1 Do ;nog geen klant opgegeven (op BKVolgNr=0 niveau is klant interfacegewijs ingevuld) . Set $P(PBLine,SEP,6)=PTKlantID Else Do . Set:(PBKlantID'=PTKlantID) $P(PBLine,SEP,6)="..." Set PBTLNr=$P(PBLine,SEP,7) If PBTLNr=-1 Do . Set $P(PBLine,SEP,7)=TLNr Else Do . Set:(PBTLNr'=TLNr) $P(PBLine,SEP,7)="..." Set @arefPB@(ProductNr,BufferKey,0)=PBLine ; --- INSERT aPB met BKVolgNr>0 --- New NewBKVolgNr,PalletID,PTQtyRequest,LocatieID Set NewBKVolgNr=##class(BL.MB.UGLYPicking.ReceptieProductie).GetNewBKVolgNr(ProductNr,BufferKey) Set PalletID=$P(PBLine,SEP,4) Set LocatieID=$P(PBLine,SEP,11) ; hierna wordt PBLine overschreven!!! Set PTQtyRequest=$P(PTLine,SEP,1) Set PBLine=BufferKey_SEP_NewBKVolgNr_SEP_ProductNr_SEP_PalletID_SEP_PTQtyRequest Set PBLine=PBLine_SEP_PTKlantID_SEP_TLNr_SEP_TLUNr_SEP_0_SEP_QtyToTakeFromToelev_SEP_LocatieID_SEP_0 Set @arefPB@(ProductNr,BufferKey,NewBKVolgNr)=PBLine ; --- UPDATE aPT --- Set $P(PTLine,SEP,2)=$P(PTLine,SEP,2)+QtyToTakeFromToelev Set @arefPT@(ProductNr,TLNr,TLUNr)=PTLine ;Indien in de ongekoppelde toelevering QtyRequest < of = QtyReserved ->lijn verwijderen! If $P(PTLine,SEP,1)'>$P(PTLine,SEP,2) Do . Set $P(@arefPB@(ProductNr,BufferKey,NewBKVolgNr),SEP,12)=1 . Kill @arefPT@(ProductNr,TLNr,TLUNr) ; Indien het gescande van de bufferlijn volledig gekoppeld is, dan controleren we ; of er backorder flags geset moeten worden ; VOORWAARDE FLAGS: ; - ALLE gescande bufferlijnen van een PRODUCT zijn gekoppeld ; - Set de flag voor toeleveringslijnen die zijn 'aangetast': ; QtyReq'=QtyRes (zoniet lijn verwijderd) of QtyReq=QtyRes ; EN ; QtyRes'=0 (zoniet is er nog geen koppeling met deze toeleveringslijn) Set PBLine=@arefPB@(ProductNr,BufferKey,0) If $P(PBLine,SEP,5)=$P(PBLine,SEP,10) Do . If ##class(BL.MB.UGLYPicking.ReceptieProductie).CouldBeBackorder(ProductNr) Do .. Do ##class(BL.MB.UGLYPicking.ReceptieProductie).SetBackorderViaProd(ProductNr) ; ========================================================================================================== ; SORTERING up-to-date houden (in interface te gebruiken) ; ========================================================================================================== Do ##class(BL.MB.UGLYPicking.ReceptieProductie).aBuildSortedBufferArray() Do ##class(BL.MB.UGLYPicking.ReceptieProductie).aBuildSortedToelevArray(ProductNr) Quit $LB(1,"Manuele koppeling succesvol uitgevoerd.") ]]> 1 ProductNr:%Library.String cache 0 %Library.List document literal 0) New arefPB Set arefPB=..#aPB New SEP Set SEP=##class(BL.MB.UGLYPicking.Receptie).GetBufferSeperator() New BufferKey,BKVolgNr,PBLine,UndoCnt Set BufferKey="" Set UndoCnt=0 For Set BufferKey=$O(aPB(ProductNr,BufferKey)) Quit:(BufferKey="") Do . Set PBLine=aPB(ProductNr,BufferKey,0) . If $P(PBLine,SEP,10)>0 Do .. Set UndoCnt=UndoCnt+1 . Else Quit . Kill aPB(ProductNr,BufferKey) . Set $P(PBLine,SEP,10)=0 . Set $P(PBLine,SEP,6)=-1 . Set $P(PBLine,SEP,7)=-1 . Set $P(PBLine,SEP,8)=-1 . Set $P(PBLine,SEP,9)=0 . Set aPB(ProductNr,BufferKey,0)=PBLine If UndoCnt=0 Do Quit $LB(2,"Geen koppelingen gevonden om ongedaan te maken.") Else Do Quit $LB(1,UndoCnt_" bufferlijn(en) ge-reset voor product "_ProductNr_".") . Do ##class(BL.MB.UGLYPicking.ReceptieProductie).aBuildSortedBufferArray() . Do ##class(BL.MB.UGLYPicking.ReceptieProductie).aBuildSortedToelevArray(ProductNr) ]]> 1 TimeOut:%Library.Integer=0 cache 0 %Library.Boolean document literal 1 FilterOnProductNr:%Library.String=0 cache 0 %Library.List document literal niet echt een fout... // 0: // 1: SUCCESS // 2: SUCCESS, echter enkele toeleveringen werden uit de array verwijderd wegens een negatieve QtyRequest ;Voer eerst de method 'GetToelevArraySortedOnProd'. Dit genereert default de array 'aPT'. ;De naam van de gegenereerde array kan je dan meegeven aan deze method (ToelevArraySortedOnProdName) ;Deze array wordt dan gewijzigd naar gelang de inhoud van ^UPRCP("R") ;We locken ^UPRCP("R") zodat wijzigingen van iemand anders even in een wachtrij worden geplaatst... Quit:('##class(BL.MB.UGLYPicking.ReceptieProductie).LockReservaties(1)) $LB(-1,"De reservatie-gegevens zijn momenteel in gebruik. Probeer later eens opnieuw.") New arefPT Set arefPT=..#aPT New RCPKey,Rec,ProductNr,TLNr,TLUNr,SEP,QtyRequest,QtyRCP,Delta,QtyErrorStr Set (RCPKey,TLNr,TLUNr)="" Set QtyErrorStr="" Set SEP=##class(BL.MB.UGLYPicking.Receptie).GetBufferSeperator() For Set TLNr=$O(^UPRCP("R",TLNr)) Quit:(TLNr="") Do . For Set TLUNr=$O(^UPRCP("R",TLNr,TLUNr)) Quit:(TLUNr="") Do .. For Set RCPKey=$O(^UPRCP("R",TLNr,TLUNr,RCPKey)) Quit:(RCPKey="") Do ... Set Rec=^UPRCP("R",TLNr,TLUNr,RCPKey) ... Set ProductNr=$P(Rec,SEP,1) ... Quit:(FilterOnProductNr && (ProductNr'=FilterOnProductNr)) ... If $D(@arefPT@(ProductNr,TLNr,TLUNr)) Do .... Set QtyRequest=$P(@arefPT@(ProductNr,TLNr,TLUNr),SEP,1) .... Set QtyRCP=$P(Rec,SEP,2) .... Set Delta=QtyRequest-QtyRCP .... If Delta<1 Do Quit ..... If Delta<0 Do ;Enkel bij <0 een bericht weergeven ...... Set QtyErrorStr=QtyErrorStr_$C(13,10)_"- ProductNr "_ProductNr_", toeleveringsnr "_TLNr_", TLUNr "_TLUNr ...... Set QtyErrorStr=QtyErrorStr_" (Request: "_QtyRequest_", Reserved: "_QtyRCP_")" ..... Kill @arefPT@(ProductNr,TLNr,TLUNr) ;Is geen geldige toeleveringslijn meer... .... Else Do ..... Set QtyRequest=Delta ..... Set $P(@arefPT@(ProductNr,TLNr,TLUNr),SEP,1)=QtyRequest ;Lock vrijgeven Do ##class(BL.MB.UGLYPicking.ReceptieProductie).UnLockReservaties() Quit:(QtyErrorStr'="") $LB(2,"Volgende toeleveringen hebben ongeldige reservaties:"_$C(13,10)_QtyErrorStr) Quit $LB(1,"Reservaties succesvol aangebracht in ToeleveringsArray.") ]]> 1 ProductNr:%Library.String,TLNr:%Library.String,TLUNr:%Library.String,Value:%Library.String cache 0 document literal 1 ProductNr:%Library.String cache 0 document literal 1 ProductNr:%Library.String,TLNr:%Library.String,QtyRequest:%Library.String cache 0 %Library.List document literal 1 cache 0 %Library.Boolean document literal 1 cache 0 document literal 1 TLNr:%Library.String,exclProductNr:%Library.String="" cache 0 %Library.List document literal 1 ProductNr:%Library.String cache 0 document literal 1 JobID:%String 1 cache 0 %Library.List document literal Laag omwille van mogelijke delete van een item uit de list . Set lbBuffer=$LI(BufferList,Loop) . Set RGID=$LI(lbBuffer,1) . Set VolgNr=$LI(lbBuffer,2) . If '$D(^UPRCP("B",RGID,VolgNr)) Do Quit .. Set RemovedBuffers=RemovedBuffers_$C(13,10)_"- Type '"_RGID_"', volgnummer "_VolgNr_"." .. Set BufferList=$$$LBDeleteAt(BufferList,Loop) . For Set LijnNr=$O(^UPRCP("B",RGID,VolgNr,LijnNr)) Quit:(LijnNr="") Do .. Set BufferLijn=^UPRCP("B",RGID,VolgNr,LijnNr) .. Set ProductNr=$P(BufferLijn,SEP,1) .. Set PalletID=$P(BufferLijn,SEP,3) .. If ($l(PalletID)=0) D WLIP^vhDBG(127,"^UPRCP(""B"","_RGID_","_VolgNr_","_LijnNr_")") .. Set LocatieID=$P(BufferLijn,SEP,4) .. Set BufferKey=##class(BL.MB.UGLYPicking.ReceptieProductie).BuildBufferKey(RGID,VolgNr,LijnNr) ;Concatenatie vd 3 para's .. Set QtyRequest=$P(BufferLijn,SEP,5) .. Set AssocToelev=$P(BufferLijn,SEP,8) .. ;aPB(ProdNr,BufferKey,VolgNr)=QtyRequest+QtyReserved+... met eerste maal VolgNr=0 .. Set PBLine=BufferKey_SEP_0_SEP_ProductNr_SEP_PalletID_SEP_QtyRequest .. Set PBLine=PBLine_SEP_-1_SEP_-1_SEP_-1_SEP_0_SEP_0_SEP_LocatieID_SEP_0_SEP_AssocToelev .. Set @arefPB@(ProductNr,BufferKey,0)=PBLine Do ##class(BL.MB.UGLYPicking.ReceptieProductie).aBuildSortedBufferArray() Quit:(RemovedBuffers'="") $LB(2,"Volgende buffer(s) zijn ondertussen verwijderd:"_$C(13,10)_RemovedBuffers) Quit $LB(1,"Buffers gesorteerd op product succesvol in array geplaatst.") ]]> 1 ProductNr:%Library.String cache 0 %Library.List document literal ERROR ... Set ToelevRecsNotFound=ToelevRecsNotFound_$C(13,10)_"- Leveranciernummer "_LeverancierNr_", toeleveringsnummer "_TLNr_" (TLUNr:"_TLUNr_")." .. Set TLLNr=^TO("IP",ProdNr,TLNr,TLUNr) .. Set QtyRequest=##class(BL.MB.UGLYPicking.Receptie).FGetToeleveringsQty(TLNr,TLLNr) .. If QtyRequest=-1 Do Quit ; => ERROR ... Set ToelevQtysNotFound=ToelevQtysNotFound_$C(13,10)_"- Toeleveringsnummer "_TLNr_", lijnnummer "_TLLNr_"." .. Set KlantNr=$P(^KTO(LeverancierNr,TLNr,1),SEP,8) .. Set LeveringsWeek=$P(^KTO(LeverancierNr,TLNr,TLLNr),SEP,25) .. Set @arefPT@(ProdNr,TLNr,TLUNr)=QtyRequest_SEP_0_SEP_KlantNr_SEP_LeveringsWeek_SEP_0 Quit ]]> 1 UseThisProdNr:%Library.String cache 0 %Library.Integer document literal 1 NietGebruikteMakovaStrings:%CacheString=0,SynchronizeOnly:%Library.Boolean=0 cache 0 %Library.List document literal 1 NietGebruikteMakovaStrings:%CacheString=0,SynchronizeOnly:%Library.Boolean=0 cache 1 0 %Library.List document literal probeer later opnieuw... New SendCRecsStatus Set SendCRecsStatus=$LB(0) ;neutraal If SynchronizeOnly Do . $$$WriteToLog("Synchronize messages only...") . Set SendCRecsStatus=..SendCRecs() Quit:($LI(SendCRecsStatus)<0) $LB(-2,$LI(SendCRecsStatus,2)) Quit:($LI(SendCRecsStatus)>0) $LB(1,$LI(SendCRecsStatus,2)) ;=================================================================================================== ; INIT: vars, SEP, locken... ;=================================================================================================== Do ..AddToLog("JobId: '" _ $J _ "'. Bezig met voorbereiden van de gegevens...") New arefPB,arefPT Set arefPB=..#aPB Set arefPT=..#aPT #Define akeyCRec 1 #Define akeyCompleet 2 #Define akeySplitsNr 3 New SEP Set SEP=##class(BL.MB.UGLYPicking.Receptie).GetBufferSeperator() Do ..AddToEndOfLog("JobId: '" _ $J _ "'. Gegevens voorbereid.") ;=================================================================================================== ; DOORSTUREN ;=================================================================================================== ;Checken of er C-records niet zijn verstuurd, indien dit het geval is: afsluiten! Dan moet in het ;programma eerst deze verwerkt/verwijderd worden! #dim Melding As %String = "JobId: '" _ $J _ "'. Enkele synchronisatie-berichten van een vorig doorsturen zijn niet verwerkt. Verwerk/verwijder deze eerst." If $D(^aRecProdRecsToSend($J)){ Do ..SendMailNaarITaRecProdNietLeeg("",Melding) } Quit:($D(^aRecProdRecsToSend($J))) $LB(-3,Melding) ;Locken van toeleveringen+bijhorende producten. Indien niet gelukt, unlock all & quit New ProductNr,BufKey,BKVolgNr,aLockToelevs,PBLine,TLNr,TLUNr Set (ProductNr,BufKey)="" For Set ProductNr=$O(@arefPB@(ProductNr)) Quit:(ProductNr="") Do . For Set BufKey=$O(@arefPB@(ProductNr,BufKey)) Quit:(BufKey="") Do .. Set BKVolgNr=0 .. For Set BKVolgNr=$O(@arefPB@(ProductNr,BufKey,BKVolgNr)) Quit:(BKVolgNr="") Do ... Set PBLine=@arefPB@(ProductNr,BufKey,BKVolgNr) ... Set TLNr=$P(PBLine,SEP,7) ... Set TLUNr=$P(PBLine,SEP,8) ... Set aLockToelevs(TLNr,TLUNr)=1 ;Lock shit New ErrStr Set ErrStr=..UPRCPLock(.aLockToelevs) Quit:(ErrStr'="") $LB(-4,ErrStr) ;Locken van ^UPRCP("R"), hierin stoeien is even uit den boze Quit:('##class(BL.MB.UGLYPicking.ReceptieProductie).LockReservaties(2)) $LB(3,"De reservatie-gegevens zijn momenteel in gebruik. Probeer later eens opnieuw.") New SendSingleInfoError,SendSingleInfoStatus,DoorstuurCnt Set SendSingleInfoError=0, DoorstuurCnt=0 For Set ProductNr=$O(@arefPB@(ProductNr)) Quit:((ProductNr="") || SendSingleInfoError) Do . For Set BufKey=$O(@arefPB@(ProductNr,BufKey)) Quit:((BufKey="") || SendSingleInfoError) Do .. Set BKVolgNr=0 .. For Set BKVolgNr=$O(@arefPB@(ProductNr,BufKey,BKVolgNr)) Quit:((BKVolgNr="") || SendSingleInfoError) Do ... Do:(BKVolgNr=1) ..AddToLog(""),..AddToLog("JobId: '" _ $J _ "'. ---=[ Product "_ProductNr_", Buffer "_BufKey_" ]=---") ... Set SendSingleInfoStatus=..SendSingleInfo(ProductNr,BufKey,BKVolgNr) ... If $LI(SendSingleInfoStatus)>0 Do .... Set DoorstuurCnt=DoorstuurCnt+1 ... Else Do .... Set SendSingleInfoError=1 ;=================================================================================================== ; VERSTUREN VAN C-RECORDS ;=================================================================================================== Set SendCRecsStatus=$LB(0) If DoorstuurCnt>0 Do ;If 'SendSingleInfoError && (DoorstuurCnt>0) Do . Set SendCRecsStatus=..SendCRecs() ;=================================================================================================== ; EXIT ;=================================================================================================== Do ..AddToLog("") Do ..AddToLog("JobId: '" _ $J _ "'. Bezig met afsluiten...") ;Unlock shit Do ..UPRCPUnLock(.aLockToelevs) ;Lock op ^UPRCP("R") vrijgeven Do ##class(BL.MB.UGLYPicking.ReceptieProductie).UnLockReservaties() Do ..AddToEndOfLog("JobId: '" _ $J _ "'. Buffer afgesloten.") Quit:(SendSingleInfoError) $LB(-1,$LI(SendSingleInfoStatus,2)) Quit:($LI(SendCRecsStatus)<0) $LB(-2,$LI(SendCRecsStatus,2)) Quit:(DoorstuurCnt=0) $LB(2,"Er was geen gekoppelde info ter beschikking om door te sturen.") Quit $LB(1,"Er werd(en) "_DoorstuurCnt_" koppeling(en) succesvol doorgestuurd.") ]]> WERKELIJKE ROUTINE: 1 koppeling doorsturen 1 0 STOCKEREN . Do ..AddToLog($C(9)_"JobId: '"_$J_"'. Aanpassen van de stock...") . Set Result=##class(BL.MB.UGLYPicking.Opslag).CommitAddStock(PalletID,lbLocation,SectieToUse,ProductNr,QtyFromToelev,TLNr) . If Result="" Do .. Do ..AddToEndOfLog("JobId: '"_$J_"'. Ok: stock aangepast") . Else Do .. Do ..AddToEndOfLog("JobId: '"_$J_"'. ERROR. Stock kon niet aangepast worden.") Quit:(Result'="") $LB(-1,Result) ;--- T01 MESSAGE OPBOUWEN -------------------------------------------------------------------------- New bfrRGID,bfrVolgNr,bfrLijnNr,BufferLine,PTLine Do ##class(BL.MB.UGLYPicking.ReceptieProductie).DecomposeBufferKey(BufKey,.bfrRGID,.bfrVolgNr,.bfrLijnNr) Set BufferLine=##class(BL.MB.UGLYPicking.Receptie).GetBufferLijn(bfrRGID,bfrVolgNr,bfrLijnNr) New TLUNr,UserID,RCPKey Set TLUNr=$P(PBLine,SEP,8) Set PTLine=$G(@arefPT@(ProductNr,TLNr,TLUNr)) Set UserID=$P(BufferLine,SEP,7) ;Set RCPKey=##class(BL.MB.UGLYPicking.ReceptieProductie).GetNewRCPKey(TLNr,TLUNr) Set ^aRecProdRecsToSend($J,TLNr,TLUNr,$$$akeySplitsNr)=$G(^aRecProdRecsToSend($J,TLNr,TLUNr,$$$akeySplitsNr),0)+1 Set RCPKey=^aRecProdRecsToSend($J,TLNr,TLUNr,$$$akeySplitsNr) Do ..AddToLog($C(9)_"JobId: '"_$J_"'. Buffertype '"_bfrRGID_"', VolgNr "_bfrVolgNr_", LijnNr "_bfrLijnNr_" is gekoppeld aan TLNr: "_TLNr_", TLUNr: "_TLUNr_", SplitsNr: "_RCPKey_".") New C Set C="T01" Set C("VOLGNR")="0000000000" Set C("TOENR")=TLNr Set C("TLUNR")=TLUNr Set C("SPLITSNR")=RCPKey Set C("RCPKEY")="" ;niet nodig, we definiëren het onder 'splitsnr' Set C("DELTAIN")=QtyFromToelev Set C("COMPLEET")=0 ;later houden we ons bezig met het bepalen vd echte waarde, zie SendCRecs Set C("PRNR")=ProductNr Set C("BARCODE")=$P(BufferLine,SEP,2) ;ook productscan of dossiernr genoemd Set C("PALETID")=PalletID Set C("STOCKAGEPLAATS")=##class(BL.MB.UGLYPicking.General).GetStockagePlaatsViaLocation(lbLocation) ;kan geen fouten geven wegens eerdere checks Set C("USER")=UserID Set C("DATUMSCAN")=$P(BufferLine,SEP,6) Set C("DATUMIB")=$H ;Records worden toegevoegd op einde van deze routine Do ..AddToLog($C(9)_"JobId: '"_$J_"'. CRecord Compleet...") New Compleet If PTLine="" Do . ;overeenkomstige toeleveringslijn is verwijderd, slecht 1 vd opsplitsingen mag compleet geven... . Set Compleet=$P(PBLine,SEP,12) ;12 piece staat of deze bufferlijn de toelevering heeft verwijderd=compleet Else Do . Set Compleet=($P(PTLine,SEP,5)=-1) ;piece 5=backorder, indien -1 dan heeft de gebruiker deze expliciet afgezet Do ..AddToEndOfLog($S(Compleet:"Ja",1:"Nee")_".") ;--- EIGEN ONDERHOUD (BUFFER/UPRCP("R")/...) ------------------------------------------------------- Do ..AddToLog($C(9)_"JobId: '"_$J_"'. Aanpassen buffer inhoud...") New ZeroPBLine,BufferLineIsDeleted Set ZeroPBLine=@arefPB@(ProductNr,BufKey,0) Do ##class(BL.MB.UGLYPicking.Receptie).DecBufferQtyDone(bfrRGID,bfrVolgNr,bfrLijnNr,QtyFromToelev,.BufferLineIsDeleted) If BufferLineIsDeleted Do . If ##class(BL.MB.UGLYPicking.Receptie).IsBufferEmpty(bfrRGID,bfrVolgNr) Do .. Do ##class(BL.MB.UGLYPicking.Receptie).RemoveBuffer(bfrRGID,bfrVolgNr) .. Do ..AddToEndOfLog("JobId: '"_$J_"'. Buffer verwijderd.") . Else Do .. Do ..AddToEndOfLog("JobId: '"_$J_"'. Bufferlijn verwijderd.") Else Do . Do ..AddToEndOfLog("JobId: '"_$J_"'. Ok. Buffer nog niet verwijderd.") ;Toevoegen van C-records die zoëven werden opgebouwd m ^aRecProdRecsToSend($J,TLNr,TLUNr,$$$akeyCRec,RCPKey)=C s ^aRecProdRecsToSend($J,TLNr,TLUNr,$$$akeyCompleet)=($G(^aRecProdRecsToSend($J,TLNr,TLUNr,$$$akeyCompleet),0) || Compleet) ;eens 1, altijd 1 Quit $LB(1,"Koppeling-record succesvol opgebouwd.") ]]> 1 0 %List Lock alle referenties van de doorgegeven toeleveringslijnen toeleveringen, producten, orders... 1 %String Lock een referentie 1 0 Vrijgave van alle doorgegeven, gelockte referenties 1 1 1 Msg:%String 1 1 Msg:%String 1 1 Job:%String="",Melding:%String="" 1 1 OuderdomInMinuten:%Integer (OuderdomInMinuten*60)) && (##class(BL.MB.UGLYPicking.Receptie).IsBufferClosed("TB",VolgNrLoop)) Do .. Set EventData = ##class(BL.MB.UGLYPicking.Events.ToeFinishedEventData).%New("","TB",VolgNrLoop) .. Set Event = ##class(BL.MB.UGLYPicking.Events.ToeFinishedEvent).%New(EventData) .. Do ##class(TECH.Context).Instance().GeefPubSubAPI().GeefEventRaiser().RaiseEventAsync(Event) ]]>