共计 1632 个字符,预计需要花费 5 分钟才能阅读完成。
物料主数据是 SAP MM 模块的核心基础,承载着采购、库存、生产等业务的通用属性。在实际实施中,企业常需要添加供应商特定编码或内部质检标识等自定义字段,而直接修改标准表结构会引发升级兼容性问题。本文将采用 User Exit 技术实现标准化增强。

技术方案选型
- User Exit:SAP 预留在程序中的显式子例程(如 MM06E005),适合简单字段扩展和校验逻辑,无需注册即可使用
- BADI:面向对象增强点,适合复杂业务逻辑和多实现场景,需要定义过滤器
- Enhancement Spot:基于源代码插件的增强,灵活性最高但开发复杂度也最大
对于物料主数据这类基础对象,优先选择 User Exit 方案既能满足需求又降低技术复杂度。
实战步骤详解
创建 CMOD 增强项目
- 事务码 CMOD 输入项目名称(ZMM_MATERIAL_ENH)和描述
- 点击 ” 增强分配 ” 按钮,搜索并添加 MM06E005 出口
- 保存生成传输请求(务必使用独立请求号)
屏幕字段增强实现
在分配的出口代码中插入如下逻辑:
*&---------------------------------------------------------------------*
*& 包含 ZXMM06ETOP - 全局数据声明
*&---------------------------------------------------------------------*
DATA: gv_custom_field TYPE zmat_custom_flag. " 使用自建 Data Element
*&---------------------------------------------------------------------*
*& 包含 ZXMM06EF01 - PBO 模块
*&---------------------------------------------------------------------*
MODULE init_custom_field OUTPUT.
LOOP AT SCREEN.
IF screen-group1 = 'Z01'. " 字段组控制
screen-active = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDMODULE.
校验逻辑开发
在 MV45AFZZ 中包含以下代码块实现保存前校验:
FORM check_custom_field.
FIELD-SYMBOLS: <fs_field> TYPE any.
ASSIGN ("(SAPLMGD1)MARA-ZZFLAG") TO <fs_field>. " 动态访问字段
IF <fs_field> IS ASSIGNED AND
<fs_field> = 'X' AND
sy-tcode = 'MM01'.
AUTHORITY-CHECK OBJECT 'ZMAT_FLAG'
ID 'ACTVT' FIELD '02'.
IF sy-subrc <> 0.
MESSAGE e208(00) WITH '无权限设置特殊标记'.
ENDIF.
ENDIF.
ENDFORM.
字段持久化配置
- 事务码 SE11 创建 Append Structure ZMAT_APPEND
- 分配至表 MARA 并添加自定义字段
- 为字段创建 Domain 和 Data Element(建议命名遵循 ZYY_* 规则)
关键避坑指南
- 禁止直接修改标准表 :会导致系统升级时结构丢失,必须使用 Append Structure
- 版本兼容检查 :
- 使用 SPAM 检查增强点所属补丁级别
- 对比 DEV/QAS/PROD 系统的 SAPMV45A 版本
- 传输管理 :
- 增强项目与自定义对象需放在同一请求
- 按 DEV→QAS→PROD 顺序传输
延伸思考
当物料主数据变更需要触发 SD/PP 模块更新时,可考虑:
1. 在保存增强中调用 RFC 函数通知外围系统
2. 利用 BDC 录制标准事务实现数据同步
3. 通过 Output Management 配置跨模块消息
通过本次实践,我们既遵守了 SAP 标准开发规范,又满足了业务定制需求。建议后续可结合 BADI 实现更复杂的多条件校验场景。
正文完
