在 SAP 里,“有没有交货、有没有开票”这类状态信息被拆成“抬头级”和“项目级”两级存放,而且 S/4HANA 与 ECC 的存放位置已经不同。下面把两张表(VBAK、VBAP)目前真正起作用的字段一次列清,按系统版本说明。
一、ECC 6.x 及更早版本
抬头:
交货状态 → VBUK-LFSTK(A=未交货 C=完全交货)
发货过账状态 → VBUK-WBSTK(A=未过账 C=已过账)
开票状态 → VBUK-FKSTK(A=未开票 C=完全开票)
项目:
交货状态 → VBUP-LFSTA(A/B/C)
开票状态 → VBUP-UVFAK(空/C)
VBAK/VBAP 本身在这版里没有任何“状态”字段,只能到 VBUK/VBUP 去取。
二、S/4HANA 版本(1511 以后,含 2025 最新)
SAP 把 VBUK/VBUP 废除,状态直接写回单据表,新增结构 VBAK_STATUS / VBAP_STATUS。
抬头 VBAK:
交货状态 → VBAK-LFSTK
发货过账状态 → VBAK-WBSTK
开票状态 → VBAK-FKSTK
项目 VBAP:
交货状态 → VBAP-LFSTA
开票状态 → VBAP-UVFAK
(字段名与旧 VBUK/VBUP 保持一致,只是物理表换到了 VBAK/VBAP,后台通过附加结构实现)
三、快速判断自己系统属于哪一版
只要 VBAK 里能看到 LFSTK/WBSTK/FKSTK 字段,就是 S/4 新模型;
如果 VBAK 里这几个字段不存在,就去 VBUK/VBUP 查,即为旧 ECC 模型。
因此,写代码时先 DESC 一下 VBAK 看有没有 LFSTK,有就直接用 VBAK/VBAP;没有就关联 VBUK/VBUP 取状态即可。