You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制P2001-AWART选择选项的F4值列表,区分缺勤/出勤类型?

实现出勤/缺勤类型F4选择列表分离的方案

可以实现F4列表不混合,核心是通过自定义F4帮助逻辑过滤出勤和缺勤类型,推荐使用PROCESS ON VALUE REQUEST事件处理——初始化块无法直接控制F4弹出内容,因为F4是用户触发时才执行的交互逻辑。

具体实现步骤

针对缺勤类型(ABS选择选项)和出勤类型(PRS选择选项)分别编写自定义F4模块:

  1. 在屏幕逻辑中绑定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.
  1. 编写缺勤类型的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.
  1. 编写出勤类型的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:33:14