共计 1933 个字符,预计需要花费 5 分钟才能阅读完成。
为什么需要增强 BP 主数据?
在实际项目中,标准 SAP BP 主数据经常无法满足企业特定需求。比如:

- 某汽车行业客户需要记录供应商的环保认证编号和有效期
- 跨境电商业务要求存储客户的海外税号与清关信息
这些场景都面临相同问题:标准 BP 结构缺乏业务所需字段。直接修改 SAP 标准表是绝对禁止的,我们需要通过增强机制实现合规扩展。
技术方案选型
方案对比表
| 方案类型 | 事务代码 | 适用版本 | 优点 | 缺点 |
|---|---|---|---|---|
| BADI 增强 | SE18/SE19 | ECC6.0 以上 | 无需额外表结构 | 复杂逻辑实现困难 |
| 自定义表 | SE11+CMOD | 全版本支持 | 数据结构完全自主控制 | 需处理表关联和同步逻辑 |
| 标准字段扩展 | SPRO | S/4HANA 专属 | SAP 原生支持 | 扩展字段数量有限 |
推荐选择 :对大多数传统 ECC 系统,自定义表 + 增强是最灵活的方案。
核心实现步骤
1. 创建自定义表
- 执行 SE11 创建 Z 表(例如 ZCUST_EXT)
- 关键字段必须包含 BP 编号作为外键:
MANDT TYPE MANDT, PARTNER TYPE BU_PARTNER, " 与 BUS1006 关联 CERT_NO TYPE CHAR20, " 示例字段 ... PRIMARY KEY (MANDT, PARTNER) - 创建外键约束关联到 BUS1006 的 PARTNER 字段
2. BAPI 增强配置
- 使用 CMOD 创建增强项目
- 选择增强点 BUS1006(BP 主数据增强)
- 注册 FIELD-GROUP:
DATA: lt_fields TYPE STANDARD TABLE OF bapi_alm_fields. APPEND VALUE #( fieldname = 'ZCERT_NO' fieldtext = '环保认证编号' ) TO lt_fields. CALL FUNCTION 'BAPI_ALM_FIELD_GROUPS_PUT' EXPORTING objecttype = 'BU_PARTNER' groupname = 'ZENV_GROUP' TABLES fields = lt_fields.
3. SPRO 配置路径
SPRO > SAP NetWeaver > 主数据 > 业务伙伴 > 基本设置 > 字段分组
代码实现关键点
屏幕增强示例
MODULE pbo_0100 OUTPUT.
" 检查显示权限
AUTHORITY-CHECK OBJECT 'F_BP_VIEW'
ID 'ACTVT' FIELD '03'
ID 'BUKRS' FIELD sy-mandt.
IF sy-subrc <> 0.
LOOP AT SCREEN.
screen-active = 0.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
" 从自定义表读取数据
SELECT SINGLE cert_no INTO zcert_no
FROM zcust_ext
WHERE partner = bp_header-partner.
ENDMODULE.
MODULE pai_0100 INPUT.
" 检查修改权限
AUTHORITY-CHECK OBJECT 'F_BP_CHANGE'
ID 'ACTVT' FIELD '02'.
IF sy-subrc = 0.
UPDATE zcust_ext SET cert_no = zcert_no
WHERE partner = bp_header-partner.
IF sy-subrc <> 0.
INSERT zcust_ext VALUES ...
ENDIF.
ENDIF.
ENDMODULE.
BAPI 调用示例
DATA: lt_data TYPE TABLE OF bdt_bp_maintain,
ls_return TYPE bapiret2.
APPEND VALUE #(
object_task = 'CHANGE'
partner = '0000012345'
extension = VALUE #(
structure = 'ZCUST_EXT'
valuepart = 'CERT_NO=EC20230001' )
) TO lt_data.
CALL FUNCTION 'BAPI_BDT_MAINTAIN'
EXPORTING
test_run = abap_false
TABLES
it_data = lt_data
et_return = lt_return.
COMMIT WORK.
避坑指南
传输请求处理
- 增强项目必须包含所有相关对象:
- 自定义表
- 屏幕程序
- CMOD 增强
- SPRO 配置
- 建议使用单独传输层(非标准开发类)
多语言实现
- 为文本字段创建附加的描述表
- 使用 SPRAS 字段存储语言代码
- 在 PBO 中根据 SY-LANGU 动态显示
升级检查
- 使用 SCMP 检查表结构兼容性
- 保留 10% 的字段长度冗余
- 禁用表结构调整(除非绝对必要)
进阶思考
如何实现跨 Client 的主数据增强同步?可以考虑:
- 使用 BDLS 转换 BP 编号
- 开发自动分发程序(RFC 调用)
- 利用 SAP Landscape Transformation
希望这篇指南能帮助大家避开主数据增强的常见陷阱。如果有其他实战问题,欢迎在评论区交流讨论!
正文完
