表控制的创建
表控制经常用到
系统提供了向导自动创建和手动创建;
向导创建的方法很简单:
1、只需要在程序中定义好你的内表,当然这是用在表控制是引用内表的时候才定义内表的若是数据字典表那就不需要定义内表了。
2、添加表控制向导对象元素根据向导操作就ok了。
大部分情况下我们是用向导做的,但是作为开发者我们必须也会手动创建。
手动创建表控制步骤:
1、新建屏幕添加按钮和手动创建表控制的对象元素,设置属性,注意这边设置的时候顺便设置一下分隔符是垂直和水平线。
2、表控制创建的时候,要手动添加输入输出元素,和文本字段元素,一个字段设置一个。
3、代码部分:实例如下:
逻辑流设计:
PROCESS BEFORE OUTPUT.
MODULE status_0100.
*处理loop从内表读到表控制
LOOP WITH CONTROL tbl1.
MODULE filltabl1.
ENDLOOP.
PROCESS AFTER INPUT.
MODULE cancel AT EXIT-COMMAND.
MODULE user_command_0100.
*处理loop从表控制更新到内表
LOOP WITH CONTROL tbl1.
MODULE readtbl1.
ENDLOOP.
主程序部分
REPORT ytest024.
DATA:ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
*定义内表
DATA sp2 LIKE spfli OCCURS 0 WITH HEADER LINE.
*定义单条结构记录
DATA sp1 TYPE spfli.
*增加内表数据
SELECT * INTO CORRESPONDING FIELDS OF TABLE sp2 FROM spfli.
*直接调用窗口
CALL SCREEN 100.
*输出数据看内表有无改变
LOOP AT sp2.
WRITE: / sp2-carrid,sp2-connid,sp1-countryfr,sp1-cityfrom.
ENDLOOP.
*----------------------------------------------------------------------*
* MODULE cancel INPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE cancel INPUT.
LEAVE PROGRAM.
ENDMODULE. " CANCEL INPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
save_ok = ok_code.
CLEAR ok_code.
IF save_ok = 'EXIT'.
LEAVE TO SCREEN 0.
ENDIF.
ENDMODULE. " USER_COMMAND_0100 INPUT
*定义表控制对象
CONTROLS tbl1 TYPE TABLEVIEW USING SCREEN 100.
*逐行从内表填写表控制
MODULE filltabl1 OUTPUT.
READ TABLE sp2 INTO sp1 INDEX tbl1-current_line.
ENDMODULE. " FILLTABL1 OUTPUT
*逐行从表控制更新内表
MODULE readtbl1 INPUT.
MODIFY sp2 FROM sp1 INDEX tbl1-current_line.
ENDMODULE.