共计 1744 个字符,预计需要花费 5 分钟才能阅读完成。
业务背景与标准屏幕局限
在 SAP 系统中,主数据(如物料、供应商)的维护通常通过标准化事务码(如 MM01)进行。系统预置的屏幕布局虽然能满足基础需求,但实际业务中常遇到这些情况:

- 需要采集额外字段(如内部编码规则)
- 行业特定字段不在标准屏幕中
- 不同子公司需要差异化字段
标准视图 3(基本视图)常用于存储核心业务属性,其增强需求最为频繁。但直接修改 SAP 标准程序会引发升级冲突,必须使用官方推荐的增强技术。
增强技术选型对比
SAP 提供了多种增强方式,各有适用场景:
- User Exit(过时但稳定)
- 适用于 SAP 4.6C 及更早版本
- 通过预置的子程序出口实现
-
缺点:修改需要 Access Key
-
BADI(主流选择)
- 基于面向对象的接口实现
- 支持多重实现和过滤器
-
示例:
MM06E_BADI用于物料主数据 -
Enhancement Spot(新推荐)
- 使用隐式 / 显式增强点
- 不需要预定义出口
- 适合字段级简单增强
对于视图 3 的字段扩展,推荐组合使用 BADI+ 隐式增强,既能保持标准功能又能灵活扩展。
实战:从 CMOD 到 SE80 完整流程
第一步:创建增强项目
- 事务码 CMOD 创建项目(命名规范:Z+ 模块代号,如 ZMM001)
- 分配包和传输请求(必须开发类)
- 添加增强
MM06E001(物料主数据标准增强)
第二步:字段扩展实现
在 SE80 中操作:
- 找到程序
SAPLMGMM,展开屏幕6000(视图 3 基础屏幕) - 右键选择
Enhancement->Create创建隐式增强 - 在
INCLUDE ZX...中添加字段定义:
* 屏幕 PBO 逻辑
MODULE status_6000 OUTPUT.
LOOP AT SCREEN.
CASE screen-name.
WHEN 'ZMY_FIELD'. " 自定义字段名
IF gv_edit_mode = 'X'.
screen-active = 1.
ENDIF.
ENDCASE.
MODIFY SCREEN.
ENDLOOP.
ENDMODULE.
第三步:BADI 实现数据校验
创建 BADI 实现类:
METHOD if_ex_mm06e_badi~post.
" 字段值检查示例
IF is_mara-matnr(1) = 'Z' AND
is_mara-zmy_field IS INITIAL.
MESSAGE e888(sabapdocu) WITH '自定义字段必填'.
ENDIF.
ENDMETHOD.
调用 BADI 标准模式:
DATA: lo_badi TYPE REF TO if_ex_mm06e_badi.
TRY.
lo_badi = cl_exithandler=>get_instance('MM06E_BADI').
lo_badi->post(is_mara = im_mara).
CATCH cx_badi_not_implemented.
" 处理未实现情况
ENDTRY.
生产环境三大要点
1. 传输请求管理
- 增强项目必须与相关表结构同批传输
- 使用
SE09检查对象依赖关系 - 传输顺序建议:
- 数据元素 / 域
- 表 / 结构增强
- 屏幕增强
- BADI 实现
2. 多语言支持
- 事务码 SE63 维护文本符号
- 屏幕字段属性设置:
SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(20) TEXT-001. " 字段标签 PARAMETERS: zmy_field TYPE char30. SELECTION-SCREEN END OF LINE.
3. 升级兼容性
- 使用
SPAU预检查增强冲突 - 关键检查点:
- 屏幕元素编号是否冲突
- BADI 接口方法变更
- 表结构位置偏移
测试验证方案
BDC 录屏测试
- 事务码 SHDB 录制标准流程
- 在
bdcdata中添加自定义字段值 - 检查数据是否写入对应表(如 MARA 增强字段)
对象注册检查
SELECT * FROM tadir
WHERE pgmid = 'R3TR'
AND object IN ('ENHO','SUSH','BADI')
AND obj_name LIKE 'Z%'.
避坑经验
- 字段命名避免使用
ZZ开头(SAP 保留) - 增强项目激活后立即创建传输请求
- 使用
WHERE USED LIST检查字段引用 - 视图簇(如 CLUSTER_*)增强需要特殊处理
通过这套标准化流程,我们团队已成功实施 20+ 主数据增强项目。建议初次实施时从测试环境开始,逐步验证各环节数据流向。遇到屏幕元素不显示时,重点检查 PBO 的 ACTIVE 属性设置和字段所属的屏幕组。
正文完
