Reservieren/Unreservieren einer Auftragsposition

Beispiele wie man eine Auftragsposition reserviert oder unreserviert findet man im Internet des Öfteren. Allerdings habe ich kein Beispiel gefunden, wo anschließend geprüft wurde ob diese Reservierung auch gut gegangen ist.

Deshalb habe ich mir ein solches Stück Code selbst erarbeiten dürfen. Dabei vergleiche ich ganz einfach den vorher reservierten Wert mit dem danach reservierten Wert. Ist dieser ident, gehe ich davon aus, daß die Reservierung nicht gut gegangen ist.

static void reserveSalesLine(Args _args)
{
    InventTransIdSumSingleStatus inventTransIdSumSingleStatus;
    SalesLine salesLine;
    InventMovement inventMovement;
    InventDim inventDim;
    InventDimParm inventDimParmCriteria;
    InventQtyReservPhysical oldReservedQty;
    InventQtyReservPhysical newReservedQty;
    InventUpd_Reservation inventUpd_Reservation;
    InventQty reserveQty;

    // Inline method to get current reserved quantity for specific inventDim
    InventQtyReservPhysical getReservedQty()
    {
        inventDimParmCriteria.initFromInventDim(inventDim);        

        inventTransIdSumSingleStatus = InventTransIdSumSingleStatus::newTransOriginIdStatus(InventTransOriginSalesLine::findInventTransOriginId(salesLine.DataAreaId, salesLine.InventTransId),
                                                                                            StatusReceipt::None,
                                                                                            StatusIssue::ReservPhysical);
        inventTransIdSumSingleStatus.parmInventDimCriteria(inventDim);
        inventTransIdSumSingleStatus.parmInventDimParmCriteria(inventDimParmCriteria);

        return inventTransIdSumSingleStatus.reservPhysical();
    }

    // Sales order line
    salesLine = SalesLine::findInventTransId('012431');
    inventMovement = InventTrans::findTransId(salesLine.InventTransId).inventMovement(true);

    // Build inventDim-Record, where the quantity should be reserved
    inventDim.clear();
    inventDim.InventSiteId      = "1";
    inventDim.InventLocationId  = "12";
    inventDim.wmsLocationId     = "12";
    inventDim = InventDim::findOrCreate(inventDim);

    // Get current physical reserved Quantity
    oldReservedQty = getReservedQty();

    // Set quanity which should be reserved (negative values to reserve, postive value to unreserve)
    reserveQty = -2;

    inventUpd_Reservation = InventUpd_Reservation::newInventDim(inventMovement,
                                                                inventDim,
                                                                reserveQty,
                                                                true);
    inventUpd_Reservation.updateNow();

    // Get new reserved quantity
    newReservedQty = getReservedQty();

    // Compare old and new reserved quantity to identify if reservation failed
    if(oldReservedQty == newReservedQty)
    {
        error("Reservation failed.");
    }
}
Dieser Beitrag bezieht sich auf die Version:
Dynamics AX 2012

Lewis Batcher 10.11.2016 00:31 | #1


Guest 01.12.2016 23:02 | #2


Francisco 19.03.2021 04:10 | #3


Peter 18.10.2021 10:59 | #4


Peter 18.10.2021 10:59 | #5


Piyush 18.05.2023 08:03 | #6


Piyush 19.05.2023 06:23 | #7

How can i use it in Custom service integration in D365 FO

SXascasc 25.10.2023 12:27 | #8


SXascasc 25.10.2023 12:30 | #9


Right Left 25.10.2023 12:31 | #10


Kommentar hinzufügen
 
 

 

 
 
 
Beiträge des aktuellen Monats
April 2024
MoDiMiDoFrSaSo
1234567
891011121314
15161718192021
22232425262728
2930 
 
© 2006-2024 Heinz Schweda | Impressum | Kontakt | English version | Mobile Version
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.  Mehr dazu