如何在IN402000中将QtyOnHand显示到PO 301000详细信息网格?
答案 0 :(得分:1)
POLine DAC已经有一个" QtyAvail(现有数量)"领域。您只需创建一个自定义项目,添加屏幕,导航到网格:交易并将该字段的控件添加到屏幕和&发布。
如果您需要将字段添加到PO行,并且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 {}
}
然后,当选择DAC时,PXDBScalar字段的值已设置。可能有更好的方法可以做到这一点,但是在添加线条时填充该字段&amp;更新到POOrderEntry图形扩展中的PO,您可以处理InventoryID和SiteID的FieldUpdated事件,以执行使用基本相同的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);
}
}
}