Skip to main content
Question

Acumatica WMS - Scan and Transfer custom putaway mode and extending Set Qty logic


Is there a way to extend the Set Qty state logic in Scan and Transfer screen? The class is sealed and not able to do so. I would like to define my own custom logic in certain cases.

 

Basically we are developing a putaway mechanism inside Scan and Transfer. I am defaulting an origin location for putaway using another button and then they are able to select destination location and the entire available qty should be defaulted. They also need to be able to change the defaulted qty using Set Qty and that is where the problem comes in. The qty just keeps appending to existing one.

I have tried combination of RowInserted and RowUpdating events to force the qty in case of putaway mode and nothing worked so far.

An example of what I have tried so far:

    public class CFINScanTransferExt : PXGraphExtension<INScanTransfer,
    INScanTransfer.Host>
    {
        public static bool IsActive() => true;

        public INScanTransfer Basis => Base1;        

        protected virtual void _(Events.RowInserted<INTran> e)
        {
            var row = e.Row;
            //var oldRow = e.Row;
            if (row == null) return;

            INLocationStatusByCostCenter locationStatusByCostCenter = SelectFrom<INLocationStatusByCostCenter>
                .Where<INLocationStatusByCostCenter.siteID.IsEqual<@P.AsInt>
                .And<INLocationStatusByCostCenter.locationID.IsEqual<@P.AsInt>
                .And<INLocationStatusByCostCenter.inventoryID.IsEqual<@P.AsInt>>>>
                .View.Select(Base, Basis.SiteID, Basis.LocationID, Basis.InventoryID);

            if (locationStatusByCostCenter == null)
                return;

            if (Basis.Get<CFINScanTransferExt>().IsPutaway == true)
            {
                Basis.Qty = locationStatusByCostCenter.QtyAvail;
                row.GetExtension<CFINTranExt>().UsrCFLayawayDefaultComplete = true;
            }

        }

        protected virtual void _(Events.RowUpdating<INTran> e)
        {
            var row = e.NewRow;
            if (row == null) return;
            if (Basis.Get<CFINScanTransferExt>().IsPutaway == true && row.GetExtension<CFINTranExt>().UsrCFLayawayDefaultComplete != true)
            {
                row.Qty = Basis.Qty + 1;
            }
        }
    }

 

2 replies

Forum|alt.badge.img+6
  • Captain II
  • 580 replies
  • April 15, 2025

Whomever designed the WMS interface knows the framework very very well. The only challenge is that it means that trying to figure out how to insert our own logic is a different kettle of fish than the rest of ACM.

There is a series of posts that talk about how to customize WMS. Maybe these will help?

https://community.acumatica.com/customization-tools-and-framework-245/how-to-customize-the-new-automated-warehouse-operations-engine-in-acumatica-erp-2021-r1-and-later-barcode-driven-state-machine-architecture-8024?tid=8024&fid=245

 


Forum|alt.badge.img+8
  • Captain II
  • 399 replies
  • April 25, 2025

Hi ​@stanaistov 

 

you should add the QtySupport as a using directive like so:

using qtySupport = PX.BarcodeProcessing.BarcodeQtySupport<BarcodeGraph, BarcodeGraph.OriginalGraph>;

 

This will allow you to access the class.

 

Aleks


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings