SAP ALV完整功能

*&---------------------------------------------------------------------*
*& Report  YTEST_ALV
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  YTEST_ALV MESSAGE-ID ZMID.

TYPE-POOLS:SLIS,ICON.
TABLES:MARD.

DATA: BEGIN OF GT_MARD OCCURS 0,
  WERKS LIKE MARD-WERKS,
  LGORT LIKE MARD-LGORT,
  MATNR LIKE MARD-MATNR,
  LABST LIKE MARD-LABST,
*  ICON  TYPE ICON-ID, 
*  COLOR TYPE ICON-ID,
  END OF GT_MARD.

*ALV输出参数
DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
      GS_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
      GS_LAYOUT   TYPE SLIS_LAYOUT_ALV,
      GT_SORT     TYPE SLIS_T_SORTINFO_ALV,
      GS_SORT     TYPE SLIS_SORTINFO_ALV,
      GT_EVENT    TYPE SLIS_T_EVENT,
      GS_EVENT    TYPE SLIS_ALV_EVENT.


SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_WERKS FOR MARD-WERKS.
SELECTION-SCREEN END OF BLOCK BLK1.

START-OF-SELECTION.
  PERFORM GET_DATA.

END-OF-SELECTION.
  IF GT_MARD[] IS NOT INITIAL.
    PERFORM WRITE_DATA.
  ELSE.
    MESSAGE S000 DISPLAY LIKE 'E'.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  WRITE_DARA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM WRITE_DATA.
  PERFORM BUILD_FIELDCAT.
  PERFORM BUILD_LAYOUT.
  PERFORM BUILD_SORT.
  PERFORM BUILD_EVENT.
  PERFORM BUILD_ALV.
ENDFORM.                    "
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT .
  CLEAR GT_FIELDCAT[].
  PERFORM ADD_FIELDCAT USING 'WERKS' '工厂'         '1' '5' ''.
  PERFORM ADD_FIELDCAT USING 'LGORT' '仓库'         '2' '5' ''.
  PERFORM ADD_FIELDCAT USING 'MATNR' '物料代码'     '3' '20' ''.
  PERFORM ADD_FIELDCAT USING 'LABST' '非限制库存'    '4' '20' 'X'.
ENDFORM.                    " BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  ADD_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0051   text
*      -->P_0052   text
*      -->P_0053   text
*      -->P_0054   text
*      -->P_0055   text
*----------------------------------------------------------------------*
FORM ADD_FIELDCAT USING    P_FIELDNAME
                            P_SELTEXT
                            P_COL
                            P_LEN
                            P_SUM.
  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME = P_FIELDNAME. "字段名
  GS_FIELDCAT-SELTEXT_M = P_SELTEXT.   "描述文本
  GS_FIELDCAT-COL_POS   = P_COL.       "列
  GS_FIELDCAT-OUTPUTLEN = P_LEN.       "输出长度
  GS_FIELDCAT-DO_SUM    = P_SUM.       "是否合计
  APPEND GS_FIELDCAT TO GT_FIELDCAT.

ENDFORM.                    " ADD_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_LAYOUT .
* GS_LAYOUT-EDIT = 'X'.
  GS_LAYOUT-ZEBRA = 'X'.
  GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  GS_LAYOUT-BOX_FIELDNAME = 'BOX'.
*  GS_LAYOUT-INFO_FIELDNAME = 'COLOR'.   "行颜色
  GS_LAYOUT-COLTAB_FIELDNAME = 'COLOR'.  "单元格颜色

*详细清单属性
  GS_LAYOUT-DETAIL_POPUP = 'X'.           "popup对话框
  GS_LAYOUT-DETAIL_INITIAL_LINES = 'X'.   "是否显示值为空的字段
  GS_LAYOUT-DETAIL_TITLEBAR = 'DETAIL SCREEN'.           "对话框标题

*表单属性
  GS_LAYOUT-WINDOW_TITLEBAR = '窗体抬头'.

