ABAP动态生成经典应用之Table数据Upload 程序
生活随笔
收集整理的這篇文章主要介紹了
ABAP动态生成经典应用之Table数据Upload 程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
開發說明:在CBO的程序開發過程中,需要為Table準備大量的測試數據,手動錄入效率低,不專業,我們可以采用其他的高級編輯工具(例如:EXCEL,EditPlus)按照Table數據存儲結構準備好數據,最后保存為ASC的文本文件,通過執行下面開發的程序,下面的程序執行的功能就是把編輯好的文本文件上的數據上載到SAP對應的Table中,小程序非常實用,也適用于我們大量更新Table數據時使用,ABAPer們的手頭必備啊!
開發技術:
1.文本文件上載技術
2.動態程序代碼生成技術
3.ABAP動態程序執行技術
4.TXT文本文件對應用Table字段編輯技術
注意事項:
文件文件編輯過程中時間日期格式為 20060201 120000 表示 2006.02.01 12:00:00
文本文件中不能包含除字符,數字之外的其他特殊符號。假如Table中對應的字段數據為空時,在編輯數據時也對應該列為空。
程序代碼:如下
*******************************************************************
* (Copyright @2006 Mysingle Digital System Co.Ltd.
* All Rights Reserved|Confidential)
* System Module??????? :? ABAP CBO
* Program Description? :? Table Upload & Download
* Developer?????????? ?:? ZOU XIN
* Develop Date???????? :? 2006.01.01
* Use Status?????????? :? Release 1.0
*******************************************************************
REPORT z_cbo_abap_01 NO STANDARD PAGE HEADING. TABLES : dd03l,dd02t. DATA: BEGIN OF tab OCCURS 10,
??????? fcode(4),
????? END OF tab.
DATA : BEGIN OF itab OCCURS 0,
????????chk(1) TYPE c,??????????????????? ?" check box
????????tabname??? LIKE dd03l-tabname,???? " Table name
????????fieldname? LIKE dd03l-fieldname,?? " Feld Name
????????position?? LIKE dd03l-position,??? " Table
????????keyflag??? LIKE dd03l-keyflag,???? " Primary Key
????????datatype?? LIKE dd03l-datatype,??? " Data Type
????????intlen???? LIKE dd03l-leng,
?????? END OF itab.
DATA itab1 LIKE itab OCCURS 0 WITH HEADER LINE.
DATA : BEGIN OF uptab OCCURS 0,
??????? text(72) TYPE c,
?????? END OF uptab.
DATA: BEGIN OF error_message,
??????? line1(72),
??????? line2(72),
??????? line3(72),
????? END OF error_message.
DATA : cnt1(8) TYPE c,
?????? fcode LIKE sy-ucomm,
?????? changed LIKE s38e-buf_varied,
?????? prog(8) TYPE c,
?????? msg(120) TYPE c,
?????? er_include LIKE sy-repid,
?????? er_line??? LIKE sy-index,
?????? er_off???? LIKE sy-tabix,
?????? er_subrc?? LIKE sy-subrc. * 程序錄入界面 PARAMETERS : tabname LIKE dd03l-tabname DEFAULT 'ZP023'.
? START-OF-SELECTION. *上載Table字段分析 SELECT SINGLE * FROM dd02t WHERE tabname = tabname.
? SET PF-STATUS 'ZOUXIN'.
? SELECT * INTO CORRESPONDING FIELDS OF TABLE itab FROM dd03l
????????????? WHERE tabname = tabname
????????????? AND as4local = 'A'
????????????? ORDER BY position.
? itab-chk = 'X'. MODIFY itab INDEX 1 TRANSPORTING chk .
*動態上載程序代碼生成函數
? PERFORM generate_upload_code. *ABAP程序代碼編輯器調用
? PERFORM edit_generator_code. AT USER-COMMAND .
? IF sy-ucomm = 'EDIT'.
??? PERFORM edit_generator_code.
? ELSEIF sy-ucomm = 'EXEC'. GENERATE SUBROUTINE POOL uptab NAME prog MESSAGE msg. *程序代碼語法檢測
??? PERFORM chcek_syntax_error. *動態程序代碼執行
??? PERFORM dyn1 IN PROGRAM (prog).
? ENDIF. *&---------------------------------------------------------------*
*&????? Form? generate_upload_code
*&---------------------------------------------------------------* FORM generate_upload_code.
? REFRESH uptab.
? uptab-text = 'REPORT ZUP19800526.'.
? APPEND uptab.
? CONCATENATE 'TABLES :' tabname '.' INTO uptab-text
? SEPARATED BY space.
? APPEND uptab.
? uptab-text = 'DATA : BEGIN OF UPTAB OCCURS 0,'.
? APPEND uptab.
? LOOP AT itab WHERE chk = ''.
??? CLEAR uptab.
??? CONCATENATE '??' itab-fieldname '(' itab-intlen? ')'? ' TYPE C ,'
??????????????? INTO uptab-text+10(80).
??? APPEND uptab.
? ENDLOOP.
? uptab-text+6(82) = 'END OF UPTAB.'.
? APPEND uptab.
? uptab-text = 'DATA : BEGIN OF RESULT OCCURS 0.'.
? APPEND uptab.
? CLEAR uptab.
? CONCATENATE 'INCLUDE STRUCTURE' itab-tabname '.'
?????????????? INTO uptab-text+10(80) SEPARATED BY space.
? APPEND uptab.
? uptab-text = 'DATA : END OF RESULT.'.
? APPEND uptab.
? uptab-text = 'FORM DYN1.'.
? APPEND uptab.
? CLEAR uptab.
? uptab-text+2(88) = 'CALL FUNCTION ''UPLOAD'''.
? APPEND uptab.
? CLEAR uptab.
? uptab-text+4(86) = 'EXPORTING'.
? APPEND uptab.
? CLEAR uptab.
? uptab-text+6(84) = 'FILENAME = ''C:/'''.
? APPEND uptab.
? uptab-text+6(84) = 'FILETYPE = ''DAT'''.
? APPEND uptab.
? uptab-text+4(86) = 'TABLES'.
? APPEND uptab.
? CLEAR uptab.
? uptab-text+6(84) = 'DATA_TAB = UPTAB.'.
? APPEND uptab.
? uptab-text+2(88) = 'LOOP AT UPTAB.'.
? APPEND uptab.
? CLEAR uptab.
? uptab-text+4(86) = 'CLEAR RESULT.'.
? APPEND uptab.
? uptab-text+4(86) = 'MOVE-CORRESPONDING UPTAB TO RESULT.'.
? APPEND uptab.
? uptab-text+4(86) = 'APPEND RESULT.'.
? APPEND uptab.
? uptab-text+2(88) = 'ENDLOOP.'.
? APPEND uptab.
? CLEAR uptab.
? CONCATENATE 'INSERT'? itab-tabname 'FROM TABLE RESULT.'
????????????? INTO uptab-text+2(88) SEPARATED BY space.
? APPEND uptab.
? uptab-text = 'ENDFORM.' .
? APPEND uptab.
? CLEAR uptab.
ENDFORM.??????????????????? " generate_upload_code *&---------------------------------------------------------------*
*&????? Form? edit_generator_code
*&---------------------------------------------------------------* FORM edit_generator_code.
? CALL FUNCTION 'EDITOR_APPLICATION'
?????? EXPORTING
??????????? application = 'BF'
??????????? display???? = ' '
??????????? name??????? = 'Source Code.....'
?????? IMPORTING
??????????? fcode?????? = fcode
??????????? changed???? = changed
?????? TABLES
??????????? content???? = uptab.
? LOOP AT uptab.
??? WRITE:/1 uptab-text.
? ENDLOOP.
ENDFORM.?????????????????????????????? " PRINT_GENERATOR_CODE *&---------------------------------------------------------------*
*&????? Form? chcek_syntax_error
*&---------------------------------------------------------------* FORM chcek_syntax_error.
? CALL FUNCTION 'EDITOR_SYNTAX_CHECK'
?????? EXPORTING
??????????? i_global_check?? = ' '
??????????? i_global_program = ' '
??????????? i_program??????? = 'ZUP19800526'
??????????? i_r2_check?????? = ' '
??????????? i_r2_destination = ' '
??????????? i_trdir????????? = ' '
?????? IMPORTING
??????????? o_error_include? = er_include
??????????? o_error_line???? = er_line
??????????? o_error_message? = error_message
??????????? o_error_offset?? = er_off
??????????? o_error_subrc??? = er_subrc
?????? TABLES
??????????? i_source???????? = uptab.
? IF er_subrc <> 0.
??? er_line = er_line - 2.
??? WRITE:/1 'Error Line : ',er_line.
??? WRITE:/1 error_message-line1,error_message-line2,
???????????? error_message-line3.
??? STOP.
? ENDIF.
ENDFORM.??????????????????? " chcek_syntax_error
1.程序初始界面,輸入Upload的table名.
2.程序運行第一界面,顯示程序自動生成的上載程序代碼
3.程序運行第二界面,確認程序自動生成的上載程序代碼,執行
4.程序運行第三界面中小界面,程序執行提示輸入上在數據具體路徑
5.OK,數據上載成功
補充1:上載數據文件格式,*.TXT DAT格式文件,俗稱純文本文件
補充2:SAP Table格式,注意不要理會Mandt Client字段,其他字段數據對應
* (Copyright @2006 Mysingle Digital System Co.Ltd.
* All Rights Reserved|Confidential)
* System Module??????? :? ABAP CBO
* Program Description? :? Table Upload & Download
* Developer?????????? ?:? ZOU XIN
* Develop Date???????? :? 2006.01.01
* Use Status?????????? :? Release 1.0
*******************************************************************
REPORT z_cbo_abap_01 NO STANDARD PAGE HEADING. TABLES : dd03l,dd02t. DATA: BEGIN OF tab OCCURS 10,
??????? fcode(4),
????? END OF tab.
DATA : BEGIN OF itab OCCURS 0,
????????chk(1) TYPE c,??????????????????? ?" check box
????????tabname??? LIKE dd03l-tabname,???? " Table name
????????fieldname? LIKE dd03l-fieldname,?? " Feld Name
????????position?? LIKE dd03l-position,??? " Table
????????keyflag??? LIKE dd03l-keyflag,???? " Primary Key
????????datatype?? LIKE dd03l-datatype,??? " Data Type
????????intlen???? LIKE dd03l-leng,
?????? END OF itab.
DATA itab1 LIKE itab OCCURS 0 WITH HEADER LINE.
DATA : BEGIN OF uptab OCCURS 0,
??????? text(72) TYPE c,
?????? END OF uptab.
DATA: BEGIN OF error_message,
??????? line1(72),
??????? line2(72),
??????? line3(72),
????? END OF error_message.
DATA : cnt1(8) TYPE c,
?????? fcode LIKE sy-ucomm,
?????? changed LIKE s38e-buf_varied,
?????? prog(8) TYPE c,
?????? msg(120) TYPE c,
?????? er_include LIKE sy-repid,
?????? er_line??? LIKE sy-index,
?????? er_off???? LIKE sy-tabix,
?????? er_subrc?? LIKE sy-subrc. * 程序錄入界面 PARAMETERS : tabname LIKE dd03l-tabname DEFAULT 'ZP023'.
? START-OF-SELECTION. *上載Table字段分析 SELECT SINGLE * FROM dd02t WHERE tabname = tabname.
? SET PF-STATUS 'ZOUXIN'.
? SELECT * INTO CORRESPONDING FIELDS OF TABLE itab FROM dd03l
????????????? WHERE tabname = tabname
????????????? AND as4local = 'A'
????????????? ORDER BY position.
? itab-chk = 'X'. MODIFY itab INDEX 1 TRANSPORTING chk .
*動態上載程序代碼生成函數
? PERFORM generate_upload_code. *ABAP程序代碼編輯器調用
? PERFORM edit_generator_code. AT USER-COMMAND .
? IF sy-ucomm = 'EDIT'.
??? PERFORM edit_generator_code.
? ELSEIF sy-ucomm = 'EXEC'. GENERATE SUBROUTINE POOL uptab NAME prog MESSAGE msg. *程序代碼語法檢測
??? PERFORM chcek_syntax_error. *動態程序代碼執行
??? PERFORM dyn1 IN PROGRAM (prog).
? ENDIF. *&---------------------------------------------------------------*
*&????? Form? generate_upload_code
*&---------------------------------------------------------------* FORM generate_upload_code.
? REFRESH uptab.
? uptab-text = 'REPORT ZUP19800526.'.
? APPEND uptab.
? CONCATENATE 'TABLES :' tabname '.' INTO uptab-text
? SEPARATED BY space.
? APPEND uptab.
? uptab-text = 'DATA : BEGIN OF UPTAB OCCURS 0,'.
? APPEND uptab.
? LOOP AT itab WHERE chk = ''.
??? CLEAR uptab.
??? CONCATENATE '??' itab-fieldname '(' itab-intlen? ')'? ' TYPE C ,'
??????????????? INTO uptab-text+10(80).
??? APPEND uptab.
? ENDLOOP.
? uptab-text+6(82) = 'END OF UPTAB.'.
? APPEND uptab.
? uptab-text = 'DATA : BEGIN OF RESULT OCCURS 0.'.
? APPEND uptab.
? CLEAR uptab.
? CONCATENATE 'INCLUDE STRUCTURE' itab-tabname '.'
?????????????? INTO uptab-text+10(80) SEPARATED BY space.
? APPEND uptab.
? uptab-text = 'DATA : END OF RESULT.'.
? APPEND uptab.
? uptab-text = 'FORM DYN1.'.
? APPEND uptab.
? CLEAR uptab.
? uptab-text+2(88) = 'CALL FUNCTION ''UPLOAD'''.
? APPEND uptab.
? CLEAR uptab.
? uptab-text+4(86) = 'EXPORTING'.
? APPEND uptab.
? CLEAR uptab.
? uptab-text+6(84) = 'FILENAME = ''C:/'''.
? APPEND uptab.
? uptab-text+6(84) = 'FILETYPE = ''DAT'''.
? APPEND uptab.
? uptab-text+4(86) = 'TABLES'.
? APPEND uptab.
? CLEAR uptab.
? uptab-text+6(84) = 'DATA_TAB = UPTAB.'.
? APPEND uptab.
? uptab-text+2(88) = 'LOOP AT UPTAB.'.
? APPEND uptab.
? CLEAR uptab.
? uptab-text+4(86) = 'CLEAR RESULT.'.
? APPEND uptab.
? uptab-text+4(86) = 'MOVE-CORRESPONDING UPTAB TO RESULT.'.
? APPEND uptab.
? uptab-text+4(86) = 'APPEND RESULT.'.
? APPEND uptab.
? uptab-text+2(88) = 'ENDLOOP.'.
? APPEND uptab.
? CLEAR uptab.
? CONCATENATE 'INSERT'? itab-tabname 'FROM TABLE RESULT.'
????????????? INTO uptab-text+2(88) SEPARATED BY space.
? APPEND uptab.
? uptab-text = 'ENDFORM.' .
? APPEND uptab.
? CLEAR uptab.
ENDFORM.??????????????????? " generate_upload_code *&---------------------------------------------------------------*
*&????? Form? edit_generator_code
*&---------------------------------------------------------------* FORM edit_generator_code.
? CALL FUNCTION 'EDITOR_APPLICATION'
?????? EXPORTING
??????????? application = 'BF'
??????????? display???? = ' '
??????????? name??????? = 'Source Code.....'
?????? IMPORTING
??????????? fcode?????? = fcode
??????????? changed???? = changed
?????? TABLES
??????????? content???? = uptab.
? LOOP AT uptab.
??? WRITE:/1 uptab-text.
? ENDLOOP.
ENDFORM.?????????????????????????????? " PRINT_GENERATOR_CODE *&---------------------------------------------------------------*
*&????? Form? chcek_syntax_error
*&---------------------------------------------------------------* FORM chcek_syntax_error.
? CALL FUNCTION 'EDITOR_SYNTAX_CHECK'
?????? EXPORTING
??????????? i_global_check?? = ' '
??????????? i_global_program = ' '
??????????? i_program??????? = 'ZUP19800526'
??????????? i_r2_check?????? = ' '
??????????? i_r2_destination = ' '
??????????? i_trdir????????? = ' '
?????? IMPORTING
??????????? o_error_include? = er_include
??????????? o_error_line???? = er_line
??????????? o_error_message? = error_message
??????????? o_error_offset?? = er_off
??????????? o_error_subrc??? = er_subrc
?????? TABLES
??????????? i_source???????? = uptab.
? IF er_subrc <> 0.
??? er_line = er_line - 2.
??? WRITE:/1 'Error Line : ',er_line.
??? WRITE:/1 error_message-line1,error_message-line2,
???????????? error_message-line3.
??? STOP.
? ENDIF.
ENDFORM.??????????????????? " chcek_syntax_error
1.程序初始界面,輸入Upload的table名.
2.程序運行第一界面,顯示程序自動生成的上載程序代碼
3.程序運行第二界面,確認程序自動生成的上載程序代碼,執行
4.程序運行第三界面中小界面,程序執行提示輸入上在數據具體路徑
5.OK,數據上載成功
補充1:上載數據文件格式,*.TXT DAT格式文件,俗稱純文本文件
補充2:SAP Table格式,注意不要理會Mandt Client字段,其他字段數據對應
總結
以上是生活随笔為你收集整理的ABAP动态生成经典应用之Table数据Upload 程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Payment Terms 付款条件
- 下一篇: ABAP动态生成经典应用之Dynamic