如何在PO301000中向PO详细信息网格显示QtyOnHand字段(在IN402000中)

时间:2017-08-09 10:17:12

标签: acumatica

如何在IN402000中将QtyOnHand显示到PO 301000详细信息网格?

1 个答案:

答案 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);
        }
    }
}