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