小乔 发表于 2015-9-20 13:13:02

SAP BDC批量导入数据(转)

  Batch Input是一种数据批量输入SAP系统的辅助程序,SAP系统的资料、格式可以通过Batch Input录入SAP系统
  Batch Input的机制是模拟事务处理将数据录入R/3系统
  Batch Input类似SAP的CATT,控制性更好,处理能力更强
   1、首先我们需要把需要批导入事务的操作步骤记录下来,可以用T-CODE“SHDB”来记录。
  在COMMAND LINE中输入“SHDB”。
   http://www.erp100.com/attachments/2007/07/08/4797_200707081819111.jpg
  2、进入TRANSACTION RECORDER界面
  http://www.erp100.com/attachments/2007/07/08/4797_200707081819112.jpg
  
  3、点“NEW RECORDER”创建一个记录,现在以修改订单为例,键入记录名“ZAMAO”,输入事务代码“VA02”,
  然后“START RECORDING”。
  http://www.erp100.com/attachments/2007/07/08/4797_200707081819113.jpg
  
  4、下面的任务就是记录下修改订单的操作步骤。
  http://www.erp100.com/attachments/2007/07/08/4797_200707081819114.jpg
  
  5、填入订单号码,按确定
  http://www.erp100.com/attachments/2007/07/08/4797_200707081819115.jpg
  
  6、现在来增加一下订单的PO DATE。
  http://www.erp100.com/attachments/2007/07/08/4797_200707081819116.jpg
  
  7、填入“2006.10.01”,点“保存”。
  http://www.erp100.com/attachments/2007/07/08/4797_200707081819117.jpg
  
  8、这样就完成了一个最最简单的BDC录取工作,录完之后会出现系统运行的操作的跟踪,包括程序号,屏幕号,字段名,值等等,下面的任务是根据这些写到程序里面以完成SAP自动跑订单修改的这一动作。
  http://www.erp100.com/attachments/2007/07/08/4797_200707081819118.jpg
  
  9、首先必须定义BDC变量:
  * BDC table
DATA: t_bdc       LIKE bdcdataOCCURS 0 WITH HEADER LINE,
         t_bdcmsg LIKE bdcmsgcollOCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF t_log OCCURS 0,
               information(289) TYPE c,   "返回信息
         END OF t_log.
DATA: v_mode TYPE c VALUE 'N'.
  其中TABLE t_bdc中记录的具体的操作步骤,而TABLE t_bdcmsg是记录系统返回的信息,成功与否都记录到自定义的信息表t_log中。
  先写个记录BDC的函数:
  
  FORM. fm_set_bdc TABLES t_bdc STRUCTURE bdcdata
                                                   USING u_sign TYPE c
u_par1
u_par2.
  CLEAR: t_bdc.
IF u_sign = 'X'.
   t_bdc-program = u_par1.
   t_bdc-dynpro = u_par2.
   t_bdc-dynbegin = u_sign.
ELSE.
   t_bdc-fnam = u_par1.
   t_bdc-fval = u_par2.
ENDIF.
APPEND t_bdc.
ENDFORM.
  
  然后写入T_bdc:
  
  PERFORM. fm_set_bdc:
    TABLES t_bdc USING 'X'    'SAPMV45A'   '0102',
    TABLES t_bdc USING ' '    'BDC_OKCODE''/00',
    TABLES t_bdc USING ' '    'VBAK-VBELN'   it_display-vbeln,
    TABLES t_bdc USING 'X'   'SAPMV45A'      '4001',
    TABLES t_bdc USING ' ' '   VBKD-BSTDK'   '2006.10.01'.
  因为此处是修改操作,所以要切记写入的只是你修改的数据,千万别把订单本来的数据也写入t_bdc,如果写入则会把需要修改的所有订单都该成举例的订单的数据,而我们需要修改的仅仅是增加一个PO DATE“2006.10.01”。
  然后是调用事物代码:
  
  CALL TRANSACTION 'VA42'
         USING t_bdc
         MODE v_mode "Background performance
         UPDATE 'S' "local updata
         MESSAGES INTO t_bdcmsg. "all message table
  v_mode是显示模式:
  “A”表示显示每一步操作步骤,
  “N”表示不显示步骤,
  “E”表示当出现错误的时候显示出错的位置。
  系统信息写入到t_bdc中。
  
  最后是收集系统信息(成功与否,要是失败,失败的原因)并输出到SAP程序屏幕
  
  READ TABLE t_bdcmsg WITH KEY msgtyp = 'S'
                                                    msgid = 'V1'
                                                    msgnr = '311'.         "批导入成功的标志,可以自己debug表t_bdcmsg中去找.
IF sy-subrc EQ 0.
   CONCATENATE '订单号码:'
                               it_display-vbeln
                              ',项目号:'
                              it_display-posnr
                              '修改成功' INTO t_log.
    APPEND t_log.
    CLEAR t_log.
ELSE.
  
LOOP AT t_bdcmsg.
    IF t_bdcmsg-msgtyp = 'E'
      OR t_bdcmsg-msgv1 <> ''
      OR t_bdcmsg-msgv2 <> ''
      OR t_bdcmsg-msgv3 <> ''
      OR t_bdcmsg-msgv4 <> ''.
MESSAGE ID t_bdcmsg-msgid                   “收集错误信息,并写入自定义的表t_log中。
                TYPE 'S'
                NUMBER t_bdcmsg-msgnr
                WITH t_bdcmsg-msgv1
    t_bdcmsg-msgv2
    t_bdcmsg-msgv3
    t_bdcmsg-msgv4
    INTO t_log-information.
CONCATENATE '订单号码:'
                        it_display-vbeln
                     ',项目号:'
                       it_display-posnr
                     '出错:'
                     t_log-information
INTO t_log-information.
APPEND t_log.
CLEAR t_log.
ENDIF.
ENDLOOP.
ENDIF.
  LOOP AT t_log.                        "显示出错信息
      WRITE:/ t_log-information.
  ENDLOOP.
到次一个批导入程序基本完成。
页: [1]
查看完整版本: SAP BDC批量导入数据(转)