SAP ALV模板及自定义按钮

1.从SAPLKKBL复制标准状态栏到自定义程式

 

 2.复制后在应用程序工具栏中新增自定义按钮

 

3.ABAP代码如下:

*&---------------------------------------------------------------------*
*& Report  ZMM_PURCHASE_TICKET
*&---------------------------------------------------------------------*
REPORT ZMM_PURCHASE_TICKET.

TABLES:ZHEAD,ZITEM.
*ALV结构
*性能
TYPES: BEGIN OF  TY_ALV,
  BOX,
  ......,
  ZVBELN TYPE VBELN,
  END OF TY_ALV.
DATA: GT_HEAD TYPE STANDARD TABLE OF ZMM_HEAD,
          GW_HEAD TYPE ZMM_HEAD,
          GT_ITEM TYPE STANDARD TABLE OF ZMM_ITEM,
          GW_ITEM TYPE ZMM_ITEM,
          GT_ALV TYPE STANDARD TABLE OF TY_ALV,
          GW_ALV TYPE TY_ALV.

*----------------------------------------------------------------------*
*  定义ALV数据对象
*----------------------------------------------------------------------*
DATA: IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
      W_FIELDCAT  TYPE SLIS_FIELDCAT_ALV,
      W_LAYOUT    TYPE SLIS_LAYOUT_ALV.
DATA: GT_FIELDCAT TYPE LVC_T_FCAT,
      GW_FIELDCAT TYPE LVC_S_FCAT,
      GW_LAYOUT   TYPE LVC_S_LAYO.

*&---------------------------------------------------------------------*
*&      选择屏幕定义
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.

SELECT-OPTIONS:
                S_VBELN FOR VBELN,      "PO No.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK B1.

*&---------------------------------------------------------------------*
*&      执行查询
*&---------------------------------------------------------------------*
START-OF-SELECTION.
    PERFORM FRM_GET_DATA.
    PERFORM FRM_ALV_DISPLAY.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*       获取数据源
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
  SELECT
      H~VBELN,
    ........
    INTO CORRESPONDING FIELDS OF TABLE @GT_ALV
    FROM ZHEAD AS H
    LEFT JOIN ZITEM AS I ON H~VBELN = I~VBELN
    WHERE H~VBELN IN @S_VBELN.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
*       显示ALV报表
*----------------------------------------------------------------------*
FORM FRM_ALV_DISPLAY .
  PERFORM FRM_FILL_FIELDCAT.
  PERFORM FRM_ALV_LAYOUT.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
    I_CALLBACK_PROGRAM = SY-REPID
    I_CALLBACK_PF_STATUS_SET = 'FRM_STATUS_SET'
    I_CALLBACK_USER_COMMAND  = 'FRM_USER_COMMAND'
    IS_LAYOUT_LVC      = GW_LAYOUT
    IT_FIELDCAT_LVC    = GT_FIELDCAT
    I_SAVE             = 'U'
  TABLES
    T_OUTTAB           = GT_ALV
  EXCEPTIONS
    PROGRAM_ERROR      = 1
    OTHERS             = 2.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_FILL_FIELDCAT
*&---------------------------------------------------------------------*
*       填充报表结构
*----------------------------------------------------------------------*
FORM FRM_FILL_FIELDCAT .
  PERFORM FM_APPEND_FIELDCAT USING 'VBELN'    'PO NO'.
  .........
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_LAYOUT
*&---------------------------------------------------------------------*
*       显示报表结构
*----------------------------------------------------------------------*
FORM FRM_ALV_LAYOUT .
      GW_LAYOUT-ZEBRA = 'X'.
      GW_LAYOUT-BOX_FNAME = 'BOX'.
      GW_LAYOUT-SEL_MODE = 'A'.
      GW_LAYOUT-CWIDTH_OPT = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FM_APPEND_FIELDCAT_PRO
*&---------------------------------------------------------------------*
*       定义性能填充模式
*----------------------------------------------------------------------*
FORM FM_APPEND_FIELDCAT  USING   VALUE(FILED_NAME)   VALUE(FILED_TEXT).
  GW_FIELDCAT-FIELDNAME = FILED_NAME.
  GW_FIELDCAT-COLTEXT = FILED_TEXT.
  GW_FIELDCAT-SELTEXT = FILED_TEXT.
  GW_FIELDCAT-TOOLTIP = FILED_TEXT.
  APPEND GW_FIELDCAT TO GT_FIELDCAT.
