create sales order and purchase order using x++.

 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