at selection-screen的用法

本文深入探讨了ABAP ATSELECTION-SCREEN中的关键事件响应和输出处理机制,包括如何使用这些事件进行选择屏幕的交互式操作、验证和屏幕字段的动态修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AT SELECTION-SCREEN
是PAI处理,选择屏幕显示之后,用来响应回车,F8,F1,F4等事件
(1).选择屏幕事件,此处声明的变量是局部变量。
(2).check sy-ucomm 判断用户命令。
(3).在这个事件响应中,可以对屏幕字段进行有效性检验等,但无法修改选择屏幕。
所以分为以下几个方面:
1. ON field :在PARAMETER变化时触发的事件,对于选择屏幕某字段输入的PAI事件,当该字段的值被传递给程序时被触发,可以应用于改字段本身的正确性检查,如可系统提示错误,则可以在该字段中重新输入,此时其他元素呈灰色,不接受输入
2. ON END OF sel :SELECT-OPTION触发的事件,用于整个选择表输入结束后各行的检查
3. .ON VALUE-REQUEST FOR psel_low_high :当光标位于某屏幕字段时,选择的帮助(F4)
4. .ON HELP-REQUEST FOR psel_low_high :当光标位于某屏幕字段时,选择的帮助(F1)
5. .ON RADIOBUTTON GROUP radi :单选按钮事件,必须进行整体输入检查
6. .ON BLOCK block :框架的触发事件

AT SELECTION-SCREEN OUTPUT :PBO处理,在选择屏幕显示之前就被调用;响应屏幕上的事件,用户回车或F8后也被调用;通过modify screen可以修改选择屏幕字段。

AT SELECTION-SCREEN ON S_EQUI.
  CHECK SY-UCOMM = 'ONLI'.”F8
  IF S_EQUI IS INITIAL.
    MESSAGE mess TYPE 'E'.
  ENDIF.

AT SELECTION-SCREEN OUTPUT.
IF SCREEN-NAME = 'KOSTL_TX' .”成本中心描述


IF S_KOSTL-LOW IS NOT INITIAL.
    CALL FUNCTION 'ZIP_GET_KOSTL_NM' ”通过成本中心S_KOSTL取得成本中心描述L_KOSTL
      EXPORTING
        I_KOSTL = S_KOSTL-LOW
      IMPORTING
        E_GTEXT = L_KOSTL.
    KOSTL_TX = L_KOSTL.”修改屏幕字段成本中心描述
  ELSE.
    KOSTL_TX = SPACE.
  ENDIF.
ENDIF.
MODIFY SCREEN.

