You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Acumatica 2021 R1 明细扩展字段求和无法写入表头扩展字段咨询

Acumatica 2021 R1 库存盘点模块扩展字段聚合解决方案

该问题本质是Acumatica默认聚合计算逻辑对扩展字段的依赖触发不完整,并非PXParent没有覆盖扩展字段逻辑,按照以下步骤修改即可生效:

  • 步骤1:调整表头扩展字段属性
    若需要将汇总结果持久化到数据库,将字段属性[PXDecimal]替换为[PXDBDecimal];若仅需前端实时计算展示,保留[PXDecimal]的同时新增聚合计算声明,修改后代码如下:

using PX.Data;
using System;

namespace PX.Objects.IN
{
public class INPIHeaderExt : PXCacheExtension<PX.Objects.IN.INPIHeader>
{
#region UsrTotalBookCost
// 需持久化请替换为[PXDBDecimal]
[PXDecimal]
[PXUIField(DisplayName="Total Book Cost")]
[PXFormula(typeof(Sum<Select<INPIDetail, Where<INPIDetail.refNoteID, Equal<Current<INPIHeader.noteID>>>>, INPIDetailExt.usrExtBookCost>))]
public virtual Decimal? UsrTotalBookCost { get; set; }
public abstract class usrTotalBookCost : PX.Data.BQL.BqlDecimal.Field { }
#endregion
}
}

- 步骤2:调整明细扩展字段触发逻辑
新增源字段依赖声明,确保bookQty、unitCost修改时自动触发扩展字段重算,修改后代码如下:
```csharp
using PX.Data;
using System;

namespace PX.Objects.IN
{
public class INPIDetailExt : PXCacheExtension<PX.Objects.IN.INPIDetail>
{
      #region UsrExtBookCost
      // 需持久化请替换为[PXDBDecimal]
      [PXDecimal]
      [PXUIField(DisplayName="Ext. Book Cost")]
      [PXFormula(typeof(Mult<INPIDetail.bookQty, INPIDetail.unitCost>),
      typeof(SumCalc<INPIHeaderExt.usrTotalBookCost>))]
      [PXDependsOnFields(typeof(INPIDetail.bookQty), typeof(INPIDetail.unitCost))]
      public virtual Decimal? UsrExtBookCost { get; set; }
      public abstract class usrExtBookCost : PX.Data.BQL.BqlDecimal.Field<usrExtBookCost> { }
      #endregion
}
}
  • 步骤3:页面属性校验
    打开「实物库存盘点审核」页面对应的ASPX文件,确认明细网格中bookQty和unitCost两个字段的CommitChanges属性设置为True,确保字段值修改后立即提交到后端触发计算逻辑。

  • 步骤4:兜底方案(可选)
    若以上配置后仍未生效,可通过扩展INPIEntry图添加行事件手动触发汇总计算,代码如下:

using PX.Data;
using PX.Objects.IN;
using System.Linq;

public class INPIEntryExt : PXGraphExtension
{
protected void INPIDetail_RowUpdated(PXCache sender, PXRowUpdatedEventArgs e) => RecalculateTotal();
protected void INPIDetail_RowDeleted(PXCache sender, PXRowDeletedEventArgs e) => RecalculateTotal();
protected void INPIDetail_RowInserted(PXCache sender, PXRowInsertedEventArgs e) => RecalculateTotal();

private void RecalculateTotal()
{
    if (Base.Document.Current == null) return;
    var headerExt = Base.Document.Current.GetExtension<INPIHeaderExt>();
    headerExt.UsrTotalBookCost = Base.Transactions.Select()
        .RowCast<INPIDetail>()
        .Sum(d => d.GetExtension<INPIDetailExt>().UsrExtBookCost ?? 0m);
}

}

---
内容的提问来源于stack exchange,提问作者Dave Richards
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:06:02