美好的一天 网页: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;
}
}
}
}
答案 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;
}