流水号的产生:
  在ABAP开发中,很多地方都需要按照自己的规则生成流水号,把这些流水号保存进透明表,作为唯一标示。

一. 系统中设定流水号

使用T-Code SNRO来创建一个流水号标识对象。

输入Object Name: Z_LSH,然后单击创建。

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

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

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

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

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

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

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

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

接着就可以在如图:

如上图添加编号范围。

二.程序中如何使用

程序中我们使用三个函数即可。

CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'
       EXPORTING
            object           = 'Z_LSH'
       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             = '00'
                object                  = 'Z_LSH'
           IMPORTING
                number                  = L_LSH 
*   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           = 'Z_LSH'
           EXCEPTIONS
                object_not_found = 1
                OTHERS           = 2.
  else .
    raise NUM_RANGE_ERROR .
  endif .

首先判断是否有这个number range,如果存在的话,就获得下个序号.

最新文章

  1. SQL速记
  2. Spring3.0 demo (注解自动注入)
  3. ops中set_sysclk set_clkdiv set_pll详解
  4. 第4章 sed命令
  5. HDU4864:Task(贪心)
  6. Computer Science Theory for the Information Age-3: 高维空间中的高斯分布和随机投影
  7. windows系统中eclipse C c++开发环境的搭建
  8. SQLite中如何用api操作BLOB类型的字段
  9. 收缩SQL Server日志不是那么简单
  10. ACdream 1728 SJY's First Task
  11. 环信 之 iOS 客户端集成四:集成UI 之 会话列表
  12. python入门(十三):面向对象(继承、重写、公有、私有)
  13. 微信小程序中的app.js-清除缓存
  14. JavaScript(JS)之Javascript对象DOM之增删改查(四)
  15. mysql-5.7.23-winx64.zip安装教程
  16. 如何判断ACCESS数据库有无密码
  17. 【转】scapy 构造以太网注入帧
  18. flask 中文编码解码
  19. Java精选笔记_多线程(创建、生命周期及状态转换、调度、同步、通信)
  20. BusyBox ifup udhcpc后台运行

热门文章

  1. leetcode Sum Root to Leaf Numbers(所有路径之和)
  2. Windows 编程之 对话框总结
  3. ASP.NET - 在线编辑器(KindEditor)
  4. Xamainr 地图之webview初探
  5. D7升级时候发现许多System函数和网络函数只有Byte版本的,需要注意
  6. <ctype.h> C语言标准库
  7. UVa 11233 - Deli Deli
  8. windows程序员进阶系列:《软件调试》之Win32堆的调试支持
  9. No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7 armv7s)
  10. [半原创]指纹识别+谷歌图片识别技术之C++代码