发布时间:2025-10-17 11:27:06    次浏览
ABAP如何实现批量更新数据表在ABAP开发中,此程序可以根据输入的表名,生成对表操作的ABAP源程序,然后系统运行产生的源程序,会让你选择要导入文件。文件要符合表的结构。批量更新数据表,可以用于批量导入,准备数据可以用EXCEL,sql server,准备数据并导出成文本文件。开发技术:1.文本文件上载技术2.动态程序代码生成技术3.ABAP动态程序执行技术4.TXT文本文件对应用Table字段编辑技术CODE:注意事项:文件文件编辑过程中时间日期格式为 20060201 120000 表示 2006.02.01 12:00:00文本文件中不能包含除字符,数字之外的其他特殊符号。假如Table中对应的字段数据为空时,在编辑数据时也对应该列为空。程序代码:如下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 boxtabname LIKE dd03l-tabname, ' Table namefieldname LIKE dd03l-fieldname, ' Feld Nameposition LIKE dd03l-position, ' Tablekeyflag LIKE dd03l-keyflag, ' Primary Keydatatype LIKE dd03l-datatype, ' Data Typeintlen LIKE dd03l-leng,END OF itab.DATA itab1 LIKE itab OCCURS 0 WITH HEADER LINE.DATA : BEGIN OF uptab OCCURS 0,text(100) 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 'ZSTATUS'.'自己定义这个gui stautsSELECT * INTO CORRESPONDING FIELDS OF TABLE itab FROM dd03lWHERE tabname = tabnameAND as4local = 'A'ORDER BY position.itab-chk = 'X'.MODIFY itab INDEX 1 TRANSPORTING chk .*动态上载程序代码生成函数PERFORM generate_upload_code.*ABAP程序代码编辑器调用PERFORM edit_generator_code.'下面要自己定义GUI Status.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-textSEPARATED 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'EXPORTINGapplication = 'BF'display = ' 'name = 'Source Code.....'IMPORTINGfcode = fcodechanged = changedTABLEScontent = 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'EXPORTINGi_global_check = ' 'i_global_program = ' 'i_program = 'ZUP19800526'i_r2_check = ' 'i_r2_destination = ' 'i_trdir = ' 'IMPORTINGo_error_include = er_includeo_error_line = er_lineo_error_message = error_messageo_error_offset = er_offo_error_subrc = er_subrcTABLESi_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_error1.程序初始界面,输入Upload的table名.2.程序运行第一界面,显示程序自动生成的上载程序代码3.程序运行第二界面,确认程序自动生成的上载程序代码,执行4.程序运行第三界面中小界面,程序执行提示输入上在数据具体路径5.OK,数据上载成功补充1:上载数据文件格式,*.TXT DAT格式文件,俗称纯文本文件补充2:SAP Table格式,注意不要理会Mandt Client字段,其他字段数据对应