*退出时弹出确认对话框.
  GS_LAYOUT-CONFIRMATION_PROMPT = 'X'.

ENDFORM.                    " BUILD_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  BUILD_SORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_SORT .
* 1、基本赋值
  CLEAR GS_SORT.
  GS_SORT-FIELDNAME  = 'WERKS'.
  GS_SORT-SPOS  = '1'.
  GS_SORT-SUBTOT  = 'X'.
  APPEND GS_SORT TO GT_SORT.

  CLEAR GS_SORT.
  GS_SORT-FIELDNAME  = 'LGORT'.
  GS_SORT-SPOS  = '2'.
  GS_SORT-SUBTOT  = 'X'.
  APPEND GS_SORT TO GT_SORT.
*
** 2、使用PERFORM传参数
*  PERFORM ADD_SORT USING : 'WERKS' '1' 'X',
*                           'LGORT' '1' 'X'.

* 3、使用宏定义增加行
*  %%FIELDCAT 'WERKS' '1' 'X'.
*  %%FIELDCAT 'LGORT' '1' 'X'.


ENDFORM.                    " BUILD_SORT
*&---------------------------------------------------------------------*
*&      Form  BUILD_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_ALV .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
*      I_INTERFACE_CHECK       = ''
*      I_BYPASSING_BUFFER       = ''
*      I_BUFFER_ACTIVE       = ''
      I_CALLBACK_PROGRAM           = SY-CPROG       "调用ALV函数返回的程序
      I_CALLBACK_PF_STATUS_SET     = 'SET_STATUS'   "设置alv程序内的按钮
      I_CALLBACK_USER_COMMAND      = 'USER_COMMAND'  "设置按钮功能,传输FORM名称
      I_CALLBACK_TOP_OF_PAGE       = 'TOP_OF_PAGE'   "表头
*      I_CALLBACK_HTML_TOP_OF_PAGE = 'TOP_OF_PAGE2'  "动态表头
*      I_CALLBACK_HTML_END_OF_LIST = ''
*      I_STRUCTURE_NAME  = ''
      I_BACKGROUND_ID  = ''
      I_GRID_TITLE                  = '物料数据清单'
      IS_LAYOUT                     = GS_LAYOUT
      IT_FIELDCAT                   = GT_FIELDCAT
*      IT_EXCLUDING                  = GT_EXCLUDE      "隐藏ALV基本按钮
*      IT_SPECIAL_GROUPS  = ''
      IT_SORT                       = GT_SORT
*      IT_FILTER  = ''
*      IS_SEL_HIDE  = ''
*      I_DEFAULT  = 'X'
*      I_SAVE  =
*      IS_VARIANT =
      IT_EVENTS                     = GT_EVENT        "定义ALV事件
*      IT_EVENT_EXIT  =
*      IS_PRINT  =
      TABLES
        T_OUTTAB                    = GT_MARD
*      EXCEPTIONS
*        PROGRAM_ERROR               = 1
*        OTHERS                      = 2
        .
  IF SY-SUBRC <> 0 .

  ENDIF.
ENDFORM.                    " BUILD_ALV

*&---------------------------------------------------------------------*
*&      Form  SET_STATUS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_EXTAB    text
*----------------------------------------------------------------------*
FORM SET_STATUS USING P_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STATUS'.
ENDFORM.                    "SET_STATUS

*&---------------------------------------------------------------------*
*&      Form  BULID_EVENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM BUILD_EVENT.
  GS_EVENT-NAME = 'PF_STATUS_SET'.
  GS_EVENT-FORM = 'SET_STATUS'.
  APPEND GS_EVENT TO GT_EVENT.
ENDFORM.                    "BULID_EVENT


*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_UCOMM    text
*      -->P_FIELD    text
*----------------------------------------------------------------------*
FORM USER_COMMAND USING P_UCOMM TYPE SY-UCOMM
                        P_FIELD TYPE SLIS_SELFIELD.
  CASE P_UCOMM.
    WHEN '&IC1'.
      PERFORM CALL_TRANSACTION USING P_FIELD.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT' OR 'CANCEL'.
      LEAVE PROGRAM.
