计算准备付款时支付的总金额

时间:2020-02-17 11:59:42

标签: acumatica

美好的一天 网页:AP503000 内部版本19.104.0024

我正在尝试计算“准备付款”底部“ APAdjust”网格中记录的所有付款的总金额。我希望在“表单”区域的顶部显示该总数。

DAC

namespace PX.Objects.AP
{
    public class PayBillsFilterExt : PXCacheExtension<PX.Objects.AP.PayBillsFilter>
    {
        #region UsrTotalAmountForPayment
        [PXDecimal]
        [PXUIField(DisplayName = "Total Amount For Payment")]
        public virtual Decimal? UsrTotalAmountForPayment { get; set; }
        public abstract class usrTotalAmountForPayment : 
        PX.Data.BQL.BqlDecimal.Field<usrTotalAmountForPayment> { }
        #endregion
     }
}

我第一次尝试向我的DAC添加一个未绑定的公式以使下面的方法起作用,您还需要添加一个新的小数十进制_0

namespace PX.Objects.AP
{
    public class PayBillsFilterExt : PXCacheExtension<PX.Objects.AP.PayBillsFilter>
    {
        #region UsrTotalAmountForPayment
        [PXDecimal]
        [PXUIField(DisplayName = "Total Amount For Payment")]
        // add this to the DAC
        [PXUnboundFormula(typeof(Where<APAdjust.curyAdjdAmt,Greater<decimal_0>>)
        ,typeof(SumCalc<APAdjust.curyAdjdAmt>))]
        public virtual Decimal? UsrTotalAmountForPayment { get; set; }
        public abstract class usrTotalAmountForPayment : 
        PX.Data.BQL.BqlDecimal.Field<usrTotalAmountForPayment> { }
        #endregion

        //Class decimal_0 
        public class decimal_0 : Constant<decimal>
        {
            public decimal_0()
            : base(0)
             { }
        }

     }
}

我还尝试添加一个事件进行计算:

namespace PX.Objects.AP
{
  public class APPayBills_Extension : PXGraphExtension<APPayBills>
  {
     #region Event Handlers
     protected void APAdjust_RowInserted(PXCache cache, PXRowInsertedEventArgs e)
     {
        var row = (APAdjust)e.Row;
        PayBillsFilter filter = this.Base.Filter.Current;
        PayBillsFilterExt FilExt = PXCache<PayBillsFilter>.GetExtension<PayBillsFilterExt>(filter);

        if (filter != null)
        {
            FilExt.UsrTotalAmountForPayment += row.CuryAdjdAmt;

        }
      }   
   }
 }

1 个答案:

答案 0 :(得分:1)

为获得准确的结果,建议您同时汇总所有记录。 您可以使用DataView.Select方法来迭代所有记录。

public void PayBillsFilter_UsrTotalAmountForPayment_FieldSelecting(PXCache sender, PXFieldSelectingEventArgs e)
{
    decimal total = 0;

    foreach (APAdjust adjustment in this.Base.APDocumentList.Select())
    {
        total += (adjustment.CuryAdjdAmt != null ? adjustment.CuryAdjdAmt.Value : 0M);
    }

    e.ReturnValue = total;
}