共计 1619 个字符,预计需要花费 5 分钟才能阅读完成。
在 SAP 标准系统中,物料主数据的字段往往无法满足企业特殊需求。比如汽车行业需要添加 ” 零部件环保等级 ” 字段,医药行业需要追踪 ”GMP 认证有效期 ”,这些场景都要求我们扩展标准表 MARA/MARC。下面分享三种经过生产验证的增强方案。

一、技术方案选型对比
- 用户出口 (MM06E005)
适用于简单字段追加,通过子屏幕增强实现:DATA: ls_enhance TYPE mm06e005_enhance. ls_enhance-zz_myfield = screen-value. EXPORT ls_enhance TO MEMORY ID 'MM06E005_ENHANCE'. - 需在 SPRO 路径 ” 后勤 - 常规 ” 下激活出口
-
字段长度限制为 30 字符
-
BADI 增强 (MATERIAL_MAINTAIN)
推荐用于复杂逻辑校验:METHOD if_ex_material_maintain~check_data. IF is_mara-zz_hazard_level IS INITIAL AND is_mara-matkl = 'HAZARD'. MESSAGE e888(sabapdocu) WITH '危险品类必须填写等级'. ENDIF. ENDMETHOD. - 支持多实现类并行处理
-
可通过 CL_EXITHANDLER=>GET_INSTANCE 动态调用
-
隐式增强 (ENHANCEMENT-SPOT)
适合标准程序逻辑修改:ENHANCEMENT 1 ZMM_MATERIAL_ENH. " 隐式增强点 IF sy-tcode = 'MM02' AND mara-zz_origin = 'CN'. PERFORM check_export_license. ENDIF. ENDENHANCEMENT. - 需使用 ENHANCEMENT-POINT 定位
- 修改前必须创建增强项目
二、完整字段追加流程
-
数据元素创建 (SE11)
DATA: lv_dtel TYPE ddobjname VALUE 'ZMAT_ECO_LVL'. CALL FUNCTION 'DDIF_FIELDINFO_GET' EXPORTING tabname = 'MARA' fieldname = 'ZZ_ECO_LEVEL' EXCEPTIONS not_found = 1 internal_error = 2. IF sy-subrc <> 0. " 执行字段追加逻辑 ENDIF. -
屏幕字段挂载 (SE51)
-
在 MM01/MM02 的屏幕 1000 添加 FIELD-GROUP:
PROCESS BEFORE OUTPUT. MODULE init_custom_fields. PROCESS AFTER INPUT. MODULE check_custom_fields. -
权限检查代码示例
AUTHORITY-CHECK OBJECT 'M_MATE_STA' ID 'ACTVT' FIELD '02' ID 'MATKL' FIELD mara-matkl. IF sy-subrc <> 0. MESSAGE e208(00) WITH '无权修改此物料类型'. ENDIF.
三、生产环境避坑指南
- OMT3N 配置
- 字段组必须包含新增字段
-
分配字段选择组给对应行业代码
-
LSMW 批量导入
FIELD-MAPPING mara_import MAPPING ('ECO_LEVEL') TO mara-zz_eco_level ('HAZARD_FLAG') TO mara-zz_hazard. - 需在源结构定义匹配字段
-
建议使用 BAPI_MATERIAL_SAVEREPLICA
-
MRP 视图测试
- 创建测试物料
- 运行 MD04 观察计划订单
- 检查 MDBT 视图是否包含新字段
四、跨 Client 同步方案思考
当增强字段需要跨系统传输时,建议考虑:
– 使用 SCMP 传输对象类型
– 开发自定义传输函数模块
– 在 TMG2 中配置字段传输规则
最后抛出一个实际案例:某食品企业新增 ” 过敏原标识 ” 字段后,发现 MD04 不显示该信息。经排查发现需要在 CL_MRP_UTIL 中增强显示逻辑。这提醒我们:增强字段不仅要考虑数据存储,还要关注其在所有关联业务场景的可用性。
正文完
