abap screen屏幕 table control 搜索显示公司代码表
se38 先创建代码名称 ZPCYSCREEN9800
*&---------------------------------------------------------------------*
*& Report ZPCYSCREEN9800
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZPCYSCREEN9800.
*&---------------------------------------------------------------------*
*& 程序 Z_TABLE_CONTROL_T001
*&---------------------------------------------------------------------*
* 定义T001表的工作区,用于在屏幕和程序间传递单行数据
TABLES: T001.
DATA: company TYPE string.
* 定义与T001表结构相同的内表,用于存放所有公司代码数据
DATA: GT_T001 TYPE STANDARD TABLE OF T001, " 无表头行的内表
GS_T001 TYPE T001. " 单独的工作区
* 定义Table Control的控制结构(名称TC_T001必须与屏幕上的控件名一致)
* 为内表定义表头行(用于向导生成的代码),
* 如果你使用的是向导生成,这一步通常会自动创建。
* DATA: GT_T001 LIKE STANDARD TABLE OF T001 WITH HEADER LINE.
*&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_T002' ITSELF
CONTROLS: TC_T002 TYPE TABLEVIEW USING SCREEN 9800.
*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_T002'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TC_T002_CHANGE_TC_ATTR OUTPUT.
DESCRIBE TABLE GT_T001 LINES TC_T002-lines.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'SCREEN_100'. "* 设置GUI状态,需提前创建
SET TITLEBAR 'TITLE_100'. "* 设置屏幕标题
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module TC_T001_GET_LINES OUTPUT
*&---------------------------------------------------------------------*
MODULE TC_T002_GET_LINES OUTPUT.
" 此Module由向导自动生成,用于控制Table Control的行数
" 核心作用是计算内表行数并赋值给控制结构
TC_T002-LINES = SY-LOOPC.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module TC_T001_MODIFY INPUT
*&---------------------------------------------------------------------*
MODULE TC_T002_MODIFY INPUT.
" 此Module用于将用户在屏幕上修改的数据更新到内表中
" 向导会自动生成将屏幕字段值移动到内表对应行的代码
" 示例代码逻辑:
MODIFY GT_T001 FROM GS_T001 INDEX TC_T002-CURRENT_LINE.
" 注意:GS_T001在这里已包含用户输入的最新值
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
MODULE USER_COMMAND_9800 INPUT.
CASE SY-UCOMM.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
LEAVE TO SCREEN 0. " 返回上一屏幕或退出程序
WHEN 'SAVE'.
PERFORM SAVE_DATA. " 执行保存数据的子程序
MESSAGE '数据已保存' TYPE 'S'.
WHEN 'SEARCH'.
DATA ivalue TYPE c LENGTH 100.
ivalue = |%{ company }%| .
SELECT * FROM T001 INTO TABLE GT_T001 WHERE BUTXT LIKE ivalue.
"MESSAGE ivalue TYPE 'I'.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form SAVE_DATA
*&---------------------------------------------------------------------*
FORM SAVE_DATA .
" 在此处编写将内表GT_T001的数据更新到数据库表T001的逻辑
" 注意:这是一个示例,实际生产代码需要严谨的错误处理
LOOP AT GT_T001 INTO GS_T001.
MODIFY T001 FROM GS_T001.
IF SY-SUBRC <> 0.
" 处理修改失败的情况
ENDIF.
ENDLOOP.
ENDFORM.
START-OF-SELECTION.
" 从数据库表T001中读取所有公司代码数据到内表GT_T001
SELECT * FROM T001 INTO TABLE GT_T001.
IF SY-SUBRC <> 0.
MESSAGE '未找到任何公司代码数据' TYPE 'I'.
ENDIF.
" 调用屏幕0100
CALL SCREEN 9800.
然后se51创建屏幕,拖出 table control


最终预览效果

浙公网安备 33010602011771号