AP账单释放未触发GL Journal Transaction扩展Release逻辑问题咨询
解决AP账单释放时未触发GLTran额外行添加的问题
问题根源
你之前尝试扩展Journal Transactions图的Release动作来新增GLTran行,这个思路在手动创建并释放日记账批处理时是有效的,但AP账单释放时完全不会触发这个逻辑——因为AP模块生成日记账的流程是独立的,它会直接调用内部API创建GLTran记录,根本不走Journal Transactions图的Release动作流程。
正确的解决方案
要在AP账单生成的日记账中添加额外行,你需要针对AP账单释放的核心流程进行扩展,推荐通过扩展APInvoiceEntry图来实现,具体步骤如下:
扩展
APInvoiceEntry图
找到AP账单释放时生成日记账的核心方法ReleaseInvoice,通过重写这个方法,在原有释放逻辑执行完成后,插入额外的GLTran行。添加额外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(); } }关键注意事项
- 必须填充
GLTran的所有必填字段(比如BranchID、BatchNbr、AccountID等),否则会导致保存失败; - 确保额外行的借贷金额平衡,避免破坏总账数据一致性;
- 如果需要关联到原AP账单的日记账批次,直接使用
APInvoice的BatchNbr字段即可。
- 必须填充
替代思路:事件订阅
如果你不想重写整个ReleaseInvoice方法,也可以订阅AP账单释放完成后的事件,在事件回调中添加GLTran行,效果是一致的。
内容的提问来源于stack exchange,提问作者Bill Blake
相关产品推荐
相关产品推荐

