在ALV列表中添加下拉框

REPORT ZTEST.
TYPE-POOLS: SLIS.

TYPES:
  BEGIN OF T_DATA,
    MATNR TYPE MAKT-MATNR,
    MAKTX TYPE MAKT-MAKTX,
    SPRAS TYPE MAKT-SPRAS,
  END   OF T_DATA,
  BEGIN OF T_ALV,
    MATNR     TYPE MAKT-MATNR,
    MAKTX     TYPE MAKT-MAKTX,
    SPRAS     TYPE MAKT-SPRAS,
    DD_HANDLE TYPE INT4,
  END   OF T_ALV.
DATA:
  GT_FIELDCATALOG TYPE LVC_T_FCAT,
  GW_FIELDCATALOG TYPE LVC_S_FCAT,
*定义存储下拉列表的数据
  GT_DDVAL        TYPE LVC_T_DROP,
  GW_DDVAL        TYPE LVC_S_DROP,

  GT_EVENTS       TYPE SLIS_T_EVENT,
  GW_EVENTS       TYPE SLIS_ALV_EVENT,
  GT_DATA         TYPE TABLE OF T_DATA,
  GW_DATA         TYPE          T_DATA,
  GT_ALV          TYPE TABLE OF T_ALV,
  GW_ALV          TYPE          T_ALV,
  G_REPID         TYPE SY-REPID VALUE SY-REPID.
************************************************************************
*                     SELECTION SCREEN                                 *
************************************************************************
SELECT-OPTIONS: S_MATNR FOR GW_DATA-MATNR .

************************************************************************
*                     START-OF-SELECTION                               *
************************************************************************
START-OF-SELECTION.
  SELECT MATNR MAKTX SPRAS
  INTO TABLE GT_DATA UP TO 50 ROWS
  FROM MAKT
  WHERE MATNR IN S_MATNR
      AND SPRAS = 'EN'.

  LOOP AT GT_DATA INTO GW_DATA.
    MOVE-CORRESPONDING GW_DATA TO GW_ALV.
    APPEND GW_ALV TO GT_ALV.
  ENDLOOP.

  PERFORM CREAT_FIELDCAT.
  PERFORM CREAT_DROPDOWN_VALUES.
  PERFORM CREAT_EVENT_EXITS.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM = G_REPID
      IT_FIELDCAT_LVC    = GT_FIELDCATALOG
      IT_EVENTS          = GT_EVENTS
    TABLES
      T_OUTTAB           = GT_ALV.
*---------------------------------------------------------------------*
* 设置输出字段的格式
*---------------------------------------------------------------------*
FORM CREAT_FIELDCAT.
  CLEAR GW_FIELDCATALOG.
  GW_FIELDCATALOG-FIELDNAME = 'MATNR'.
  GW_FIELDCATALOG-REF_FIELD = 'MATNR'.
  GW_FIELDCATALOG-REF_TABLE = 'MAKT'.
  APPEND GW_FIELDCATALOG TO GT_FIELDCATALOG.

  CLEAR GW_FIELDCATALOG.
  GW_FIELDCATALOG-FIELDNAME = 'MAKTX'.
  GW_FIELDCATALOG-REF_FIELD = 'MAKTX'.
  GW_FIELDCATALOG-REF_TABLE = 'MAKT'.
  APPEND GW_FIELDCATALOG TO GT_FIELDCATALOG.

  CLEAR GW_FIELDCATALOG.
  GW_FIELDCATALOG-FIELDNAME = 'SPRAS'.
  GW_FIELDCATALOG-OUTPUTLEN = '7'.
  GW_FIELDCATALOG-DD_OUTLEN = '7'.
  GW_FIELDCATALOG-INTLEN    = '2'.
  GW_FIELDCATALOG-INTTYPE   = 'C'.
  GW_FIELDCATALOG-COLTEXT   = 'Language'.
  GW_FIELDCATALOG-TOOLTIP   = 'Language'.
  GW_FIELDCATALOG-SELTEXT   = 'Language'.
  GW_FIELDCATALOG-DRDN_FIELD = 'DD_HANDLE'.
  GW_FIELDCATALOG-EDIT       = 'X'.
  APPEND GW_FIELDCATALOG TO GT_FIELDCATALOG.
ENDFORM.                    " creat_fieldcat
*---------------------------------------------------------------------*
*根据物料的所有的语言生成不同的生成下拉列表
*---------------------------------------------------------------------*
FORM CREAT_DROPDOWN_VALUES.
  DATA: L_SPRAS TYPE MAKT-SPRAS,
        L_COUNT TYPE I.
  LOOP AT GT_ALV INTO GW_ALV.
    ADD 1 TO L_COUNT.
    SELECT SPRAS
       INTO L_SPRAS
    FROM MAKT
    WHERE MATNR = GW_ALV-MATNR.
      CLEAR GW_DDVAL.
      GW_DDVAL-HANDLE = L_COUNT.
      GW_DDVAL-VALUE = L_SPRAS.
      APPEND GW_DDVAL TO GT_DDVAL.
    ENDSELECT.

    CLEAR GW_DDVAL.
    GW_DDVAL-HANDLE = L_COUNT.
    GW_DDVAL-VALUE = '                 '.
    APPEND GW_DDVAL TO GT_DDVAL.
*设置对应
    GW_ALV-DD_HANDLE = L_COUNT.
    MODIFY GT_ALV FROM GW_ALV.
  ENDLOOP.
ENDFORM.                    " creat_dropdown_values
*---------------------------------------------------------------------*
*      Form creat_event_exits
*---------------------------------------------------------------------*
FORM CREAT_EVENT_EXITS .
  GW_EVENTS-NAME = 'CALLER_EXIT'.
  GW_EVENTS-FORM = 'CALLER_EXIT'.
  APPEND GW_EVENTS TO GT_EVENTS.
ENDFORM.                    " creat_event_exits
*---------------------------------------------------------------------*
*设置下拉列表,使Grid和内表能链接上
*---------------------------------------------------------------------*
FORM CALLER_EXIT USING LS_DATA TYPE SLIS_DATA_CALLER_EXIT.
  DATA: L_REF_ALV TYPE REF TO CL_GUI_ALV_GRID.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = L_REF_ALV.
  CALL METHOD L_REF_ALV->SET_DROP_DOWN_TABLE
    EXPORTING
      IT_DROP_DOWN = GT_DDVAL.
ENDFORM.                    "CALLER_EXIT

另一个例子:

**=====================================================================*
*& Report ZPS_FM_13
**=====================================================================*
REPORT zps_fm_13.

**=====================================================================*
*  Program ID             :  ZPS_FM_13
*  Program Description    :  项目结算资料台账
*  Functional Consultant  :
*  Process Spec ID        :
*  Created By             :  Liu Peng Peng
*  Start Date             :  17.02.2016
*  End Date               :
*======================================================================*
*                     Modify Log History.
*----------------------------------------------------------------------*
*
*No. Modified by    Date      Transport  Description
*--- -----------    ----      ---------  -----------
*M1

*======================================================================*
*                             Tables
*======================================================================*
TABLES:zps009.
*======================================================================*
*                             Constants
*======================================================================*

*======================================================================*
*                             Types
*======================================================================*
TYPE-POOLS : abap,slis,icon.
*======================================================================*
*                     Internal Tables/work areas
*======================================================================*
DATA:BEGIN OF gt_wd OCCURS 0,
  wdbh LIKE zps011-wdbh,    "文档编号
  wdmc LIKE zps011-wdmc,    "文档名称
  checkbox TYPE c,
  sel(1) TYPE c,
  END OF gt_wd.
DATA:BEGIN OF gt_out OCCURS 0,
  wdbh LIKE zps009-wdbh,    "文档编号
  wdmc LIKE zps009-wdmc,    "文档名称
  tjtime LIKE zps009-tjtime,    "提交时间
  tjry LIKE zps009-tjry,        "提交人员
  shry LIKE zps009-shry,        "审核人员
  shtime LIKE zps009-shtime,    "审核时间
  shqk LIKE zps009-shqk,        "审核情况
  bz LIKE zps009-bz,            "备注
  sel(1) TYPE c,
  dd_handle TYPE int4,
  END OF gt_out.
 DATA:BEGIN OF gt_zzhtbm OCCURS 0,
  zzhtbm TYPE zzhtbm,
  zzhtms TYPE zzhtms,
  END OF gt_zzhtbm.
DATA: fieldcat TYPE lvc_t_fcat WITH HEADER LINE.
DATA: fieldcat1 TYPE lvc_t_fcat WITH HEADER LINE.
*定义存储下拉列表的数据
DATA:gt_ddval TYPE lvc_t_drop,
     gw_ddval TYPE lvc_s_drop.
*======================================================================*
*                      Data declarations
*======================================================================*
DATA: wa_layout   TYPE lvc_s_layo,
      gt_events   TYPE slis_t_event,
      gs_event   LIKE LINE OF gt_events.
DATA: g_grid TYPE REF TO cl_gui_alv_grid.
DATA:is_variant LIKE  disvariant.
*======================================================================*
*                      Definition
*======================================================================*
DEFINE fill_field.
  CLEAR FIELDCAT.
  FIELDCAT-FIELDNAME     = &1.
  FIELDCAT-SCRTEXT_L     = &2.
  FIELDCAT-CFIELDNAME    = &3.
  FIELDCAT-OUTPUTLEN     = &4.
  FIELDCAT-EDIT          = &5.
  APPEND FIELDCAT.
