ABAP-ALV-选择屏幕:F4搜索帮助

本文详细介绍了如何在SAP项目中的ALV选择屏幕中添加F4搜索帮助,包括添加选择屏幕事件、FORM的实现过程,以及获取公司代码、搜索帮助表并设置显示字段的代码片段。

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

 业务需求

在SAP项目中,会经常碰到如下需求:

::  ALV的选择屏幕界面中,需要添加选择字段的F4搜索帮助

: F4搜索帮助:

实现步骤:

一、为选择屏幕字段S_VKBUR添加选择屏幕事件

 

二、实现事件对应的FORM(FRM_F4_VKBUR):

主要功能:

1:PAI事件前,获取选择屏幕S_BUKRS公司代码的值。

2:根据公司代码获取F4搜索帮助表

3:设置搜索帮助显示字段(包含客户化的描述)。

4:显示F4搜索帮助对话框;获取选择数值,赋值给屏幕字段。

实现代码:

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_VKBUR-LOW.
**搜索帮助-部门
  PERFORM FRM_F4_VKBUR USING 'LOW'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_VKBUR-HIGH.
**搜索帮助-部门
  PERFORM FRM_F4_VKBUR USING 'HIGH'.

*&---------------------------------------------------------------------*
*&      Form  FRM_F4_VKBUR
*&---------------------------------------------------------------------*
*       F4部门
*----------------------------------------------------------------------*
*      -->P_0017   text
*----------------------------------------------------------------------*
FORM FRM_F4_VKBUR  USING  P_NAME.
  DATA: LT_RETURN_TAB TYPE STANDARD TABLE OF DDSHRETVAL,
        LS_RETURN_TAB TYPE DDSHRETVAL,
        LT_DFIES      TYPE TABLE OF DFIES,
        LS_DFIES      TYPE DFIES,
        LV_OFFSET     TYPE I,
        LR_TABDESCR   TYPE REF TO CL_ABAP_STRUCTDESCR,
        LT_DYNP       TYPE TABLE OF DYNPREAD.

  RANGES: LR_BUKRS FOR T001-BUKRS.

**获取:屏幕的公司代码
  LT_DYNP = VALUE #( ( FIELDNAME = 'S_BUKRS-LOW' ) ).
  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      DYNAME     = SY-REPID
      DYNUMB     = SY-DYNNR
    TABLES
      DYNPFIELDS = LT_DYNP.

  DATA(L_BUKRS) = LT_DYNP[ FIELDNAME = 'S_BUKRS-LOW' ]-FIELDVALUE.
  IF L_BUKRS IS NOT INITIAL.
    LR_BUKRS[] = VALUE #( ( SIGN = 'I' OPTION = 'EQ' LOW = L_BUKRS ) ).
  ENDIF.

**获取:搜索帮助表
  SELECT DISTINCT
         ZTZFFI_0024_02~BUKRS, "公司代码
         ZTZFFI_0024_02~VKBUR, "部门
         TVKBT~BEZEI           "部门描述
    INTO TABLE @DATA(LT_F4_HELP)
    FROM ZTZFFI_0024_02
    LEFT JOIN TVKBT
      ON ZTZFFI_0024_02~VKBUR = TVKBT~VKBUR
     AND TVKBT~SPRAS = 1
   WHERE BUKRS IN @LR_BUKRS.
  SORT LT_F4_HELP BY BUKRS VKBUR.

**设置:搜索帮助显示字段
  DATA: LS_F4_HELP LIKE LINE OF LT_F4_HELP.
  LR_TABDESCR ?= CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_DATA( LS_F4_HELP ).
  LT_DFIES = CL_SALV_DATA_DESCR=>READ_STRUCTDESCR( LR_TABDESCR ).
  LOOP AT LT_DFIES INTO LS_DFIES.
    LS_DFIES-LFIELDNAME = LS_DFIES-FIELDNAME.
    LS_DFIES-OFFSET     = LV_OFFSET.
    CASE LS_DFIES-FIELDNAME.
      WHEN 'BUKRS'.
        LS_DFIES-SCRTEXT_L = LS_DFIES-SCRTEXT_M = LS_DFIES-SCRTEXT_S = LS_DFIES-REPTEXT = '公司代码'.
      WHEN 'VKBUR'.
        LS_DFIES-SCRTEXT_L = LS_DFIES-SCRTEXT_M = LS_DFIES-SCRTEXT_S = LS_DFIES-REPTEXT = '部门编码'.
      WHEN 'BEZEI'.
        LS_DFIES-SCRTEXT_L = LS_DFIES-SCRTEXT_M = LS_DFIES-SCRTEXT_S = LS_DFIES-REPTEXT = '部门名称'.
      WHEN OTHERS.
    ENDCASE.
    LV_OFFSET = LV_OFFSET + LS_DFIES-INTLEN.
    MODIFY LT_DFIES FROM LS_DFIES.
  ENDLOOP.

**功能:调用函数显示搜索帮助界面
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      RETFIELD         = 'VKBUR' "搜索帮助表:GT_F4_HELP 里的字段
      DYNPPROG         = SY-REPID    " 当前程序
      DYNPNR           = SY-DYNNR     "当前屏幕号
      VALUE_ORG        = 'S'           "默认为C但是此处不用S不行
      CALLBACK_PROGRAM = SY-REPID     "回诘程序,也为当前程序
    TABLES
      VALUE_TAB        = LT_F4_HELP   " F4 搜索帮助表 (说明:函数对这个表参照类型并未做规定,但返回表的类型是定死的为:DDSHRETVAL
      FIELD_TAB        = LT_DFIES
      RETURN_TAB       = LT_RETURN_TAB   "选择后,返回表值:已经选的值。准备用来回写到ALV表对应字段上
    EXCEPTIONS
      PARAMETER_ERROR  = 1
      NO_VALUES_FOUND  = 2
      OTHERS           = 3.
  IF SY-SUBRC = 0.
    READ TABLE LT_RETURN_TAB INTO LS_RETURN_TAB INDEX 1.
    IF LS_RETURN_TAB-FIELDVAL IS NOT INITIAL.
      IF P_NAME = 'LOW'.
        S_VKBUR-LOW = LS_RETURN_TAB-FIELDVAL.
      ELSE.
        S_VKBUR-HIGH = LS_RETURN_TAB-FIELDVAL.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈佛2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值