SAP ABAP 自定义流水号 编号范围

发布时间:2024年01月19日

前言

在开发中经常会遇到生成编号的需求(如接口报文ID,自建表数据主键等);为此,SAP提供了自动编号工具,能根用户需求设定并自动生成一组唯一的编号。

编号范围对象的创建

1.进入事务代码SNRO,创建一个编号范围对象。
在这里插入图片描述

编号长度域:表示生成出来的编号是什么数据类型
%警告:表示已产生的编号达到此百分比时给出警告
截至年份标志:表示按照年份重新获取编号(从范围的最小值重新开始)
无滚动:表示所有编号用完不会重新回到最小值开始,不勾选则表示重新从最小号开始编号
在这里插入图片描述

编号范围事务:可以指定一个事务码,通过执行此事务码可以进入该编号对象的维护页面
缓冲:主内存缓冲是指系统为了提高性能而预先取出一些编号放在应用服务器上,当程序取用编号时直接从应用服务器获取,而无需再读取数据库了。通常,如果对号码的连续性要求不高的情况下可以使用这种方式,而如果是财务凭证等要求连续的编号,为了防止跳号,则应该把主内存缓冲关闭,设置为无缓冲。
在这里插入图片描述

编号范围间隔的创建

点击间隔编辑。
在这里插入图片描述

维护编码范围的起始编号和截止编号即可。
image.png

编号范围的调用

在程序中通过函数 NUMBER_GET_NEXT 来获取编号对象所生成的流水码,每次调用都会产生一个新的编号

DATA: nextno TYPE char10.

CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'  "锁定要要维护的号码范围对象及其组和间隔
  EXPORTING
    object           = 'ZWEIGH_RUN' "事务代码snro 先创建一个流水号(char10)
  EXCEPTIONS
    foreign_lock     = 1
    object_not_found = 2
    system_failure   = 3
    OTHERS           = 4.

CALL FUNCTION 'NUMBER_GET_NEXT'
  EXPORTING
    nr_range_nr = '01'    "编码范围间隔的序号
    object      = 'ZWEIGH_RUN'  "编码范围对象的名称
  IMPORTING
    number      = nextno. "最后获得的流水号

CALL FUNCTION 'NUMBER_RANGE_DEQUEUE'   "解锁已维护的号码范围对象
  EXPORTING
    object           = 'ZWEIGH_RUN'
  EXCEPTIONS
    object_not_found = 1
    OTHERS           = 2.

同时,可根据业务要求按时间维度重置流水号。

SELECT SINGLE ztyayno,zbarcode,zcdate INTO @DATA(ls_zcdate) FROM ztbc_003 WHERE zcdate = @sy-datum.
  IF sy-subrc <> 0.
    "按天重置流水号
    CALL FUNCTION 'NUMBER_RANGE_INTERVAL_INIT'
      EXPORTING
        object            = 'ZWEIGH_RUN'
*       SUBOBJECT         = ' '
*       INTERVALS         =
        client            = sy-mandt
*       COMMIT            =
      EXCEPTIONS
        no_interval_found = 1
        object_not_found  = 2
        OTHERS            = 3.
  ENDIF.
文章来源:https://blog.csdn.net/zkl519/article/details/135688508
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。