您的位置:首页 > 其它

ABAP动态生成经典应用之Table数据Upload 程序

2015-06-18 15:12 435 查看
开发说明:在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字段,其他字段数据对应
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: