X++ Code to Post Sales Order Invoice line by line - D365 F&O || AX 2012

Hello Everyone,

Today we will be looking at how to invoice a Sales order line by line. We usually use "SalesFormLetter" class and "run" method to post and SO which will post the entire SO and all the lines in it. Recently I have come across a new requirement while posting an SO i.e.., to post the SO invoice line by line. So lets see how the code is build.


Public static void salesOrderInvoiceByLine(SalesLine    _salesline)
{
        salesFormLetter         salesFormLetter;
        salesFormletterParmData salesFormLetterParmData;
        salesParmUpdate         salesParmUpdate;
        salesParmTable          salesParmTable;
        salesParmLine           salesParmLine;
        salesTable              salesTable;
      
        ttsbegin;
        salesTable  = salesTable::find(_salesline.SalesId);
        salesFormLetterParmData = salesFormletterParmData::newData(DocumentStatus::Invoice, VersioningUpdateType::Initial);

        salesFormLetterParmData.parmOnlyCreateParmUpdate(true);
        salesFormLetterParmData.createData(false);
        salesParmUpdate = salesFormLetterParmData.parmParmUpdate();

        salesParmTable.clear();
        salesParmTable.TransDate                = _salesline.ReceiptDateRequested;
        salesParmTable.Ordering                 = DocumentStatus::Invoice;
        salesParmTable.ParmJobStatus            = ParmJobStatus::Waiting;
        salesParmTable.salesId                  = salesTable.salesId;

        salesParmTable.salesName                = salesTable.salesName;
        salesParmTable.DeliveryName             = salesTable.DeliveryName;
        salesParmTable.DeliveryPostalAddress    = salesTable.DeliveryPostalAddress;
        salesParmTable.CustAccount              = salesTable.CustAccount;
        salesParmTable.CurrencyCode             = salesTable.CurrencyCode;
        salesParmTable.InvoiceAccount           = salesTable.InvoiceAccount;
        salesParmTable.ParmId                   = salesParmUpdate.ParmId;
        salesParmTable.insert();
           
        if (_salesline)
        {
            salesParmLine.InitFromsalesLine(_salesline);
            salesParmLine.DeliverNow    = _salesline.SalesQty;
            salesParmLine.ParmId        = salesParmTable.ParmId;
            salesParmLine.TableRefId    = salesParmTable.TableRefId;
            salesParmLine.setQty(DocumentStatus::Invoice, false, true);
            salesParmLine.setLineAmount(_salesline);
            salesParmLine.insert();
        }
        ttscommit;
        salesFormLetter = salesFormLetter::construct(DocumentStatus::Invoice);
        salesFormLetter.transDate(_salesline.ReceiptDateRequested);
        salesFormLetter.proforma(false);
        salesFormLetter.specQty(salesUpdate::All);
        salesFormLetter.salesTable(salesTable);
        salesFormLetter.parmId(salesParmTable.ParmId);
        salesFormLetter.salesParmUpdate(salesFormLetterParmData.parmParmUpdate());
        salesFormLetter.run();
}

Proud To Be a DAX Developer :-)

No comments:

Post a Comment