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

2022R2版本AP批量释放时Credit Adjustment明细未创建问题排查

Acumatica 2022R2 AP批量释放自定义扩展问题排查

核心问题

  • 通过AP批量释放的自定义扩展插入现有凭证行并创建Credit Adjustment时,仅生成表头,无明细行
  • 插入新凭证行并修改金额后,明细总额未同步减少

排查方向及解决方案

1. Credit Adjustment明细行未触发正确的持久化与关联逻辑

Acumatica创建Credit Adjustment时,明细行必须关联原AP凭证行,且需通过框架API完成创建与持久化:

  • 检查代码是否直接手动创建APAdjust记录,而非调用AdjustmentEntry图的AddDetail或类似关联方法,导致明细未绑定到表头
  • 确认创建明细后是否执行graph.APAdjusts.Cache.Persist(PersistActions.Insert)或graph.Actions.PressSave(),确保明细行被持久化
  • 批量释放流程中,调整单创建逻辑需放在ReleaseBatch事务上下文内执行,避免事务回滚导致明细丢失

2. 原凭证行状态或权限限制导致无法关联

批量释放过程中原凭证行可能处于锁定状态,无法生成调整明细:

  • 验证自定义代码中创建Credit Adjustment前,原凭证行的Status字段为Open或允许调整的状态
  • 确认调整单创建后,是否正确更新原凭证行的关联调整记录,避免状态冲突导致明细无法写入

3. 明细总额未更新:未触发框架自动汇总计算

Acumatica的明细总额(如APInvoice.CuryDocTotal)依赖字段事件自动计算,手动修改金额后需触发对应事件:

  • 避免直接赋值APTran.CuryAmount,改用graph.APTran.Cache.SetValueExt<APTran.curyAmount>(tran, newAmount)修改,触发字段验证与汇总逻辑
  • 修改金额后调用graph.APTran.Cache.RaiseRowUpdated(tran, tran)或graph.CalculateTotals()强制刷新总额
  • 确保修改操作在ReleaseBatch事务完成前执行,保证汇总计算被纳入事务流程

4. 事件触发时机错误导致逻辑未执行

AP批量释放核心逻辑在APReleaseProcess类中,事件挂载时机错误会导致逻辑失效:

  • 检查调整单创建逻辑是否挂载到APReleaseProcess.ReleaseDoc的正确扩展点(如ReleaseDoc_AfterRelease),避免过早或过晚执行
  • 禁止在批量释放事务提交后修改凭证行,此时凭证已锁定,修改不会生效

修正后的代码示例

// 创建Credit Adjustment并关联明细
var adjGraph = PXGraph.CreateInstance<AdjustmentEntry>();
var adjDoc = new APAdjust
{
    AdjType = "CA",
    VendorID = originalInvoice.VendorID,
    RefNbr = PXAutoNumberAttribute.GetNextNumber(adjGraph, typeof(APAdjust.refNbr).Name, null),
    // 其他表头字段赋值
};
adjDoc = adjGraph.APAdjusts.Insert(adjDoc);

// 添加关联的原凭证明细行
var adjTran = new APTran
{
    AdjNbr = adjDoc.RefNbr,
    AdjType = adjDoc.AdjType,
    InvoiceNbr = originalInvoice.RefNbr,
    InvoiceType = originalInvoice.DocType,
    CuryAmount = -originalTran.CuryAmount,
    // 其他明细字段赋值
};
adjTran = adjGraph.APTran.Insert(adjTran);
adjGraph.APTran.Cache.RaiseRowInserted(adjTran);

// 保存调整单
adjGraph.Actions.PressSave();

// 修改原凭证行金额并刷新总额
var invoiceGraph = PXGraph.CreateInstance<APInvoiceEntry>();
var originalTran = invoiceGraph.APTran.Search<APTran.refNbr, APTran.lineNbr>(originalInvoice.RefNbr, originalLineNbr);
if (originalTran != null)
{
    invoiceGraph.APTran.Cache.SetValueExt<APTran.curyAmount>(originalTran, newAmount);
    invoiceGraph.CalculateTotals();
    invoiceGraph.Actions.PressSave();
}

内容的提问来源于stack exchange,提问作者Tibu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:44:57