ABAP 获取流水单号(SNRO SAP自动编号)
**使用场景:**自建表增加数据的时候,需要获取一个唯一的有序的流水单号。
T-CODE: SNRO.
1.输入对象的名称,点击创建~
2.填写文本以及域
3.定制,填写后保存。(无缓冲:不跳号)
4.点击短文本上面的:间隔编辑按钮—>修改
5.填写起始编号与截至编号。
其中注意点:如果要其他client的起始编号和截至编号与这个client一致的话,需要点击:间隔—>传输,包入请求! 它不会给你自动包入请求中,这点需要注意。
二.程序中如何获取这流水编号呢?
源代码:
DATA: LV_ZPPXNY TYPE RSNUM.
DATA: nr TYPE inri-nrrangenr,
object TYPE inri-object.
nr = '1'. "间隔编辑里面起始编号前面的:号"
object = 'ZPPXNYL'. " 'ZPPXNYL' SNRO创建的对象名称"
CLEAR LV_ZPPXNY.
PERFORM FRM_GET_NUMBER USING nr object CHANGING LV_ZPPXNY.
FORM FRM_GET_NUMBER USING P_NR LIKE INRI-NRRANGENR
P_OBJECT LIKE INRI-OBJECT "编号范围对象名称 Add By Code_Tool"
CHANGING P_NUMBER.
"调用函数: Number range: Lock object Add By Code_Tool"
CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'
EXPORTING
OBJECT = P_OBJECT
EXCEPTIONS
FOREIGN_LOCK = 1
OBJECT_NOT_FOUND = 2
SYSTEM_FAILURE = 3
OTHERS = 4.
IF SY-SUBRC = 0.
"调用函数: NUmber range: Assigns next free number Add By Code_Tool"
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
NR_RANGE_NR = P_NR
OBJECT = P_OBJECT
QUANTITY = '1'
IMPORTING
NUMBER = P_NUMBER
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 E001(00) WITH '无法获取新的号码: ' P_OBJECT.
ENDIF.
"调用函数: Number range: Unlock object Add By Code_Tool
CALL FUNCTION 'NUMBER_RANGE_DEQUEUE'
EXPORTING
OBJECT = P_OBJECT
EXCEPTIONS
OBJECT_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDFORM.
上面源代码中的:LV_ZPPXNY 就获取的流水单号
其中还用到了锁/解锁 编号范围对象。
分享使我快乐!我是寒武青锋,如果你喜欢的话,请点个赞吧!
post SAP-Garson
原文链接:https://blog.csdn.net/lmf496891416/article/details/107965215文章来自于网络,如果侵犯了您的权益,请联系站长删除!