PAYATHON 2026

如何查找 VIM Invoice 的付款日期和付款用户

支付老李

明确结论

VIM Invoice 的付款信息通常需要从 SAP FI 清账数据中查询,而不是从 VIM 专用表中获取:

  • BSAK-AUGDT:供应商项目的清账日期
  • BSAK-AUGBL:清账凭证号
  • BSAK-AUGGJ:清账凭证会计年度
  • 根据 BSAK-BUKRS + BSAK-AUGBL + BSAK-AUGGJ 查询清账凭证对应的 BKPF
  • BKPF-USNAM:创建清账或付款凭证的 SAP 用户
  • BKPF-BUDAT:付款或清账凭证的过账日期
  • BKPF-CPUDT、BKPF-CPUTM:凭证实际录入系统的日期和时间

最直接的查询方式是先从 BSAK 取得清账凭证和清账日期,再到 BKPF 查找该清账凭证的创建用户。

为什么不能只查发票原始凭证

VIM 负责发票采集、审批和过账。付款通常由 FI 手工付款、自动付款程序或清账操作完成。

如果直接根据发票凭证号查询 BKPF,查到的 BKPF-USNAM 是发票凭证的创建用户,不一定是执行付款的人。应先从供应商已清项中取得 AUGBL,再查询对应清账凭证的抬头。

查询关系如下:

VIM Invoice
    ↓
FI 发票凭证
    ↓
BSAK:AUGBL / AUGGJ / AUGDT
    ↓
BKPF:USNAM / BUDAT / CPUDT / CPUTM

查询步骤

假设已经知道 VIM 发票对应的 FI 凭证信息:

  • 公司代码:BUKRS
  • FI 凭证号:BELNR
  • 会计年度:GJAHR

先在 BSAK 中查找供应商已清项:

SELECT bukrs,
       belnr,
       gjahr,
       buzei,
       lifnr,
       augbl,
       auggj,
       augdt
  FROM bsak
 WHERE bukrs = :bukrs
   AND belnr = :invoice_belnr
   AND gjahr = :invoice_gjahr;

取得清账凭证后,再查询 BKPF:

SELECT bukrs,
       belnr,
       gjahr,
       usnam,
       budat,
       cpudt,
       cputm,
       tcode
  FROM bkpf
 WHERE bukrs = :bukrs
   AND belnr = :augbl
   AND gjahr = :auggj;

ABAP 示例

下面的示例根据发票凭证查询清账日期和清账凭证创建用户:

SELECT SINGLE
       bukrs,
       augbl,
       auggj,
       augdt
  FROM bsak
  WHERE bukrs = @p_bukrs
    AND belnr = @p_belnr
    AND gjahr = @p_gjahr
  INTO @DATA(ls_bsak).

IF sy-subrc = 0 AND ls_bsak-augbl IS NOT INITIAL.

  SELECT SINGLE
         usnam,
         budat,
         cpudt,
         cputm,
         tcode
    FROM bkpf
    WHERE bukrs = @ls_bsak-bukrs
      AND belnr = @ls_bsak-augbl
      AND gjahr = @ls_bsak-auggj
    INTO @DATA(ls_payment_header).

  IF sy-subrc = 0.
    WRITE: / 'Clearing document:', ls_bsak-augbl,
           / 'Clearing date:',     ls_bsak-augdt,
           / 'Posting user:',      ls_payment_header-usnam,
           / 'Posting date:',      ls_payment_header-budat,
           / 'Entry date:',        ls_payment_header-cpudt,
           / 'Entry time:',        ls_payment_header-cputm.
  ENDIF.

ENDIF.

如果一张发票可能有多个供应商行项目,不应使用 SELECT SINGLE。此时需要读取所有匹配记录,再结合 BUZEI、LIFNR、金额和清账凭证进行判断。

日期字段应如何理解

“付款日期”在不同业务场景中可能指不同的日期,不能直接混用:

字段含义
BSAK-AUGDT发票项目的清账日期
BKPF-BUDAT付款或清账凭证的过账日期
BKPF-CPUDT凭证录入 SAP 的日期
BKPF-CPUTM凭证录入 SAP 的时间

业务报表中的付款日期通常使用 AUGDT 或付款凭证的 BUDAT,但两者都不一定等于银行实际扣款日或供应商实际收款日。

如果要查询银行价值日期、付款媒介生成日期或付款批次执行日期,还需要检查付款程序和银行相关数据。常见对象包括 REGUH、REGUP 以及具体的支付媒介数据。

关于”付款用户”的限制

BKPF-USNAM 记录的是创建付款或清账凭证的 SAP 用户,不一定是实际审批或释放付款的人。

通过自动付款程序 F110 付款时,BKPF-USNAM 可能记录以下用户之一:

  • 执行付款程序的用户
  • 后台作业用户
  • 技术用户
  • 接口用户

如果要确认”谁批准了付款”或”谁运行了付款批次”,只查 BKPF-USNAM 往往不够,还需要结合:

  • REGUH、REGUP 中的付款运行信息
  • 付款运行日期和标识,如 LAUFD、LAUFI
  • 后台作业日志
  • 工作流审批记录
  • 系统审计日志

具体能够使用哪些字段,取决于 SAP 版本、付款方式,以及企业对 VIM 和付款流程的配置。

其他注意事项

  • 发票尚未清账时,通常位于 BSIK,而不是 BSAK。
  • BSAK-AUGDT 记录的是清账日期,不能保证发生了真实付款。贷项凭证、冲销凭证或账户转账也可能清账发票。
  • 发生反向清账或冲销后,需要检查当前项目状态和相关冲销凭证,不能只看历史清账字段。
  • 在 SAP S/4HANA 中,底层会计数据主要存储在 ACDOCA。BSAK、BSIK 等对象通常仍可作为兼容视图使用,但自定义程序的设计应结合当前系统的数据模型和 SAP 建议。
  • 如果需要确认清账凭证是否确实属于付款凭证,可以继续检查其凭证类型、交易代码,以及行项目中的银行或现金科目。

备注:内容仅供参考。