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.