PAYATHON 2026

Acumatica AP Electronic Payments 付款通知如何发送?

支付阿杰

结论

可以实现。较稳妥的方案是创建一份“付款通知/Remittance Advice”报表,以 APPayment 为主记录、APAdjust 为付款明细,按付款单的 DocType + RefNbr 生成 PDF,再通过 Acumatica 的邮件模板或通知机制发送给供应商。

各版本和本地化包提供的标准报表不完全一致,建议先检查当前环境中是否已有 Remittance Advice、Payment Advice、Payment Register 等类似报表。如果没有,再进行定制。

发送时点也需要谨慎选择。通常不建议在生成银行电子付款文件时立即发送,而应等付款成功释放,并确认电子付款文件已经生成或上传后再发送。

报表应包含哪些数据

每份通知建议只对应一笔付款,至少包含以下内容:

  • 供应商名称和供应商编号
  • 付款日期
  • Payment Ref. Nbr.
  • Payment Method
  • 付款币种及总金额
  • 被核销的账单编号
  • 供应商发票号
  • 发票日期
  • 原始金额
  • 本次付款金额
  • Cash Discount
  • Withholding Tax
  • 调整或核销金额
  • 付款备注
  • 必要时显示经过掩码处理的银行账户信息

主要数据关系如下:

  • APPayment:付款单头
  • APAdjust:付款与账单的核销关系
  • APInvoice:被支付的 AP Bill
  • Vendor:供应商资料
  • Location:供应商付款地点
  • Contact:通知收件人及电子邮件地址

报表必须同时使用以下两个参数定位付款:

DocType
RefNbr

不能只使用 RefNbr,因为不同 AP 单据类型可能使用相同编号。

实现步骤

1. 检查现有报表

先在 AP 付款处理、付款查询和报表菜单中查找以下名称或相近名称:

Remittance Advice
Payment Advice
Payment Register
Check Register
Payment Details

如果已有合适的报表,应复制标准 .rpx 报表后再修改,不要直接覆盖系统文件。具体报表编号会因 Acumatica 版本、本地化包和已安装功能而异,不能假定所有环境都相同。

2. 创建付款通知报表

在 Report Designer 中以 APPayment 为主表,加入 APAdjust 和 APInvoice。

核心关联条件可以按以下逻辑配置:

APPayment.DocType = APAdjust.AdjgDocType
APPayment.RefNbr  = APAdjust.AdjgRefNbr

APAdjust.AdjdDocType = APInvoice.DocType
APAdjust.AdjdRefNbr  = APInvoice.RefNbr

报表筛选条件如下:

APPayment.DocType = @DocType
AND APPayment.RefNbr = @RefNbr

付款总额应使用付款单头的币种金额。明细金额则根据业务需要,选用 APAdjust 中对应的调整币种字段。

处理跨币种付款时,不能直接混合汇总基础币字段和单据币字段。应先确定报表展示的是付款币种还是账单币种。

3. 确定供应商通知邮箱

邮箱可以按以下顺序获取:

  1. 付款地点中专门配置的 remittance contact
  2. 供应商付款地点的默认联系人
  3. 供应商主联系人
  4. 经确认的自定义“付款通知邮箱”字段

不要默认使用供应商主档中的任意邮箱。采购联系人、应付联系人和收款通知联系人可能并非同一个人。实际项目中,增加一个明确的 Remittance Email 自定义字段通常更方便维护。

4. 配置邮件模板

邮件主题可以使用:

付款通知:{{VendorName}} / {{PaymentRefNbr}}

正文示例:

您好:

我方已于 {{PaymentDate}} 安排电子付款,付款金额为
{{CurrencyID}} {{PaymentAmount}}。

付款参考号:{{PaymentRefNbr}}

详细的发票核销信息请查看附件中的付款通知。

此邮件由系统自动发送。如对付款内容有疑问,请联系我方应付账款部门。

模板字段的实际语法取决于当前版本使用的 Notification Template、Business Event 或定制发送程序。配置时应以当前环境的字段选择器为准。

5. 选择发送方式

可以采用以下三种方式。

手工发送

在付款查询或自定义 Processing Screen 中选择已释放的付款,然后执行“发送付款通知”。