<think>嗯,用户给了一段ABAP代码,看起来是SAP报表程序的结构。他们希望优化这段代码并加上注释。首先,我需要仔细阅读这段代码,理解各个部分的功能。 用户提供的代码以REPORT ZQT开头,然后包含了几个INCLUDE文件,比如YPPR074_TOP、SCREEN、FROM、CLASS。这些INCLUDE通常用来分割程序的不同部分,比如数据定义、屏幕元素、表单逻辑和类定义。接下来是DATA语句声明了functxt变量,类型为smp_dyntxt。然后是INITIALIZATION、AT SELECTION-SCREEN等事件块,以及一些PERFORM语句调用子例程。 用户可能希望优化代码结构,添加注释,使代码更易读和符合ABAP最佳实践。首先,检查代码是否有冗余部分,比如不必要的空行或重复的注释。然后,考虑将INCLUDE文件名改为更清晰的名称,例如将YPPR074_TOP改为ZINCLUDE_TOP,这样更符合命名规范。 另外,代码中的事件块如INITIALIZATION、AT SELECTION-SCREEN等,虽然已有部分注释,但可以进一步用中文详细说明每个事件的作用和执行时机。例如,INITIALIZATION在程序启动时初始化数据,AT SELECTION-SCREEN在屏幕显示前处理输入验证等。 PERFORM调用的子例程名称如frm_ready_report_cx、frm_pre_fieldcat等,可能需要更明确的命名,例如使用动词开头,如prepare_report_data、build_field_catalog等,这样更直观。同时,在注释中解释每个子例程的具体功能,帮助其他开发者理解。 在代码结构上,确保每个事件块之间有适当的空行分隔,注释对齐,增加可读性。此外,检查是否有可以合并或优化的步骤,例如在START-OF-SELECTION中处理数据准备,END-OF-SELECTION处理ALV显示的设置,这些部分是否逻辑清晰。 还需要注意ABAP的编码规范,比如变量命名使用有意义的前缀,避免缩写,使用英文或一致的命名方式。虽然用户要求用中文注释,但变量和子例程名最好保持英文,符合SAP标准。 最后,添加文件头的注释,说明程序名称、作者、创建日期、功能描述等,方便后续维护。同时,在每个INCLUDE文件前加上注释,说明其包含的内容,如全局变量定义、屏幕元素、子例程、类定义等。 可能用户没有提到但需要注意的点包括:检查INCLUDE文件是否存在,确保程序没有语法错误;确认所有子例程在对应的INCLUDE中有实现;ALV显示部分是否符合最新的SAP UI标准;是否有权限检查或异常处理机制需要补充。 总结下来,优化方向包括代码结构整理、命名规范、注释补充、符合ABAP最佳实践,以及确保程序功能正确性和可维护性。</think>以下是对代码的优化及详细注释建议: ```abap *&---------------------------------------------------------------------* *& 程序名称 : ZQT * *& 作者 : [您的姓名] * *& 创建日期 : [日期] * *& 描述 : 自定义报表程序,用于展示ALV网格数据 * *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& 包含文件(建议按功能拆分) * *&---------------------------------------------------------------------* INCLUDE ZINCLUDE_TOP. " 全局变量、结构、表定义 INCLUDE ZINCLUDE_SCREEN. " 选择屏幕定义 INCLUDE ZINCLUDE_FORM. " 子例程(Form)定义 INCLUDE ZINCLUDE_CLASS. " 类和方法定义 *&---------------------------------------------------------------------* *& 全局数据定义 * *&---------------------------------------------------------------------* DATA: functxt TYPE smp_dyntxt. " 用于功能代码文本的存储 *&---------------------------------------------------------------------* *& 初始化事件(程序启动时执行) * *&---------------------------------------------------------------------* INITIALIZATION. PERFORM init_default_values. " 初始化默认值 *&---------------------------------------------------------------------* *& 选择屏幕处理事件(屏幕显示前执行) * *&---------------------------------------------------------------------* AT SELECTION-SCREEN. PERFORM validate_input. " 输入参数校验 *&---------------------------------------------------------------------* *& 主数据处理事件(选择屏幕确认后执行) * *&---------------------------------------------------------------------* START-OF-SELECTION. PERFORM get_data_from_db; " 从数据库获取数据 PERFORM process_business_logic; " 执行业务逻辑处理 *&---------------------------------------------------------------------* *& 数据展示准备事件(数据处理完成后执行) * *&---------------------------------------------------------------------* END-OF-SELECTION. PERFORM build_header USING gt_list_top_of_page[]; " 构建报表抬头 PERFORM prepare_fieldcat CHANGING gt_fieldcat[]; " 准备字段目录 PERFORM setup_alv_layout CHANGING gs_layout; " 设置ALV布局 PERFORM register_events CHANGING gt_events[]; " 注册事件处理 PERFORM display_alv_report; " 展示ALV报表 *&---------------------------------------------------------------------* *& 页面抬头输出事件(每页顶部显示) * *&---------------------------------------------------------------------* TOP-OF-PAGE. PERFORM print_page_header; " 输出页眉信息 *&---------------------------------------------------------------------* *& 页面结尾输出事件(每页底部显示) * *&---------------------------------------------------------------------* END-OF-PAGE. PERFORM print_page_footer; " 输出页脚信息 ``` 优化建议说明: 1. 命名规范优化: - 将 `YPPR074_*` 系列包含文件重命名为更有意义的名称(如示例中的`ZINCLUDE_*`) - 子例程命名采用动词+名词结构(如`get_data_from_db`) 2. 事件处理优化: - 每个事件块添加中文注释说明执行时机 - 拆分数据处理逻辑到独立子例程 - 增加输入参数校验环节 3. ALV显示优化: - 明确分离布局设置、字段目录、事件注册等步骤 - 使用更语义化的子例程名称 4. 注释规范: - 添加程序头文件说明 - 关键步骤添加功能注释 - 子例程参数添加USING/CHANGING说明 5. 代码结构优化: - 使用分号分隔同一行的多个PERFORM调用 - 保持一致的缩进格式 - 移除冗余空行 建议补充的增强功能: 1. 异常处理机制(TRY/CATCH) 2. 权限检查(AUTHORITY-CHECK) 3. 后台作业支持(JOB SUBMIT) 4. 导出功能(Excel/PDF导出) 5. 动态选择屏幕字段控制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值