Unpick sales order through code in Ax 2009

Below job is to unpick sales order two lines and remove reservations.

    InventTrans InventTrans;
    TmpInventTransWMS   tmpinventTransWMS;
    InventMovement  movement;
    InventTransWMS_Pick inventTranspick;
    InventTransId conInventTransId;
    Qty     conVariantQty;
    WMSOrderTrans wmsOrderTrans;
    SEMKITSALESTRANS    SEMKITSALESTRANS;

    //Remove any existing reservations
    InventTrans            inventTransReserve    ;
    InventMovement         inventMovement        ;
    InventUpd_Reservation  inventUpd_Reservation ;
    ;

    while select SEMKITSALESTRANS
        where SEMKITSALESTRANS.SalesId == 'SO-0014445'
        && (SEMKITSALESTRANS.LineNum == 7 || SEMKITSALESTRANS.LineNum == 8)
    {
        conInventTransId = SEMKITSALESTRANS.InventTransId;
        conVariantQty = SEMKITSALESTRANS.KitQty;
        //pick or unpick
        InventTrans = InventTrans::findTransId(conInventTransId);
        select wmsOrderTrans
            where wmsOrderTrans.inventTransId == conInventTransId;

        if(inventTrans.RecId && inventTrans.StatusIssue == StatusIssue::Picked)
        {
            if (wmsOrderTrans.RecId)
            {
                ttsbegin;
                InventTrans.selectForUpdate(true);

                InventTrans.TransChildType = InventTransChildType::WMSOrder;
                InventTrans.TransChildRefId = wmsOrderTrans.orderId;

                InventTrans.update();
                ttscommit;
            }
            movement = null;
            if (wmsOrderTrans.RecId)
            {
                movement = InventMovement::construct(wmsOrderTrans);
            }
            else
            {
                movement = InventMovement::construct(SEMKITSALESTRANS);
            }
            inventTranspick = new InventTransWMS_Pick(movement,tmpInventTransWMS);
            tmpInventTransWMS = null;
            tmpInventTransWMS.initFromInventTrans(inventTrans);
            tmpInventTransWMS.InventQty = -1 * conVariantQty; //minus qty unpick, plus qty pick
            tmpInventTransWMS.insert();
            inventTransWMS_pick::updateInvent(inventTransPick, tmpInventTransWMS);
        }

        inventTransReserve = InventTrans::findTransId(conInventTransId);
        if(inventTransReserve.RecId && inventTransReserve.StatusIssue == StatusIssue::ReservPhysical)
        {

           Inventmovement = inventTransReserve.inventmovement(true);
           inventUpd_Reservation = InventUpd_Reservation::newInventDim(inventmovement,inventTransReserve.inventDim(), -1 * inventTransReserve.Qty ,false);
           inventUpd_Reservation.updatenow();
        }

        InventTrans = InventTrans::findTransId(conInventTransId);
        if (wmsOrderTrans.RecId && (InventTrans.RecId && InventTrans.StatusIssue != StatusIssue::ReservPhysical))
        {
            ttsbegin;
            wmsOrderTrans.selectForUpdate(true);
            wmsOrderTrans.isReserved=noyes::No;
            wmsOrderTrans.update();
            ttscommit;
        }
    }

Comments

  1. How to unpick all quantity above code is working only for partial quantity, please help me out

    ReplyDelete

Post a Comment

Popular posts from this blog

Dynamics 365 Finance & Operations Release pipelines import.

Attaching a user selected document to a purchase order using x++ job (Runnable class) in Dynamics 365 for Finance and Operations

Claude AI Models Comparison (Updated: July 2026): Haiku 4.5 vs Sonnet 5 vs Opus 4.8 vs Fable 5