如何查找 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 建议。 - 如果需要确认清账凭证是否确实属于付款凭证,可以继续检查其凭证类型、交易代码,以及行项目中的银行或现金科目。
备注:内容仅供参考。
