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

AP账单释放未触发GL Journal Transaction扩展Release逻辑问题咨询

解决AP账单释放时未触发GLTran额外行添加的问题

问题根源

你之前尝试扩展Journal Transactions图的Release动作来新增GLTran行,这个思路在手动创建并释放日记账批处理时是有效的,但AP账单释放时完全不会触发这个逻辑——因为AP模块生成日记账的流程是独立的,它会直接调用内部API创建GLTran记录,根本不走Journal Transactions图的Release动作流程。

正确的解决方案

要在AP账单生成的日记账中添加额外行,你需要针对AP账单释放的核心流程进行扩展,推荐通过扩展APInvoiceEntry图来实现,具体步骤如下:

  1. 扩展APInvoiceEntry图
    找到AP账单释放时生成日记账的核心方法ReleaseInvoice,通过重写这个方法,在原有释放逻辑执行完成后,插入额外的GLTran行。

  2. 添加额外GLTran行的代码示例
    在扩展类中重写ReleaseInvoice方法,在原逻辑执行后创建并保存额外的GLTran记录:

    public class APInvoiceEntryExtension : PXGraphExtension<APInvoiceEntry>
    {
        public delegate void ReleaseInvoiceDelegate(APInvoice doc);
        [PXOverride]
        public void ReleaseInvoice(APInvoice doc, ReleaseInvoiceDelegate baseMethod)
        {
            // 先执行原有的AP账单释放逻辑
            baseMethod(doc);
    
            // 获取GLTran处理的图实例
            GLTranEntry glTranGraph = PXGraph.CreateInstance<GLTranEntry>();
    
            // 创建第一条额外GLTran行
            GLTran extraLine1 = new GLTran();
            extraLine1.BranchID = doc.BranchID;
            extraLine1.TranType = doc.DocType;
            extraLine1.RefNbr = doc.RefNbr;
            extraLine1.BatchNbr = doc.BatchNbr; // 关联到AP账单生成的日记账批次
            extraLine1.AccountID = [你的目标账户ID];
            extraLine1.Amount = [对应金额];
            extraLine1.DebitOrCredit = [标记借方/贷方,如"DB"或"CR"];
            // 填充其他必填字段,如SubID、Description等
            extraLine1.Description = "AP账单附加行1";
    
            glTranGraph.GLTran.Insert(extraLine1);
    
            // 创建第二条额外GLTran行
            GLTran extraLine2 = new GLTran();
            extraLine2.BranchID = doc.BranchID;
            extraLine2.TranType = doc.DocType;
            extraLine2.RefNbr = doc.RefNbr;
            extraLine2.BatchNbr = doc.BatchNbr;
            extraLine2.AccountID = [另一目标账户ID];
            extraLine2.Amount = [对应金额];
            extraLine2.DebitOrCredit = [对应借方/贷方标记];
            extraLine2.Description = "AP账单附加行2";
    
            glTranGraph.GLTran.Insert(extraLine2);
    
            // 保存新增的GLTran记录
            glTranGraph.Actions.PressSave();
        }
    }
    
  3. 关键注意事项

    • 必须填充GLTran的所有必填字段(比如BranchID、BatchNbr、AccountID等),否则会导致保存失败;
    • 确保额外行的借贷金额平衡,避免破坏总账数据一致性;
    • 如果需要关联到原AP账单的日记账批次,直接使用APInvoice的BatchNbr字段即可。

替代思路:事件订阅

如果你不想重写整个ReleaseInvoice方法,也可以订阅AP账单释放完成后的事件,在事件回调中添加GLTran行,效果是一致的。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:07:59