SAP 号码范围(number range)的使用

事物代码:SNRO

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

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

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

警告百分比
是指如果编号使用到一定比例,就发出系统警告,提示管理人员增大范围或者进行历史数据归档,避免编号全部用完后影响正常业务,这里我们填写 95,就是95%的时候提示。
主内存缓冲
是指系统为了提高性能而预先取出一些编号放在应用服务器上,当程序取用编号时直接从应用服务器获取,而无需再读取数据库了。通常,如果对号码的连续性要求不
高的情况下可以使用这种方式,而如果是财务凭证等要求连续的编号,则应该把主内存缓冲关闭,方法是通过菜单“编辑-设置缓存-无缓存”。

2.程序中如何使用

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

*&---SNRO取值编号
    clear : lv_nr1,lv_num1.
    lv_nr1 = '01'.
    call function 'NUMBER_RANGE_ENQUEUE'            
      exporting
        object           = 'ZFI016A1'
      exceptions
        foreign_lock     = 1
        object_not_found = 2
        system_failure   = 3
        others           = 4.
    if sy-subrc = 0.                    "如果号码范围存在
      call function 'NUMBER_GET_NEXT'   "将号码累加,获得下一个流水号
        exporting
          nr_range_nr             = lv_nr1
          object                  = 'ZFI016A1'
        importing
          number                  = lv_num1
        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.
      if sy-subrc <> 0.
        message id sy-msgid type sy-msgty number sy-msgno
           with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      else.
        call function 'NUMBER_RANGE_DEQUEUE'        
          exporting
            object           = 'ZFI016A1'
          exceptions
            object_not_found = 1
            others           = 2.
      endif.
    endif.

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值