创建和测试number range过程

来源:互联网 发布:网络扫描工具有哪些 编辑:程序博客网 时间:2024/05/16 04:31

 

输入T-CODE: SNRO

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 .
*  ****得到一个号码,
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

原创粉丝点击