SAP ABAP Table Control的制作
Table Control的制作
先建立一个有退出按钮的程序,进入屏幕编辑器,选中控制对象( ),并在屏幕上创建,如图7-12 所示。
建立的对象显示粉红色,表示属性未设置正确。输入名称属性后,表头会转为灰色。表
格的创建与常规编程软件不同,需要选中一个输入输出字段,然后在表身创建,如图7-13 所示。
输入名称后整个表格都转为灰色(表示已设置正确)。调整输入字段的其他属性,如图7-14 所示。
手工调整字段名称和内表对应的名称一致后,第一个字段建立完成,然后为该字段加上表头,制作方式和输入字段一样,选中一个文本字段,创建在该字段上方的表头,如图7-15所示。
接着创建航班号、起飞城市等信息,并添加垂直水平分格符,完成后如图 7-16 所示。
界面设计完成。
设计逻辑流程序:
*PBO显示屏幕前的处理
process before output.
MODULE status_0100.
*处理LOOP从内表读到表控制
LOOP WITH CONTROL tbl1.
MODULE filltbl1.
ENDLOOP.
process after input.
*处理LOOP从表控制更新内表
LOOP WITH CONTROL tbl1.
MODULE readtbl1.
ENDLOOP.
MODULE user_command_0100.
主程序:
REPORT ytest21.
DATA: ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
*定义内表,注意,两种写法一样
*DATA SP2 LIKE SPFLI OCCURS 0 WITH HEADER LINE.
DATA sp2 LIKE TABLE OF spfli WITH HEADER LINE.
*定义单结构记录
DATA sp1 TYPE spfli.
*增加内表数据
SELECT * INTO CORRESPONDING FIELDS OF TABLE sp2 FROM spfli.
*直接调用窗口
CALL SCREEN 100.
*定义表控制对象
CONTROLS tbl1 TYPE TABLEVIEW USING SCREEN 100.
*输出数据,看内表有无改变
LOOP AT sp2.
WRITE: / sp2-carrid,sp2-connid,sp2-countryfr,sp2-cityfrom.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS1'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'EXIT'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module FILL OUTPUT
*&---------------------------------------------------------------------*
* 逐行从内表填写表控制
*----------------------------------------------------------------------*
MODULE filltbl1 OUTPUT.
READ TABLE sp2 INTO sp1 INDEX tbl1-current_line.
ENDMODULE. " FILL OUTPUT
*&---------------------------------------------------------------------*
*& Module READ INPUT
*&---------------------------------------------------------------------*
* 逐行从内表控制更新内表
*----------------------------------------------------------------------*
MODULE readtbl1 INPUT.
MODIFY sp2 FROM sp1 INDEX tbl1-current_line.
ENDMODULE. " READ INPUT
程序输出结果如图7-17 所示。
调整前2 行数据,如图7-18 所示。
退出编辑屏幕,程序输出内表数据,屏幕显示数据已更改,如图7-19 所示。
上述表格控件是没有垂直滚动条的,原因是没有定义表格的记录数,因而在 PBO 中还
需要添加以下代码:
DATA nums TYPE i.
MODULE status_0100 OUTPUT.
SET PF-STATUS ‘status1’.
IF nums = 0.
DESCRIBE TABLE sp2 LINES nums.
tbl1-lines = nums.
ENDIF.
ENDMODULE.
7.1.1 建立程序
先建立程序,定义内表,屏幕有退出按钮,代码如下。
逻辑流程序:
*PBO 显示屏幕前的处理
process before output.
MODULE status_0100.
*PAI 用户输入后的处理
process after input.
MODULE user_command_0100.
主程序:
REPORT ytest020.
*功能码返回值
DATA:ok_code TYPE sy-ucomm,
save_ok LIKE ok_code.
*定义内表,注意,两种写法一样
*DATA SP1 LIKE SPFLI OCCURS 0 WITH HEADER LINE.
DATA sp1 LIKE TABLE OF spfli WITH HEADER LINE.
*增加内表数据
SELECT * INTO CORRESPONDING FIELDS OF TABLE sp1 FROM spfli.
*测试输出数据
*LOOP AT SP1.
* write: / sp1-carrid,sp1-cityfrom.
*ENDLOOP.
*直接调用窗口
CALL SCREEN 100.
*用户交互
MODULE user_command_0100 INPUT.
save_ok = ok_code.
CLEAR ok_code.
*退出按钮时退出程序
CASE save_ok.
WHEN ‘exit’.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
*定义状态条、包括菜单、工具条按钮、系统按钮等
MODULE status_0100 OUTPUT.
SET PF-STATUS ‘status1’.
ENDMODULE.