[SAP ABAP] SELECTION-SCREEN

SELECTION-SCREEN用来创建屏幕的框架结构
REPORT z437_test_2024.

TABLES: mara, zdbt_sch_437.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. " Title1
PARAMETERS:
  p_1 DEFAULT 'A',
  p_2 TYPE char10.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN SKIP 1.  " 设置1行空格

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002. " Title2
SELECT-OPTIONS:
  s_1 FOR mara-matnr,
  s_2 FOR zdbt_sch_437-schid OBLIGATORY. " 设置为必填字段
SELECTION-SCREEN END OF BLOCK b2.

在程序中双击TEXT-001 和 TEXT-002,分别在文本符号页签填写Title1和Title2,激活并进行保存

执行程序,输出结果:

综合练习

学校表(ZDBT_SCH_437)
学生表(ZDBT_STU_437)
班级表(ZDBT_CLASS_437)

实现如下报表程序:

① 默认单选按钮为学生,选择屏幕如下

当用户点击查询时候,输出的查询结果仅包含学生表信息

② 当选择学校按钮时,选择屏幕如下,多一个学校ID的选择条件

当用户点击查询时候,输出的查询结果包含学生表以及学校表的信息 

③ 当选择班级按钮时,选择屏幕如下,多一个班级ID的选择条件

当用户点击查询时候,输出的查询结果包含学生表,学校表以及班级表的信息

程序代码如下

REPORT z437_test_2024.

TABLES: zdbt_stu_437.

* 定义选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.

  SELECT-OPTIONS: s_sex FOR zdbt_stu_437-sex NO INTERVALS NO-EXTENSION,  " 性别
                  s_id FOR zdbt_stu_437-id,                              " 学号
                  s_schid FOR zdbt_stu_437-schid MODIF ID m1,            " 学校ID
                  s_claid FOR zdbt_stu_437-classid MODIF ID m2.          " 班级ID
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN SKIP 1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
  PARAMETERS: p_1 RADIOBUTTON GROUP r1 DEFAULT 'X' USER-COMMAND u1,
              p_2 RADIOBUTTON GROUP r1,
              p_3 RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF BLOCK b2.

* 自定义类型
TYPES: BEGIN OF ty_student1.
  INCLUDE TYPE zdbt_stu_437.
TYPES: schname TYPE zdbt_sch_437-schname,
END OF ty_student1.

TYPES: BEGIN OF ty_student2.
  INCLUDE TYPE zdbt_stu_437.
TYPES: schname TYPE zdbt_sch_437-schname,
       classname TYPE zdbt_class_437-classname,
       classteach TYPE zdbt_class_437-classteach,
END OF ty_student2.

* 定义内表
DATA: lt_student1 TYPE STANDARD TABLE OF zdbt_stu_437.
DATA: lt_student2 TYPE STANDARD TABLE OF ty_student1.
DATA: lt_student3 TYPE STANDARD TABLE OF ty_student2.


* 选择屏幕输出前触发
AT SELECTION-SCREEN OUTPUT.
  IF p_1 = abap_true.
    LOOP AT SCREEN.
      IF screen-group1 = 'M1' OR screen-group1 = 'M2'.
          screen-active = 0.  " 不可见
      ENDIF.
      MODIFY SCREEN.
    ENDLOOP.
  ENDIF.

  IF p_2 = abap_true.
    LOOP AT SCREEN.
      IF screen-group1 = 'M2'.
          screen-active = 0.  " 不可见
      ENDIF.
      MODIFY SCREEN.
    ENDLOOP.
  ENDIF.


* 点击执行后触发(写OPEN SQL)
START-OF-SELECTION.
  IF p_1 = abap_true.
    SELECT *
      FROM zdbt_stu_437
      INTO TABLE lt_student1
      WHERE sex IN s_sex
      AND id IN s_id.
  ENDIF.

  IF p_2 = abap_true.
    SELECT *
      INTO CORRESPONDING FIELDS OF TABLE lt_student2
      FROM zdbt_stu_437 AS a
      INNER JOIN zdbt_sch_437 AS b
      ON a~schid = b~schid
      WHERE sex IN s_sex
      AND id IN s_id
      AND a~schid IN s_schid.
  ENDIF.

  IF p_3 = abap_true.
    SELECT *
      INTO CORRESPONDING FIELDS OF TABLE lt_student3
      FROM zdbt_stu_437 AS a
      INNER JOIN zdbt_sch_437 AS b
      ON a~schid = b~schid
      INNER JOIN zdbt_class_437 AS c
      ON a~classid = c~classid
      WHERE sex IN s_sex
      AND id IN s_id
      AND a~schid IN s_schid
      AND a~classid IN s_claid.
  ENDIF.


* 展示数据
END-OF-SELECTION.
  IF sy-subrc = 0.
    IF p_1 = abap_true.
       cl_demo_output=>display( lt_student1 ).
    ENDIF.

    IF p_2 = abap_true.
       cl_demo_output=>display( lt_student2 ).
    ENDIF.

    IF p_3 = abap_true.
       cl_demo_output=>display( lt_student3 ).
    ENDIF.
  ENDIF.

在选择屏幕中的输入值有变化时,执行AT-SELECTION-SCREEN事件

如果选择屏幕的字段检查都通过,则执行START-OF-SELECTION事件,从数据库中读取数据

调用END-OF-SELECTION事件,在查询数据库结束后显示数据

控制选择屏幕的动态变化涉及到 MODIF ID USER-COMMAND

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值