【SAP Abap】X-DOC:SNRO - ABAP流水号应用

1、定义表(字段域)

在这里插入图片描述
在这里插入图片描述

2、定义流水号

Tcode: SNRO/SNUM,
根据以上创建的字段域 YDSNRO,创建对象 YSNRO,并定义流水号范围
在这里插入图片描述
编号长度域:就填创建的域,但是一定要先激活。

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

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

编号范围事务:如果指定这个事务码,就可以不需要通过 SNRO/SNUM 的主屏幕然后输入编号范围对象的名字来维护这个编号范围,而可以输入事务码直接进入它的号码范围维护屏幕。

主内存缓冲
是指系统为了提高性能而预先取出一些编号放在应用服务器上,当程序取用编号时直接从应用服务器获取,而无需再读取数据库了。
通常,如果对号码的连续性要求不高的情况下可以使用这种方式,而如果是财务凭证等要求连续的编号,则应该把主内存缓冲关闭。
可以在取号时,设置参数 IGNORE_BUFFER = ‘X’ ,来防止跳号,设成’X‘就不会跳号了。

号码范围传输:一般编码都是在生产机中独立设置的,若需要传输本次编号范围的维护,需要在初始菜单中执行“范围”|“传输”命令,通过手工操作来生成传输请求号码。

3、使用流水号

在程序中使用流水号,需要用到以下三个函数

FORM get_no CHANGING p_no.
  CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'
    EXPORTING
      object           = 'YSNRO'
    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             = '01'
        object                  = 'YSNRO'
        ignore_buffer           = 'X'
      IMPORTING
        number                  = p_no
      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           = 'YSNRO'
        EXCEPTIONS
          object_not_found = 1
          OTHERS           = 2.
    ENDIF.
  ENDIF.
ENDFORM.

4、测试程序

REPORT yz_demo_xlevon_snro.

PERFORM add_data.
PERFORM add_data.
PERFORM add_data.
COMMIT WORK.
SELECT * FROM ytxlevon_snro INTO TABLE @DATA(lt_xlevon).
cl_demo_output=>display( lt_xlevon ).

* 增加表记录
FORM add_data.
  DATA: ls_xlevon TYPE ytxlevon_snro.
  DATA: lv_no TYPE ytxlevon_snro-ysnro.
  PERFORM get_no CHANGING lv_no.
  ls_xlevon-ysnro = lv_no.
  MODIFY ytxlevon_snro FROM ls_xlevon.
ENDFORM.
...

在这里插入图片描述

原创文章,转载请注明来源-X档案

猜你喜欢

转载自blog.csdn.net/XLevon/article/details/130633386