persistent UglyPickingCNTs 1 Inventory GSQLStorage %Library.Persistent 0 EWMS SQL,NOCREATE 0 dbo.Inventory_Cache 1 1 LocID,Sectie,ProductNr,Batch,Quality,Owner %String 0 6 batch %String 0 13 exp_day %String 18 extra_int_5 %String 19 extra_int_6 %String 17 extra_int_7 %String 0 16 extra_int_10 %String 20 last_cycle_count %String 21 extra_float_1 %String 0 14 insert_time %Library.String 0 15 is_full %String 0 2 loc_id %Integer 0 4 loc_m %String 0 8 owner %String 0 5 product %Library.String 0 12 qty_block %Library.String 0 10 qty_in_box %Library.String 0 9 qty_pcs %Library.String 0 11 qty_res %String 0 7 quality %String 0 3 sectie 1 code PalletID:%Library.String,Sectie:%Library.String,ProductNr:%Library.String,QtyPcs:%Library.String %Library.Status 1 FromProductNr:%Library.String,ToProductNr:%Library.String %Library.Status 1 code InventoryID:%Library.String,QtyRes:%Library.Integer=0 %Library.String 1 code InventoryID:%Library.String,LocationsID:%Library.String,QtyNeeded:%Library.Integer,QtyReserved:%Library.Integer,HistoryRemark:%Library.String="" %Library.String 1 code InventoryID:%Library.String,QtyNeeded:%Library.String %Library.Status QtyOnPallet) //QtyNeeded < of = QtyOnPallet New tmpResult Set tmpResult=$$$OK If 'Success Do Quit tmpResult . Set tmpResult=$$$ERROR($$$GeneralError,"Picking onvolledig voor product "_+InvObj.ProductNr_": "_QtyNeeded_" vereist, echter "_QtyOnPallet_" beschikbaar.") . Do InvObj.%Close() //Commit Set InvObj.QtyRes=InvObj.QtyRes+QtyNeeded If (InvObj.QtyRes>InvObj.QtyPcs) Do Quit tmpResult . Set tmpResult=$$$ERROR($$$GeneralError,"Picking onvolledig voor product "_+InvObj.ProductNr_": "_InvObj.QtyRes_" in totaal te picken, slechts "_InvObj.QtyPcs_" in stock.") . Do InvObj.%Close() //Save Kill %msg //'InvObj.%Save()' bevat embedded sql, welke werken met %msg om fouten in te bewaren Set tmpResult=InvObj.%Save() Set:($D(%msg)) tmpResult=$$$ERROR($$$GeneralError,%msg) Do InvObj.%Close() Quit tmpResult ]]> 1 code LocID:%Library.String,Sectie:%Library.String,Product:%Library.String,PosResultWhenNotExists:%Library.Boolean=0 %Library.List 1 code LocID:%Library.String,Sectie:%Library.String,ProductNr:%Library.String,Batch:%Library.String,Quality:%Library.String,Owner:%Library.String,ReturnEmptyWhenNew:%Library.Boolean=0 %Library.String 1 code LocID:%Library.String,Location:%Library.String,Sectie:%Library.String,Product:%Library.String,Qty:%Library.String,HistoryRemark:%Library.String,SQLGCWrapper:%Library.String=0,ConsNr:%Library.String="",IsFull:%Library.Boolean=1 %Library.List 0) . Do RS.%Close() . If PalletExists Do .. Set Status=$LB(2,"Nieuwe sectie op bestaande pallet.") . Else Do .. Set Status=$LB(3,"Nieuwe pallet, nieuwe sectie.") Quit:($LI(Status)<0) Status //------------------------------------------------------------------------------------- // History 'INVENTORY' In de transport-tabel aanduiden dat we iets met Inv. gaan doen //------------------------------------------------------------------------------------- New HistLocObj Set HistLocObj=##class(EWMS.History.Transport).%New() Quit:(HistLocObj=$$$NULLOREF) $LB(-7,"Kan geen nieuw EWMS.History.Transport object aanmaken.") Set HistLocObj.Action="UINV" Set HistLocObj.InsertTime=$$GetEWMSInsertTime^vhLib() Set HistLocObj.LocID=LocID Set HistLocObj.LocM=$LI(Location,1) Set HistLocObj.LocG=$LI(Location,2) Set HistLocObj.LocX=$LI(Location,3) Set HistLocObj.LocY=$LI(Location,4) Set HistLocObj.LocZ=$LI(Location,5) Set:('HistLocObj.Save(SQLGCWrapper)) Status=$LB(-5,HistLocObj.%ClassName(1)_": "_HistLocObj.LastErrorMsg) Do HistLocObj.%Close() //--------------------------------------------------------------------------------- // Gegevens invullen in bestaand of nieuw InventoryObj, afh. van InventoryID //--------------------------------------------------------------------------------- New InventoryObj If InventoryID="" Do ;Opgegeven Pallet met Sectie bestaat NIET, maak een nieuwe aan: *** CREATE *** . If '##class(EWMS.Inventory).New(LocID,Sectie,Product,,,,.InventoryID,SQLGCWrapper) Do Quit .. Set Status=$LB(-3,"Kan geen nieuw Inventory object aanmaken (LocID: "_LocID_", Sectie: "_Sectie_", Product: "_Product_").") . Do WLIP^vhDBG(127,"EWMS.Inventory : Before %OpenId("_InventoryID_")") . Set InventoryObj=##class(EWMS.Inventory).%OpenId(InventoryID) . If InventoryObj=$$$NULLOREF Do Quit .. Set Status=$LB(-5,"Kan zonet gecreëerd Inventory object met ID '"_InventoryID_"' niet openen.") . Set InventoryObj.Batch=" " . Set InventoryObj.ExpDay="0000-00-00-00.00.00 " . Set InventoryObj.InsertTime=$$GetEWMSInsertTime^vhLib() . Set InventoryObj.IsFull=IsFull ;Parameter van deze functie . Set InventoryObj.LocID=LocID . If ##class(BL.MB.UGLYPicking.General).LocMIsInReceive($LI(Location,1)) Do ;$LB(M,G,X,Y,Z) .. Set InventoryObj.LocM=1 ;AUTO . Else Do .. Set InventoryObj.LocM=$LI(Location,1) . Set InventoryObj.Owner="0000000000" . Set InventoryObj.ProductNr=Product_$J("",16-$L(Product)) . ;Set InventoryObj.QtyBlock= . ;Set InventoryObj.QtyInBox= . Set InventoryObj.QtyPcs=0 . Set InventoryObj.QtyRes=0 . Set InventoryObj.Quality="0000000000" . Set InventoryObj.Sectie=Sectie Else Do ;Opgegeven Pallet met Sectie bestaat, open deze om aan te passen: *** MODIFY *** . Set InventoryObj=##class(EWMS.Inventory).%OpenId(InventoryID) . If InventoryObj=$$$NULLOREF Do Quit .. Set Status=$LB(-4,"Kan Inventory object met ID '"_InventoryID_"' niet openen.") . Set InventoryObj.IsFull=0 ;Dit is dan sowieso een aangebroken pallet Quit:($LI(Status)<0) Status ;Qty updaten Set InventoryObj.QtyPcs=InventoryObj.QtyPcs+Qty ;QtyPcs & QtyRes onthouden voor History update New remQtyRes,remQtyPcs Set remQtyRes=InventoryObj.QtyRes Set remQtyPcs=InventoryObj.QtyPcs ;Gegevens saven New tmpStatus Set tmpStatus=InventoryObj.%Save() ;Object sluiten Do InventoryObj.%Close() ;Vroegtijdig afsluiten indien fout bij Save Quit:($$$ISERR(tmpStatus)) $LB(-1,"Save Error:"_$C(13,10)_$$ParseStatus^vhLib(tmpStatus)) //--------------------------------------------------------------------------------- // History 'ADD' //--------------------------------------------------------------------------------- New HistInvObj Set HistInvObj=##class(EWMS.History.Inventory).%New() Set HistInvObj.Action="ADD" Set HistInvObj.Batch=$S($IsValidNum(HistoryRemark):$J(HistoryRemark,30),1:$$AddTrailingChar^vhLib(HistoryRemark," ",30)) Set HistInvObj.Change=Qty Set HistInvObj.LocID=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=Product Set HistInvObj.Quality="0000000000" Set HistInvObj.ReasonCode=" " Set HistInvObj.Remain=remQtyPcs Set HistInvObj.RemainBlock=0 Set HistInvObj.RemainRes=remQtyRes Set HistInvObj.Section=Sectie Set HistInvObj.UserName=" " Set:('HistInvObj.Save(SQLGCWrapper)) Status=$LB(-6,"Fout tijdens het bewaren van "_HistInvObj.%ClassName(1)_"(CreateModifyInventory).") Do HistInvObj.%Close() Quit Status ]]> 1 code InventoryID:%Library.String %Library.String Quit+return status &sql(FETCH crALI) Quit:((SQLCODE<0) || ($L($G(%msg)))) "FETCH ERROR - SQL CODE #"_SQLCODE_": "_%msg &sql(CLOSE crALI) Quit ##class(EWMS.Locations).ComposeID(LocM,LocG,LocX,LocY,LocZ,LocID) ]]> 1 code %Library.List 1 code InventoryID:%Library.String,QtyNeeded:%Library.String %Library.String of = QtyNeeded . Set ExitStr="" Else Do . Set ExitStr="Reservatie onvolledig voor product "_+InvObj.ProductNr_": kan "_(QtyNeeded-InvObj.QtyPcs)_" stuk(ken) niet reserveren." Do InvObj.%Close() Quit ExitStr ]]> 1 code %Library.Boolean 1 Method:%String,Melding:%String 1 1 code handle:%Library.Binary %Library.Status 1 code %Library.Status 5) AND (loc_id IN (SELECT loc_id FROM ewms.dbo.Inventory WHERE product=@Product)) "_ "GROUP BY loc_id" //Extra informatie aan SubSQL toevoegen, zoals QtyPcs, LocM, LocG, ... Set SQL="DECLARE @Product VARCHAR(8) "_ "SELECT @Product="_paProduct_" "_ "SELECT L.loc_m, L.loc_g, L.loc_x, L.loc_y, L.loc_z, I.loc_id, I.qty_pcs, S.SectieCnt "_ "FROM ewms.dbo.Locations AS L, ewms.dbo.Inventory AS I, ("_SubSQL_") AS S "_ "WHERE (I.loc_id=L.loc_id) AND (I.loc_id=S.loc_id) AND (I.product=@Product) "_ "ORDER BY I.insert_time" If 'SQLGCWrapper.Prepare(SQL) Do Quit $$$ERROR($$$GeneralError,QuitMsg) . Set QuitMsg=SQLGCWrapper.LastErrorMsg_$C(13,10,13,10)_"SQL Statement:"_$C(13,10)_SQLGCWrapper.LastSQLStatement . Do SQLGCWrapper.Disconnect() . Do SQLGCWrapper.%Close() ;SQL Execute If 'SQLGCWrapper.Execute() Do Quit $$$ERROR($$$GeneralError,QuitMsg) . Set QuitMsg=SQLGCWrapper.LastErrorMsg_$C(13,10,13,10)_"SQL Statement:"_$C(13,10)_SQLGCWrapper.LastSQLStatement . Do SQLGCWrapper.Disconnect() . Do SQLGCWrapper.%Close() Quit $$$OK ]]> 1 code %Library.Status code %Library.Float code %Library.Float code %Library.Float code %Library.Float 1 code LocID:%Library.String,Location:%Library.String,Sectie:%Library.String,Product:%Library.String,Qty:%Library.String,WithReservation:%Library.String=1,HistoryRemark:%Library.String,SQLGCWrapper:%Library.String=0,QtyReserved:%Library.Integer,ConsNr:%Library.String="" %Library.List InventoryObj.QtyPcs, we kunnen niet meer weghalen dan dat er is Set:(Qty>InventoryObj.QtyPcs) Qty=InventoryObj.QtyPcs ;InventoryObj.QtyPcs aanpassen Set InventoryObj.QtyPcs=InventoryObj.QtyPcs-Qty Set InventoryObj.IsFull=0 ;Afhankelijk van parameter ook de reservatie updaten If WithReservation Do . New tmpQty . Set QtyReserved=$G(QtyReserved,Qty) . If QtyReserved>InventoryObj.QtyRes Do .. Set tmpQty=InventoryObj.QtyRes . Else Do .. Set tmpQty=QtyReserved . Set InventoryObj.QtyRes=InventoryObj.QtyRes-tmpQty Else Do . ;Indien geen reservaties, dan hoeft er niks te gebeuren . ;Quit:(InventoryObj.QtyPcs=0) ;Wordt toch verwijderd... . Quit:(InventoryObj.QtyRes=0) . ;QtyPcs0, dan mag wijziging in Inventory object bewaard worden . Set tmpStatus=InventoryObj.%Save() . If $$$ISOK(tmpStatus) Do .. Set Status=$LB(2,"Wijziging in sectie '"_Sectie_"' van pallet '"_LocID_"' bewaard.") .. Set remQtyRes=InventoryObj.QtyRes .. Set remQtyPcs=InventoryObj.QtyPcs .. Do InventoryObj.%Close() . Else Do .. Set Status=$LB(-5,"Save Error:"_$C(13,10)_$$ParseStatus^vhLib(tmpStatus)) Quit:($LI(Status)<0) Status //--------------------------------------------------------------------------------- // History 'DEL' //--------------------------------------------------------------------------------- New HistInvObj Set HistInvObj=##class(EWMS.History.Inventory).%New() Set HistInvObj.Action="DEL" Set HistInvObj.Batch=$S($IsValidNum(HistoryRemark):$J(HistoryRemark,30),1:$$AddTrailingChar^vhLib(HistoryRemark," ",30)) Set HistInvObj.Change=Qty Set HistInvObj.LocID=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=Product Set HistInvObj.Quality="0000000000" Set HistInvObj.ReasonCode=" " Set HistInvObj.Remain=remQtyPcs Set HistInvObj.RemainBlock=0 Set HistInvObj.RemainRes=remQtyRes Set HistInvObj.Section=Sectie Set HistInvObj.UserName=" " Set:('HistInvObj.Save(SQLGCWrapper)) Status=$LB(-6,"Fout tijdens het bewaren van "_HistInvObj.%ClassName(1)_"(RemoveInventory).") Do HistInvObj.%Close() Quit Status ]]> 1 code PalletID:%String %Library.String 1 code InventoryID:%Library.String,QtyPicked:%Library.String %Library.String InvObj.QtyPcs) InvObj.QtyRes=InvObj.QtyPcs //Save Kill %msg //'InvObj.%Save()' bevat embedded sql, welke werken met %msg om fouten in te bewaren New tmpResult Set tmpResult=$$ParseStatus^vhLib(InvObj.%Save()) Set:($D(%msg)) tmpResult=%msg Do InvObj.%Close() Quit tmpResult ]]> 1 code InventoryID:%Library.String,QtyReserved:%Library.String %Library.String InvObj.QtyPcs) InvObj.QtyRes=InvObj.QtyPcs //Save New tmpResult Kill %msg //'InvObj.%Save()' bevat embedded sql, welke werken met %msg om fouten in te bewaren Set tmpResult=$$ParseStatus^vhLib(InvObj.%Save()) Set:($D(%msg)) tmpResult=%msg Do InvObj.%Close() Quit tmpResult ]]> 1 PalletID:%Library.String,Product:%Library.String extra_float_1)) Quit:($D(%msg)) "SQLCode #"_$G(SQLCODE,"?")_": "_%msg Quit "" ]]> 1 PalletID:%Library.String,Product:%Library.String %Library.String 1 PalletID:%Library.String,Product:%Library.String %Library.String 1 PalletID:%Library.String,ExtraInt7:%Library.String %Library.String 1 PalletID:%Library.String,Product:%Library.String,ExtraInt7:%Library.String,HLastCycleCount:%String %Library.String 1 PalletID:%Library.String,Product:%Library.String %Library.String 1 code PalletID:%Library.String,ExtraInt10:%Library.String %Library.String 1 code PalletID:%Library.String,LocM:%Library.String %Library.String Vrij aantal voor een product in bep. magazijn(en) 1 PRNr:%Integer,lbLocM:%List %Library.Integer 5 and (Product=:PRNr) ) &sql(OPEN GetQty) For &sql(FETCH GetQty) Quit:(SQLCODE '= 0) Do . ;w LocId," ",QtyPcs," ",LocM," " . Quit:$LF(lbLocM,LocM)=0 . Set SumQtyPcs=SumQtyPcs+QtyPcs . Set SumQtyRes=SumQtyRes+QtyRes &sql(CLOSE GetQty) Quit SumQtyPcs-SumQtyRes ]]> w ##class(EWMS.Inventory).FPurgeReservations() 1 %String 0) AND (Inv.loc_id=Loc.loc_id) AND (Loc.loc_m>=1) AND (Loc.loc_m<=4)) &sql(OPEN crPPP) Quit:((SQLCODE<0) || ($L($G(%msg)))) "Error: "_SQLCODE_", "_%msg //ERROR? ;Alles uit query tijdelijk bewaren in array (er traden fouten op wanneer nog andere zaken binnenin deze ;query werden uitgevoerd, zaken die waarschijnlijk ook met gelijke variabelen werken (%msg, SQLCODE) New FatalErr,PurgeCnt,aReservation,InvID,ConsNrs Set FatalErr=0 Set PurgeCnt=0 For &sql(FETCH crPPP) Quit:(SQLCODE || FatalErr) Do . Set:((SQLCODE<0) || ($L($G(%msg)))) FatalErr=1 //Foutje? . Set InvID=..ComposeID(LocID,Sectie,ProductNr,Batch,Quality,Owner) . ;plaats reeds html data in array nu we de velden van de query nog ter beschikking hebben . Set ConsNrs=$$GetConsNrsViaLocIDAndProd(LocID,+ProductNr) . Set aReservation(InvID)=""_LocID_""_$J(LLocM,4)_""_$J(LocG,4)_""_$J(LocX,4)_""_$J(LocY,4)_""_$J(LocZ,4)_""_$J(+ProductNr,7)_""_##class(Prod.Product).GetPropViaNr(+ProductNr,"KortTekst")_""_$J(QtyRes,7,0)_""_$J(QtyPcs,7,0)_""_ConsNrs_"" . Set aReservation(InvID,$$$DoNotReset)=(LLocM=1) . Set PurgeCnt=PurgeCnt+1 Quit:(FatalErr) "Error: "_SQLCODE_", "_%msg //ERROR? &sql(CLOSE crPPP) ;Sluiten indien query geen resultaten heeft Quit:(PurgeCnt=0) "" ;HTML mail opstellen met daarin palletten waarvan de reservatie <> 0 New MailBody,StyleTable Set StyleTable="border-collapse:collapse; border:solid 1px;" Set MailBody="" Set MailBody=MailBody_"" New ResetQtyResStatus,InvID Set InvID="" For Set InvID=$O(aReservation(InvID)) Quit:(InvID="") Do . Set MailBody=MailBody_$C(13,10)_aReservation(InvID) //bevat HTML inhoud, daarnet opgebouwd . If aReservation(InvID,$$$DoNotReset) Do .. Set MailBody=MailBody_"" . Else Do .. Set ResetQtyResStatus=##class(EWMS.Inventory).ChangeQtyRes(InvID,0) .. If ResetQtyResStatus="" Do ... Set MailBody=MailBody_"" .. Else Do ... Set MailBody=MailBody_"" Set MailBody=MailBody_"
LocIDLocMLocGLocXLocYLocZProductKorttekstQtyResQtyPcsConsNrsRemove status
Unchanged
Ok
"_ResetQtyResStatus_"
" Do SendMiniMail^vhLib("UGLY Picking ",$LB("ICT_UPSysOp@vanhoecke.be"),"UGLY Picking: reservaties verwijderd.",MailBody,0,1) Quit "" GetConsNrsViaLocIDAndProd(LocID,ProdNr) New RS,Query Set Query="Flow.OrderWMS.PalletReservatie:GetReservatiesViaPallIDAndProd" Set RS=##class(%ResultSet).%New(Query) Quit:(RS=$$$NULLOREF) "Kan geen nieuwe instantie van de query '"_Query_"' maken." New tmpStatus Set tmpStatus=RS.Execute(LocID,ProdNr) Quit:($$$ISERR(tmpStatus)) "Fout bij het uitvoeren van de query '"_Query_"': "_$C(13,10)_$$ParseStatus^vhLib(tmpStatus) New ConsStr,ConsNr Set ConsStr="" For Quit:('RS.Next()) Do . Set ConsNr=RS.Get("ConsolidatieNr") . Quit:($$IsLocked^vhLib("^UGLYOrderPick("_ConsNr_")")) //Indien locked: nu actief, niet meetellen . Quit:##class(APPS.MAG.UglyPickingService).%New().IsBonInGebruik(ConsNr) . Set ConsStr=$S(ConsStr="":"",1:ConsStr_",")_$$FormatNumber^vhLib(".",ConsNr) // '.': Thousand Sep Quit ConsStr ]]>
Geef een LocID op en kijk of deze reeds voorkomt in de inventory. %Library.SQLQuery paLocID:%Library.String SELECT Count(Product) FROM EWMS.Inventory WHERE (loc_id = :paLocID) Velden die noodzakelijk zijn om een InventoryID op te bouwen %Library.SQLQuery LocID:%Library.String,Sectie:%Library.String,Product:%Library.String SELECT batch, owner, quality FROM EWMS.Inventory WHERE (loc_id = :LocID) AND (product = :Product) AND (sectie = :Sectie) %Library.SQLQuery paProductNr:%Library.Integer %Library.SQLQuery paProductNr:%Library.Integer %Library.SQLQuery paLocID:%String 5) AND (Main.Product=Sub.Product) AND (Main.loc_id=:paLocID) ORDER BY Main.Product]]> Geef een LocID en Section op en krijg het product terug dat zich bevindt op die plaats %Library.SQLQuery paLocID:%Library.String,paSectie:%Library.String SELECT loc_id,sectie,product,batch,quality,owner FROM EWMS.Inventory WHERE (loc_id = :paLocID) AND (sectie = :paSectie) %Library.SQLQuery PalletID:%Library.String SELECT product,qty_pcs,qty_res,sectie,batch,quality,owner,extra_int_10,extra_int_7,is_full FROM EWMS.Inventory AS Inv WHERE (loc_id = :PalletID) %Library.SQLQuery paProductNr:%Library.String %Library.SQLQuery paPalletID:%Library.String SELECT Max(extra_int_7) FROM EWMS.Inventory AS Inv WHERE (loc_id = :paPalletID) %Library.SQLQuery paPalletID:%Library.String,paProduct:%Library.String SELECT Max(extra_int_7) FROM EWMS.Inventory AS Inv WHERE (loc_id = :paPalletID) AND (product = :paProduct) Result: Locatie,Pallet,Qty,#Secties %Library.Query paProduct:%Library.String %CacheSQLStorage ^EWMS.InventoryS 33.3333%