SAP S4Hana 物料编号区间配置 MMNR
| 项目 | 内容 |
|---|---|
| 功能 | 维护物料主数据的物料号编号范围 |
| 事务码 | MMNR |
| 配置对象 | 物料类型,例如 ROH 原材料、FERT 成品、HALB 半成品 |
| 核心作用 | 控制物料号由系统自动生成,还是由用户手工输入 |
| 常见入口 | MMNR 或 SPRO 配置路径 |
MMNR 不是用来创建具体物料号的事务码,而是用来维护“物料类型可以使用哪一段号码”。创建物料时,SAP 会先根据物料类型找到对应编号组,再判断物料号是内部自动生成,还是外部手工输入。
一、进入 MMNR 配置界面
| 方式 | 路径 |
|---|---|
| 事务码 | MMNR |
| IMG 路径 | SPRO → 后勤-常规 → 物料主数据 → 基本设置 → 物料类型 → 定义每个物料类型的号码范围 |

进入界面后,主要关注编号区间、范围状态和物料类型分组这几个对象。
二、界面按钮说明
MMNR 界面上常用的三个按钮,可以理解为:一个看状态,一个维护区间,一个调整当前编号。
1. 查看编号区间状态
第一个按钮用于查看已经配置好的编码区间状态,主要是只读查看。

2. 维护起始编号和截止编号
第二个按钮用于编辑编号区间的起始编号、截止编号,以及是否允许外部编号。
需要注意:一旦编号状态已经大于 0,起始编号通常就不能再随意修改。已经投入使用的编号区间,后续调整要特别谨慎。

3. 维护范围状态
第三个按钮用于维护范围状态,也就是当前编号。内部编号时,SAP 会根据当前编号继续往后生成新的物料号。

4. 查看配置概览
配置完成后,可以在概览中检查编号区间、外部编号标识,以及物料类型和编号组之间的关系。

三、配置步骤
1. 新建组并维护编号范围
先创建或选择一个编号组,然后为这个组维护号码范围。
编号组可以理解为“一套编号规则”。一个编号组可以分配给一个物料类型,也可以分配给多个物料类型。分到同一组的物料类型,会共用这套编号范围。

2. 将物料类型分配到组
进入更改组界面后,选择需要使用该编号规则的物料类型,再分配到对应组。
分配完成后,创建这些物料类型的物料主数据时,系统就会按照该组的编号范围执行。

