我正在尝试创建一个导入页面以导入SO,我需要自动完成SO。这是我的代码
using (var scope = new PXTransactionScope())
{
SOOrderEntry graph = PXGraph.CreateInstance<SOOrderEntry>();
ImportSFA importGraph = PXGraph.CreateInstance<ImportSFA>();
order.IsConvert = true;
importGraph.ImportProcessing.Update(order);
SOOrder newOrder = new SOOrder();
graph.Document.Current = newOrder;
newOrder.Status = "N";
//newOrder.OrderNbr = order.OrderNbr;
newOrder.OrderDate = order.OrderDate;
newOrder.RequestDate = order.OrderDate;
newOrder.OrderDesc = order.Note;
SOOrderExt a = PXCache<SOOrder>.GetExtension<SOOrderExt>(newOrder);
a.UsrRouteID = order.Route;
a.UsrTrueRoute = true;
var graphExt = graph.GetExtension<SOOrderEntryExt1>();
// cap nhat order type theo don tu PDA gui ve
if (order.OrderType == "PA")
{
newOrder.OrderType = "SO";
}
else if (order.OrderType == "IV")
{
newOrder.OrderType = "IN";
}
else
{
newOrder.OrderType = "CS";
}
if (newOrder.OrderType == "CS")
{
newOrder.ExtRefNbr = "123";
Branch branch = PXSelect<Branch>.Select(graph);
CashAccount ca =
PXSelect<CashAccount, Where<CashAccount.branchID, Equal<Required<CashAccount.branchID>>>>.Select
(graph,
branch.BranchID).FirstTableItems.FirstOrDefault();
if (ca != null)
{
newOrder.CashAccountID = ca.CashAccountID;
}
else
{
throw new PXException("Cannot find the Cash Account.");
}
}
newOrder.CustomerOrderNbr = order.OrderNbr;
PXSelectBase<BAccount> cmdBaccount = new PXSelect<BAccount,
Where<BAccount.acctCD, Equal<Required<BAccount.acctCD>>>>(graph);
PXSelectBase<SalesPerson> cmdSalesman = new PXSelect<SalesPerson,
Where<SalesPerson.salesPersonCD, Equal<Required<SalesPerson.salesPersonCD>>>>(graph);
BAccount bacc = cmdBaccount.Select(order.CustomerID);
SalesPerson salesman = cmdSalesman.Select(order.SalesmanID);
if (bacc != null)
{
newOrder.CustomerID = bacc.BAccountID;
}
if (salesman != null)
{
newOrder.SalesPersonID = salesman.SalesPersonID;
}
graph.Document.Cache.Update(graph.Document.Current);
graph.Persist();
//Insert line
PXSelectBase<DMSSODetail> lines = new PXSelect<DMSSODetail,
Where<DMSSODetail.orderNbr, Equal<Required<DMSSODetail.orderNbr>>>>(graph);
INLocation location = null;
if (newOrder.OrderType == "SO")
{
foreach (DMSSODetail item in lines.Select(order.OrderNbr))
{
if (item.IsFree != true)
{
INSite site = PXSelect<INSite,
Where<INSite.siteCD, Equal<Required<INSite.siteCD>>>>.Select(graph, item.Warehouse);
SOLine line = graph.Transactions.Insert();
line.InventoryID = item.InventoryID;
if (site != null)
{
line.SiteID = site.SiteID;
}
line.Qty = item.ConfirmQty;
SOLine updated = (SOLine) graph.Transactions.Cache.Update(line);
}
else if (item.IsFree == true && item.ManualDiscount == true)
{
INSite site = PXSelect<INSite,
Where<INSite.siteCD, Equal<Required<INSite.siteCD>>>>.Select(graph, item.Warehouse);
SOLine line = graph.Transactions.Insert();
line.InventoryID = item.InventoryID;
line.ManualDisc = true;
line.IsFree = true;
SOLineExt extLine = PXCache<SOLine>.GetExtension<SOLineExt>(line);
extLine.UsrManualPromoID = item.PromoDiscID;
if (site != null)
{
line.SiteID = site.SiteID;
}
line.Qty = item.ConfirmQty;
SOLine updated = (SOLine) graph.Transactions.Cache.Update(line);
}
}
}
else if (newOrder.OrderType == "IN" || newOrder.OrderType == "CS")
{
foreach (DMSSODetail item in lines.Select(order.OrderNbr))
{
INSite site = PXSelect<INSite,
Where<INSite.siteCD, Equal<Required<INSite.siteCD>>>>.Select(graph, item.Warehouse);
SOLine line = graph.Transactions.Insert();
line.InventoryID = item.InventoryID;
if (site != null)
{
line.SiteID = site.SiteID;
}
//Search Location
INLocation loc = PXSelect<INLocation, Where<INLocation.locationCD,
Equal<Required<INLocation.locationCD>>>>.Select(graph, item.WHLocation);
if (loc != null)
{
line.LocationID = loc.LocationID;
location = loc;
}
line.ManualDisc = true; //Prevent Acu auto discount.
line.IsFree = item.IsFree;
SOLineExt extLine = PXCache<SOLine>.GetExtension<SOLineExt>(line);
extLine.UsrManualPromoID = item.PromoDiscID;
line.Qty = item.ConfirmQty;
SOLine updated = (SOLine) graph.Transactions.Cache.Update(line);
graph.Transactions.Current = updated;
//Search DMSSODetailSplit
PXSelectBase<DMSSODetailSplit> splits = new PXSelect<DMSSODetailSplit,
Where<DMSSODetailSplit.orderNbr, Equal<Required<DMSSODetailSplit.orderNbr>>,
And<DMSSODetailSplit.inventoryID, Equal<Required<DMSSODetailSplit.inventoryID>>,
And<DMSSODetailSplit.isFree, Equal<Required<DMSSODetailSplit.isFree>>,
And<DMSSODetailSplit.promoDiscID, Equal<Required<DMSSODetailSplit.promoDiscID>>>
>>>>
(graph);
foreach (DMSSODetailSplit split in
splits.Select(item.OrderNbr, item.InventoryID, item.IsFree, item.PromoDiscID))
{
// goi ham insert bar code
graphExt.InsertScannedBarcode(split.InventoryID, split.LotSerialNbr, newOrder);
}
}
}
int index = 0;
foreach (SOLine item in graph.Transactions.Select())
{
if (item.IsFree == true)
{
SOLine oldRow = item;
item.LocationID =
((SOLine) graph.Transactions.Select()[(index - 1) < 0 ? 0 : (index - 1)]).LocationID;
graph.Transactions.Cache.RaiseFieldUpdated<SOLine.locationID>(item, oldRow.LocationID);
}
index++;
}
graph.Persist();
importGraph.Actions.PressSave();
//graph.prepareInvoice.Press();
//kiem tra neu la don hang CS thi tu dong tao va release invoice
if (newOrder.OrderType == "CS")
{
graphExt.prepareInvoice.Press();
SOInvoiceEntry invoiceGraph = PXGraph.CreateInstance<SOInvoiceEntry>();
PXResultset<ARInvoice> arInv = PXSelectJoin<ARInvoice,
InnerJoin<SOOrderShipment, On<ARInvoice.docType,
Equal<SOOrderShipment.invoiceType>,
And<ARInvoice.refNbr, Equal<SOOrderShipment.invoiceNbr>>>>
, Where<SOOrderShipment.orderNbr, Equal<Required<SOOrderShipment.orderNbr>>
, And<SOOrderShipment.invtDocType, Equal<Required<SOOrderShipment.invtDocType>>>>>
.Select(invoiceGraph, newOrder.OrderNbr, "CSL");
invoiceGraph.Document.Current = arInv;
invoiceGraph.Save.Press();
//release invoice
invoiceGraph.release.Press();
}
scope.Complete();
}
当我处理时,我收到此错误
24/01/2015 5:48:23 CH错误: 错误#140:尚未处理一个或多个项目。
发票
在PX.Data.PXProcessing 1.<>c__DisplayClass12.b__11(List
1列表中)
在PX.Data.PXLongOperation。&lt;&gt; c__DisplayClass5.b__4()
我不知道如何解决。请帮我。感谢您的支持。