Onder andere verplaatsing van palletten. UglyPickingCNTs,vhLib.Macro BL.Lib.BaseObj 0 temp_s05.msg 1 %Library.Boolean 1 BronLocatie:%Library.String,BronPalletID:%Library.String,BronSectie:%Library.String,DoelLocatie:%Library.String,DoelPalletID:%Library.String,DoelSectie:%Library.String,Product:%Library.String,Qty:%Library.String,HistoryRemark:%Library.String="" cache 0 %Library.List document literal Manual Commit Mode . Do SQLGCWrapper.%Close() ;Statement alloceren If 'SQLGCWrapper.AllocateStatement() Do Quit $LB(-1,"SQLGCWrapper AllocStatement Error.") . Do SQLGCWrapper.Disconnect() //Disconnect dropt ook het statement als dit reeds gealloceerd zou zijn SQLGCWrapper.. . Do SQLGCWrapper.%Close() //---------------------------------------------------------------------------------------------- //Product bijladen van bron->doelpallet (laatste SwapStock param 'IsFull' = 0, bijladen zet IsFull op 0) //---------------------------------------------------------------------------------------------- New Status Set Status=..SwapStock(BronPalletID,BronLocatie,BronSectie,DoelPalletID,DoelLocatie,DoelSectie,Product,Qty,HistoryRemark,SQLGCWrapper,0) If $LI(Status)<0 Do //ERROR . Do SQLGCWrapper.Transact("SQL_ROLLBACK") Else Do . Do SQLGCWrapper.Transact("SQL_COMMIT") //---------------------------------------------------------------------------------------------- //SQL Gateway object vrijgeven //---------------------------------------------------------------------------------------------- ;Statement drop If 'SQLGCWrapper.DropStatement() Do Quit $LB(-1,"SQLGCWrapper DropStatement Error.") . Do SQLGCWrapper.Disconnect() . Do SQLGCWrapper.%Close() ;Verbreken If 'SQLGCWrapper.Disconnect() Do Quit $LB(-1,"SQLGCWrapper Disconnect Error.") . Do SQLGCWrapper.%Close() Do SQLGCWrapper.%Close() Quit:($LI(Status)<0) Status //---------------------------------------------------------------------------------------------- //AUTO CC flag(s) //---------------------------------------------------------------------------------------------- $$$WriteToLog("AutoCC flag extra_int_6 met één verhogen (doel).") Set tmpStatus=##class(EWMS.Inventory).IncExtraInt6(DoelPalletID,Product) Quit:(tmpStatus'="") $LB(-3,tmpStatus) ;Volgende lijn gebeurt niet indien pallet met gegs 'pal en prod' niet wordt gevonden (sql where gaat niet op). $$$WriteToLog("AutoCC flag extra_int_6 met één verhogen (bron - indien bestaand)") Set tmpStatus=##class(EWMS.Inventory).IncExtraInt6(BronPalletID,Product) Quit:(tmpStatus'="") $LB(-3,tmpStatus) $$$WriteToLog("AutoCC flag extra_float_1 wijzigen indien qty_pcs>extra_float_1") Set tmpStatus=##class(EWMS.Inventory).UpdateExtraFloat1ForPalAndProd(DoelPalletID,Product) Quit:(tmpStatus'="") $LB(-3,tmpStatus) $$$WriteToLog("Bijladen success.") Quit $LB(1,"Product succesvol bijgeladen.") ]]> 1 BronPalletID:%Library.String,DoelPalletID:%Library.String,HistoryRemark:%Library.String="" cache 0 %Library.List document literal DoelPalletID: "_DoelPalletID_", Remark: "_HistoryRemark) //RETURN VALUES: //ERRORS //-3: SwapStock error //-2: Doelpallet is niet leeg //-1: Kan bronpallet met opgegeven ID niet vinden //SUCCESS // 1: PalletID succesvol gewijzigd of SQLWrapper error // 2: Geen producten op bronpalletID //---------------------------------------------------------------------------------------------- //$LB Locations opbouwen, te gebruiken bij SwapStock //---------------------------------------------------------------------------------------------- New Status,BronLocation,DoelLocation Set Status=$LB(0) //Neutraal Set BronLocation=##class(BL.MB.UGLYPicking.General).GetLocationViaLocID(BronPalletID) Quit:(BronLocation="") $LB(-1,"Kan bronpallet met ID '"_BronPalletID_"' niet vinden.") Set DoelLocation=BronLocation //Deze is hetzelfde, gewoon palletid moet gewijzig worden ;Testen of opgegeven PalletID nog niet bestaat... (GetLocationViaLocID geeft leeg indien nog niet bestaand->dit is nodig om door te gaan) #Define GetScannedLocStrViaLocation(%l) ##class(BL.MB.UGLYPicking.General).GetScannedLocStrViaLocation(%l) #Define GetTransLocStrViaLocation(%l) ##class(BL.MB.UGLYPicking.General).GetTransLocStrViaLocation(%l) Quit:(##class(BL.MB.UGLYPicking.General).GetLocationViaLocID(DoelPalletID)'="") $LB(-2,"Doelpallet met ID '"_DoelPalletID_"' is niet leeg: Bezet op locatie "_$$$GetTransLocStrViaLocation(DoelLocation)_".") ; $$$GetScannedLocStrViaLocation //---------------------------------------------------------------------------------------------- //Producten op bron achterhalen en in array plaatsen (conflicten indien we direct zouden SwapStock oproepen) //---------------------------------------------------------------------------------------------- New RS Set RS=##class(%ResultSet).%New("EWMS.Inventory:GetProductsOnPallet") Do RS.Execute(BronPalletID) #Define cntQty 1 #Define cntIsFull 2 New Prods,Cnt Set Cnt=0 For Quit:('RS.Next()) Do . Set Prods(RS.Get("Sectie"),+RS.Get("ProductNr"),$$$cntQty)=RS.Get("QtyPcs") . Set Prods(RS.Get("Sectie"),+RS.Get("ProductNr"),$$$cntIsFull)=RS.Get("IsFull") . Set Cnt=Cnt+1 Do RS.%Close() Quit:(Cnt=0) $LB(2,"Geen producten gevonden op bronpallet '"_BronPalletID_"'.") //---------------------------------------------------------------------------------------------- //SQL Gateway object aanmaken //---------------------------------------------------------------------------------------------- New SQLGCWrapper Set SQLGCWrapper=##class(EWMS.SQLGCWrapper).%New() ;Verbinden If 'SQLGCWrapper.Connect() Do Quit $LB(-1,"SQLGCWrapper Connect Error.") . Do SQLGCWrapper.%Close() ;Statement alloceren If 'SQLGCWrapper.AllocateStatement() Do Quit $LB(-1,"SQLGCWrapper AllocStatement Error.") . Do SQLGCWrapper.Disconnect() //Disconnect dropt ook het statement als dit reeds gealloceerd zou zijn SQLGCWrapper.. . Do SQLGCWrapper.%Close() //---------------------------------------------------------------------------------------------- //Producten op bron verplaatsen naar doel //---------------------------------------------------------------------------------------------- ;Transaction start New SectieLoop,ProdLoop,Qty,IsFull Set (SectieLoop,ProdLoop)="" For Set SectieLoop=$O(Prods(SectieLoop)) Quit:((SectieLoop="") || ($LI(Status)<0)) Do . For Set ProdLoop=$O(Prods(SectieLoop,ProdLoop)) Quit:((ProdLoop="") || ($LI(Status)<0)) Do .. Set Qty=Prods(SectieLoop,ProdLoop,$$$cntQty) .. Set IsFull=Prods(SectieLoop,ProdLoop,$$$cntIsFull) .. Set Status=..SwapStock(BronPalletID,BronLocation,SectieLoop,DoelPalletID,DoelLocation,SectieLoop,ProdLoop,Qty,HistoryRemark,SQLGCWrapper,IsFull) .. Set:($LI(Status)<0) Status=$LB(-3,$LI(Status,2)) ;ErrorStr If $LI(Status)<0 Do //ERROR . ;Do MApplication.MessageBox("ROLLBACK") ;Rollback should be implemented here Else Do . ;Do MApplication.MessageBox("COMMIT") //---------------------------------------------------------------------------------------------- //SQL Gateway object vrijgeven //---------------------------------------------------------------------------------------------- ;Statement drop If 'SQLGCWrapper.DropStatement() Do Quit $LB(-1,"SQLGCWrapper DropStatement Error.") . Do SQLGCWrapper.Disconnect() . Do SQLGCWrapper.%Close() ;Verbreken If 'SQLGCWrapper.Disconnect() Do Quit $LB(-1,"SQLGCWrapper Disconnect Error.") . Do SQLGCWrapper.%Close() Do SQLGCWrapper.%Close() Quit:($LI(Status)<0) Status $$$WriteToLog("Change palletID success.") Quit $LB(1,"Pallet ID '"_BronPalletID_"' is succesvol gewijzigd in '"_DoelPalletID_"' ("_Cnt_" sectie(s)).") ]]> 1 ToReceiveID:%String,DoelLocatie:%String,DoelPalID:%String,HistoryRemark:%String="" %String Reeds een lijn met zelfde DoelPalID en sectie: cumuleren") . New IDToDel,objSourceToReceive . Set IDToDel=objToReceive.%Id() . Set objSourceToReceive=objToReceive . Set objToReceive=##class(EWMS.ToReceive).%OpenId(DoelToRecvID) . If '$IsObject(objToReceive) Do Quit .. Set tmpStatus="Fout tijdens afpunten to_receive: kan pallet verschillend locid '"_DoelPalID_"' en sectie '"_SectieToUse_"' niet openen." . Set objToReceive.QtyTransported=objToReceive.QtyTransported+AddQty . Set objToReceive.QtyToReceive=objSourceToReceive.QtyToReceive+objToReceive.QtyToReceive . Set objToReceive.QtyReceived=objSourceToReceive.QtyReceived+objToReceive.QtyReceived . Set objToReceive.QtyTransportReq=objSourceToReceive.QtyTransportReq+objToReceive.QtyTransportReq . ;de lijn werd gecumuleerd met een andere lijn, de originele dus verwijderen . Kill objSourceToReceive . Do ##class(EWMS.ToReceive).%DeleteId(IDToDel) Else Do . $$$WriteToLog("->LocID en sectie vastleggen") . Set objToReceive.QtyTransported=AddQty . Set objToReceive.QtyTransportReq=AddQty . Set objToReceive.LocID=DoelPalID . Set objToReceive.Sectie=SectieToUse Quit:(tmpStatus'="") tmpStatus Set objToReceive.OrderConfirmed=0 ;nieuw toegevoegd 8/1/08, mogelijk niet correct Set tmpStatus=objToReceive.%Save() Quit:($$$ISERR(tmpStatus)) "Fout tijdens afpunten to_receive record: "_$$ParseStatus^vhLib(tmpStatus) //---------------------------------------------------------------------------------------------- //PARENT TO_RECEIVE LIJN updaten (locid=00000000, sectie=00000000) //---------------------------------------------------------------------------------------------- $$$WriteToLog("Afpunten to_receive tabel: PARENT LINE") New parentobjToReceive Set parentobjToReceive=objToReceive.GetParentObj() Quit:(parentobjToReceive=$$$NULLOREF) "Kan de PARENT niet opvragen van het EWMS.ToReceive-object met ID '"_ToReceiveID_"'." Quit:((parentobjToReceive.QtyTransported+AddQty)>parentobjToReceive.QtyToReceive) "Cumulatie van parentlijn: QtyTransported overtreft QtyToReceive." Set parentobjToReceive.QtyTransported=parentobjToReceive.QtyTransported+AddQty Set parentobjToReceive.QtyTransportReq=parentobjToReceive.QtyTransportReq+AddQty Set parentobjToReceive.OrderConfirmed=0 ;nieuw toegevoegd 8/1/08, mogelijk niet correct Set tmpStatus=parentobjToReceive.%Save() Quit:($$$ISERR(tmpStatus)) "Fout tijdens afpunten PARENT to_receive record: "_$$ParseStatus^vhLib(tmpStatus) //---------------------------------------------------------------------------------------------- //C06 bericht versturen //---------------------------------------------------------------------------------------------- New C06 Set C06="C06" Set C06("RCPNR")=RcpNr Set C06("BONNR")=BonNr Set C06("RCPLNR")=RCPLNR Set C06("RCPLSPLITSNR")=RCPLSPLITSNR Set C06("DATUM")=$H Set C06("PALETID")=DoelPalID Set C06("DELTAIN")=AddQty Set C06("TOTFYSSTOCK")=0 Set C06("STATUS")="ROK" Set C06("LOCFROM")="" Set C06("LOCTO")=$$$cmGeneral.GetStockagePlaatsViaLocation(DoelLocatie) ;C06 Set tmpStatus=$$$cmGeneral.ProcessCRec(.C06) Quit:(tmpStatus'="") "Fout tijdens bevestiging opslag receptielijn: "_tmpStatus //---------------------------------------------------------------------------------------------- //Checken of alles van het opgegeven order gestockeerd is //---------------------------------------------------------------------------------------------- New ErrStr,OrderIsTransported Set OrderIsTransported=##class(EWMS.ToReceive).OrderIsTransported(OrderNr,.ErrStr) Quit:(ErrStr'="") ErrStr If 'OrderIsTransported Do Quit "" . $$$WriteToLog("Commit add stock from RCP success (receptie niet volledig afgewerkt - geen C07 bericht).") //---------------------------------------------------------------------------------------------- //Alles is gestockeerd, C07 bericht versturen - Voorgaande check sluit mogelijk routine al af //---------------------------------------------------------------------------------------------- New C07 Set C07="C07" Set C07("RCPNR")=RcpNr Set C07("BONNR")=0 Set C07("RCPLNR")=0 Set C07("EINDDAT")=$H Set C07("STATUS")="ROK" Set tmpStatus=$$$cmGeneral.ProcessCRec(.C07) Quit:(tmpStatus'="") "Fout tijdens aanduiden einde receptie: "_tmpStatus //---------------------------------------------------------------------------------------------- //Receptie-inhoud verwijderen //---------------------------------------------------------------------------------------------- Set tmpStatus=##class(EWMS.ToReceive).DeleteReceptie(OrderNr) Quit:(tmpStatus'="") "Fout tijdens verwijderen receptie uit to_receive-tabel: "_tmpStatus $$$WriteToLog("Commit add stock from RCP success.") Quit "" ]]> 1 LocID:%Library.String,Locatie:%Library.List,Sectie:%Library.String,Product:%Library.String,AddQty:%Library.Integer,HistoryRemark:%Library.String="" cache 0 %Library.String document literal 1 Locatie:%Library.String,LocID:%Library.String cache 0 %Library.String document literal 1 LocID:%Library.String,Locatie:%Library.List,Sectie:%Library.String,Product:%Library.String,CCQty:%Library.Integer,Reden:%Library.String="",UserID:%Library.String="",HistoryRemark:%Library.String="",AutoCC:%Library.Boolean=0 cache 0 %Library.String document literal 1 LocID:%Library.String,Locatie:%Library.String,Sectie:%Library.String,Product:%Library.String,Qty:%Library.String,HistoryRemark:%Library.String="",SQLGCWrapper:%Library.String,IsFull:%Library.Boolean=1 cache 0 %Library.List document literal 1 LocID:%Library.String,Locatie:%Library.List,Sectie:%Library.String,Product:%Library.String,ChangeToQty:%Library.String,WithReservation:%Library.Boolean=0,HistoryRemark:%Library.String="",SQLGCWrapper:%Library.String,Reden:%Library.String,UserID:%Library.String,AutoCC:%Library.Boolean=0 cache 0 %Library.List document literal gn err) Quit:($LI(tmpStatus)<0) tmpStatus ;S05 bericht opmaken voor admin ( => C("DELTA") wordt verderop ingevuld <=) New C Set C="S05" Set C("PRNR")=Product Set C("TOTFYSSTOCK")=0 Set C("PALETID")=LocID Set C("REDEN")=Reden Set C("USER")=UserID Set C("VOLGNR")=$R(10000) ;Doesn't matter, wo enkel gebruikt bij error Set C("AUTOCC")=AutoCC New InventoryID Set InventoryID=$LI(tmpStatus,2) ;NIEUWE INVENTORY (=ADD ChangeToQty TO STOCK) If (InventoryID="") Do . Set C("DELTA")=ChangeToQty . Quit:(ChangeToQty=0) ;Dit zou een nieuwe pallet aanmaken... . Set tmpStatus=..FAddStock(LocID,Locatie,Sectie,Product,ChangeToQty,HistoryRemark,SQLGCWrapper) . Set:($LI(tmpStatus)>0) tmpStatus=$LB(1,"Nieuw inventory object aangemaakt ("_ChangeToQty_").") ;BESTAANDE INVENTORY Else Do . If '##class(EWMS.Inventory).%ExistsId(InventoryID) Do Quit .. Set tmpStatus=$LB(-1,"Inventory object met ID '"_InventoryID_"' bestaat niet.") . New InventoryObj . Set InventoryObj=##class(EWMS.Inventory).%OpenId(InventoryID) . If InventoryObj=$$$NULLOREF Do Quit .. Set tmpStatus=$LB(-2,"Inventory object met ID '"_InventoryID_"' kan niet geopend worden.") . New QtyPcs,DeltaPcs . Set QtyPcs=InventoryObj.QtyPcs . Do InventoryObj.%Close() . ;NIEUWE QTY > BESTAANDE => ADD STOCK . If ChangeToQty>QtyPcs Do .. Set DeltaPcs=ChangeToQty-QtyPcs .. Set tmpStatus=..FAddStock(LocID,Locatie,Sectie,Product,DeltaPcs,HistoryRemark,SQLGCWrapper) .. Set C("DELTA")=DeltaPcs .. Set:($LI(tmpStatus)>0) tmpStatus=$LB(2,"Aan stock toegevoegd: "_DeltaPcs_".") . ;NIEUWE QTY < BESTAANDE => REMOVE STOCK . Else If ChangeToQty0) tmpStatus=$LB(3,"Van stock verwijderd: "_DeltaPcs_".") . ;NIEUWE QTY = BESTAANDE => DO NOTHING . Else Do .. Set C("DELTA")=0 Quit:($LI(tmpStatus)<0) tmpStatus ;Verwerken van C-bericht New ProcessStr Set ProcessStr=##class(BL.MB.UGLYPicking.General).ProcessCRec(.C) $$$WriteToLog("Process CRec: "_$S(ProcessStr="":"Ok.",1:ProcessStr)) Quit $S(ProcessStr="":tmpStatus,1:$LB(-4,ProcessStr)) ]]> 1 LocID:%Library.String,Locatie:%Library.String,Sectie:%Library.String,Product:%Library.String,Qty:%Library.String,WithReservation:%Library.String=1,HistoryRemark:%Library.String="",SQLGCWrapper:%Library.String,QtyReserved:%Library.Integer cache 0 %Library.List document literal 1 Locatie:%Library.String,LocID:%Library.String,SQLGCWrapper:%Library.String cache 0 %Library.List document literal dit is tegen de eerste method!!! Quit:($LI(Status)=2) $LB(-3,$LI(Status,2)) Quit $LB(1,"Pallet '"_LocID_"' succesvol verwijderd.") ]]> 1 BronLocID:%Library.String,BronLocatie:%Library.String,BronSectie:%Library.String,DoelLocID:%Library.String,DoelLocatie:%Library.String,DoelSectie:%Library.String,Product:%Library.String,Qty:%Library.String,HistoryRemark:%Library.String="",SQLGCWrapper:%Library.String,IsFull:%Library.Boolean=1 cache 0 %Library.List document literal DoelLocatie: "_$$LCVT^vhLib(DoelLocatie)) $$$WriteToLog("- BronLocID: "_BronPalletID_" -> DoelLocID: "_DoelLocID) $$$WriteToLog("- BronSectie: "_BronSectie_" -> DoelSectie: "_DoelSectie) $$$WriteToLog("- Product: "_Product_", Qty: "_Qty_", Remark: "_HistoryRemark) New Status ;Weghalen uit bronplaats Set Status=..FRemoveStock(BronLocID,BronLocatie,BronSectie,Product,Qty,0,HistoryRemark,SQLGCWrapper) Quit:($LI(Status)<0) Status ;Toevoegen aan doelplaats Set Status=..FAddStock(DoelLocID,DoelLocatie,DoelSectie,Product,Qty,HistoryRemark,SQLGCWrapper,IsFull) Quit Status ]]> 1 ToRecvPalID:%String,DoelLocatie:%String,DoelPalID:%String,Product:%String="",HistoryRemark:%String="" cache 0 %Library.List document literal 0) ;Enkel niet gestockeerde verwerken . Set tmpStatus="" . Set tmpStatus=..CommitAddStockFromRCP(aRS(Cnt,"ID"),DoelLocatie,DoelPalID,HistoryRemark) Quit:(tmpStatus'="") $LB(-2,tmpStatus) ;======================================================================================================================== ; AUTO CC Flag ;======================================================================================================================== $$$WriteToLog("AutoCC flag extra_int_6 met één verhogen.") Set tmpStatus=##class(EWMS.Inventory).IncExtraInt6(DoelPalID) Quit:(tmpStatus'="") $LB(-3,tmpStatus) $$$WriteToLog("Verplaats pallet from RCP success.") Set EventData = ##class(DOM.MAG.event.PalletVerplaatstEventData).%New(ToRecvPalID,$LI(DoelLocatie,1),$LI(DoelLocatie,2),$LI(DoelLocatie,3),$LI(DoelLocatie,4)) Set Event = ##class(DOM.MAG.event.PalletVerplaatstEvent).%New(EventData) Do ##class(TECH.PubSub.OrchestrationContext).GetEventRaiser().RaiseEventAsync(Event) New DoelLocatieStr Set DoelLocatieStr=##class(BL.MB.UGLYPicking.General).GetTransLocStrViaLocation(DoelLocatie) ; GetScannedLocStrViaLocation(..) Quit $LB(1,"Pallet '"_ToRecvPalID_"' succesvol gestockeerd op locatie "_DoelLocatieStr_", pallet '"_DoelPalID_"'.") ]]> 1 BronLocation:%Library.List,DoelLocation:%Library.List,PalletID:%Library.String cache 0 %Library.List document literal DoelLocation"_DoelStr) $$$WriteToLog("PalletID: "_PalletID) //RETURN VALUES: //ERRORS //-8: Auto cc flag error //-7: Locations state doelpal niet ok //-6: Fout bij opvragen locations state //-5: Carriers update error //-4: Inventory update error //-3: Doellocatie is onbekend of is niet leeg of ... (zie CompleteLocationViaEmptyLoc) //-2: Upper error: bezet locatie //-1: Upper error: leeg locatie //SUCCESS // 1: All around succes ;WANNEER DOEL<>TRANSIT->Doel moet reeds bestaan, zoniet afsluiten New Status Set Status=$LB(0) ;Neutrale, tussentijdse status Set Result=##class(BL.MB.UGLYPicking.General).CompleteLocationViaEmptyLoc(.DoelLocation,PalletID) Set:(Result'="") Status=$LB(-3,"Doellocatie: "_Result) Quit:($LI(Status)<0) Status ;Locationsstate opvragen, indien blocked, dan negatief sluiten New LocIsBlocked Set LocIsBlocked=##class(EWMS.Locations).LocationIsBlocked(DoelLocation,.ErrStr) Quit:(ErrStr'="") $LB(-6,"Fout tijdens achterhalen blocked-state location: "_ErrStr) Quit:(LocIsBlocked) $LB(-7,"De opgegeven doellocatie '"_DoelStr_"' is momenteel geblokkeerd.") Quit:($LB(-7,"just to test")) //---------------------------------------------------------------------------------------------- //SQL Gateway object aanmaken //---------------------------------------------------------------------------------------------- New SQLGCWrapper Set SQLGCWrapper=##class(EWMS.SQLGCWrapper).%New() ;Verbinden If 'SQLGCWrapper.Connect() Do Quit $LB(-1,"SQLGCWrapper Connect Error.") . Do SQLGCWrapper.%Close() ;Statement alloceren If 'SQLGCWrapper.AllocateStatement() Do Quit $LB(-1,"SQLGCWrapper AllocStatement Error.") . Do SQLGCWrapper.Disconnect() //Disconnect dropt ook het statement als dit reeds gealloceerd zou zijn SQLGCWrapper.. . Do SQLGCWrapper.%Close() ;======================================================================================================================== ; Alles OK, maak de bronlocatie leeg ;======================================================================================================================== Set Status=##class(EWMS.Locations).LeegLocation(BronLocation,PalletID,0,SQLGCWrapper) ;Para3=0, location wo sowieso verwijderd (onafh van aanwezigheid van pallet in inventory) $$$WriteToLog("LeegLocation: "_$$LCVT^vhLib(Status)) Quit:($LI(Status)<0) $LB(-1,$LI(Status,2)_"(# "_$LI(Status,1)_")") ;ErrorStr+Nr van bovenaf meegeven ;======================================================================================================================== ; Alles OK, maak doellocatie aan ;======================================================================================================================== Set Status=##class(EWMS.Locations).BezetLocation(DoelLocation,PalletID,SQLGCWrapper) $$$WriteToLog("BezetLocation: "_$$LCVT^vhLib(Status)) Quit:($LI(Status)<0) $LB(-2,$LI(Status,2)_"(# "_$LI(Status,1)_")") ;ErrorStr+Nr van bovenaf meegeven //---------------------------------------------------------------------------------------------- //SQL Gateway object vrijgeven //---------------------------------------------------------------------------------------------- ;Statement drop If 'SQLGCWrapper.DropStatement() Do Quit $LB(-1,"SQLGCWrapper DropStatement Error.") . Do SQLGCWrapper.Disconnect() . Do SQLGCWrapper.%Close() ;Verbreken If 'SQLGCWrapper.Disconnect() Do Quit $LB(-1,"SQLGCWrapper Disconnect Error.") . Do SQLGCWrapper.%Close() Do SQLGCWrapper.%Close() ;======================================================================================================================== ; Carriers en Inventory updaten ;======================================================================================================================== New tmpStatus Set tmpStatus=##class(EWMS.Inventory).SetLocMViaPalletID(PalletID,$LI(DoelLocation)) If tmpStatus'="" Do Quit Status . Set Status=$LB(-4,tmpStatus) Set tmpStatus=##class(EWMS.Carriers).SetLocMViaPalletID(PalletID,$LI(DoelLocation)) If tmpStatus'="" Do Quit Status . Set Status=$LB(-5,tmpStatus) ;======================================================================================================================== ; AUTO CC Flag ;======================================================================================================================== $$$WriteToLog("AutoCC flag extra_int_6 met één verhogen.") Set tmpStatus=##class(EWMS.Inventory).IncExtraInt6(PalletID) If tmpStatus'="" Do Quit Status . Set Status=$LB(-8,tmpStatus) $$$WriteToLog("Verplaats pallet success.") Set EventData = ##class(DOM.MAG.event.PalletVerplaatstEventData).%New(PalletID,$LI(DoelLocation,1),$LI(DoelLocation,2),$LI(DoelLocation,3),$LI(DoelLocation,4),$LI(BronLocation,1),$LI(BronLocation,2),$LI(BronLocation,3),$LI(BronLocation,4)) Set Event = ##class(DOM.MAG.event.PalletVerplaatstEvent).%New(EventData) Do ##class(TECH.PubSub.OrchestrationContext).GetEventRaiser().RaiseEventAsync(Event) Quit $LB(1,"Pallet '"_PalletID_"' succesvol verplaatst van "_BronStr_" naar "_DoelStr_".") ]]> 1 PalletID:%String,varErrStr:%String %Boolean 0 of in Transport-tabel Set varErrStr="" ;Check of qty_res van alle producten op de pallet gelijk is aan nul New Query,RS Set Query="EWMS.Inventory:GetProductsOnPallet" Set RS=##class(%ResultSet).%New(Query) If RS=$$$NULLOREF Do Quit 0 . Set varErrStr="Kan geen nieuwe instantie van de query '"_Query_"' maken." New tmpStatus Set tmpStatus=RS.Execute(PalletID) If $$$ISERR(tmpStatus) Do Quit 0 . Set varErrStr="Fout bij het uitvoeren van de query '"_Query_"': "_$C(13,10)_$$ParseStatus^vhLib(tmpStatus) If 'RS.Next() Do Quit 0 . Set varErrStr="Pallet '"_PalletID_"' niet teruggevonden in inventory. Kan busy-status niet achterhalen." New Busy Set Busy=0 For Do Quit:('RS.Next() || Busy) . Set:(+RS.Data("QtyRes")'=0) Busy=1 ;Indien reeds busy door test van daarnet, sluit af met 1 Quit:(Busy) 1 ;Check of pallet aanwezig is in de transport tabel Set Query="EWMS.Trans.Transport:GetTransViaPallet" Set RS=##class(%ResultSet).%New(Query) If RS=$$$NULLOREF Do Quit 0 . Set varErrStr="Kan geen nieuwe instantie van de query '"_Query_"' maken." Set tmpStatus=RS.Execute(PalletID) If $$$ISERR(tmpStatus) Do Quit 0 . Set varErrStr="Fout bij het uitvoeren van de query '"_Query_"': "_$C(13,10)_$$ParseStatus^vhLib(tmpStatus) ;Busy=1 wanneer query van zonet een resultaat terug geeft Set Busy=RS.Next() Quit Busy ]]> 1 FromProductNr,ToProductNr:%String,User:%String="" %String "_ToProductNr) $$$WriteToLog("==========================================================================") ; Query uitvoeren waarbij product=FromProductNr New RS,Query Set Query="EWMS.Inventory:GetPalletsViaProd" Set RS=##class(%ResultSet).%New(Query) Quit:(RS=$$$NULLOREF) $LB(-1,"Kan geen nieuwe instantie van de query '"_Query_"' maken.") New tmpStatus Set tmpStatus=RS.Execute(FromProductNr) Quit:($$$ISERR(tmpStatus)) $LB(-2,"Fout bij het uitvoeren van de query '"_Query_"': "_$C(13,10)_$$ParseStatus^vhLib(tmpStatus)) ;Alles uit query in aIDs plaatsen (query uitvoeren en obj openen gaat niet: SQL gateway verliest het noorden, slechts een connectie mogelijk) New InvID,AllCnt,aIDs Set AllCnt=0 For Quit:('RS.Next()) Do . Set AllCnt=AllCnt+1 . Set InvID=##class(EWMS.Inventory).ComposeID(RS.Get("LocID"), RS.Get("Sectie"), FromProductNr, RS.Get("Batch"), RS.Get("Quality"), RS.Get("Owner")) . Set aIDs(InvID)=1 ;SQL Gateway object aanmaken (voor history inventory objecten) New SQLGCWrapper Set SQLGCWrapper=##class(EWMS.SQLGCWrapper).%New() ;Verbinden Quit:('SQLGCWrapper.Connect()) $LB(-4,"SQLGCWrapper Connect Error.") ;Statement alloceren If 'SQLGCWrapper.AllocateStatement() Do Quit $LB(-4,"SQLGCWrapper AllocStatement Error.") . Do SQLGCWrapper.Disconnect() //Disconnect dropt ook het statement als dit reeds gealloceerd zou zijn SQLGCWrapper.. ;change product, send S05, update history_inventory New SuccessCnt,InvObj,ErrorStr,Status,S05,HistInvObj,Location Set SuccessCnt=0 Set InvID="" Set ErrorStr="" For Set InvID=$O(aIDs(InvID)) Quit:(InvID="") Do . Set InvObj=##class(EWMS.Inventory).%OpenId(InvID) . If InvObj=$$$NULLOREF Do Quit .. Set ErrorStr=ErrorStr_$C(13,10)_"* Kan inventory-object '"_InvID_"' niet openen." . $$$WriteToLog("* LocID: "_InvObj.LocID) . ;Change product . Set InvObj.ProductNr=ToProductNr . Set Status=InvObj.%Save() . If $$$ISERR(Status) Do Quit .. Set ErrorStr=ErrorStr_$C(13,10)_"* Kan product wijziging in inventory-object '"_InvID_"' niet bewaren:"_$C(13,10)_$$ParseStatus^vhLib(Status) . $$$WriteToLog("Inventory change product ok.") . ;Send S01 (S05) msg: DELETE prod . Set S05="S05" . Set S05("PRNR")=FromProductNr . Set S05("DELTA")=-InvObj.QtyPcs . Set S05("TOTFYSSTOCK")=0 . Set S05("PALETID")=InvObj.LocID . Set S05("REDEN")="Change product "_FromProductNr_"->"_ToProductNr . Set S05("USER")=User . ;Verwerken bericht . Set ProcessStr=##class(BL.MB.UGLYPicking.General).ProcessCRec(.S05) . If ProcessStr'="" Do Quit .. Set ErrorStr=ErrorStr_$C(13,10)_"* Fout tijdens verwerken S05 bericht (verwijderen product "_FromProductNr_", LocID "_InvObj.LocID_"):"_$C(13,10)_ProcessStr . ;Send S01 (S05) msg: ADD prod . Set S05("PRNR")=ToProductNr . Set S05("DELTA")=-S05("DELTA") . Set ProcessStr=##class(BL.MB.UGLYPicking.General).ProcessCRec(.S05) . If ProcessStr'="" Do Quit .. Set ErrorStr=ErrorStr_$C(13,10)_"* Fout tijdens verwerken S05 bericht (toevoegen product "_FromProductNr_", LocID "_InvObj.LocID_"):"_$C(13,10)_ProcessStr . ;Historiek update: DEL PROD . Set Location=##class(BL.MB.UGLYPicking.General).GetLocationViaLocID(InvObj.LocID) . If Location="" Do Quit .. Set ErrorStr=ErrorStr_$C(13,10)_"* Kan de locatie van '"_InvID_"' niet verkrijgen." . Set HistInvObj=##class(EWMS.History.Inventory).%New() . Set HistInvObj.Action="DEL" . Set HistInvObj.Batch=$$AddTrailingChar^vhLib(""," ",30) . Set HistInvObj.Change=InvObj.QtyPcs . Set HistInvObj.LocID=InvObj.LocID . Set HistInvObj.LocM=$LI(Location,1) . Set HistInvObj.LocG=$LI(Location,2) . Set HistInvObj.LocX=$LI(Location,3) . Set HistInvObj.LocY=$LI(Location,4) . Set HistInvObj.LocZ=$LI(Location,5) . Set HistInvObj.Owner="0000000000" . Set HistInvObj.Product=FromProductNr . Set HistInvObj.Quality="0000000000" . Set HistInvObj.ReasonCode=" " . Set HistInvObj.Remain=0 . Set HistInvObj.RemainBlock=0 . Set HistInvObj.RemainRes=0 . Set HistInvObj.Section=InvObj.Sectie . Set HistInvObj.UserName=$$AddTrailingChar^vhLib(User," ",16) . If 'HistInvObj.Save(SQLGCWrapper) Do Quit .. Set ErrorStr=ErrorStr_$C(13,10)_"* Fout tijdens het bewaren van "_HistInvObj.%ClassName(1)_" (verwijderen product "_FromProductNr_", LocID "_InvObj.LocID_")." . $$$WriteToLog("History update ok (del prod).") . ;Historiek update: ADD PROD . Set Location=##class(BL.MB.UGLYPicking.General).GetLocationViaLocID(InvObj.LocID) . If Location="" Do Quit .. Set ErrorStr=ErrorStr_$C(13,10)_"* Kan de locatie van '"_InvID_"' niet verkrijgen." . Set HistInvObj=##class(EWMS.History.Inventory).%New() . Set HistInvObj.Action="ADD" . Set HistInvObj.Batch=$$AddTrailingChar^vhLib(""," ",30) . Set HistInvObj.Change=InvObj.QtyPcs . Set HistInvObj.LocID=InvObj.LocID . Set HistInvObj.LocM=$LI(Location,1) . Set HistInvObj.LocG=$LI(Location,2) . Set HistInvObj.LocX=$LI(Location,3) . Set HistInvObj.LocY=$LI(Location,4) . Set HistInvObj.LocZ=$LI(Location,5) . Set HistInvObj.Owner="0000000000" . Set HistInvObj.Product=ToProductNr . Set HistInvObj.Quality="0000000000" . Set HistInvObj.ReasonCode=" " . Set HistInvObj.Remain=InvObj.QtyPcs . Set HistInvObj.RemainBlock=0 . Set HistInvObj.RemainRes=0 . Set HistInvObj.Section=InvObj.Sectie . Set HistInvObj.UserName=$$AddTrailingChar^vhLib(User," ",16) . If 'HistInvObj.Save(SQLGCWrapper) Do Quit .. Set ErrorStr=ErrorStr_$C(13,10)_"* Fout tijdens het bewaren van "_HistInvObj.%ClassName(1)_" (toevoegen product "_FromProductNr_", LocID "_InvObj.LocID_")." . $$$WriteToLog("History update ok (add prod).") . Set SuccessCnt=SuccessCnt+1 ;Statement drop If 'SQLGCWrapper.DropStatement() Do Quit $LB(-1,"SQLGCWrapper DropStatement Error.") . Do SQLGCWrapper.Disconnect() ;Verbreken Quit:('SQLGCWrapper.Disconnect()) $LB(-1,"SQLGCWrapper Disconnect Error.") Quit:(ErrorStr'="") $LB(-3,"Aantal producten aangepast: "_SuccessCnt_"/"_AllCnt_" - Fouten:"_ErrorStr) Quit:(AllCnt=0) $LB(1,"Product '"_FromProductNr_"' komt niet voor in het EWMS.") Quit $LB(1,"Product '"_FromProductNr_"' succesvol gewijzigd in '"_ToProductNr_"' ("_SuccessCnt_" sectie(s)).") ]]> 1 LocID:%Library.String,varArray:%Library.String %Library.String 1 ProdNr:%Library.String,varArray:%Library.String %Library.String %SQLQuery paLocID:%String 5 and L.Loc_Id=:paLocID]]> %SQLQuery paProdNr:%String 5 and Product=:paProdNr]]>