END-OF-DEFINITION.
DEFINE fill_field1.
  CLEAR FIELDCAT1.
  FIELDCAT1-FIELDNAME     = &1.
  FIELDCAT1-SCRTEXT_L     = &2.<
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 ABAP FUNCTION ALV 添加状态栏下拉框按钮,可以使用函数模块 `REUSE_ALV_HIERSEQ_LIST_DISPLAY`。该函数模块可以在状态栏添加下拉框按钮,用于切换不同的层次结构。 以下是添加下拉框按钮的代码示例: ``` REPORT ztest. DATA: it_list TYPE STANDARD TABLE OF sflight, wa_list TYPE sflight. DATA: it_fieldcat TYPE slis_t_fieldcat_alv. FIELD-SYMBOLS: <fs_fieldcat> TYPE slis_fieldcat_alv. * 初始化 ALV 数据 SELECT * FROM sflight INTO TABLE it_list. * 初始化字段目录 CLEAR: it_fieldcat. wa_fieldcat-fieldname = 'CARRID'. wa_fieldcat-ref_table = 'SCARR'. wa_fieldcat-ref_field = 'CARRID'. APPEND wa_fieldcat TO it_fieldcat. wa_fieldcat-fieldname = 'CONNID'. APPEND wa_fieldcat TO it_fieldcat. wa_fieldcat-fieldname = 'FLDATE'. APPEND wa_fieldcat TO it_fieldcat. wa_fieldcat-fieldname = 'SEATSMAX'. APPEND wa_fieldcat TO it_fieldcat. wa_fieldcat-fieldname = 'SEATSOCC'. APPEND wa_fieldcat TO it_fieldcat. CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'PF_STATUS' is_layout = VALUE #( ( hierarchy_seq = 'CARRID' ) ) TABLES t_fieldcat = it_fieldcat t_outtab = it_list. * 定义层次结构下拉框的值集合 DATA: it_hier TYPE STANDARD TABLE OF lvc_s_layo WITH HEADER LINE. it_hier-fieldname = 'HIERARCHY_SEQ'. it_hier-seltext_l = '层次结构'. it_hier-selopt = 'O'. it_hier-no_out = 'X'. APPEND it_hier. it_hier-fieldname = 'CARRID'. it_hier-seltext_l = '按航空公司'. it_hier-selopt = 'C'. it_hier-no_out = ' '. APPEND it_hier. it_hier-fieldname = 'FLDATE'. it_hier-seltext_l = '按航班日期'. it_hier-selopt = 'D'. it_hier-no_out = ' '. APPEND it_hier. it_hier-fieldname = 'SEATSMAX'. it_hier-seltext_l = '按最大座位数'. it_hier-selopt = 'S'. it_hier-no_out = ' '. APPEND it_hier. it_hier-fieldname = 'SEATSOCC'. it_hier-seltext_l = '按已占用座位数'. it_hier-selopt = 'O'. it_hier-no_out = ' '. APPEND it_hier. * 设置层次结构下拉框 SET PF-STATUS 'PF_STATUS' EXCLUDING it_hier. * PF-STATUS 事件处理程序 MODULE pf_status OUTPUT. SET PF-STATUS 'PF_STATUS'. SET TITLEBAR 'TITLE'. ENDMODULE. * AT SELECTION-SCREEN 事件处理程序 AT SELECTION-SCREEN ON HIERARCHY_SEQ. LOOP AT it_hier ASSIGNING FIELD-SYMBOL(<fs_hier>). IF <fs_hier>-fieldname = 'HIERARCHY_SEQ'. CONTINUE. ENDIF. IF <fs_hier>-selopt = 'X'. CLEAR: it_list. SELECT * FROM sflight INTO TABLE it_list ORDER BY carrid. ELSE. CLEAR: it_list. SELECT * FROM sflight INTO TABLE it_list ORDER BY ( <fs_hier>-fieldname ). ENDIF. CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'PF_STATUS' is_layout = VALUE #( ( hierarchy_seq = <fs_hier>-fieldname ) ) TABLES t_fieldcat = it_fieldcat t_hierarchy = it_list. ENDLOOP. ``` 在代码,使用了 `REUSE_ALV_HIERSEQ_LIST_DISPLAY` 函数模块来显示 ALV 报表,并在 `is_layout` 参数指定默认的层次结构。在 `pf_status` 事件处理程序设置状态栏的标题,并在 `AT SELECTION-SCREEN` 事件处理程序根据用户选择的层次结构重新查询数据并刷新 ALV 报表。 通过在 `it_hier` 定义层次结构下拉框的值集合,并在 `SET PF-STATUS` 语句排除该值集合,即可在状态栏添加下拉框按钮。在 `AT SELECTION-SCREEN` 事件处理程序,根据用户选择的层次结构重新查询数据,并使用 `REUSE_ALV_HIERSEQ_LIST_DISPLAY` 函数模块刷新 ALV 报表显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值