1. 关键的两个标准函数
TRINT_CORR_INSERT
TRINT_CORR_CHECK
2. 自定义SAP生产环境修改程序
*data:begin of itab occurs 0,
* lines(150),
* end of itab.
DATA itab TYPE TABLE OF string.
PARAMETERS:program LIKE rs38m-programm.
READ REPORT program INTO itab.
EDITOR-CALL FOR itab.
IF sy-ucomm = 'OK'.
INSERT REPORT program FROM itab.
ENDIF.
*
**======================================================================*
** INCLUDE used in the program
**======================================================================*
*INCLUDE OLE2INCL.
**======================================================================*
** TYPE-POOLS used in the program
**======================================================================*
*
*TYPE-POOLS: ABAP,SLIS.
**======================================================================*
** SELECTION-SCREEN DEFINED
**======================================================================*
*SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-001.
*PARAMETERS:
* P_FILE TYPE LOCALFILE OBLIGATORY,
* P_TAB TYPE DD02L-TABNAME,
* CB_TEMP AS CHECKBOX.
*SELECTION-SCREEN END OF BLOCK BL1.
*
**======================================================================*
** Varibles and Tables used in the program
**======================================================================*
*TYPES:
* BEGIN OF GTY_S_FIELDS,
* FIELDNAME TYPE FIELDNAME,
* FIELDTEXT TYPE CHAR30,
* END OF GTY_S_FIELDS.
*
*
*DATA:
* GCL_GENERIC_TABLE_WA TYPE REF TO DATA,
* GCL_GENERIC_TABLE TYPE REF TO DATA,
* GT_FIELDS TYPE TABLE OF FIELDNAME,
* GS_COMP TYPE ABAP_COMPDESCR,
* GV_DISPLAY TYPE C,
* GV_TABNAME TYPE DD02L-TABNAME,
* LV_RC TYPE SY-SUBRC,
* LW_FILETABLE TYPE FILE_TABLE,
* LT_FILETABLE TYPE FILETABLE.
*
*FIELD-SYMBOLS:
* <FS_TAB_WA> TYPE ANY,
* <FS_TAB> TYPE STANDARD TABLE.
*
**======================================================================*
** INITIALIZATION
**======================================================================*
*INITIALIZATION.
*
* IMPORT PARA1 = GV_DISPLAY PARA2 = GV_TABNAME FROM MEMORY ID 'ZTABLE'.
* P_TAB = GV_TABNAME.
*
**======================================================================*
** AT SELECTION-SCREEN
**======================================================================*
*
*AT SELECTION-SCREEN ON P_TAB.
* PERFORM FRM_CHECK_TABLE.
*
*AT SELECTION-SCREEN OUTPUT.
* LOOP AT SCREEN.
* IF SCREEN-NAME = 'P_TAB'.
* IF GV_DISPLAY = 'X'.
* SCREEN-INPUT = '0'.
* MODIFY SCREEN.
* ENDIF.
* ENDIF.
* ENDLOOP.
*
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
*
* REFRESH: LT_FILETABLE.
* CLEAR: LW_FILETABLE.
* CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
* EXPORTING
* DEFAULT_EXTENSION = 'XLS'
* CHANGING
* FILE_TABLE = LT_FILETABLE
* RC = LV_RC
* EXCEPTIONS
* FILE_OPEN_DIALOG_FAILED = 1
* CNTL_ERROR = 2
* ERROR_NO_GUI = 3
* NOT_SUPPORTED_BY_GUI = 4
* OTHERS = 5.
* IF SY-SUBRC = 0.
* READ TABLE LT_FILETABLE INTO LW_FILETABLE INDEX 1.
* P_FILE = LW_FILETABLE-FILENAME.
* ENDIF.
*
**======================================================================*
** START-OF-SELECTION.
**======================================================================*
*START-OF-SELECTION.
*
* CREATE DATA GCL_GENERIC_TABLE_WA TYPE (P_TAB).
* CREATE DATA GCL_GENERIC_TABLE TYPE STANDARD TABLE OF (P_TAB).
* ASSIGN GCL_GENERIC_TABLE_WA->* TO <FS_TAB_WA>.
* ASSIGN GCL_GENERIC_TABLE->* TO <FS_TAB>.
*
* IF NOT CB_TEMP IS INITIAL.
* PERFORM FRM_DOWNLOAD_SAMPLE USING P_FILE.
* ELSE.
* PERFORM FRM_EXCEL_UPLOAD USING P_FILE.
* ENDIF.
*
*
**&---------------------------------------------------------------------*
**& Form FRM_CHECK_TABLE
**&---------------------------------------------------------------------*
** text
**----------------------------------------------------------------------*
*FORM FRM_CHECK_TABLE.
* DATA: LV_TABNAME TYPE TABNAME.
* IF P_TAB CP 'Z*'.
* SELECT SINGLE TABNAME FROM DD02L
* INTO LV_TABNAME
* WHERE TABNAME = P_TAB.
* CHECK SYST-SUBRC <> 0.
* MESSAGE E402(MO) WITH P_TAB.
* ELSE.
* MESSAGE 'Not allow to operate SAP tables' TYPE 'E'.
* ENDIF.
*ENDFORM. "FRM_CHECK_TABLE
*
**&---------------------------------------------------------------------*
**& Form frm_excel_upload
**&---------------------------------------------------------------------*
** text
**----------------------------------------------------------------------*
** -->P_FILE text
**----------------------------------------------------------------------*
*FORM FRM_EXCEL_UPLOAD USING P_FILE TYPE LOCALFILE.
*
** Get Data
* PERFORM FRM_GET_DATA USING P_FILE.
** Show Data in ALV for Check
* PERFORM FRM_SHOW_DATA.
*
*ENDFORM. "f_excel_upload
*
**&---------------------------------------------------------------------*
**& Form frm_get_data
**&---------------------------------------------------------------------*
** text
**----------------------------------------------------------------------*
** -->P_FILE text
**----------------------------------------------------------------------*
*FORM FRM_GET_DATA USING P_FILE TYPE LOCALFILE.
* DATA : LWA_INTERN TYPE KCDE_CELLS,
* LT_INTERN TYPE TABLE OF KCDE_CELLS,
* LV_INDEX TYPE I.
*
* FIELD-SYMBOLS : <FS_FIELD>.
*
* CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
* EXPORTING
* FILENAME = P_FILE
* I_BEGIN_COL = '1'
* I_BEGIN_ROW = '2'
* I_END_COL = '256'
* I_END_ROW = '65536'
* TABLES
* INTERN = LT_INTERN
* EXCEPTIONS
* INCONSISTENT_PARAMETERS = 1
* UPLOAD_OLE = 2.
*
* CHECK NOT LT_INTERN[] IS INITIAL.
* SORT LT_INTERN BY ROW COL.
*
* LOOP AT LT_INTERN INTO LWA_INTERN.
* LV_INDEX = LWA_INTERN-COL.
* ASSIGN COMPONENT LV_INDEX OF STRUCTURE <FS_TAB_WA> TO <FS_FIELD>.
* <FS_FIELD> = LWA_INTERN-VALUE.
* AT END OF ROW.
* APPEND <FS_TAB_WA> TO <FS_TAB>.
* CLEAR <FS_TAB_WA>.
* ENDAT.
* ENDLOOP.
*
* DELETE ADJACENT DUPLICATES FROM <FS_TAB>.
*ENDFORM. "frm_get_data
*
**&---------------------------------------------------------------------*
**& Form frm_show_data
**&---------------------------------------------------------------------*
** text
**----------------------------------------------------------------------*
*FORM FRM_SHOW_DATA.
*
* CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
* EXPORTING
* I_CALLBACK_PROGRAM = SY-REPID
* I_CALLBACK_PF_STATUS_SET = 'FRM_STATUS_SET'
* I_CALLBACK_USER_COMMAND = 'FRM_COMMAND'
* I_STRUCTURE_NAME = P_TAB
** I_GRID_TITLE = I_GRID_TITLE
* TABLES
* T_OUTTAB = <FS_TAB>
* EXCEPTIONS
* PROGRAM_ERROR = 1.
*
*ENDFORM. "frm_show_data
*
**&---------------------------------------------------------------------*
**& Form f_alv_status_set
**&---------------------------------------------------------------------*
** text
**----------------------------------------------------------------------*
** -->RT_EXTAB text
**----------------------------------------------------------------------*
*FORM FRM_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
* SET PF-STATUS 'PF' EXCLUDING RT_EXTAB.
*ENDFORM. "f01_alv_event_pf_status_set
**&---------------------------------------------------------------------*
**& Form mycommand
**&---------------------------------------------------------------------*
** text
**----------------------------------------------------------------------*
*FORM FRM_COMMAND USING R_UCOMM LIKE SY-UCOMM
* RS_SELFIELD TYPE SLIS_SELFIELD.
* DATA: LV_SUBRC TYPE SY-SUBRC.
* CASE R_UCOMM.
* WHEN 'UPDATE'.
* PERFORM FRM_UPDATE_DATA CHANGING LV_SUBRC.
* IF LV_SUBRC = 0.
* MESSAGE '更新成功.' TYPE 'S'.
* ELSE.
* MESSAGE '更新失败.' TYPE 'E'.
* ENDIF.
*
* WHEN 'BACK' OR 'CANCEL' OR 'EXIT'.
* LEAVE TO SCREEN 0.
* WHEN OTHERS.
* ENDCASE.
*
*ENDFORM. "frm_COMMAND
**&---------------------------------------------------------------------*
**& Form frm_update_data
**&---------------------------------------------------------------------*
** text
**----------------------------------------------------------------------*
*FORM FRM_UPDATE_DATA CHANGING O_SUBRC TYPE SYSUBRC.
**Update data
* IF <FS_TAB>[] IS NOT INITIAL.
* MODIFY (P_TAB) FROM TABLE <FS_TAB>.
* IF SY-SUBRC = 0.
* COMMIT WORK.
* ENDIF.
* O_SUBRC = SY-SUBRC.
* ENDIF.
*
*ENDFORM. "frm_update_data
**&---------------------------------------------------------------------*
**& Form FRM_DOWNLOAD_SAMPLE
**&---------------------------------------------------------------------*
** text
**----------------------------------------------------------------------*
** -->P_FILENAME text
**----------------------------------------------------------------------*
*FORM FRM_DOWNLOAD_SAMPLE USING P_FILE TYPE LOCALFILE.
*
** handles for OLE objects
* DATA: H_EXCEL TYPE OLE2_OBJECT, " Excel object
* H_MAPL TYPE OLE2_OBJECT, " list of workbooks
* H_MAP TYPE OLE2_OBJECT, " workbook
* H_ZL TYPE OLE2_OBJECT, " cell
* H_F TYPE OLE2_OBJECT. " font
*
* DATA: LWA_FIELD TYPE FIELDNAME,
* LV_J TYPE I.
*
* DATA:
* LS_FIELD TYPE GTY_S_FIELDS,
* LT_FIELD TYPE STANDARD TABLE OF GTY_S_FIELDS,
* LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
* LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
*
** Dynamic field description of a structure
* DATA: LCL_REF_DESCR TYPE REF TO CL_ABAP_STRUCTDESCR.
*
* FIELD-SYMBOLS <COMP> TYPE ANY.
*
* LCL_REF_DESCR ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( <FS_TAB_WA> ).
* CLEAR:
* LS_FIELD, LS_FIELDCAT.
*
* REFRESH:
* LT_FIELD, LT_FIELDCAT.
*
* CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
* EXPORTING
* I_PROGRAM_NAME = SY-REPID
* I_STRUCTURE_NAME = P_TAB
* CHANGING
* CT_FIELDCAT = LT_FIELDCAT
* EXCEPTIONS
* INCONSISTENT_INTERFACE = 1
* PROGRAM_ERROR = 2
* OTHERS = 3.
* IF SY-SUBRC <> 0.
** Implement suitable error handling here
* ENDIF.
*
** Export to excel
* LOOP AT LCL_REF_DESCR->COMPONENTS INTO GS_COMP.
* APPEND GS_COMP-NAME TO GT_FIELDS.
*
** ls_field-fieldname = gs_comp-name.
**
** READ TABLE lt_fieldcat INTO ls_fieldcat WITH KEY fieldname = ls_field-fieldname.
** IF sy-subrc = 0.
** ls_field-fieldtext = ls_fieldcat-seltext_l.
** ENDIF.
** APPEND ls_field TO lt_field.
** CLEAR: ls_field.
* ENDLOOP.
*
** start Excel
* CREATE OBJECT H_EXCEL 'EXCEL.APPLICATION'.
* SET PROPERTY OF H_EXCEL 'Visible' = 1.
** tell user what is going on
* CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
* EXPORTING
** PERCENTAGE = 0
* TEXT = 'Opening workbook...'
* EXCEPTIONS
* OTHERS = 1.
** get list of workbooks, initially empty
* CALL METHOD OF H_EXCEL 'Workbooks' = H_MAPL.
** add a new workbook
* CALL METHOD OF H_MAPL 'Add' = H_MAP.
** tell user what is going on
* CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
* EXPORTING
** PERCENTAGE = 0
* TEXT = 'Complete the internal table ...'
* EXCEPTIONS
* OTHERS = 1.
*
** output column headings to active Excel sheet
*
* LOOP AT GT_FIELDS INTO LWA_FIELD.
** LOOP AT lt_field INTO ls_field.
* LV_J = SY-TABIX.
* CALL METHOD OF H_EXCEL 'Cells' = H_ZL
* EXPORTING
* #1 = 1
* #2 = LV_J.
* SET PROPERTY OF H_ZL 'Value' = LWA_FIELD .
* GET PROPERTY OF H_ZL 'Font' = H_F.
* SET PROPERTY OF H_F 'Bold' = 1 .
* ENDLOOP.
*
** disconnect from Excel
* FREE OBJECT H_EXCEL.
*
*ENDFORM. " FRM_DOWNLOAD_SAMPLE