在网上看了很多关于这个表格控制器的用法,感觉很多人分享的文章时编辑不太严谨,自己尝试时会出现很多错误,所以现在自己分享一个详细的关于屏幕表格控制器的用法。
1.建立程序和屏幕.
第一步,老生常谈用SE38建立程序,我这里取名为 ”Z_SCREEN_TEST1“。
然后建立屏幕,取名为 “0100”
如上图所示,然后再点击“格式”,进入如下图的屏幕编辑模式,在左侧栏拖一个表格控制器出来,然后点击下图圈红的ABAP字典,选择一个你本地的SAP透明表,拖到表格控制器里
然后选择除MANDT以外的栏位,生成如下屏幕。然后再设置各种参数,把表格控制器命名为“tabcol”,在这里就不详细说明使用屏幕的方法了,主要是介绍表格控制器的使用
之后再建立gui_status,我贴上我建立的status供参考。
到这里,第一个步骤就完成了,在这个步骤,主要是创建程序,在程序里创建屏幕,在屏幕中创建表格控制器,然后再按F6调出abab字典导入格式,之后再创建gui_status.
2.屏幕流逻辑和程序代码实现
流逻辑代码
PROCESS BEFORE OUTPUT.
MODULE status_0100.
*處理LOOP從內表讀到表控制
LOOP WITH CONTROL tabcol.
MODULE filltab1.
ENDLOOP.
*
PROCESS AFTER INPUT.
* 處理loop從表控制更新到內表
loop with control tabcol.
MODULE readtabl.
ENDLOOP.
MODULE USER_COMMAND_0100.
主程序代码:
REPORT z_screen_test1 .
TABLES: zlover.
DATA: ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
* 定義內表
DATA: tab LIKE TABLE OF zlover WITH HEADER LINE.
*調用窗口
CALL SCREEN 100.
*定義表控制對象
*&--------------------------------------------------------------------&*
*& 若要使用表控制器,則要在程序定義部分追加下面語句 &*
*& CONTROLS ctr TYPE TABLEVIEW USING SCREEN scr. &*
*& ctr: 表控制器的名字。 &*
*& scr: 使用表控制器的畫面編號。 &*
*&--------------------------------------------------------------------&*
CONTROLS tabcol TYPE TABLEVIEW USING SCREEN 100.
*&---------------------------------------------------------------------*
*& Module status_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
*使用GUI
SET PF-STATUS '0100_STATUS'.
* 將透明表數據賦值到內表
SELECT * INTO CORRESPONDING FIELDS OF TABLE tab FROM zlover.
*確認表控制器的數據條數,可生成滾動條
DESCRIBE TABLE tab LINES tabcol-lines.
ENDMODULE. " status_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module filltab1 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE filltab1 OUTPUT. "逐行把內表的數據寫到表控制器中
READ TABLE tab INTO zlover INDEX tabcol-current_line.
ENDMODULE. " filltab1 OUTPUT
*&---------------------------------------------------------------------*
*& Module readtabl INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE readtabl INPUT. "逐行從內表更新到透明表
MODIFY tab FROM zlover INDEX tabcol-current_line.
ENDMODULE. " readtabl INPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
效果图: