登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

忆风的博客

http://www.cnblogs.com/dhjdhja

 
 
 

日志

 
 
 
 

SAP数据批量输入-BDC  

2011-06-13 11:05:27|  分类: SAP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Batch Input是一种数据批量输入SAP系统的辅助程序, SAP系统的资料、格式可以通过Batch Input录入SAP系统
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

  评论这张
 
阅读(1987)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018