Buscar en este blog

lunes, 6 de abril de 2015

Cancelar una orden de orden de compra y su recepción por código x++ en Dynamics Ax 2012

En los post anteriores vimos cómo crear una orden de compra, después vimos cómo crear su confirmación y su recepción, pero qué pasa si queremos cancelar la orden? tenemos que empezar por cancelar su recepción, el siguiente código funciona pasando como argumentos el ID de la orden de compra (PurchId) y la recepción (PackingSlipId), esto se hace por el siguiente código:

private void cancelaRecepcion(PurchId _purchId, PackingSlipId _numeroRecepcion)
{
    PurchTable _purchTable = PurchTable::find(_purchId);
    VendPackingSlipJour vendPackingSlipJour;
    PurchFormLetter purchFormLetter;

    select firstOnly vendPackingSlipJour
    where vendPackingSlipJour.PackingSlipId == _numeroRecepcion;

    purchFormLetter = PurchFormLetter::construct(DocumentStatus::PackingSlip);

    PurchFormLetter.parmVersioningUpdateType(VersioningUpdateType::Cancel);
    PurchFormLetter.parmCallerTable(vendPackingSlipJour);

    PurchFormLetter.allowEmptyTable( true);
    PurchFormLetter.initAllowEmptyTable( true);
    PurchFormLetter.multiForm( true);
    purchFormLetter.update( _purchTable,
                            vendPackingSlipJour.PackingSlipId,
                            VendPackingSlipJour.DeliveryDate,
                            PurchUpdate::ReceiveNow,
                            AccountOrder::None,
                            NoYes::No,
                            NoYes::No,
                            NoYes::Yes);

}

Para confirmar que se haya cancelado, vamos al diario de recepciones y el botón "Cancelar" va a aparecer inhabilitado, esto indica que la recepción fue cancelada. Posteriormente se debe cancelar la orden, que no es otra cosa mas que poner las cantidades a cero.

private void cancelOrden(PurchId _purchId)
{
    PurchLine   purchLine;
    PurchTable purchTable;
    boolean     hayLineas = false ;

    try
    {
        ttsBegin ;
        purchTable = PurchTable::find(_purchIdtrue );

        if (purchTable.ChangeRequestRequired && purchTable.DocumentState >= VersioningDocumentState::Approved)
        {
            if (!purchTable.selectForUpdate())
            {
                purchTable = PurchTable::findRecId(purchTable.RecId, true );
            }
            VersioningPurchaseOrder::newPurchaseOrder(purchTable).createChangeRequest();
        }
        else if (!VersioningPurchaseOrder::newPurchaseOrder(purchTable).isLastVersionArchived() && purchTable.DocumentState == VersioningDocumentState::Confirmed)
        {
            // force archiving to avoid it during line cancellation as that would lead to update conflicts.
            purchTable.update();
        }

        //Mientras no haya cargos varios
        while select forUpdate purchLine
        where purchLine.PurchId         == PurchTable.PurchId
              && purchLine.IsDeleted    == NoYes::No
        {
            hayLineas = true ;
            purchLine.PurchQty      = 0 ;
            purchLine.LineAmount    = 0 ;
            purchLine.PdsCWQty      = 0 ;
            purchLine.PurchStatus = PurchStatus::Canceled;

            InventMovement::bufferSetTransQtyUnit(purchLine);
            InventMovement::bufferSetRemainQty(purchLine);

            purchLine.update();
        }
       
        if (!hayLineas)
        {
            purchTable.PurchStatus = PurchStatus::Canceled;
            purchTable.update();
        }

        ttsCommit ;

    }
    catch
    {
        ttsAbort ;        
        throw error("No fue posible cancelar la orden. " );
    }

}




Aquí los links relacionados:
Cómo crear una orden de compra
Cómo crear su confirmación y su recepción


Post relacionados:
Cómo crear una orden de venta por código.
Cómo crear la confirmación y la remisión de una orden de venta.
Cómo cancelar la orden de venta y su remisión.



Y por cierto, acuérdate de darle click a algún anuncio si el post te sirvió de algo.


No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma. 




No hay comentarios.:

Publicar un comentario