Credit Note [Dynamics AX] using X++

This post will help to create credit note for a sales order based on the invent lot id. All the invoices raised for a particular sales line – Lot Id will be raised back as a credit note.

Information on Credit Note:

A credit note or credit memorandum (memo) is a commercial document issued by a seller to a buyer. The seller usually issues a Credit Memo for the same or lower amount than the invoice, and then repays the money to the buyer or sets it off against a balance due from other transactions

Below Code will help to create credit note for all the invoices raised against the sales line -lot id.

Please note: This code can be customized as per your requirements. This is just a template to help creating credit note using X++ code. Please test the code before use.

static void SR_CreateCreditNote_Sales(Args _args)
// Coded by Sreenath Reddy
CustInvoiceTrans custInvoiceTrans;
Dialog dialog = new Dialog(“Create credit note – for sales.”);
DialogField dfInventTransId;
SalesCopying salesCopying;
TmpFrmVirtual tmpFrmVirtualHeader;
TmpFrmVirtual tmpFrmVirtualLines;
boolean isCreditNoteCreated;
SalesId salesId;
SysInfoAction_FormRun SysInfoAction;

void loadTmpVirtualTableAndCreateCN(CustInvoiceTrans _custInvoiceTrans)
tmpFrmVirtualLines.TableNum = _custInvoiceTrans.TableId;
tmpFrmVirtualLines.RecordNo = _custInvoiceTrans.RecId;
tmpFrmVirtualLines.Id = _custInvoiceTrans.SalesId;
tmpFrmVirtualLines.LineNum = _custInvoiceTrans.LineNum;
tmpFrmVirtualLines.TransDate = _custInvoiceTrans.InvoiceDate;
tmpFrmVirtualLines.Qty = _custInvoiceTrans.Qty;


salesCopying = SalesCopying::construct(SalesPurchCopy::CreditNoteLines);
salesCopying.initParameters(salesTable::find(_custInvoiceTrans.SalesId, true),


dfInventTransId = dialog.addField(typeid(InventTransId), “Lot id”, “Inventory transaction identifier/Lot id”);

dialog.addText(“This snippet will help to create credit notes for all the invoices raised for the lot id of salesLine”);

if (
salesId = CustInvoiceTrans::findInventTransid(dfInventTransId.value()).SalesId;
if (!salesId)
throw error (“Select only sales order – reference type.”);
while select custInvoiceTrans where custInvoiceTrans.InventTransId == dfInventTransId.value()
// Load the custinvoiceTrans details in to tmpFrmVirtualLines buffer
isCreditNoteCreated = true;

if (isCreditNoteCreated)
sysInfoAction = SysInfoAction_FormRun::newFormnameDesc(formstr(SalesTable), “show credit note”);
info(strfmt(“Credit notes created succesfully for the SalesOrder %1 and for lotId %2″, salesId, dfInventTransId.value()),”,sysInfoAction);



4 Responses to “Credit Note [Dynamics AX] using X++”

  1. Umashankar Says:


  2. Xarquis Says:

    Thank you for this sample, it is really helpfull. But I get an error that says that it cannot create the CN because it exceeds the total quantity for the source SO. Please advice.


    • Sreenath Reddy Says:

      Please check the quantity which is linked to the sales order. I doubt the quantity which you have in the credit note is greater than the linked sales order. Thank you!

  3. Xarquis Says:

    I was doing something wrong, thank you, it worked correctly.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: