serial UglyPickingCNTs,BL.Derde.Kennis Default %Library.TMFormClass 0 %Library.Boolean 0 %Library.String %Library.TMForm %Library.Boolean 0 %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %Library.String %Library.String %Library.Boolean 0 %Library.Boolean 0 %Library.String %Library.Boolean 0 %Library.String %TMShape %TMShape %TMShape %TMShape %TMShape %TMShape %Library.String "(onbekend)" %TMButton %TMButton %TMButton %Library.String -1 %Library.String %Library.List %Library.String 0 %Library.String %Library.Boolean 0 %Library.List $LB("HALUX") %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMLabel %TMPanel %TMPanel %TMPanel initvalue:%String cache 0 %Status document literal PalletResObj:%Integer cache 0 %Library.Boolean document literal 0 dan moet de zonet verwijderde pallet opnieuw worden aangemaakt. ;Hiervoor is GhostData vereist: data van een sectie op een pallet die niet ;meer bestaat maar die wel noodzakelijk is voor eventuele heropbouw vd sectie If ..PalletResID=0 Do Quit 0 . Do pdaMsgBox^vhVisual(..Form.Caption,"Geen geldig PalletRes object ter beschikking voor verwerking.",$$$MBICONERROR) If '##class(Flow.OrderWMS.PalletReservatie).%ExistsId(..PalletResID) Do Quit 0 . Do pdaMsgBox^vhVisual(..Form.Caption,"PalletRes object met ID '"_..PalletResID_"' bestaat niet.",$$$MBICONERROR) New PalletResObj Set PalletResObj=##class(Flow.OrderWMS.PalletReservatie).%OpenId(..PalletResID) ;LOCID Set ..ccLocID=PalletResObj.PalletID ;LOCATIE ($LB) New LO ;tmp Locations object Set LO=PalletResObj.Locations Set ..ccLocatie=$LB(LO.locm,LO.locg,LO.locx,LO.locy,LO.locz) ;SECTIE Set ..ccSectie=PalletResObj.Sectie ;PRODUCT Set ..ccProduct=PalletResObj.ProductGetObjectId() ;NEW QTYPCS (ZONDER CC) Set ..ccCurrentQtyPcs=PalletResObj.Inventory.QtyPcs-..dCOMPREADlbAantal() Do PalletResObj.%Close() Quit 1 ]]> cache 0 document literal cache 0 document literal cache 0 %Library.Integer document literal PalletB. Hierdoor kan de ;reservatie van prod op PalletA vervallen, aangezien deze naar PalletB is. ;Vanuit die functie wordt de verandering duidelijk gemaakt door ReservationIsDone ;van alle PalletA's in Flow.OrderWMS.PalletReservatie op 0 te zetten If '$IsObject(PalletResObj.AssociatedZeroPallet) Do Quit $$UnlockAndReturnValue(0) . Do pdaMsgBox^vhVisual(..Form.Caption,"Interne fout: de pallet-reservatie is niet meer gekoppeld aan een geldige zero-pallet'!",$$$MBICONERROR) If 'PalletResObj.AssociatedZeroPallet.ReservationIsDone Do Quit $$UnlockAndReturnValue(0) . Do pdaMsgBox^vhVisual(..Form.Caption,PalletResObj.AssociatedZeroPallet.FailedReservation,$$$MBICONINFORMATION) ;InvID & LocID onthouden voor CommitPicking verderop... If '$IsObject(PalletResObj.Inventory) Do Quit $$UnlockAndReturnValue(0) . Do pdaMsgBox^vhVisual(..Form.Caption,"De pallet-reservatie is niet meer gekoppeld aan een geldig inventory-object!",$$$MBICONINFORMATION) If '$IsObject(PalletResObj.Locations) Do Quit $$UnlockAndReturnValue(0) . Do pdaMsgBox^vhVisual(..Form.Caption,"De pallet-reservatie is niet meer gekoppeld aan een geldig locations-object!",$$$MBICONINFORMATION) New InventoryID,LocationsID Set InventoryID=PalletResObj.Inventory.%Id() Set LocationsID=PalletResObj.Locations.%Id() New OrigAantal ;Dit aantal wordt verderop gebruikt Set OrigAantal=PalletResObj.AantalTePicken If PalletResObj.AantalTePicken'=AantalTePicken Do . Set PalletResObj.AantalTePicken=AantalTePicken . Do PalletResObj.%Save() . Set ..PerformCycleCount=($$IsGroep^vhUSER(..UserId, "CC")) ;Cycle-count vereist: u hebt het # aangepast, dit heeft een c/c reden (bijv. beschadigd) . Set:((PalletResObj.Inventory.QtyPcs-AantalTePicken)=0) ..PerformCycleCount=1 . Set ..ReCalcReservation=1 ;Het wijzigen vh aantal moet resulteren in een herberekening vd reservatie If AantalTePicken>PalletResObj.Inventory.QtyPcs Do Quit $$UnlockAndReturnValue(-1) . New ErrMsg . Set ErrMsg="Het te picken aantal ("_AantalTePicken_") is nu groter dan het aantal beschikbaar op de pallet ("_PalletResObj.Inventory.QtyPcs_")." . Do pdaMsgBox^vhVisual(..Form.Caption,ErrMsg,$$$MBICONWARNING) . Do PalletResObj.%Close() ;Pallet volledig picken? If PalletResObj.Inventory.QtyPcs-AantalTePicken=0 Do . Set:('..IgnoreCCWhenFullPick) ..PerformCycleCount=1 ;Indien Ignore-flag niet op 0->C/C triggeren ;frequent cycle counts If '..PerformCycleCount do . If (PalletResObj.Inventory.ExtraInt7 > 0) do . . Set ..ccAutoCC = 1 . . Set ..PerformCycleCount = ($$IsGroep^vhUSER(..UserId, "CC")) ;Heeft de nightly ZetAutoCC() ExtraInt7 gezet? zo ja: C/C triggeren Do PalletResObj.%Close() ;Indien CC, props vullen If ..PerformCycleCount Do . Set ..PerformCycleCount=..CreateCCData() ;Indien creatie CC data faalt->geen CC... . Set ..ReCalcReservation=..PerformCycleCount ;Een cycle count gaat steeds gepaard met ReCalc Reservation ;---------- CHARGE NRs -------------------------------------------------------- ;Checken of het product een chargeid heeft, zoja, chargenrs opvragen via bijhorende form If $$$cmProdHistChargeTrace.IsChargeProduct(..ProductNr,1) Do . New frmChargeInput . Set frmChargeInput=##class(UI.MB.UGLYPicking.dlgChargeInput).%New($LB(%this.Form.Address,0)) . Quit:('frmChargeInput.LoadCharge(..ConsNr,..Magazijn,..ProductNr,AantalTePicken)) . Do frmChargeInput.Form.ShowModal() ;---------- COMMIT ------------------------------------------------------------ ;Reservatie als afgehandeld aanduiden in PalletRes Set ..lblAantal.Caption="Busy" Do MApplication.ProcessMessages() ;Reservatie als afgehandeld aanduiden in objecten Flow.OrderWMS.Hoofding-Lijn-Sub New tmpResult Set tmpResult=##class(Flow.OrderWMS.PalletReservatie).CommitReservation(..PalletResID) If tmpResult'="" Do Quit $$UnlockAndReturnValue(0) . Do pdaMsgBox^vhVisual(..Form.Caption,tmpResult,$$$MBICONERROR) ;Reservatie als afgehandeld aanduiden in objecten Inventory,Locations,Carriers New tmpResult ;Mogelijk is AantalTePicken <> OrigAantal omdat met de mogelijkheid heeft het aantal te wijzigen ;in deze form, om de reservatie dan correct weg te halen moet het originele aantal worden ;opgegeven. Stel QtyOrig=30, dan is QtyOrigRes=30, u verandert het aantal in 10. U drukt op de ;button 'klaar'. Deze zal een reservatie van slechts 10 weghalen indien u niet met CommitPicking ;het reservatie-aantal opgeeft. Dan neemt deze gewoon de nieuwe Qty=10. Dwz dat er nog 20 gereserveerd ;blijven, terwijl deze helemaal ter beschikking zijn van de gebruiker. Dus wij geven OrigAantal (=30) ;mee aan CommitPicking: Set tmpResult=##class(EWMS.Inventory).CommitPicking(InventoryID,LocationsID,AantalTePicken,OrigAantal,..ConsNr) If tmpResult'="" Do . Do pdaMsgBox^vhVisual(..Form.Caption,tmpResult,$$$MBICONERROR) Else Do . Set ..lblAantal.Caption="OK" . Do MApplication.ProcessMessages() . Do:(..AskForPrintPalletEtiket) ..PrintPalletEtiket(..ConsNr,1,..Magazijn) Set ..PalletResID=0 Quit $$UnlockAndReturnValue(1) ;------------------------------------------------------------------------------ UnlockAndReturnValue(Value) Lock -^ORDW("D",..ConsNr) Quit Value ]]> cache 0 document literal initvalue:%String cache 0 MApplication document literal initvalue:%String cache 0 %Library.Status document literal 1 ConsNr:%Library.String,AskForPrint:%Library.Boolean=0,Magazijn:%Library.String cache 0 document literal KlantNr,ProductNr:%String cache 0 document literal Args:%String cache 0 document literal Args:%String cache 0 document literal Args:%String cache 0 document literal cache 0 %Library.Integer document literal PalletReservatieID:%String,AantalTePicken:%Integer cache 0 %Library.String document literal PalletResObj.Inventory.QtyPcs Do .. Set ..ReCalcReservation=1 .. Set QuitMsg="Het te picken aantal ("_AantalTePicken_") is groter dan het aantal beschikbaar op de pallet ("_PalletResObj.Inventory.QtyPcs_")." . Else Do .. Set PalletResObj.AantalTePicken=AantalTePicken ;Even een vluchtige wijziging-wo NIET gesaved, enkel bij druk op KLAAR button If (QuitMsg'="") Do Quit QuitMsg . Do PalletResObj.%Close() ;Aantal aanpassen, uitrekenen grootverpakking/normaal verpakking Do ..iUpdateAantal(PalletResObj.Product.ProductNr,PalletResObj.AantalTePicken,PalletResObj.AantalOpPallet) ;Achterhalen of het bericht 'full' moet worden weergegeven (# prods op pallet=1, ;product is na deze picking volledig leeg) New RS Set RS=##class(%ResultSet).%New("EWMS.Inventory:GetProductsOnPallet") Do RS.Execute(PalletResObj.PalletID) Do RS.Next() If (PalletResObj.AantalTePicken=PalletResObj.AantalOpPallet) && 'RS.Next() Do . Do ..dCOMPWRITEpnlFull(PalletResObj.IsFull) . ;Vragen of pallet-etiket moet worden afgedrukt: . Set ..AskForPrintPalletEtiket=##class(Flow.OrderWMS.Hoofding).AskForEtiketWhenFullPalletPick(PalletResObj.Magazijn) Else Do . Set ..pnlFull.Visible="False" Do RS.%Close() ;Informatie onthouden voor later te hergebruiken bij uitvoeren van bepaalde methods Set ..ConsNr=PalletResObj.ConsolidatieNr Set ..Magazijn=PalletResObj.Magazijn Set ..ProductNr=PalletResObj.Product.ProductNr Do PalletResObj.%Close() Quit "" ]]> cache 0 document literal IsFullPallet cache 0 document literal ProductNr,AantalTePicken,AantalAanwezig:%Integer cache 0 document literal 6 Do . Set ..lblAantal.Font.Size=14 Set ..lblAantal.Text=$$DottedInt^vhLib(AantalTePicken) Set ..lblAantal.Hint=..lblAantal.Text New AantalNogAanwezig Set AantalNogAanwezig=AantalAanwezig-AantalTePicken ;PRODUCT LEV QUERY + AANTAL UPDATE New RS,Kx,Gx Set RS=##class(%ResultSet).%New("Prod.ProductPrijs:GetVerpakkingen") Do RS.Execute(ProductNr) If 'RS.Next() Do Quit . Do iSetKx("") . Do iSetGx("") . Do iSetStuks(AantalTePicken,AantalNogAanwezig) Do iSetGx(RS.Get("GrootVerpakking"),.AantalTePicken,.AantalNogAanwezig) Do iSetKx(RS.Get("NormaleVerpakking"),.AantalTePicken,.AantalNogAanwezig) Do iSetStuks(AantalTePicken,AantalNogAanwezig) Do RS.%Close() Quit ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ iSetGx(Gx,AantalTePicken,AantalNogAanwezig) If Gx="" Do . ;Foutieve of niet opgegeven Gx . Set ..lblGx.Enabled="False" . Set ..lblGx.Caption="Gx" . Set ..lblPickGx.Enabled="False" . Set ..lblPickGx.Caption="0" . Set ..lblRestGx.Enabled="False" . Set ..lblRestGx.Caption="0" Else Do . ;Gx aanwezig, aantal weergeven . Set ..lblGx.Caption="Gx"_Gx . ;Telling uitvoeren met opgegeven AantalTePicken . Set ..lblPickGx.Caption=$$DottedInt^vhLib(AantalTePicken\Gx) . Set ..lblPickGx.Enabled=$S(..lblPickGx.Caption="0":"False",1:"True") . ;Telling uitvoeren met opgegeven AantalNogAanwezig . Set ..lblRestGx.Caption=$$DottedInt^vhLib(AantalNogAanwezig\Gx) . Set ..lblRestGx.Enabled=$S(..lblRestGx.Caption="0":"False",1:"True") . Set AantalTePicken=AantalTePicken#Gx . Set AantalNogAanwezig=AantalNogAanwezig#Gx Quit ;------------------------------------------------------------------------------ iSetKx(Kx,AantalTePicken,AantalNogAanwezig) If Kx="" Do . ;Foutieve of niet opgegeven Kx . Set ..lblKx.Enabled="False" . Set ..lblKx.Caption="Kx" . Set ..lblPickKx.Enabled="False" . Set ..lblPickKx.Caption="0" . Set ..lblRestKx.Enabled="False" . Set ..lblRestKx.Caption="0" Else Do . ;Kx aanwezig, aantal weergeven . Set ..lblKx.Caption="Kx"_Kx . ;Telling uitvoeren met opgegeven AantalTePicken . Set ..lblPickKx.Caption=$$DottedInt^vhLib(AantalTePicken\Kx) . Set ..lblPickKx.Enabled=$S(..lblPickKx.Caption="0":"False",1:"True") . ;Telling uitvoeren met opgegeven AantalNogAanwezig . Set ..lblRestKx.Caption=$$DottedInt^vhLib(AantalNogAanwezig\Kx) . Set ..lblRestKx.Enabled=$S(..lblRestKx.Caption="0":"False",1:"True") . Set AantalTePicken=AantalTePicken#Kx . Set AantalNogAanwezig=AantalNogAanwezig#Kx Quit ;------------------------------------------------------------------------------ iSetStuks(AantalTePicken,AantalNogAanwezig) ;Telling uitvoeren met opgegeven AantalTePicken Set ..lblPickStuks.Caption=$$DottedInt^vhLib(AantalTePicken) Set ..lblPickStuks.Enabled=$S(..lblPickStuks.Caption="0":"False",1:"True") ;Telling uitvoeren met opgegeven AantalNogAanwezig Set ..lblRestStuks.Caption=$$DottedInt^vhLib(AantalNogAanwezig) Set ..lblRestStuks.Enabled=$S(..lblRestStuks.Caption="0":"False",1:"True") ;Interface 'stuks' label Set ..lblStuks.Enabled=$S((..lblPickStuks.Caption="0") && (..lblRestStuks.Caption="0"):"False",1:"True") Quit ]]> Args:%String cache 0 document literal Args:%String cache 0 document literal Args:%String cache 0 document literal Args:%String cache 0 document literal Args:%String cache 0 document literal %Library.CacheSerialState list "%Library.TMFormClass" Address Form Label1 Label2 Label3 Shape1 Edit1 Label4 Shape2 Label5 Label6 Label7 Shape3 Label8 Panel1 btnCancel btnDeelPick btnFullPallet Edit2 Edit3 Edit4 Edit5 Edit6 Edit7 Label10 Label9 btnActies btnKlaar Label11 Label12 Label13 lblConsNrAndKlant lblKortTekst lblLangTekst lblLocatie lblProdNr txtAantal txtPickGx250 txtPickKx10 txtPickStuks txtRestGx250 txtRestKx10 txtRestStuks Locatie PalletID lblGx lblKx txtPickGx txtPickKx txtRestGx txtRestKx Shape4 lblAantal lblPickGx lblPickKx lblPickStuks lblRestGx lblRestKx lblRestStuks lblStuks Shape5 Shape6 Shape7 PalletReservaties lblProgress ConsNr Magazijn ProductNr PalletResID lblPalletID Label14 Panel2 pnlFull FullPick LastProdFromPallet mAantalAanwezig pnlAantallen Label15 Label16 Label18 pnlCycleCount PerformCycleCount ReCalcReservation IsGhost gdLocID gdLocatie gdProduct gdSectie ccLocID ccLocatie ccProduct ccSectie ccCurrentQtyPcs IgnoreCCWhenFullPick ScannedLocStr Label19 Label20 Label21 lblFullLtr1 lblFullLtr2 lblFullLtr3 UserId AskForPrintPalletEtiket PrintPalletMagsToIgnore lbPrintPalletMagsToIgnore PickSuccess lblOrderRef ccAutoCC