四、字段说明
| 字段 | 说明 |
|---|---|
| 组 | 一套编号规则,可以分配给一个或多个物料类型 |
| 起始编号 | 允许使用的最小物料号 |
| 截至编号 | 允许使用的最大物料号 |
| 当前编号 | 内部编号时,SAP 当前已经发到哪个号码 |
| 外部 | 勾选后表示用户手工输入物料号;不勾选表示系统内部自动给号 |
五、内部编号配置示例
| 字段 | 示例 |
|---|---|
| 起始编号 | 10000000 |
| 截至编号 | 19999999 |
| 外部 | 不勾选 |
配置结果:创建物料时,物料号可以留空,由 SAP 自动生成,例如 10000001。
六、外部编号配置示例
| 字段 | 示例 |
|---|---|
| 起始编号 | A0000000 |
| 截至编号 | A9999999 |
| 外部 | 勾选 |
配置结果:创建物料时,用户需要手工输入物料号,例如 A0001234。SAP 会检查输入的物料号是否落在 A0000000 - A9999999 范围内。
七、内部编号缓冲机制与设置方法
内部编号不是每创建一个物料就实时去数据库取一次号码。为了减少数据库锁等待、提高并发性能,SAP 对很多编号范围对象启用了编号缓冲。
启用缓冲后,系统会一次性从编号范围中预留一批号码,放到应用服务器内存中。用户创建物料时,系统直接从这个内存缓冲里取号,而不是每次都访问编号范围表。
例如物料编号区间为:
61260101001 - 61991231001
如果缓冲数量是 10,系统第一次取号时,可能会直接预留:
61260101001 - 61260101010
这时在 MM01 创建物料时,界面上可能显示当前物料号是:
61260101005
但在 MMNR 里查看编号范围状态时,可能已经显示为:
61260101010
这不是错误。MM01 里的号码是当前这次创建实际拿到的号码;MMNR 里的范围状态表示系统已经提前预留到哪个号码。
1. 编号缓冲带来的结果
| 现象 | 说明 |
|---|---|
| 范围状态提前变大 | 系统提前预留了一批号码 |
| 中间出现跳号 | 取消创建、回滚、服务器重启或缓冲未用完都可能导致号码不连续 |
| 编号顺序看起来不完全递增 | 多台应用服务器可能分别持有不同号段 |
| 不同用户看到的号码进度不同 | 用户登录到不同应用服务器时,可能从不同缓冲段取号 |
| 不会产生重复号码 | 已经被某台应用服务器预留的号码,不会再分配给其他服务器 |
2. 多应用服务器下的取号逻辑
编号缓冲不是按用户分配,而是按应用服务器实例分配。
如果系统有多台应用服务器,可能出现下面这种情况:
| 应用服务器 | 预留号段 | 用户实际看到的情况 |
|---|---|---|
| 应用服务器 1 | 61260101001 - 61260101010 | 用户 A 可能还在用 005、006 |
| 应用服务器 2 | 61260101011 - 61260101020 | 用户 B 可能已经用到 011、012 |
| 应用服务器 3 | 61260101021 - 61260101030 | 用户 C 可能直接看到 021 以后的号码 |
所以业务上可能看到“某个用户已经创建到 20 以后,另一个用户还在 10 以内”。这属于 SAP 编号缓冲的正常行为,核心原则是保证号码唯一,不保证严格按时间连续递增。
3. 查看编号缓冲设置
物料号使用的编号范围对象是:
MATERIALNR
可以通过 SNRO 查看这个对象的缓冲设置。
| 步骤 | 操作 |
|---|---|
| 1 | 输入事务码 SNRO |
| 2 | 在对象中输入 MATERIALNR |
| 3 | 点击显示或更改 |
| 4 | 查看对象属性中的缓冲设置 |
| 5 | 重点看“缓冲类型”和“缓冲中的编号数” |
常见字段含义如下:
| 字段 | 说明 |
|---|---|
| 缓冲类型 | 控制编号是否缓冲,以及使用哪种缓冲方式 |
| 主内存缓冲 | 将一批号码预留到应用服务器内存中 |
| 缓冲中的编号数 | 每次预留多少个号码,例如 10 |
| 无缓冲 / 数量为 0 | 每次取号都直接访问编号范围表,编号更接近连续,但性能压力更大 |
4. 调整编号缓冲的方法
如果确实需要调整物料号的缓冲设置,可以在 SNRO 中维护编号范围对象 MATERIALNR 的属性。
| 步骤 | 操作 |
|---|---|
| 1 | 输入事务码 SNRO |
| 2 | 对象输入 MATERIALNR |
| 3 | 点击更改 |
| 4 | 进入对象属性或自定义页签 |
| 5 | 修改缓冲类型或缓冲中的编号数 |
| 6 | 保存并按系统提示记录传输请求 |
常见调整方式:
| 设置方式 | 效果 |
|---|---|
缓冲数量设为 10 | 每次预留 10 个号码,性能较好,但可能跳号和乱序 |
缓冲数量设为 1 | 顺序性更强,但取消或回滚时仍可能跳号 |
关闭缓冲或数量设为 0 | 编号更接近严格连续,但并发性能会下降 |
一般不建议在生产系统随意关闭 SAP 标准编号对象的缓冲。物料编号通常不是法定连续编号,重点是唯一、可追踪,而不是完全无跳号。如果业务只是看到编号跳号或范围状态提前变化,通常不需要修改缓冲设置。
如果只是想确认当前登录在哪台应用服务器,可以通过:
| 事务码 / 位置 | 用途 |
|---|---|
SM51 | 查看系统有几台应用服务器 |
SAP GUI 菜单 系统 → 状态 | 查看当前会话登录到哪台应用服务器 |
八、内部编号和外部编号同时存在
同一套物料编号规则中,可以同时维护内部编号区间和外部编号区间。
| 编号范围 | 外部 |
|---|---|
10000000 - 19999999 | 不勾选 |
A0000000 - A9999999 | 勾选 |
实际创建物料时,系统行为如下:
| 创建方式 | 系统行为 |
|---|---|
| 物料号留空 | SAP 自动生成内部编号 |
| 手工输入物料号 | SAP 检查编号是否落在允许的外部编号范围内 |
九、注意事项
| 注意点 | 说明 |
|---|---|
| 外部编号也要维护起始和截止 | 因为 SAP 需要校验手工输入的物料号范围 |
| 已经使用的编号区间不要随便删除 | 可能影响已有物料编号规则和后续创建逻辑 |
| 当前编号大于 0 后不要随意改起始编号 | 已经发号的区间,调整不当容易造成编号管理混乱 |
| 外部编号标识保存后不要频繁调整 | 通常应在上线前规划清楚,避免后期反复改规则 |
| 多个物料类型放在同一组 | 这些物料类型会共用同一套编号规则 |
| 内部编号可能出现跳号或乱序 | 这是编号缓冲造成的正常现象,不代表系统重复发号 |
| 不建议随意关闭编号缓冲 | 关闭后会增加编号范围表的锁等待,影响并发创建性能 |
一句话总结:MMNR 就是给物料类型分配物料号号码池,用来控制物料号是 SAP 自动生成,还是由用户手工输入;内部编号的范围状态可能因为缓冲提前变大,这是 SAP 为了提升性能而预留号码的正常机制。


