SAP FICO表字段增强
SAP FICO 表字段增强实战指南
FICO模块是SAP中最常需要做表字段增强的模块。财务业务的多样性导致标准字段无法完全满足需求,因此需要在BKPF、BSEG、ACDOCA等核心表上扩展自定义字段。本文从实战角度总结FICO表字段增强的完整方案。
一、增强方式概览
| 增强方式 | 适用场景 | 操作事务码 |
|---|---|---|
| CI_ Include | BKPF/BSEG 标准表加字段 | SE11 |
| Append Structure | 任意透明表/结构加字段 | SE11 |
| BADI ACC_DOCUMENT | BAPI_ACC_DOCUMENT_POST 扩展字段写入 | SE18/SE19 |
| 替代 Substitution | 凭证过账时自动填充字段值 | GGB1/OBBH |
| 校验 Validation | 凭证过账时校验字段值 | GGB0/OB28 |
| BTE 增强 | FI 凭证事件触发自定义逻辑 | FIBF |
| S/4HANA ACDOCA 扩展 | 新总账表字段增强 | SE11 + CDS View |
二、CI_ Include 方式(最常用)
2.1 BKPF/BSEG 增强
SAP为BKPF和BSEG预留了CI_ Include结构,专门用于客户自定义字段扩展:
- CI_COBL — 用于BSEG行项目级别的字段增强(科目分配相关)
- CI_BKPF — 用于BKPF凭证抬头级别的字段增强
操作步骤:
- SE11进入CI_COBL结构
- 添加自定义字段(命名以ZZ或YY开头)
- 激活结构
- 字段自动出现在BSEG表中
" CI_COBL 结构增强示例 |
注意点:
- CI_COBL的字段会自动出现在FB01/FB02/FB60/FB70等凭证录入屏幕
- 如果字段不需要出现在标准屏幕,可以在屏幕增强中隐藏
- 修改CI_ Include后需要用SE14调整数据库,否则可能报错
2.2 自定义表增强(Append Structure)
对于自定义Z表或其他标准表,使用Append Structure:
" 在SE11中创建 Append Structure ZAFI_BKPF |
操作步骤:
- SE11创建Append Structure
- 定义字段
- 将Append Structure附加到目标表
- 激活
- 如果表有数据,用SE14调整数据库
三、BADI ACC_DOCUMENT(BAPI凭证过账扩展)
当使用 BAPI_ACC_DOCUMENT_POST 过账凭证时,标准BAPI结构不包含自定义字段。需要通过BADI ACC_DOCUMENT的CHANGE方法,在过账时将扩展字段值写入BSEG。
3.1 实现步骤
- SE18查看BADI定义 ACC_DOCUMENT
- SE19创建实现 ZCL_IM_ACC_DOCUMENT
- 实现方法 IF_EX_ACC_DOCUMENT~CHANGE
- 激活
3.2 代码实现
METHOD if_ex_acc_document~change. |
3.3 调用端代码
" 在调用 BAPI_ACC_DOCUMENT_POST 前填充扩展结构 |
关键点:
- ACCIT结构中需要预先通过SE11增强添加ZZ_字段
- 扩展结构ZSFIEXTEN需要自定义
- c_extension2 是CHANGE方法的输入参数,包含BAPI传入的所有扩展数据
四、替代增强(Substitution)— 自动填充字段值
当需要在凭证过账时自动填充某些字段值(而非手动输入),使用替代增强。
4.1 配置步骤
- SE38复制 RGGBS000 → ZRGGBS000
- GCX2维护应用区域 GBLS → 退出程序 ZRGGBS000
- GGB1维护替代规则
- OBBH激活替代(按公司代码)
4.2 出口代码编写
" 在 ZRGGBS000 中定义出口 |
" 完全凭证替代示例(同时使用抬头和行项目数据) |
4.3 替代不起作用的排查
常见原因:
- 字段不在GB01允许范围内 — SE16查看GB01表,如果字段标记EXCLUDE则不允许替代。通过SM30维护视图VWTYGB01修改
- 替代程序未重新编译 — SE38运行RGUGBR00重新生成
- 出口参数类型不匹配 — c_exit_param_none用于单字段替代,c_exit_param_class用于完全凭证替代
五、校验增强(Validation)— 字段值校验
5.1 配置步骤
- SE38复制 RGGBR000 → ZRGGBR000
- GCX2维护应用区域 GBLR → 退出程序 ZRGGBR000
- GGB0维护校验规则
- OB28激活校验(按公司代码)
5.2 典型校验场景
" 凭证校验:原因代码不能为空 |
校验消息类型:A(取消)、E(错误)、W(警告)、I(信息)
六、BTE增强(财务专用)
BTE是FI模块独有的增强方式,主要用于凭证事件触发时的附加处理。
6.1 配置步骤
- FIBF进入BTE配置
- 查找合适的事件号(如1120凭证过账前、1030凭证过账后)
- 创建自定义函数模块
- 将函数模块分配给事件号
6.2 典型应用
" BTE事件1120:凭证过账前的数据校验 |
七、S/4HANA ACDOCA 扩展
在S/4HANA中,ACDOCA(Universal Journal)取代了BSEG/FAGLFLEXT等表。字段增强方式:
7.1 Append Structure 方式
" SE11创建 Append Structure ZACDOCA_EXT |
7.2 CDS View 扩展
" 通过 CDS View 扩展将自定义字段暴露给前端 |
7.3 S/4HANA 注意事项
- ACDOCA是宽表,一个行项目只有一条记录(不再区分BSEG各视图)
- 自定义字段需要通过Extend添加到CDS View才能在Fiori应用中可见
- 如果从ECC升级到S/4HANA,原有BSEG增强字段需要迁移到ACDOCA
八、凭证打印/SmartForms字段增强
增强字段在打印表单中的使用:
- 确保增强字段已写入BKPF/BSEG
- 在SmartForms中通过全局变量读取增强字段
- 或者在打印程序中直接从数据库读取
" 在打印程序中读取增强字段 |
九、完整增强实施清单
一个典型的FICO字段增强项目需要操作的步骤:
1. SE11 CI_COBL / CI_BKPF 添加字段 ← 数据库层 |
十、常见问题与解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 替代字段不可用 | GB01表中字段标记EXCLUDE | SM30维护VWTYGB01去掉EXCLUDE |
| 替代不起作用 | 替代程序未重新编译 | SE38运行RGUGBR00 |
| BAPI过账不写入自定义字段 | 未实现BADI ACC_DOCUMENT | SE19创建BADI实现 |
| CI_ Include激活失败 | 数据库需要调整 | SE14调整数据库 |
| 替代出口报错未生成 | 出口未在RGGBS000中注册 | 在get_exit_titles中添加出口定义 |
| S/4HANA字段迁移 | BSEG字段不在ACDOCA中 | 创建Append Structure附加到ACDOCA |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 JCBlog!








