In this article, we will see how to create sales order and purchase order using x++.
The code snippet for purchase order creation
internal final class CreatePurchaseOrder
{
/// <summary>
/// Class entry point. The system will call this method when a designated menu
/// is selected or when execution starts and this class is set as the startup class.
/// </summary>
/// <param name = "_args">The specified arguments.</param>
public static void main(Args _args)
{
PurchTable purchTable;
PurchLine purchLine;
NumberSeq numberSeq;
PurchFormLetter purchFormLetter;
#OCCRetryCount
try
{
ttsBegin;
//Create purchase order header
numberSeq = NumberSeq::newGetNum(PurchParameters::numRefPurchId());
numberSeq.used();
purchTable.PurchId = numberSeq.num();
purchTable.initValue();
purchTable.AccountingDate = systemDateGet();
purchTable.initFromVendTable(VendTable::find('1001'));
purchTable.InventSiteId = '5';
purchTable.InventLocationId = '51';
if (!purchTable.validateWrite())
{
throw Exception::Error;
}
//insert purchase order header data
purchTable.insert();
//Create purchase order line
purchLine.PurchId = purchTable.PurchId;
purchLine.ItemId = '1000';
purchLine.purchQty = 10;
purchLine.createLine(true, true, true, true, true, true);
ttsCommit;
info(strFmt("Purchase order '%1' has been created",purchTable.PurchId));
purchFormLetter = PurchFormLetter::construct(DocumentStatus::PurchaseOrder);
purchFormLetter.update(purchTable, strFmt("PO_%1", purchTable.PurchId));
}
catch (Exception::Deadlock)
{
retry;
}
catch (Exception::UpdateConflict)
{
if (appl.ttsLevel() == 0)
{
if (xSession::currentRetryCount() >= #RetryNum)
{
throw Exception::UpdateConflictNotRecovered;
}
else
{
retry;
}
}
else
{
throw Exception::UpdateConflict;
}
}
}
}The code snippet for sales order creation
internal final class CreateSalesOrder
{
/// <summary>
/// Class entry point. The system will call this method when a designated menu
/// is selected or when execution starts and this class is set as the startup class.
/// </summary>
/// <param name = "_args">The specified arguments.</param>
public static void main(Args _args)
{
SalesTable salesTable;
SalesLine salesLine;
SalesFormLetter salesFormLetter;
NumberSeq numberSeq;
#OCCRetryCount
try
{
ttsbegin;
//Create Sales order
ttsBegin;
numberSeq = NumberSeq::newGetNum(SalesParameters::numRefSalesId());
numberSeq.used();
salesTable.SalesId = numberSeq.num();
salesTable.initValue();
//Assign customer account
salesTable.CustAccount = "US-003";
salesTable.initFromCustTable();
salesTable.InventSiteId = '5';
salesTable.InventLocationId = '51';
if (!salesTable.validateWrite())
{
throw Exception::Error;
}
salesTable.insert();
//Create sales order line
salesLine.clear();
salesLine.initFromSalesTable(salesTable);
salesLine.SalesId = salesTable.SalesId;
salesLine.ItemId = 'MA-001';
salesLine.SalesQty = 10;
salesLine.createLine(true, true, true, true, true, true);
info(strFmt("Sales order ‘%1’ has been created", salesTable.SalesId));
ttsCommit;
//Sales order confirmation
salesFormLetter = SalesFormLetter::construct(DocumentStatus::Confirmation);
salesFormLetter.update(salesTable);
// Sales order invoicing
salesFormLetter = salesFormLetter::construct(DocumentStatus::Invoice);
salesFormLetter.update(salesTable);
ttscommit;
}
catch (Exception::Deadlock)
{
retry;
}
catch (Exception::UpdateConflict)
{
if (appl.ttsLevel() == 0)
{
if (xSession::currentRetryCount() >= #RetryNum)
{
throw Exception::UpdateConflictNotRecovered;
}
else
{
retry;
}
}
else
{
throw Exception::UpdateConflict;
}
}
}
}
Comments
Post a Comment