共计 1243 个字符,预计需要花费 4 分钟才能阅读完成。
业务场景痛点
最近对接仓储部门时,发现标准 MM01 事务码的【基本视图 2】缺少关键字段:

- 危险品分类编号(化工行业合规需求)
- 最小货架承重(立体仓库设备限制)
- 供应商专属包装规格(VMI 模式特殊需求)
标准屏幕无法满足这些业务场景,每次都需要额外维护 Excel 表格,导致数据割裂。下面分享三种增强方案的具体实施。
技术方案对比
1. 用户出口 (EXIT_SAPLMGMU_XXX)
适用场景 :快速添加 1 - 2 个字段且逻辑简单时
优点:
- 直接使用预留的出口函数
- 无需注册即可生效
缺点:
- 修改范围受限于预定义结构
- 无法添加复杂交互逻辑
2. BADI 增强 (MATERIAL_MAINTAIN)
适用场景 :需要字段联动校验 / 派生值时
核心代码片段:
METHOD if_ex_material_maintain~process_before_save.
" 危险品类目校验
IF is_data-mara-matkl = '3000' AND cs_mara-zzhazard_level IS INITIAL.
MESSAGE e398(00) WITH '危险品必须填写等级'.
ENDIF.
ENDMETHOD.
3. 自定义子屏幕 (Subscreen)
适用场景 :需要添加字段组或复杂 UI 时
实现步骤:
- 创建包含自定义字段的 Z 表
- 在 MM01 屏幕的 PAI 模块调用子屏幕
- 使用 CL_ALV_GRID 展示历史数据
关键实现细节
权限控制示例
DATA(lv_auth_check) = cl_auth_objects=>check_authorization(
object = 'M_MATE_WRK'
field1 = 'ACTVT'
value1 = '02'
).
IF lv_auth_check NE abap_true.
MESSAGE e208(00) WITH '无物料修改权限'.
ENDIF.
TABLE_BUFFER 同步
" 增强表更新后立即刷新缓冲
CALL FUNCTION 'DEQUEUE_EMMARA'
EXPORTING
mandt = sy-mandt
matnr = im_mara-matnr.
CALL FUNCTION 'DB_COMMIT'.
性能优化
MRP 运行影响
- 避免在 BADI 中编写耗时计算
- 对增强字段添加适当的索引
批量导入优化
" 在 BAPI_MATERIAL_SAVEDATA 前关闭表缓冲
CALL FUNCTION 'BUFFER_REFRESH_ALL'.
" 使用内存表暂存数据
DATA lt_temp TYPE SORTED TABLE OF zmm_ext WITH UNIQUE KEY matnr.
上线检查清单
- 传输请求必须包含开发类 +$TMP
- 使用 DDIC 文本元素维护多语言标签
- 在 S /4HANA 沙箱测试升级兼容性
思考题
当需要跨 Client 同步配置时,可以考虑:
- 使用 SCMS/SCMP 传输自定义表内容
- 开发自动同步 Job 调用 RFC 函数
- 将配置存储在跨 Client 可读的中央表
实际项目中我们采用了方案 3,通过自定义 ZCONFIG 表 + 后台作业实现夜间自动同步。
希望这篇笔记能给遇到类似需求的同行带来参考。如果有更好的实现方案,欢迎交流讨论。
正文完
