Purpose:
The purpose of this document is to illustrate how we can cancel a posted product receipt in X++.
Business requirement:
Ability to cancel product receipt journal automatically. As of now Standard AX offers manual product receipt cancellation by clicking Procurement and sourcing > Inquiries > Journals > Product receipt > Cancel.
Assumptions:
Product receipt is posted.
Development:
Please find below the job to correct product receipt journal in X++:
// Developed on 28 Dec 2015 by Muhammad Anas Khan
// Blog: dynamicsaxinsight.wordpress.com
// LinkedIn: pk.linkedin.com/in/muhammadanaskhan
// Description: Ability to cancel product receipt journal
static void makPurchPackingSlipCancel(Args _args)
{
PurchTable purchTable = PurchTable::find("0000-000150");
VendPackingSlipJour vendPackingSlipJour;
PurchFormLetter purchFormLetter;
//Retrieve existing vend packingslip
select firstOnly vendPackingSlipJour
where vendPackingSlipJour.PackingSlipId == "PS0803";
purchFormLetter = PurchFormLetter::construct(DocumentStatus::PackingSlip);
//If the correct VersioningUpdateType is not set
//the system will try to create a new packingslip
PurchFormLetter.parmVersioningUpdateType(VersioningUpdateType::Cancel);
PurchFormLetter.parmCallerTable(vendPackingSlipJour);
//The rows bellow are very important. Not really sure why
PurchFormLetter.allowEmptyTable(true);
PurchFormLetter.initAllowEmptyTable(true);
PurchFormLetter.multiForm(true);
purchFormLetter.update( purchTable, // Purchase record buffer
vendPackingSlipJour.PackingSlipId, // Packingslip Number
VendPackingSlipJour.DeliveryDate, // Transaction Date
PurchUpdate::ReceiveNow, // Quantity update
AccountOrder::None,
NoYes::No,
NoYes::No,
NoYes::Yes);
}