博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
abap number range
阅读量:7033 次
发布时间:2019-06-28

本文共 2553 字,大约阅读时间需要 8 分钟。

如有转载请注明出处:

1.sap numbe range在标准程序中使用

之前一直不明白会计凭证编号sap是怎么做到连续编号,还以为是简单的做个全局变量,虽然形式差不多,但是sap有专门的TCODE和方法,可以保证号码不重复且可以做到只在某一个区间。甚至每年都会重新编号,像会计凭证编号,当达到某一程度的时候还会提醒。

2.如何自己创建

TCODE:SNRO。可以自己创建。如图:

短文本和长文本用来说明这个编号范围对象,输入任意描述即可。 

子对象数据元素我们这里不填。这里需要说明一下,所谓子对象,多数指一个组织结构,比如公司代码、销售组织、工厂等,这样编号就在对应的每个组织下面独立编号,最典型的例子是财务凭证,每个公司代码下的财务凭证都是独立编号的(其对应的数据表 BKPF,也必定把公司代码做为一个键字段)。而我们这个调度单对应于销售订单,销售订单没有按照组织级别分别编号,因此相应的调度单也就不需要了。

到期年标记是指编号按年度归零,每当开始一个新年度时,相应的编号也需要从头开始,比如财务凭证和物料凭证都是这样(比如表BKPF 和MKPF,都把年度做为一个键字段) ,而我们的调度单不需要对应年度,因此这里也不打勾。

编号长度域就填创建的域,但是一定要先激活。指定这个编号范围对象 ZDIAODUDAN 的长度,我们定义域长度为 10,因此这个编号范围对象生成的编号长度也是 10 位。

无翻滚间隔是指如果编号达到最大,是否自动从头开始,勾上就不从头开始,而在获取编号的时候提示出错。我们这里应该打勾。

编号范围处理,属于翻译问题,实际就是编号范围的事务码,如果指定这个事务码,就可以不需要通过 SNUM 或者 SNRO 的主屏幕然后输入编号范围对象的名字来维护这个编号范围,而可以输入事务码直接进入它的号码范围维护屏幕。

警告百分比是指如果编号使用到一定比例,就发出系统警告,提示管理人员增大范围或者进行历史数据归档,避免编号全部用完后影响正常业务,这里我们填写 95,就是95%的时候提示。

 

主内存缓冲是指系统为了提高性能而预先取出一些编号放在应用服务器上,当程序取用编号时直接从应用服务器获取,而无需再读取数据库了。通常,如果对号码的连续性要求不高的情况下可以使用这种方式,而如果是财务凭证等要求连续的编号,则应该把主内存缓冲关闭,方法是通过菜单“编辑-设置缓存-无缓存”。

接着就可以在如图:

间隔中添加编号范围。

3.程序中如何使用

程序中我们也可以使用number range。使用三个函数即可。下面做以说明。

CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'

       EXPORTING
            object           = 'ZSDDNR'
       EXCEPTIONS
            foreign_lock     = 1
            object_not_found = 2
            system_failure   = 3
            OTHERS           = 4.
*  **如果号码范围存在
  if sy-subrc eq 0 .
*  ****得到一个号码,
      CALL FUNCTION 'NUMBER_GET_NEXT'
           EXPORTING
                nr_range_nr             = '01'
                object                  = 'ZSDDNR'
           IMPORTING
                number                  = L_SEQNO
*   quantity = quant
*   returncode = code
           EXCEPTIONS
                interval_not_found      = 1
                number_range_not_intern = 2
                object_not_found        = 3
                quantity_is_0           = 4
                quantity_is_not_1       = 5
                interval_overflow       = 6
                buffer_overflow         = 7
                OTHERS                  = 8.
*  ***将号码累加
      CALL FUNCTION 'NUMBER_RANGE_DEQUEUE'
           EXPORTING
                object           = 'ZSDDNR'
           EXCEPTIONS
                object_not_found = 1
                OTHERS           = 2.
  else .
    raise NUM_RANGE_ERROR .
  endif .

很容易理解,首先判断是否有这个number range,如果存在的话,就获得下个序号,最后一个函数我估计意思是释放这个全局变量的内存。’ZSDDNR’就是我们创建的number range。如此就可以像会计凭证编号那样每次都可以自动生成流水号了!流水号可以在自建表中用作主键,它的产生就靠上面的函数。

*******************************************************************************************************

Number Range 管理之并行缓冲:

常用的事务代码SNRO,SM56还有一些业务专用的号码管理,可以在SPRO中查找:

SNRO :Number Range 管理

一般的操作是维护号码范围。如RV_BELEG 是SD凭证编码管理。

并行缓冲:所为并行是指word process DIA的之间是并行获得的,如有8个instance ,每个instance 有40个WP,那号码段缓冲区表中会直接分配320*200个号码。 使用并行缓冲会提高并行处理的速度,如批量过账等。

数量号:一次分配占用的号码数量。

SM56: 缓冲区管理

SM56是管理一般编码范围的缓冲区,重置缓冲区,当每次重置时会浪费200个号,如上配置个数,一定要注意不适用并行缓冲。

哪并行缓冲区如何重置:

Note: 1244898 NK: Reorganization of local buffers for intervals

Report : NK_REORGANIZE

此报表有测试功能,可以先运行测试模式检查一下各WP的编码范围,如果是当个instance有问题也可以单独重置。

注意:并行缓冲重置会导致大量的号码段无用,慎用!

转载于:https://www.cnblogs.com/ruingy/p/3438949.html

你可能感兴趣的文章
SHELL脚本基础讲解
查看>>
PHP 数据库命令行的使用
查看>>
有赞公告设置
查看>>
win7系统开机遇到reboot and select proper boot device错误解决方法
查看>>
我的收藏
查看>>
pycharm 调试
查看>>
JAVA项目-日志服务配置
查看>>
检测来电
查看>>
交换机的基本原理与配置
查看>>
在Linux上创建磁盘阵列———RAID-5
查看>>
配置静态路由实现两个公司网路互联
查看>>
ShiroFilterFactoryBean源码及拦截原理深入分析
查看>>
boost mutex以及scoped_lock应用
查看>>
小鸡吃米
查看>>
FFmpeg AVFMT_NOFILE宏定义剖析
查看>>
Windows Server 2008 R2活动目录回收站
查看>>
能吃遍全世界的方便面,你也是人生赢家
查看>>
为什么使用LR11录制完,发现脚本每个页面都被录制了两遍?
查看>>
Fedora 删除旧内核
查看>>
浏览器静态资源的版本控制新思路.强制更新指定资源缓存.的探讨
查看>>