输入T-CODE: SNRO
输入Object名字点击“创建”出现以下界面
最后保存,中间会弹出确认按钮都直接yes就好了
以下代码用于测试该number range
TABLES: sscrfields.
*---------------------------------------------------------------------*
* define internal tables
* 定义内表
*
*---------------------------------------------------------------------*
data: begin of t_nriv occurs 0,
object like tnro-object, "范围对象
nrrangenr like nriv-nrrangenr, "区间编号
end of t_nriv.
data: w_nriv like t_nriv. "定义工作区
*--------------------------------------------------------------------*
* define variable
* 定义全局变量
*
*--------------------------------------------------------------------*
data: l_next(20) type c. "定义下一个值.
*--------------------------------------------------------------------*
* selection-screen
* 选择屏幕
*
*--------------------------------------------------------------------*
selection-screen begin of block blk with frame title text-001.
parameters: p_object like tnro-object obligatory, "范围对象
p_num like nriv-nrrangenr obligatory, "区间编号
p_next(20) type c. "下一个值
selection-screen end of block blk.
selection-screen function key 1. "设置选择屏幕的按钮,可以支持5个按钮,对应的功能码从FC01--FC05.
*selection-screen function key 2.
*--------------------------------------------------------------------*
* initialzation
* 初始化屏幕
*
*--------------------------------------------------------------------*
initialization.
sscrfields-functxt_01 = '下一个'. "这里设置key 1按钮文本也可以为图标
* sscrfields-functxt_02 = '上一个'.
*-------------------------------------------------------------------*
* at selection-screen
* 处理选择屏幕的按钮事件
*
*-------------------------------------------------------------------*
at selection-screen.
case sy-ucomm. "获得当前系统的功能码
when 'FC01'.
*perform frm_get_data.
perform frm_get_next.
p_next = l_next.
when 'ONLI'. "这个对应的是执行的功能码(F8)
endcase.
*--------------------------------------------------------------------*
* form frm_get_data
* 根据输入条件从表获取相关数据
*
*--------------------------------------------------------------------*
form frm_get_data.
* 把数据放到工作区w_nriv
select object
nrrangenr
into corresponding fields of w_nriv
from nriv
where object eq p_object
and nrrangenr eq p_num.
endselect.
if w_nriv is initial.
message '没有可查询的相关数据' type 'I'.
stop.
endif.
endform. "frm_get_data
*--------------------------------------------------------------------*
* form frm_get_next
* 获得当前的范围对象和区间编号对应的流水号
*
*--------------------------------------------------------------------*
form frm_get_next.
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 eq 0 .
* ****得到一个号码,
call function 'NUMBER_GET_NEXT '
exporting
nr_range_nr = p_num "这个就是维护的间隔号
object = p_object "这个就是流水号对象
importing
number = l_next "获得的流水号
* 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 = p_object
exceptions
object_not_found = 1
others = 2.
else .
raise num_range_error .
endif .
endform. "frm_get_next