这种方式便于控制和补发,适合在上线初期验证流程。

批量发送

创建一个处理页面,并按以下业务条件筛选:

Released = true
PaymentMethod.UseForAP = true
ElectronicPayment = true
NotificationSent = false
Voided = false

各版本对电子付款方式的字段定义可能不同。以上内容表示业务筛选逻辑,不代表所有版本都有这些同名字段。

自动发送

可以通过 Business Event、Automation Step 或 Graph Extension,在付款达到最终状态后发送通知。启用自动发送前,需要先处理重复发送、失败重试和邮件地址为空等情况。

BQL 查询示例

以下查询演示了如何根据付款单获取被核销的 AP Bill,可作为定制代码的起点。具体命名空间和 BQL 写法可能需要根据目标 Acumatica 版本调整。

using PX.Data;
using PX.Data.BQL.Fluent;
using PX.Objects.AP;

public static PXResultset<APAdjust, APInvoice> GetPaidDocuments(
    PXGraph graph,
    string docType,
    string refNbr)
{
    return SelectFrom<APAdjust>
        .LeftJoin<APInvoice>
            .On<APInvoice.docType.IsEqual<APAdjust.adjdDocType>
            .And<APInvoice.refNbr.IsEqual<APAdjust.adjdRefNbr>>>
        .Where<APAdjust.adjgDocType.IsEqual<@P.AsString>
            .And<APAdjust.adjgRefNbr.IsEqual<@P.AsString>>>
        .View.Select(graph, docType, refNbr);
}

调用报表时,应同时传入两个参数:

var reportParameters = new Dictionary<string, string>
{
    ["DocType"] = payment.DocType,
    ["RefNbr"] = payment.RefNbr
};

不同 Acumatica 版本的邮件发送 API 可能存在差异,包括通知模板生成器的构造方式、报表附件参数和邮件账户解析方式。应在目标版本的 Customization Project 中引用对应程序集,并参考该版本现有的邮件发送代码。不能直接假定某个 NotificationGenerator 示例可以跨版本编译。

发送状态与防重复设计

可以在 APPayment 扩展字段中记录发送结果,例如:

public sealed class APPaymentExt : PXCacheExtension<APPayment>
{
    public abstract class usrRemittanceSent : PX.Data.BQL.BqlBool.Field<usrRemittanceSent>
    {
    }

    [PXDBBool]
    [PXDefault(false)]
    [PXUIField(DisplayName = "Remittance Sent")]
    public bool? UsrRemittanceSent { get; set; }

    public abstract class usrRemittanceSentDateTime :
        PX.Data.BQL.BqlDateTime.Field<usrRemittanceSentDateTime>
    {
    }

    [PXDBDateAndTime]
    [PXUIField(DisplayName = "Remittance Sent On", Enabled = false)]
    public DateTime? UsrRemittanceSentDateTime { get; set; }
}

只有在邮件成功进入 Acumatica 邮件发送队列后,才能更新发送状态。如果生成报表、创建邮件或保存邮件记录失败,不应将付款标记为已发送。

如果业务允许补发,最好另外记录发送次数,而不是只设置一个布尔字段。

重要注意事项

  • 只向已经 Released 的付款发送正式通知。
  • 如果电子付款文件可能被重新生成或拒绝,需要明确由“生成文件”还是“确认付款”触发邮件。
  • Void Payment、退款和冲销不能沿用普通付款通知,应使用独立模板或禁止发送。
  • 邮件附件中不要显示完整银行账号、Routing Number 或其他敏感信息。
  • 多币种付款需要分别核对付款币种金额、账单币种金额和基础币金额。
  • 一笔付款核销多张账单时,应按付款汇总发送,不能为每张账单重复发送邮件。
  • 保存发送日志,包括付款编号、收件人、发送时间、发送结果和错误信息。
  • 上线前至少验证部分付款、折扣、预付款、贷项调整、跨币种付款、Void Payment 和邮箱为空等情况。

从实施风险考虑,可以先交付支持手工批量发送的付款通知报表。流程稳定后,再增加自动触发,这样更便于验证和维护。

备注:内容仅供参考。