如何限制P2001-AWART选择选项的F4值列表,区分缺勤/出勤类型?
实现出勤/缺勤类型F4选择列表分离的方案
可以实现F4列表不混合,核心是通过自定义F4帮助逻辑过滤出勤和缺勤类型,推荐使用PROCESS ON VALUE REQUEST事件处理——初始化块无法直接控制F4弹出内容,因为F4是用户触发时才执行的交互逻辑。
具体实现步骤
针对缺勤类型(ABS选择选项)和出勤类型(PRS选择选项)分别编写自定义F4模块:
- 在屏幕逻辑中绑定F4事件
PROCESS ON VALUE REQUEST. " 为缺勤类型选择选项的LOW和HIGH字段绑定F4模块 FIELD abs-LOW MODULE f4_get_abs_types. FIELD abs-HIGH MODULE f4_get_abs_types. " 为出勤类型选择选项的LOW和HIGH字段绑定F4模块 FIELD prs-LOW MODULE f4_get_prs_types. FIELD prs-HIGH MODULE f4_get_prs_types.
- 编写缺勤类型的F4模块
MODULE f4_get_abs_types INPUT. DATA: lt_t554s TYPE STANDARD TABLE OF t554s, ls_return TYPE ddshretval, lt_return TYPE STANDARD TABLE OF ddshretval. " 从T554S中筛选缺勤类型(ART01='A') SELECT * FROM t554s INTO TABLE lt_t554s WHERE art01 = 'A'. " 调用标准函数生成自定义F4列表 CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'AWART' " 要返回的字段名 dynpprog = sy-repid " 当前程序名 dynpnr = sy-dynnr " 当前屏幕号 dynprofield = sy-dynnfield " 触发F4的屏幕字段(自动获取) value_org = 'S' " 单值返回模式 TABLES value_tab = lt_t554s " 待展示的F4数据 return_tab = lt_return " 用户选择的结果 EXCEPTIONS no_values_found = 2 OTHERS = 3. " 将选择结果回写到选择选项字段 IF sy-subrc = 0. READ TABLE lt_return INTO ls_return INDEX 1. IF sy-subrc = 0. CASE sy-dynnfield. WHEN 'ABS-LOW'. abs-LOW = ls_return-fieldval. WHEN 'ABS-HIGH'. abs-HIGH = ls_return-fieldval. ENDCASE. ENDIF. ENDIF. ENDMODULE.
- 编写出勤类型的F4模块
只需复制上述模块,将筛选条件改为art01 = 'P',模块名改为f4_get_prs_types即可:
MODULE f4_get_prs_types INPUT. DATA: lt_t554s TYPE STANDARD TABLE OF t554s, ls_return TYPE ddshretval, lt_return TYPE STANDARD TABLE OF ddshretval. " 从T554S中筛选出勤类型(ART01='P') SELECT * FROM t554s INTO TABLE lt_t554s WHERE art01 = 'P'. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'AWART' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = sy-dynnfield value_org = 'S' TABLES value_tab = lt_t554s return_tab = lt_return EXCEPTIONS no_values_found = 2 OTHERS = 3. IF sy-subrc = 0. READ TABLE lt_return INTO ls_return INDEX 1. IF sy-subrc = 0. CASE sy-dynnfield. WHEN 'PRS-LOW'. prs-LOW = ls_return-fieldval. WHEN 'PRS-HIGH'. prs-HIGH = ls_return-fieldval. ENDCASE. ENDIF. ENDIF. ENDMODULE.
替代方案(需系统权限)
如果有权限修改系统搜索帮助,可以找到AWART字段绑定的默认搜索帮助(通常是H_T554S),在搜索帮助的选择条件中添加ART01的筛选逻辑。但这种方式会影响所有使用该搜索帮助的场景,不如自定义F4灵活,不推荐在多用户环境中使用。
内容的提问来源于stack exchange,提问作者OlMarkov
相关产品推荐
相关产品推荐

