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(_purchId, true );
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.
Buen día y si de la recepción ya se seleccionó algo para vender como cancelo de los demás items recibidos?
ResponderBorrar