ENDFORM.
*------------功能码的实现---------
FORM FRM_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB .
  SET PF-STATUS 'STATUS' ."EXCLUDING RT_EXTAB.      "显示所有ALV功能按钮
ENDFORM.
*&---------------------------------------------------------------------*
*&      FORM  USER_COMMAND  用户自定义按钮
*&---------------------------------------------------------------------*
FORM FRM_USER_COMMAND USING R_UCOMM  LIKE SY-UCOMM
                         RS_SELFIELD TYPE SLIS_SELFIELD.
  CASE R_UCOMM.
    WHEN '&PRT'.
      PERFORM FRM_PRINT_TICKET.
  ENDCASE.
  RS_SELFIELD-REFRESH = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_PRINT_TICKET
*&---------------------------------------------------------------------*
FORM FRM_PRINT_TICKET .
  DATA: FM_NAME         TYPE RS38L_FNAM,      "功能模块的名称
        FM_NAME2        TYPE RS38L_FNAM,      "功能模块的名称
        FM_NAME3        TYPE RS38L_FNAM,      "功能模块的名称
        FP_DOCPARAMS    TYPE SFPDOCPARAMS,    "格式处理格式参数
        FP_OUTPUTPARAMS TYPE SFPOUTPUTPARAMS. "格式处理输出参数
*打印默认勾选参数
  FP_OUTPUTPARAMS-DEST  = 'LP01'.
  FP_OUTPUTPARAMS-REQDEL = 'X'.
  "FP_OUTPUTPARAMS-NODIALOG = 'X'.
  "FP_OUTPUTPARAMS-REQIMM = 'X'.

* 设置语言
*  FP_DOCPARAMS-LANGU   = 'E'.
*  FP_DOCPARAMS-COUNTRY = 'US'.

*&----打开 SPOOL JOB
  CALL FUNCTION 'FP_JOB_OPEN'               "& FORM PROCESSING: CALL FORM
    CHANGING
      IE_OUTPUTPARAMS = FP_OUTPUTPARAMS
    EXCEPTIONS
      CANCEL          = 1
      USAGE_ERROR     = 2
      SYSTEM_ERROR    = 3
      INTERNAL_ERROR  = 4
      OTHERS          = 5.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                     WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

*&----获取ADOBE FORM的名称参数
  CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
    EXPORTING
      I_NAME     = 'ZMM_FORM_PRO_TICKET'
    IMPORTING
      E_FUNCNAME = FM_NAME.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                     WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
*&----数据填充
  CLEAR: GT_HEAD,GT_ITEM,GW_HEAD,GW_ITEM.
  LOOP AT GT_ALV INTO GW_ALV WHERE BOX = 'X'.
    GW_HEAD-VBELN = GW_ALV-VBELN.
    ........
    APPEND GW_HEAD TO  GT_HEAD.
    CLEAR GW_HEAD.
  ENDLOOP.
  LOOP AT GT_HEAD INTO GW_HEAD.
    SELECT
      .....
      INTO TABLE @DATA(GM_ITEM)
      FROM ZITEM
      WHERE VBELN = @GW_HEAD-VBELN.

    LOOP AT GM_ITEM INTO DATA(WM_ITEM).
      GW_ITEM-ITEM = 'Order'.
       .......
      APPEND GW_ITEM TO GT_ITEM.
      CLEAR GW_ITEM.
    ENDLOOP.
      CALL FUNCTION FM_NAME
        EXPORTING
          /1BCDWB/DOCPARAMS = FP_DOCPARAMS
          PROHEAD              = GW_HEAD
          PROITEM              = GT_ITEM
        EXCEPTIONS
          USAGE_ERROR       = 1
          SYSTEM_ERROR      = 2
          INTERNAL_ERROR    = 3
          OTHERS            = 4.
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
  ENDLOOP.
*&----关闭
  CALL FUNCTION 'FP_JOB_CLOSE'
    EXCEPTIONS
      USAGE_ERROR    = 1
      SYSTEM_ERROR   = 2
      INTERNAL_ERROR = 3
      OTHERS         = 4.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                     WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

*-----释放内表
ENDFORM.    

 

posted @ 2021-09-01 16:48  kang09  阅读(631)  评论(0编辑  收藏  举报