SAP操作手册之 号码范围对象
一
前言
编号范围对象(NUMBER RANGE)是SAP ERP 软件中的一个重要概念. 主要用来获取流水号. 在标准功能及自开发功能中大量使用.系统中的几乎所有对象的号码都是通过编号范围对象获取的.
二
编号范围对象的创建
事务代码SNRO 用于创建编号范围对象.
![](https://pic2.zhimg.com/80/v2-23889ad768faca8487e3925ff668414d_720w.jpg)
三
编号范围对象的配置
创建好的编号范围对象需要在不同的集团维护号码范围.该维护结果会记录到表NRIV中. 如果碰到大量维护的情况, 也可以用SE16N直接编辑表NRIV.
![](https://pic4.zhimg.com/80/v2-9ee29417fbdcaf0c21b75f7293f3240f_720w.jpg)
![](https://pic2.zhimg.com/80/v2-178cf9b7cb9aa9cdacfc2336d1311349_720w.jpg)
四
编号获取
创建好的号码对象可以调用函数
NUMBER_GET_NEXT 获取号码对象的下一个号码.
![](https://pic3.zhimg.com/80/v2-21cfeba8138a9119383d0474ab543712_720w.jpg)
五
编号范围的缓存
创建编号范围对象时, 按需要设置一个合理的缓冲数量. 这个缓冲设置对系统性能影响至关重要.
不同的缓冲类型对系统的影响不太一样, 感兴趣的朋友可以通过F1帮助了解缓冲类型的区别. 一般设置主内存缓存就行了.
![](https://pic1.zhimg.com/80/v2-430bfb6e93f6e673a5c9256c6db993d4_720w.jpg)
六
号码缓冲的检查
SM56 检查number range 缓冲情况
然后检查一下表TNRO 看看NUMBER RANGE 对象是否都有BUFFER
可以通过ST02 菜单 查看号码缓存的情况. (图一)
SM56中 条目的最大数量是允许缓存的号码对象的个数,条目的当前数量是已经缓存了的号码对象的个数 (图二)
![](https://pic2.zhimg.com/80/v2-c5a12eb5909212bd306f569d3b372411_720w.jpg)
图一
![](https://pic1.zhimg.com/80/v2-7a2ed0b4a1e4f03336413a6c131189cc_720w.jpg)
图二
七
编号范围缓存对性能的影响
当大量处理数据需要不断的获取新的号码时,需随时观察SM50/SM66. 如果进程监控中出现大量等待 NRIV的情况. 则说明号码范围缓存不足影响了系统性能.解决方法如下:
01
查找影响性能的号码范围
使用事务代码SM50或SM66查看正在访问表NRIV的进程,双击该进程能看到使用的号码范围对象明细(这个细节无法截图体现)
找到大量进程使用的号码范围对象 比如 KALK
如果出现进程访问NRIV导致了数据库死锁. 就需要强制终止死锁的进程.
详见链接无峰,公众号:ABAP 技巧与实战SAP小技巧 终止进程
02
检查号码对象是否维护了缓存
![](https://pic1.zhimg.com/80/v2-f1171cbb0e9668360cce90d6539a85a8_720w.jpg)
03
检查号码对象是否成功缓存
执行事物代码ST02检查号码范围是否成功的缓存了.
![](https://pic2.zhimg.com/80/v2-c5a12eb5909212bd306f569d3b372411_720w.jpg)
如果ST02中有缓存. 则考虑加大缓存数改善性能
04
重置缓存
如果ST02中没有该对象的缓存. 执行后面的步骤重置缓存
SM56 先重置特定对象的缓存
![](https://pic1.zhimg.com/80/v2-5d9e2753b8302afa9159f6a742b81fb4_720w.jpg)
![](https://pic3.zhimg.com/80/v2-13b35446ba7ef338d8268d89469a47f2_720w.jpg)
05
检查重置结果
重置后. 执行SE37 获取一下该对象的号码
然后再检查ST02中的缓存
(示例: 对于自定义列表的程序ZLIST_PARA_N ,因为每个商品都要快速获取大量获取KALK的号码. 所以可以把这个号码范围设置为最大 9千万. 期初列表结束后再调整到合理的范畴 门店数*并发进程数)
KLAK设置成主内存缓存时.
![](https://pic1.zhimg.com/80/v2-819f88fa3781afb1f9dfb3aba7c79afc_720w.jpg)
貌似每个服务器也是单独缓存的. 因为不同的服务器进入ST02看到的缓存号码从 缓存号码到 的内容不一致(如下图, 可以看到每个服务器都缓存了9千万的数据
![](https://pic2.zhimg.com/80/v2-e7f89b16c9e8f78de9e4c1266c9e5215_720w.jpg)
![](https://pic2.zhimg.com/80/v2-fd5c1fd38295367615aa33234a962ea1_720w.jpg)
八
总结
号码范围是SAP中的很重要的一个概念. 项目上线前,一般需要针对常用单据的编号范围对象设置一个合适的缓存数量. 以免大量业务处理同时获取新的号码产生大量的NRIV表的写入,导致系统瓶颈, 从而影响整个系统的性能.
设置号码范围缓存可能出现以下情况
-
系统中产生的单号出现跳号的现象
-
单号顺序与创建时间戳顺序不一致
一般情况下,客户可能不希望财务凭证号码出现上述情况.这就需要对财务凭证的号码范围对象取消缓存,并接受由此导致的系统性能下降.