Batch Input的机制是模拟事务处理将数据录入R/3系统
在R/3系统里面常用的数据批量录入的工具有:
BDC (Batch Data Communication)
BAPI
CATT
LSMW
BDC批录步骤:
1.输入录制shdb
2.程序编写se38
进入shdb
点击New recording 输入名称。
输入Transacton code 事务代码如se16点击确认,就会进入se16开始录制。
录制过程:
在se16中输入表名。
点“创建条目”输入内容,Ctrl+S保存,点击返回到看到录制结果。
然后点“Program”创建程序,输入程序名、Title、typ、status。
将录制的主要代码复制导入模板中。
以下是导入的模板
*&---------------------------------------------------------------------*
*& Report ZDTBDCTEST1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZDTBDCTEST1.
TABLES: T100.
* Batchinputdata of single transaction
DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
* messages of call transaction
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
* error session opened (' ' or 'X')
DATA: E_GROUP_OPENED.
*--------------------录的表
DATA: BEGIN OF RECORD OCCURS 0, "暂存上载的数据的内表
ZDTNO like ZDTEMP-ZDTNO,
ZDTNAME like ZDTEMP-ZDTNAME,
END OF RECORD.
*&------------------------------------------------------------------*
*& SELECT-OPTIONS
*&------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME.
PARAMETERS CTUMODE LIKE CTU_PARAMS-DISMODE DEFAULT 'N'.
PARAMETERS CUPDATE LIKE CTU_PARAMS-UPDMODE DEFAULT 'L'.
PARAMETERS E_GROUP(12). "group name of error-session
PARAMETERS: E_USER(12) DEFAULT SY-UNAME. "user for error-session
PARAMETERS: E_KEEP AS CHECKBOX. "' ' = delete session if finished
"'X' = keep session if finished
PARAMETERS: E_HDATE LIKE SY-DATUM.
SELECTION-SCREEN SKIP.
PARAMETERS: NODATA DEFAULT ' ' LOWER CASE. "nodata
PARAMETERS: SMALLLOG AS CHECKBOX. "' ' = log all transactions
"'X' = no transaction logging
PARAMETERS: FILENAME(132) LOWER CASE DEFAULT
'C:\data1.xls'.
SELECTION-SCREEN END OF BLOCK BLOCK1.
*&------------------------------------------------------------------*
*& AT SELECTION-SCREEN ON VALUE-REQUEST FOR
*&------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR FILENAME .
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
* DEF_FILENAME = 'c:\test.xls' "default selected file
DEF_PATH = 'c:' "Default path
MASK = ',*.txt,*.txt,*.xls,*.xls.'
MODE = '0'
TITLE = 'Select a file to open'
IMPORTING
FILENAME = FILENAME
* RC =
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
*&------------------------------------------------------------------*
START-OF-SELECTION.
*PERFORM SUB_READ_FILE.
PERFORM SUB_READ_FILE.
LOOP AT RECORD.
*perform open_group.
*------------------------录屏代码
perform bdc_dynpro using 'SAPLSETB' '0230'.
perform bdc_field using 'BDC_CURSOR'
'DATABROWSE-TABLENAME'.
perform bdc_field using 'BDC_OKCODE'
'=ANLE'.
perform bdc_field using 'DATABROWSE-TABLENAME'
'ZDTEMP'.
perform bdc_dynpro using '/1BCDWB/DBZDTEMP' '0111'.
perform bdc_field using 'BDC_CURSOR'
'ZDTEMP-ZDTNAME'.
perform bdc_field using 'BDC_OKCODE'
'=SAVE'.
perform bdc_field using 'ZDTEMP-ZDTNO'
RECORD-ZDTNO.
perform bdc_field using 'ZDTEMP-ZDTNAME'
RECORD-ZDTNAME.
perform bdc_dynpro using '/1BCDWB/DBZDTEMP' '0111'.
perform bdc_field using 'BDC_OKCODE'
'/EBACK'.
perform bdc_field using 'BDC_CURSOR'
'ZDTEMP-ZDTNO'.
perform bdc_dynpro using 'SAPLSETB' '0230'.
perform bdc_field using 'BDC_OKCODE'
'/EBACK'.
perform bdc_field using 'BDC_CURSOR'
'DATABROWSE-TABLENAME'.
perform bdc_transaction using 'SE16'.
*perform close_group.
ENDLOOP.
PERFORM CLOSE_GROUP.
form SUB_READ_FILE.
DATA: FILENAME1 LIKE RLGRAP-FILENAME.
FILENAME1 = FILENAME.
**-----------BEGIN 原不能导入XLS的代码-----------------------------------------
*
* CALL FUNCTION 'WS_UPLOAD'
* EXPORTING
** CODEPAGE = ' '
* FILENAME = FILENAME1
* FILETYPE = 'DAT'
** HEADLEN = ' '
** LINE_EXIT = ' '
** TRUNCLEN = ' '
** USER_FORM = ' '
** USER_PROG = ' '
** DAT_D_FORMAT = ' '
** IMPORTING
** FILELENGTH =
* TABLES
* DATA_TAB = record
*
* EXCEPTIONS
* CONVERSION_ERROR = 1
* FILE_OPEN_ERROR = 2
** FILE_READ_ERROR = 3
** INVALID_TYPE = 4
** NO_BATCH = 5
** UNKNOWN_ERROR = 6
** INVALID_TABLE_WIDTH = 7
** GUI_REFUSE_FILETRANSFER = 8
** CUSTOMER_ERROR = 9
** OTHERS = 10
**--------------END 原不能导入XLS的代码--------------------------------------------------
*--------------BEGIN 能导入XLS的代码-------------------- .
IF SY-SUBRC <> 0.
MESSAGE E398(00) WITH '数据在导入内表时出错!'.
ENDIF.
TYPE-POOLS:truxs.
DATA:l_raw_data TYPE truxs_t_text_data.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
* I_LINE_HEADER =
i_tab_raw_data = l_raw_data
i_filename = filename1
TABLES
i_tab_converted_data = record
* EXCEPTIONS
* CONVERSION_FAILED = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE E398(00) WITH '数据在导入内表时出错!'.
ENDIF.
*--------------END 能导入XLS的代码--------------------
endform. " SUB_READ_FILE
*&---------------------------------------------------------------------*
*& Form BDC_TRANSACTION
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Start new transaction according to parameters *
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION USING TCODE.
DATA: L_MSTRING(480).
DATA: L_SUBRC LIKE SY-SUBRC.
* call transaction using
REFRESH MESSTAB.
CALL TRANSACTION TCODE USING BDCDATA
MODE CTUMODE
UPDATE CUPDATE
MESSAGES INTO MESSTAB.
L_SUBRC = SY-SUBRC.
IF SMALLLOG <> 'X'.
WRITE: / 'CALL_TRANSACTION',
TCODE,
'returncode:'(I05),
L_SUBRC,
'RECORD:',
SY-INDEX.
LOOP AT MESSTAB.
SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA
AND ARBGB = MESSTAB-MSGID
AND MSGNR = MESSTAB-MSGNR.
IF SY-SUBRC = 0.
L_MSTRING = T100-TEXT.
IF L_MSTRING CS '&1'.
REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.
REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.
REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.
REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.
ELSE.
REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.
ENDIF.
CONDENSE L_MSTRING.
WRITE: / MESSTAB-MSGTYP, L_MSTRING(250).
ELSE.
WRITE: / MESSTAB.
ENDIF.
ENDLOOP.
SKIP.
ENDIF.
** Erzeugen fehlermappe ************************************************
IF L_SUBRC <> 0 AND E_GROUP <> SPACE.
IF E_GROUP_OPENED = ' '.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING CLIENT = SY-MANDT
GROUP = E_GROUP
USER = E_USER
KEEP = E_KEEP
HOLDDATE = E_HDATE.
E_GROUP_OPENED = 'X'.
ENDIF.
CALL FUNCTION 'BDC_INSERT'
EXPORTING TCODE = TCODE
TABLES DYNPROTAB = BDCDATA.
ENDIF.
REFRESH BDCDATA.
endform. " BDC_TRANSACTION
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM.
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> NODATA.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CLOSE_GROUP
*&---------------------------------------------------------------------*
form CLOSE_GROUP.
IF E_GROUP_OPENED = 'X'.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
WRITE: /.
WRITE: /(30) 'Fehlermappe wurde erzeugt'(I06).
ENDIF.
endform. " CLOSE_GROUP
评论