HAPPY NEW YEAR GUYS πΒ
Recently i got chace to work on sales order screen simplification where i need to simplify the operations of sales orders, for that i would need to customizae some main operations. i am listing the logics of some of the main operations.
How to create SALE ORDER from code in dynamics ax.
static void createSalesTable(CustAccount _custAccount) {
SalesTable salesTable;
NumberSeq NumberSeq;
;
NumberSeq = NumberSeq::newGetNumFromCode(SalesParameters::numRefSalesId().numberSequence);
salesTable.SalesId = NumberSeq.num();
salesTable.initValue();
salesTable.CustAccount = _custAccount;
salesTable.initFromCustTable();
salesTable.insert();
}
static void createSalesLine(SalesId _salesId, ItemId _itemId) {
SalesLine salesLine;
;
salesLine.clear();
salesLine.SalesId = _salesId;
salesLine.ItemId = _itemId;
salesLine.createLine(NoYes::Yes, // Validate
NoYes::Yes, // initFromSalesTable
NoYes::Yes, // initFromInventTable
NoYes::Yes, // calcInventQty
NoYes::Yes, // searchMarkup
NoYes::Yes); // searchPrice
}
How to POST Sales order from code?
please follow the below link https://msdax.wordpress.com/2010/06/29/posting-invoice-from-sales-order-purchase-order/
How to create return Order from code:
Β static void SR_CreateReturnOrderAfterInvoice(Args _args)
{
CustInvoiceJour _invoiceRec;
str _returnReason;
CustInvoiceTrans custInvoiceTrans;
SalesLine salesLine;
SalesTable newRetOrder;
CustInvoiceJour custInvoiceJour;
SalesTable createReturnOrderHeader(CustInvoiceJour invoiceRec)
{
SalesTable old, newRec;
boolean bChecksOk = true;
;
old = SalesTable::find(invoiceRec.SalesId);
newRec.initReturnFromSalesTable(old);
newRec.CustAccount = old.CustAccount;
newRec.initFromCustTable();
newRec.CustInvoiceId = invoiceRec.InvoiceId;
newRec.ReturnDeadline = today();
newRec.ReturnReasonCodeId = β21β²; // Defective
newRec.SalesType = SalesType::ReturnItem;
newRec.SalesTaker = SysCompanyUserInfo::current().EmplId;
if ( newRec.ReturnReasonCodeId == β && CustParameters::find().ReturnOrdersReasonReq ||
newRec.ReturnReasonCodeId != β && !ReturnReasonCode::exist(newRec.ReturnReasonCodeId) )
{
checkFailed(strfmt(β@SYS26332β³, fieldid2pname(tablenum(SalesTable), fieldnum(SalesTable, ReturnReasonCodeId))));
bChecksOk = false;
}
if ( bChecksOk && newRec.validateWrite())
{
newRec.insert();
}
else
{
throw error(β@SYS18722β³);
}
return newRec;
}
ttsbegin;
// first we need to create the sales order header for the return order
select custInvoiceJour where custInvoiceJour.RefNum == RefNum::SalesOrder && custInvoiceJour.InvoiceId == β101231β²;
newRetOrder = createReturnOrderHeader(custInvoiceJour);
while select * from custInvoiceTrans where custInvoiceTrans.SalesId == custInvoiceJour.SalesId
&& custInvoiceTrans.InvoiceId == custInvoiceJour.InvoiceId
&& custInvoiceTrans.InvoiceDate == custInvoiceJour.InvoiceDate
&& custInvoiceTrans.numberSequenceGroup == custInvoiceJour.numberSequenceGroup
{
// now we need to populate all the necessary fields for the new salesline
// using the existing invoice and the new sales order
salesLine.initFromCustInvoiceTrans(custInvoiceTrans);
salesLine.initFromSalesTable(newRetOrder);
// udpate the quantity
salesLine.ExpectedRetQty = -custInvoiceTrans.Qty;
if (salesLine.ExpectedRetQty > 0)
{
error(β@SYS53512β³);
ttsabort;
}
// set the quantity and amount fields
salesLine.LineAmount = salesLine.returnLineAmount();
salesLine.SalesQty = 0;
salesLine.InventTransIdReturn = custInvoiceTrans.InventTransId;
//create the line
salesLine.createLine(true, false, false, false, false, false, false, false, salesLine.InventTransId);
// clear the buffer
salesLine.clear();
}
ttscommit;
info(strfmt(βNewly created return order is %1β², newRetOrder.SalesId));
}
How to print Performa Sales Invoice?
static void Test_SalesFormLetter(Args _args)
{
SalesFormLetter letter=SalesFormLetter::construct(DocumentStatus::Invoice);
SalesTable sale = SalesTable::find('ORDR00000229');
;
ttsBegin;
letter.update(sale, systemDateGet(), SalesUpdate::PickingList, AccountOrder::None, true, true);
ttsCommit;
}
How to print sales Invoice ?
public void printInvoiceReport(PurchId _purchId)
{
ReportRun report;
RecordSortedList List = new RecordSortedList(tableNum(VendInvoiceJour));
VendInvoiceJour VendInvoiceJour = VendInvoiceJour::findFromPurchId(_purchId);
PurchFormLetter PurchFormLetter;
;
if (VendInvoiceJour.RecId)
{
report = new ReportRun(new Args(ReportStr(PurchInvoice)));
List.ins(VendInvoiceJour);
report.args().object(List);
report.query().interactive(false);
report.report().interactive(false);
report.args().parmEnum(0);
report.args().parmEnumType(920);
report.args().name("KeepSettings");
report.args().caller(PurchFormLetter);
report.setTarget(PrintMedium::Screen);
report.printJobSettings().setTarget(PrintMedium::Screen);
report.printJobSettings().preferredTarget(PrintMedium::Screen);
PurchFormLetter = PurchFormLetter::construct(DocumentStatus::Invoice);
PurchFormLetter.updatePrinterSettingsFormLetter(report.printJobSettings().packPrintJobSettings(), PrintSetupOriginalCopy::Original);
PurchFormLetter.updatePrinterSettingsFormLetter(report.printJobSettings().packPrintJobSettings(), PrintSetupOriginalCopy::Copy);
// print invoice
VendInvoiceJour.printJournal(PurchFormLetter);
}
}
Thanks to few links that i have found
http://dynamicsaxgyan.wordpress.com/2010/12/17/create-return-order-using-x/
http://www.axaptapedia.com/SalesFormLetter_class
http://community.dynamics.com/product/ax/axtechnical/b/dynamicsaxposed/archive/2011/10/11/how-to-create-sales-order-through-code.aspx