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
image

image

最终预览效果

image

posted @ 2026-07-22 14:38  虚拟过客之IT老男人  阅读(6)  评论(0)    收藏  举报