*    WHEN 'PRINT_SF'.
*      PERFORM CALL_SF.
  ENDCASE.

  P_FIELD-REFRESH = 'X'.
ENDFORM.                    "USER_COMMAND

*&---------------------------------------------------------------------*
*&      Form  CALL_TRANSACTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_FIELD    text
*----------------------------------------------------------------------*
FORM CALL_TRANSACTION USING P_FIELD TYPE SLIS_SELFIELD.
  CASE P_FIELD-FIELDNAME.
      SET PARAMETER ID 'MAT' FIELD P_FIELD-VALUE.
      CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
  ENDCASE.
ENDFORM.                    "CALL_TRANSACTION

*&---------------------------------------------------------------------*
*&      Form  TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM TOP_OF_PAGE.
  DATA: LT_LISTHEADER TYPE SLIS_T_LISTHEADER.
  DATA: LS_LISTHEADER TYPE SLIS_LISTHEADER.

  LS_LISTHEADER-TYP = 'H'.
  LS_LISTHEADER-INFO = '表头描述文本'.
  APPEND LS_LISTHEADER TO LT_LISTHEADER.

  LS_LISTHEADER-TYP = 'S'.
  LS_LISTHEADER-KEY = '字段名称或描述'.
  LS_LISTHEADER-INFO = '字段值'.
  APPEND LS_LISTHEADER TO LT_LISTHEADER.

  LS_LISTHEADER-TYP = 'A'.
  LS_LISTHEADER-INFO = '结尾斜体'.
  APPEND LS_LISTHEADER TO LT_LISTHEADER.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY    = LT_LISTHEADER
*      I_LOGO                =
*      I_END_OF_LIST_GRID    =
*      I_ALV_FORM            =
      .
ENDFORM.                    "TOP_OF_PAGE

*&---------------------------------------------------------------------*
*&      Form  TOP_OF_PAGE2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PR_DOCUMENT  text
*----------------------------------------------------------------------*
FORM TOP_OF_PAGE2 USING PR_DOCUMENT TYPE REF TO CL_DD_DOCUMENT.
  CALL METHOD PR_DOCUMENT->ADD_TEXT
    EXPORTING
      TEXT      = 'HTML TOP OF PAGE'
      SAP_STYLE = CL_DD_DOCUMENT=>HEADING.
  CALL METHOD PR_DOCUMENT->NEW_LINE.
  CALL METHOD PR_DOCUMENT->ADD_TEXT
    EXPORTING
      TEXT      = 'LINK'
      SAP_STYLE = CL_DD_DOCUMENT=>SUCCESS.
  CALL METHOD PR_DOCUMENT->ADD_GAP
    EXPORTING
      WIDTH = '5'.
  CALL METHOD PR_DOCUMENT->ADD_LINK
    EXPORTING
      NAME    = '163'
      URL     = 'HTTP://WWW.BAIDU.COM/'
      TEXT
      ='BAIDU'.
ENDFORM.                    "TOP_OF_PAGE2


*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_DATA.
  DATA:LS_COLOR TYPE LVC_S_SCOL.
  SELECT WERKS LGORT MATNR LABST
    FROM MARD
    INTO CORRESPONDING FIELDS OF TABLE GT_MARD
  UP TO 10 ROWS.

*  LOOP AT GT_MARD.
*    IF GT_MARD-LABST = 0.
*      GT_MARD-ICON = ICON_RED_LIGHT.
*      GT_MARD-COLOR = 'C600'.
*    ELSE.
*      GT_MARD-ICON = ICON_GREEN_LIGHT.
*      GT_MARD-COLOR = 'C300'.
*
*    ENDIF.
*    MODIFY GT_MARD.
*  ENDLOOP.
ENDFORM.                    "GET_DATA

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Willie Y

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

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

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

打赏作者

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

抵扣说明:

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

余额充值