ALV下拉菜单实例

REPORT  ZTEST0021 NO STANDARD PAGE HEADING
                LINE-SIZE 170.

*----------------------------------------------------------------------*
* 声明数据库表
*----------------------------------------------------------------------*
TABLES MARA.
*----------------------------------------------------------------------*
* 定义类型、内表与变量
*----------------------------------------------------------------------*
TYPES:BEGIN OF TYP_DATA,        "输出内表的结构类型
        MATNR   TYPE MAKT-MATNR,
        MATKL   TYPE MARA-MATKL,
        MAKTX   TYPE MAKT-MAKTX,
        SPRAS   TYPE MAKT-SPRAS,
      END OF TYP_DATA.
*     ALV下拉菜单的输出内表类型
TYPES:BEGIN OF TYP_ALV,
        MATNR     TYPE MAKT-MATNR,
        MATKL     TYPE MARA-MATKL,
        MAKTX     TYPE MAKT-MAKTX,
        SPRAS     TYPE MAKT-SPRAS,
        DD_HANDLE TYPE INT4,
      END OF TYP_ALV.
*----------------------------------------------------------------------*
*    全局变量
DATA I_RESULT   TYPE TABLE OF TYP_DATA WITH HEADER LINE.
*----------------------------------------------------------------------*
* ALV 工作区、变量与内表
TYPE-POOLSSLIS.

DATA:I_FIELDCAT      TYPE LVC_T_FCAT,     "输出的内表字段
     WA_FIELDCAT     TYPE LVC_S_FCAT,
     I_EVENTS        TYPE SLIS_T_EVENT,   "事件存储内表
     WA_EVENTS       TYPE SLIS_ALV_EVENT,
     I_DDVAL         TYPE LVC_T_DROP,     "存储下拉列表的数据
     WA_DDVAL        TYPE LVC_S_DROP,
     I_ALV           TYPE TABLE OF TYP_ALV"ALV
     WA_ALV          TYPE TYP_ALV.
DATA:WA_SORT     TYPE SLIS_T_SORTINFO_ALV,
     WA_VARIANT  TYPE DISVARIANT,
     V_REPID    TYPE SY-REPID VALUE SY-REPID.
*----------------------------------------------------------------------*
* SELECTION-SCREEN
*----------------------------------------------------------------------*
SELECT-OPTIONS S_MATNR FOR MARA-MATNR.
*----------------------------------------------------------------------*
* Executing program's events
*----------------------------------------------------------------------*
INITIALIZATION.

START-OF-SELECTION.
  PERFORM F_QUERY_DATA.
  PERFORM F_CREATE_FIELDCAT.
  PERFORM F_CREATE_DROPDOWN_LIST.
  PERFORM F_CREATE_EVENT_EXITS.
  PERFORM F_DISPLAY_ALV.

END-OF-SELECTION.


*----------------------------------------------------------------------*
*      Form  f_query_data
*----------------------------------------------------------------------*
*       从数据库表中查询数据
*----------------------------------------------------------------------*
FORM F_QUERY_DATA .
  SELECT MARA~MATNR
         MARA~MATKL
         MAKT~MAKTX
         MAKT~SPRAS
      INTO TABLE I_RESULT UP TO 50 ROWS
      FROM MARA INNER JOIN MAKT ON MARA~MATNR MAKT~MATNR
      WHERE MARA~MATNR IN S_MATNR AND
            MAKT~SPRAS EQ '1'.

  LOOP AT I_RESULT.
    MOVE-CORRESPONDING I_RESULT TO WA_ALV.
    APPEND WA_ALV TO I_ALV.
  ENDLOOP.
ENDFORM.                    " f_query_data
*----------------------------------------------------------------------*
*      Form  f_create_fieldcat
*----------------------------------------------------------------------*
*       初始化输出内表的格式与字段
*----------------------------------------------------------------------*
FORM F_CREATE_FIELDCAT .
  DEFINE M_FIELDCAT.
    CLEAR WA_FIELDCAT.
    WA_FIELDCAT-FIELDNAME &1.
    WA_FIELDCAT-REF_FIELD &2.
    WA_FIELDCAT-REF_TABLE &3.
    IF &1 'MATKL'.
      WA_FIELDCAT-INTTYPE   'C'.
      WA_FIELDCAT-INTLEN    '9'.
      WA_FIELDCAT-EDIT       'X'.
      WA_FIELDCAT-OUTPUTLEN '12'.
      WA_FIELDCAT-DD_OUTLEN '12'.
      WA_FIELDCAT-DRDN_FIELD 'DD_HANDLE'.   "设置下拉菜单
    ENDIF.
    APPEND WA_FIELDCAT TO I_FIELDCAT.
  END-OF-DEFINITION.

  M_FIELDCAT 'MATNR' 'MATNR' 'MAKT'.
  M_FIELDCAT 'MATKL' 'MATKL' 'MARA'.
  M_FIELDCAT 'MAKTX' 'MAKTX' 'MAKT'.
ENDFORM.                    " f_create_fieldcat
*----------------------------------------------------------------------*
*     Form  f_create_dropdown_list
*----------------------------------------------------------------------*
*       创建下拉菜单内表
*----------------------------------------------------------------------*
FORM F_CREATE_DROPDOWN_LIST .
  DATAL_MATKL TYPE MARA-MATKL,
        L_COUNT TYPE I.

  LOOP AT I_ALV INTO WA_ALV.
    ADD TO L_COUNT.
    CLEAR WA_DDVAL.
    WA_DDVAL-HANDLE L_COUNT.
    WA_DDVAL-VALUE  '         '.
    APPEND WA_DDVAL TO I_DDVAL.

    SELECT MATKL
        INTO L_MATKL
        FROM MARA
        WHERE MATNR WA_ALV-MATNR.

      CLEAR WA_DDVAL.
      WA_DDVAL-HANDLE L_COUNT.
      WA_DDVAL-VALUE  L_MATKL.
      APPEND WA_DDVAL TO I_DDVAL.
    ENDSELECT.
*设置对应
    WA_ALV-DD_HANDLE L_COUNT.
    MODIFY I_ALV FROM WA_ALV.
  ENDLOOP.
ENDFORM.                    " f_create_dropdown_list
*----------------------------------------------------------------------*
*      Form  f_create_event_exits
*----------------------------------------------------------------------*
*       添加下拉菜单事件
*----------------------------------------------------------------------*
FORM F_CREATE_EVENT_EXITS .
  WA_EVENTS-NAME 'CALLER_EXIT'.        "固定值
  WA_EVENTS-FORM 'F_CALLER_EXIT'.
  APPEND WA_EVENTS TO I_EVENTS.
ENDFORM.                    " f_create_event_exits
*----------------------------------------------------------------------*
*     Form  f_display_alv
*----------------------------------------------------------------------*
*       调用 FUNCTION 输出ALV报表
*----------------------------------------------------------------------*
FORM F_DISPLAY_ALV .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM V_REPID
      IT_FIELDCAT_LVC    I_FIELDCAT
      IT_EVENTS          I_EVENTS[]
    TABLES
      T_OUTTAB           I_ALV.
ENDFORM.                    " f_display_alv
*----------------------------------------------------------------------*
*  FORMf_caller_exit
*----------------------------------------------------------------------*
*   设置下拉列表,使Grid和内表能链接上
*----------------------------------------------------------------------*
FORM F_CALLER_EXIT USING LS_DATA TYPE SLIS_DATA_CALLER_EXIT.
  DATAL_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 I_DDVAL.
ENDFORM.                    "CALLER_EXIT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值