如何在PO301000中向采购订单详细信息网格显示 QtyOnHand 字段(以 IN402000 为单位)



如何在 PO 301000 详细网格中显示 QtyOnHand IN402000?

POLine DAC 已经有一个"QtyAvail (Qty on Hand("字段。您只需创建一个自定义项目,添加屏幕,导航到网格:事务,然后将字段的控件添加到屏幕并发布。

如果您需要将该字段添加到采购订单行,并且INItemStatus的可用数量就足够了,您可以添加它:

using System;
using PX.Data;
using PX.Objects.PO;
using PX.Objects.IN;
public class POLine_Extension : PXCacheExtension<POLine> {
[PXDecimal]
[PXUIField(DisplayName = "Qty Avail", Enabled = false)]
[PXDBScalar(typeof(
Search<INSiteStatus.qtyAvail,
Where<INSiteStatus.inventoryID, Equal<POLine.inventoryID>,
And<INSiteStatus.siteID, Equal<POLine.siteID>>>>))]
public virtual decimal? QtyAvail { get; set; }
public abstract class qtyAvail : IBqlField {}
}

然后,PXDBScalar 字段在选择 DAC 时设置其值。可能有更好的方法可以做到这一点,但是要在POOrderEntry图形扩展中添加和更新行时填充字段,您可以处理InventoryID和SiteID的FieldUpdate事件以执行一个函数,该函数使用基本相同的BQL检索可用数量并将该值设置为DAC扩展字段。

public class POOrderEntry_Extension : PXGraphExtension<POOrderEntry>
{
public virtual void POLine_InventoryID_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
{
UpdateQtyAvailable(sender, e);
}
public virtual void POLine_SiteID_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
{
UpdateQtyAvailable(sender, e);
}
private void UpdateQtyAvailable(PXCache sender, PXFieldUpdatedEventArgs e)
{
if (e.Row == null) return;
POLine row = (POLine)e.Row;
foreach(INSiteStatus siteStatus in PXSelect<INSiteStatus,
Where<INSiteStatus.inventoryID, Equal<Required<INSiteStatus.inventoryID>>,
And<INSiteStatus.siteID, Equal<Required<INSiteStatus.siteID>>>>>.Select(sender.Graph, row.InventoryID, row.SiteID))
{
sender.SetValueExt<POLine_Extension.qtyAvail>(row, siteStatus.QtyAvail);
}
}
}

最新更新