static void CreateSalesOrder(Args _args)
{
SalesTable salesTable;
SalesLine salesLine;
NumberSeq numberSeq;
date ShippingDateRequestedDate;
date ReceiptDateRequestedDate;
DimensionAttribute dimensionAttribute;
DimensionAttributeValueSetStorage dimensionStorage;
DimensionAttributeValue newDimensonValue;
InventTableModule inventTableModule;
CustTable custTable;
InventTable inventTable;
InventDim inventDim;
InventBatch inventBatch;
InventSerial inventSerial;
try
{
ttsBegin;
//Create sales order header.
salesTable.clear();
//Number sequence automatically gets the next number as per system's configuration
//SalesId is mandatory to create sales order
numberSeq = NumberSeq::newGetNum(SalesParameters::numRefSalesId());
numberSeq.used();
salesTable.SalesId = numberSeq.num();
salesTable.initValue();
//Create sales type
salesTable.SalesType = str2Enum(SalesType::Sales, "salesTypeValue");
//CustAccount is mandatory to create sales order
salesTable.CustAccount = "CNMF-000033";
salesTable.initFromCustTable();
salesTable.InclTax = noyes::Yes;
salesTable.TaxGroup = "taxGroupId";
salesTable.LanguageId = currentUserLanguage();
salesTable.ShippingDateRequested = today();
salesTable.ReceiptDateRequested = today();
salesTable.modifiedFieldDDC(fieldNum(salesTable, ShippingDateRequested));
salesTable.InvoiceAccount = "CNMF-000001";
salesTable.CurrencyCode = "CNY";
salesTable.CustGroup = "40";
//It will be used to set the Site & Warehouse and create inventory dimension id
if(InventLocation::find("WarehouseNum").InventLocationId != "")
{
salesTable.InventSiteId = InventLocation::find("WarehouseNum").InventSiteId;
salesTable.InventLocationId = inventlocation::find("WarehouseNum").InventLocationId;
}
salesTable.insert();
try
{
salesLine.clear();
salesLine.initValue();
salesLine.initFromSalesTable(salesTable);
salesLine.SalesStatus = SalesStatus::Backorder; //状态:未结订单
//Init from itmeid.
inventTable = InventTable::find("CNMF-6666666", false);
salesLine.ItemId = inventTable.ItemId;
salesLine.SalesUnit = inventTable.salesUnitId();
salesLine.initFromInventTable(inventtable::find(salesLine.ItemId));
salesLine.modifyField(fieldNum(SalesLine, ItemId));
inventTableModule = InventTableModule::find(inventTable.ItemId, ModuleInventPurchSales::Sales);
salesLine.TaxItemGroup = InventTableModule.TaxItemGroupId; //销售税(物料)组
salesLine.SalesQty = 20;
SalesLine::modifySalesQty(salesLine, salesLine.inventDim(),false);
salesLine.SalesPrice = 10.1;
salesLine.ShippingDateRequested = today(); //要求装运日期
salesLine.ReceiptDateRequested = today(); //要求接受日期
//Init from custTable
custTable = CustTable::find("CNMF-000025", false);
if(custTable)
{
salesLine.CustAccount = custTable.AccountNum;
salesLine.initFromCustTable(); //带出客户上的销售税组
}
else
{
throw error("客户编号不存在!");
}
inventBatch = InventBatch::find("inventBatchId", "000102", false);
if(!inventBatch)
{
if (inventBatch.RecId == 0)
{
inventBatch.inventBatchId = "inventBatchId";
inventBatch.itemId = "000102";
inventBatch.expDate = dateNull();
inventBatch.insert();
}
}
inventSerial = InventSerial::find("InventSerieId", "000102", false);
if (inventSerial.RecId == 0)
{
inventSerial.InventSerialId = "InventSerieId";
inventSerial.ItemId = "000102";
inventSerial.insert();
}
inventdim = salesLine.inventDim();
inventdim.inventBatchId = inventBatch.inventBatchId; //批次号
inventdim.inventSerialId = inventSerial.InventSerialId; //序列号
inventdim.InventSiteId = "SH"; //站点
inventdim.InventLocationId = "SH-01"; //仓库
inventdim.wMSLocationId = "01-01-01"; //库位
inventdim = inventdim::findOrCreate(inventdim);
salesLine.InventDimId = inventdim.inventDimId;
//客户维度为例
if(salesLine.CustAccount && DimensionAttribute::findByName("Customer"))
{
dimensionAttribute = DimensionAttribute::findByName("Customer");
newDimensonValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, salesLine.CustAccount, false, true);
dimensionStorage = DimensionAttributeValueSetStorage::find(salesLine.DefaultDimension);
dimensionStorage.addItem(newDimensonValue);
}
salesLine.DefaultDimension = dimensionStorage.save();
InventMovement::bufferSetRemainQty(salesLine); //updating the inventory transactions.
salesLine.insert();
info(strFmt("已创建销售订单:%1", salesTable.SalesId));
}
catch(Exception::Error)
{
ttsAbort;
}
ttsCommit;
}
catch(Exception::Error)
{
ttsAbort;
}
}