我记得我很早就为此苦苦挣扎,所以这是一个很好的问题。挑战在于您提到从 SO LINE 到达 PO,但 SO Line 可以拆分为多个 PO。这就是为什么你最终不得不深入研究 SOLineSplit 的链接。我们来看看 SOLineSplit 到 PO 的链接...
当您查看 SOOrderEntry 图表时,有几种可能性。以下代码 sn-ps 显示关系。您的 SOLineSplit 可能直接引用 PO/POLine,如下所示:
PXSelectBase<POLine> selectlinkedDropShips = new PXSelectJoin<POLine,
InnerJoin<SOLineSplit, On<SOLineSplit.pOType, Equal<POLine.orderType>,
And<SOLineSplit.pONbr, Equal<POLine.orderNbr>,
And<SOLineSplit.pOLineNbr, Equal<POLine.lineNbr>>>>>,
Where<SOLineSplit.orderType, Equal<Current<SOOrder.orderType>>,
And<SOLineSplit.orderNbr, Equal<Current<SOOrder.orderNbr>>,
And<POLine.orderType, Equal<POOrderType.dropShip>>>>>(this);
如果那个简单的路径不能让您到达那里,SO 到 PO 的更详细路径位于 INItemPlan 中,反映 SOLineSplit 的需求(通过 PlanID),然后通过 POLine.PlanID = INItemPlan 绑定到 POLine .SupplyPlanID如下sn-p所示。
foreach (PXResult<POLine, POOrder, INItemPlan, SOLineSplit> res in PXSelectJoin<POLine,
InnerJoin<POOrder, On<POLine.FK.Order>,
InnerJoin<INItemPlan, On<INItemPlan.supplyPlanID, Equal<POLine.planID>>,
InnerJoin<SOLineSplit, On<SOLineSplit.planID, Equal<INItemPlan.planID>,
And<SOLineSplit.pOType, Equal<POLine.orderType>,
And<SOLineSplit.pONbr, Equal<POLine.orderNbr>,
And<SOLineSplit.pOLineNbr, Equal<POLine.lineNbr>>>>>>>>,
Where<POLine.orderType, Equal<Required<POLine.orderType>>,
And<POLine.orderNbr, Equal<Required<POLine.orderNbr>>,
And2<Where<POLine.cancelled, Equal<boolTrue>,
Or<POLine.completed, Equal<boolTrue>>>,
And2<Where<POOrder.orderType, NotEqual<POOrderType.dropShip>,
Or<POOrder.isLegacyDropShip, Equal<True>>>,
And<SOLineSplit.receivedQty, Less<SOLineSplit.qty>,
And<SOLineSplit.pOCancelled, NotEqual<boolTrue>,
And<SOLineSplit.completed, NotEqual<boolTrue>>>>>>>>>
.Select(graph, poOrder.OrderType, poOrder.OrderNbr))
{...
您可以想象,您必须设置一些规则来将 SO Line 限制为单个 PO,但老实说,这将比它的价值更麻烦,因为标准功能在更强大方面很有价值。我建议将您的链接放在分配列表中(或在最新版本的 Acumatica ERP 中行详细信息)或生成一个智能面板弹出窗口以显示当前 SO 行的每个拆分的所有 PO 链接。