通用导入导出程序(内有完整代码)_第1页
通用导入导出程序(内有完整代码)_第2页
通用导入导出程序(内有完整代码)_第3页
通用导入导出程序(内有完整代码)_第4页
通用导入导出程序(内有完整代码)_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、通用导入导出程序 (可以自动生成模板)在SAP实施和运维过程中经常有需要批量将数量导入到透明表的场景。这时如何往往需要开发一些导入的程序。因为透明表的结构不同,所以这些导入程序往往只能对一个透明表进行导入,并且由于这些程序相当多,所以没有完整的下载备份数据和生成模板的功能。为了省时,作者开发这个通用导入导出程序,可以对所有的透明进行导出导入并且自动生成导入模板。另外提供跨CLIENT选项,用户可以选择只处理当前CLIENT的数据(这时模板中不会有MANDT字段)。-<这是详细说明的分割线(内有广告)>-功能一:下载导入模板和下载数据(可选)选择路径和文件名生成的模板打开之后的样子如

2、果带数据的话是这个样子如果选择跨CLIENT的话功能二:上传数据如果是导入系统透明表会有提示如果选择确定导入->还是会打开文件选择器选择了本地的模板文件就可导入了(注意跨CLIENT选择项,选择了跨CLIENT要使用带MANDT字段的模板。希望能对整数据的XDJM们有所帮助-<这是详细代码的分割线(木有广告)>-(以下是完整代码,COPY到系统中激活即可)*&-*& Report  ZRP_BC_GENERAL_IMPEXP*&*&-*&*&*&-*REPORT  zrp

3、_bc_general_impexp.TYPES:  gtyt_fieldcat TYPE lvc_t_fcat.*FIELD-SYMBOLS:*               <gft_tc> TYPE table.CONSTANTS:  gc_x TYPE char1 VALUE 'X', 

4、; gc_lp VALUE '(',  gc_rp VALUE ')',  gc_is VALUE '-'.DATA:      gr_excl TYPE RANGE OF lvc_fname WITH HEADER LINE.PARAMETERS:     &

5、#160;gp_tn TYPE tabname MEMORY ID  ztctm OBLIGATORY.SELECTION-SCREEN BEGIN OF BLOCK gc1 WITH FRAME TITLE g_gc1tx.PARAMETERS gp_dload RADIOBUTTON GROUP rg1 DEFAULT 'X' USER-COMMAND

6、60;gc1.SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN COMMENT 2(20) g_icdat MODIF ID gc1.PARAMETERS gp_icda AS CHECKBOX MODIF ID gc1.SELECTION-SCREEN END OF LINE.PARAMETERS gp_uload RADIOBUTTON 

7、GROUP rg1.SELECTION-SCREEN END OF BLOCK gc1.SELECTION-SCREEN SKIP 1.PARAMETERS gp_mandt AS CHECKBOX .LOAD-OF-PROGRAM.  PERFORM sub_init_screen.INITIALIZATION.AT SELECTION-SCREEN OUTPUT.  PERFORM sub_pbo_10

8、00.AT SELECTION-SCREEN.  IF sy-ucomm = 'ONLI'.    PERFORM sub_check_screen.    PERFORM sub_init_object.    CASE gc_x.      WHEN gp_dload.  

9、60;     PERFORM sub_download_1000 CHANGING sy-subrc.      WHEN gp_uload.        PERFORM sub_upload_1000 CHANGING sy-subrc.    ENDCASE.  

10、0; IF sy-subrc <> 0.      MESSAGE '出现错误!' TYPE 'E' .    ELSE.      CASE gc_x.        WHEN gp_dload. 

11、60;        MESSAGE '下载成功!' TYPE 'S' .        WHEN gp_uload.          MESSAGE '上传成功!' TYPE 'S' 

12、;.      ENDCASE.    ENDIF.  ENDIF.*START-OF-SELECTION.*&-*&      Form  sub_init_screen*&-*       text*-*FORM sub_init_screen.  g_gc1tx

13、0;= '你想干什么?'.  g_icdat = '同时下载数据(仅限于表)'.ENDFORM .                    "sub_init_screen*&-*&      Form  

14、;sub_pbo_1000*&-*       text*-*FORM sub_pbo_1000.*  break-point.  LOOP AT SCREEN.    IF screen-group1 = 'GC1'.      IF gp_dload = gc_x.

15、60;       CLEAR screen-invisible.      ELSE.        screen-invisible = 1.      ENDIF.      MODIFY SCREEN. 

16、0;  ENDIF.  ENDLOOP.ENDFORM.                    "sub_pbo_1000*&-*&      Form  sub_check_screen*&-*    &

17、#160;  text*-*FORM sub_check_screen.  TRANSLATE gp_tn TO UPPER CASE.  IF gp_uload = gc_x  AND ( gp_tn(1) <> 'Z'   OR gp_tn(1) <> 'Y' ).&#

18、160;   DATA:          l_answer.    CALL FUNCTION 'POPUP_TO_CONFIRM'      EXPORTING        titlebar     

19、;               = sy-title*       DIAGNOSE_OBJECT             = ' '      

20、;  text_question               = '你导入的表是系统标准表,随意修改有可以导致系统崩溃!'       text_button_1              &#

21、160;= '确定导入!'(001)       icon_button_1               = 'ICON_IMPORT'       text_button_2       

22、;        = '不导算了'       icon_button_2               = 'ICON_CANCEL'       default_button&

23、#160;             = '2'       display_cancel_button       = space*       USERDEFINED_F1_HELP   &#

24、160;     = ' '*       START_COLUMN                = 25*       START_ROW     &

25、#160;             = 6*       POPUP_TYPE                  =*       IV_Q

26、UICKINFO_BUTTON_1       = ' '*       IV_QUICKINFO_BUTTON_2       = ' '       IMPORTING      &#

27、160;  answer                      = l_answer*     TABLES*       PARAMETER       

28、            =     EXCEPTIONS       text_not_found              = 1      

29、60;OTHERS                      = 2.    IF sy-subrc <> 0.      MESSAGE ID sy-msgid TYPE sy-msgt

30、y NUMBER sy-msgno              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.    ELSE.      IF l_answer = '2'.   

31、0;    LEAVE SCREEN.      ELSE.        MESSAGE '导入系统标准表功能暂时取消,请等待项目组通知再开放使用!' TYPE 'E'.      ENDIF.    ENDIF.  ENDI

32、F.ENDFORM.                    "sub_check_screen*&-*&      Form  sub_init_object*&-*       text*-*FORM s

33、ub_init_object.  REFRESH gr_excl.  gr_excl-sign = 'I'. gr_excl-option = 'EQ'. gr_excl-low = 'ZZZZZZZZ99999999'. APPEND gr_excl.  IF gp_mandt <> gc_x.   

34、60;gr_excl-sign = 'I'. gr_excl-option = 'EQ'. gr_excl-low = 'MANDT'. APPEND gr_excl.  ENDIF.ENDFORM.                   &#

35、160;"sub_init_object*&-*&      Form  sub_download_1000*&-*       text*-*FORM sub_download_1000 CHANGING value(p_subrc) LIKE sy-subrc.  DATA:     

36、60;  lt_fct TYPE gtyt_fieldcat,        lt_fcts TYPE gtyt_fieldcat.  DATA:        lt_ref TYPE REF TO data,        lt_ref2

37、 TYPE REF TO data,        l_path  LIKE rlgrap-filename,        l_len TYPE c LENGTH 6.  FIELD-SYMBOLS:         

38、        <lfs_fct> LIKE LINE OF lt_fct,                 <lft_data> TYPE table,         &#

39、160;       <lfs_data> TYPE ANY,                 <lfs_fcts> LIKE LINE OF lt_fcts,         

40、0;       <lft_datatp> TYPE table,                 <lfs_datatp> TYPE ANY,            

41、0;    <lf_comp>.  p_subrc = 4.  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'    EXPORTING      i_structure_name       = gp_tn   

42、; CHANGING      ct_fieldcat            = lt_fct    EXCEPTIONS      inconsistent_interface = 1      program_err

43、or          = 2      OTHERS                 = 3.  IF sy-subrc <> 0.    MES

44、SAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.  ELSE.    lt_fcts = lt_fct.    

45、;DELETE lt_fcts WHERE fieldname IN gr_excl.    LOOP AT lt_fcts ASSIGNING <lfs_fct>.      CLEAR:        <lfs_fct>-domname,     &#

46、160;  <lfs_fct>-decimals,        <lfs_fct>-tech,        <lfs_fct>-ref_table,        <lfs_fct>-ref_field,       

47、 <lfs_fct>-tabname.      <lfs_fct>-datatype = 'CHAR'.      <lfs_fct>-inttype = 'C'.      IF <lfs_fct>-intlen < 30.  &

48、#160;     <lfs_fct>-intlen = <lfs_fct>-outputlen = 30.      ENDIF.    ENDLOOP.    CALL METHOD cl_alv_table_create=>create_dynamic_table    &

49、#160; EXPORTING        it_fieldcatalog           = lt_fcts      IMPORTING        ep_table      

50、            = lt_ref      EXCEPTIONS        generate_subpool_dir_full = 1.    IF sy-subrc <> 0.   &

51、#160;  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.    ENDIF.    ASSIG

52、N lt_ref->* TO <lft_datatp>.    APPEND INITIAL LINE TO <lft_datatp> ASSIGNING <lfs_datatp>.    LOOP AT lt_fcts ASSIGNING <lfs_fcts>.      

53、READ TABLE lt_fct ASSIGNING <lfs_fct> WITH KEY fieldname = <lfs_fcts>-fieldname.      ASSIGN COMPONENT <lfs_fcts>-fieldname OF STRUCTURE <lfs_datatp> TO <lf_comp&g

54、t;.      IF sy-subrc = 0.*        IF <lfs_fcts>-fieldname CP 'ZDSE*'.*          <lf_comp> = '常量“/”'.*  

55、;      ELSE.        CLEAR l_len.        WRITE <lfs_fct>-intlen TO l_len NO-ZERO.        CONDENSE l_len NO-GAP

56、S.        CONCATENATE <lfs_fcts>-scrtext_m gc_lp <lfs_fct>-inttype l_len gc_rp INTO <lf_comp>.*        ENDIF.      ENDIF.  

57、0; ENDLOOP.    APPEND INITIAL LINE TO <lft_datatp> ASSIGNING <lfs_datatp>.    LOOP AT lt_fcts ASSIGNING <lfs_fcts>.      ASSIGN COMPONENT <lfs_f

58、cts>-fieldname OF STRUCTURE <lfs_datatp> TO <lf_comp>.      IF sy-subrc = 0.        PERFORM frm_repeat_char          USI

59、NG                <lfs_fcts>-intlen                gc_is          CHANGING 

60、0;              <lf_comp>.      ENDIF.    ENDLOOP.    IF gp_icda = gc_x.      CALL METHOD cl_alv_ta

61、ble_create=>create_dynamic_table        EXPORTING          it_fieldcatalog           = lt_fct        IMPORT

62、ING          ep_table                  = lt_ref2        EXCEPTIONS        &

63、#160; generate_subpool_dir_full = 1.      IF sy-subrc <> 0.        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno        

64、        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.      ENDIF.      ASSIGN lt_ref2->* TO <lft_data>.      IF gp_mandt 

65、;= gc_x.        SELECT *  FROM (gp_tn) CLIENT SPECIFIED APPENDING CORRESPONDING FIELDS OF  TABLE <lft_data>.      ELSE.      

66、;  SELECT * FROM (gp_tn) APPENDING CORRESPONDING FIELDS OF  TABLE <lft_data>.      ENDIF.      LOOP AT <lft_data> ASSIGNING <lfs_data>. &

67、#160;      APPEND INITIAL LINE TO <lft_datatp> ASSIGNING <lfs_datatp>.        MOVE-CORRESPONDING <lfs_data> TO <lfs_datatp>.      E

68、NDLOOP.      FREE:        lt_ref2,        <lft_data>.    ENDIF.*    BREAK-POINT.    PERFORM get_localfilepath 

69、0;              USING                   'XLS'             

70、0;     'S'                   sy-title                CHANGING     &

71、#160;             l_path.    IF sy-subrc <> 0.      IF sy-subrc = 3.        LEAVE SCREEN.  

72、60;   ELSE.        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno                WITH sy-msgv1 sy-msgv2 sy-msgv3 

73、;sy-msgv4.      ENDIF.    ELSE.      DATA:            l_str TYPE string.      l_str = l_path.   

74、;   CALL FUNCTION 'GUI_DOWNLOAD'        EXPORTING*       BIN_FILESIZE                    =&#

75、160;         filename                        = l_str          filetype 

76、0;                      = 'DAT'*       APPEND                &

77、#160;         = ' '*       WRITE_FIELD_SEPARATOR           = ' '*       HEADER  

78、0;                       = '00'*       TRUNC_TRAILING_BLANKS           = '

79、; '*       WRITE_LF                        = 'X'*       COL_SELECT   

80、0;                  = ' '*       COL_SELECT_MASK                 = 

81、' '*       DAT_MODE                        = ' '*       CONFIRM_OVERWRITE 

82、              = ' '*       NO_AUTH_CHECK                   = ' '

83、*       CODEPAGE                        = ' '*       IGNORE_CERR    

84、0;                = ABAP_TRUE*       REPLACEMENT                     = 

85、;'#'*       WRITE_BOM                       = ' '*       TRUNC_TRAILING_BLANKS_EOL &

86、#160;     = 'X'*       WK1_N_FORMAT                    = ' '*       WK1_N_

87、SIZE                      = ' '*       WK1_T_FORMAT              &#

88、160;     = ' '*       WK1_T_SIZE                      = ' '*     

89、0; WRITE_LF_AFTER_LAST_LINE        = ABAP_TRUE*       SHOW_TRANSFER_STATUS            = ABAP_TRUE*     IMPORTING*  

90、     FILELENGTH                      =        TABLES          data_tab 

91、;                       = <lft_datatp>*       FIELDNAMES              

92、;        =       EXCEPTIONS         file_write_error                = 1    

93、     no_batch                        = 2         gui_refuse_filetransfer     

94、60;   = 3         invalid_type                    = 4         no_authority  

95、;                  = 5         unknown_error                   =&

96、#160;6         header_not_allowed              = 7         separator_not_allowed         &

97、#160; = 8         filesize_not_allowed            = 9         header_too_long         

98、0;       = 10         dp_error_create                 = 11         dp_error_send

99、                   = 12         dp_error_write                  =

100、 13         unknown_dp_error                = 14         access_denied        &#

101、160;          = 15         dp_out_of_memory                = 16        

102、0;disk_full                       = 17         dp_timeout             

103、         = 18         file_not_found                  = 19        

104、0;dataprovider_exception          = 20         control_flush_error             = 21        

105、; OTHERS                          = 22                .    &

106、#160; IF sy-subrc <> 0.        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno                WITH sy-msgv1 sy-m

107、sgv2 sy-msgv3 sy-msgv4.      ELSE.        p_subrc = 0.*        DATA:*              l_answer.* &

108、#160;      CALL FUNCTION 'POPUP_TO_CONFIRM'*          EXPORTING*            titlebar         

109、0;          = sy-title*       DIAGNOSE_OBJECT             = ' '*          

110、60; text_question               = '是否马上打开下载的模板进行编辑?'*           text_button_1            

111、60;  = '马上打开'*           icon_button_1               = 'ICON_XLS'*           te

112、xt_button_2               = '以后再处理'*           icon_button_2               = 

113、'ICON_CANCEL'*           default_button              = '2'*           display_cancel_button &#

114、160;     = space*       USERDEFINED_F1_HELP         = ' '*       START_COLUMN          

115、      = 25*       START_ROW                   = 6*       POPUP_TYPE    

116、0;             =*       IV_QUICKINFO_BUTTON_1       = ' '*       IV_QUICKINFO_BUTTON_2    &#

117、160;  = ' '*           IMPORTING*             answer                

118、0;     = l_answer*     TABLES*       PARAMETER                   =*        

119、 EXCEPTIONS*           text_not_found              = 1*           OTHERS      &#

120、160;               = 2.*        IF sy-subrc <> 0.*          IF sy-subrc = 3.*   

121、;         LEAVE SCREEN.*          ELSE.*            MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno* &#

122、160;                  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.*          ENDIF.*        ELSE.* 

123、;         IF l_answer = '1'.*            BREAK-POINT.*            CALL FUNCTION 'WS_EXECUTE'*&

124、#160;            EXPORTING*           DOCUMENT                 = ' '*  &

125、#160;        CD                       = ' '*              

126、;  commandline              = l_str*           INFORM                  

127、; = ' '*                program                  = 'EXCEL'*      

128、;     STAT                     = ' '*           WINID       &#

129、160;            = ' '*           OSMAC_SCRIPT             = ' '*   &#

130、160;       OSMAC_CREATOR            = ' '*           WIN16_EXT           

131、0;    = ' '*           EXEC_RC                  = ' '*       

132、60; IMPORTING*           RBUFF                    =*             EXCEPTIONS

133、*               frontend_error           = 1*               no_batch   

134、0;             = 2*               prog_not_found           = 3*     &#

135、160;         illegal_option           = 4*               gui_refuse_execute       =&#

136、160;5*               OTHERS                   = 6*            

137、60;         .*            IF sy-subrc <> 0.*              MESSAGE ID sy-msgid TYPE s

138、y-msgty NUMBER sy-msgno*                      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.*            

139、ENDIF.*            data:l_returncode type i.*            CALL FUNCTION 'GUI_EXEC'*           

140、0;  EXPORTING*                command          = l_path*               PARAMETER

141、        =*              IMPORTING*               RETURNCODE       = l_retur

142、ncode*                      .*            CALL FUNCTION 'ITS_EXECUTE'*       

143、      EXPORTING*               DOCUMENT                 = ' '*     

144、          CD                       = ' '*            

145、0;   commandline              = l_str*               INFORM            

146、0;      = ' '*                program                  = 'EXCEL'*

147、0;              STAT                     = ' '*          

148、     WINID                    = ' '*               OSMAC_SCRIPT   &

149、#160;         = ' '*               OSMAC_CREATOR            = ' '*   

150、            WIN16_EXT                = ' '*               EXEC_RC&#

151、160;                 = ' '*             IMPORTING*             

152、0; RBUFF                    =*             EXCEPTIONS*            

153、0;  frontend_error           = 1*               prog_not_found           = 2*   

154、            gui_refuse_execute       = 3*               OTHERS          

155、60;        = 4*                      .*            IF sy-subrc <>

156、0;0.*              MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno*                      

157、;WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.*            ENDIF.*            call method CL_GUI_FRONTEND_SERVICES=>EXECUTE*    

158、60;         EXPORTING*                DOCUMENT = l_str*                APPLICATION

159、60;= 'EXCEL'*                PARAMETER = l_str*              EXCEPTIONS*         &

160、#160;      CNTL_ERROR  = 1*                ERROR_NO_GUI = 2*                BAD_PARAM

161、ETER = 3*                FILE_NOT_FOUND = 4*                PATH_NOT_FOUND = 5*     &

162、#160;          FILE_EXTENSION_UNKNOWN = 6*                ERROR_EXECUTE_FAILED = 7*           &

163、#160;    SYNCHRONOUS_FAILED = 8*                NOT_SUPPORTED_BY_GUI = 9*                others = 10.*            IF sy-subrc <> 0.*  

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论