Today I'll show you to create Free text invoice using X++. I have done it in Indian localization
(after GST), you can skip those steps for other localizations.
I am creating free text invoice for price adjustment to be done on previously created Customer Invoice.
This is it. Share your ideas and thoughts if any.
(after GST), you can skip those steps for other localizations.
I am creating free text invoice for price adjustment to be done on previously created Customer Invoice.
CustInvoiceJour custinvoicejour;
CustInvoiceTrans custinvoicetrans;
CustInvoiceTable custInvoiceTable,custInvoiceTable1;
CustInvoiceLine custInvoiceLine,custInvoiceLine1;
CustPostInvoice custPostInvoice;
CustTable custtable;
SalesLine salesLine;
SalesLine_IN salesLinein;
CustInvoiceLineTaxExtensionIN custInvoiceLineTaxExtensionIN;
container offsetDimensions;
LineNum lineNum;
Query q;
QueryBuildDataSource qbds;
QueryRun qr;
q = new Query();
qbds = q.addDataSource(tableNum(CustInvoiceJour));
qbds.addRange(fieldNum(CustInvoiceJour, Invoiceaccount)).value("Cust1");
qbds.addRange(fieldNum(CustInvoiceJour, InvoiceId)).value("TestInvoice1");
qbds.addRange(fieldNum(CustInvoiceJour, InvoiceId)).value("TestInvoice2");
qr = new QueryRun(q);
while(qr.next())
{
custinvoicejour = qr.get(tableNum(CustInvoiceJour));
//info(strFmt("%1, %2",custinvoicejour.InvoiceAccount, custinvoicejour.InvoiceDate));
ttsBegin;
custtable = CustTable::find(custinvoicejour.InvoiceAccount);
custInvoiceTable.clear();
custInvoiceTable.initFromCustTable(custtable);
//custInvoiceTable.InvoiceDate = custinvoicejour.InvoiceDate;
custInvoiceTable.insert();
lineNum = 0;
while select custinvoicetrans
where custinvoicetrans.InvoiceId == custinvoicejour.InvoiceId
&& custinvoicetrans.InvoiceDate == custinvoicejour.InvoiceDate
{
custInvoiceLine.clear();
custInvoiceLine.initValue();
//setup main account as required
offsetDimensions = ["999999","999999", 0, "", ""]; // you can set a Main Account with multiple financial dimensions
custInvoiceLine.LedgerDimension = AxdDimensionUtil::getLedgerAccountId(offsetDimensions);
custInvoiceLine.initFromCustInvoiceTable(custInvoiceTable);
custInvoiceLine.ItemId = "001234"; //custom field
custInvoiceLine.Quantity = custinvoicetrans.Qty;
custInvoiceLine.UnitPrice = 2.0 ;
custInvoiceLine.modifiedField(fieldNum(CustInvoiceLine, UnitPrice));
custInvoiceLine.Description = custinvoicetrans.itemName();
//to get HSN code used in original invoice
select salesLine
where salesLine.SalesId == custinvoicetrans.SalesId
&& salesLine.ItemId == custinvoicetrans.ItemId;
select salesLinein
where salesLinein.SalesLine == salesLine.RecId;
//Instead of HSNCode, you need to specify Taxgroup and Itemtaxgroup in case of other localizations
custInvoiceLine.HSNCodeTable_IN = salesLinein.HSNCodeTable;
custInvoiceLine.ParentRecId = custInvoiceTable.RecId;
if(!lineNum)
{
lineNum = CustInvoiceLine::lastLineNum_W(custInvoiceLine.ParentRecId);
}
lineNum += 1;
custInvoiceLine.LineNum = lineNum;
custInvoiceLine.InvoiceTxt = custinvoicetrans.InvoiceId+"\n"+date2StrXpp(custinvoicetrans.InvoiceDate);//change it as per need
custInvoiceLine.insert();
//Specific to Indian localization, not required for other localizations
custInvoiceLineTaxExtensionIN.CustInvoiceLine = custInvoiceLine.RecId;
custInvoiceLineTaxExtensionIN.TaxInformation_IN = TaxInformation_IN::findDefaultbyLocation(DirPartyTable::find(CompanyInfo::findDataArea(curext()).PartyNumber).PrimaryAddressLocation).RecId;
custInvoiceLineTaxExtensionIN.initValue();
custInvoiceLineTaxExtensionIN.insert();
}
//Post free text invoice
if(lineNum)
{
Select custInvoiceTable1 where custInvoiceTable1.RecId == custInvoiceTable.RecId;
custPostInvoice = new CustPostInvoice(custInvoiceTable1);
custPostInvoice.run();
ttsCommit;
}
else
{
ttsAbort;
}
}
}
This is it. Share your ideas and thoughts if any.
No comments:
Post a Comment