【ABAP——批量导入】


在SAP系统中,如果想对一个事物码(TCODE)进行反复操作,从而达到批量数据处理的目的,这就是批量导入。
批量导入的目的是重复的操作一类数据,从而用程序模拟业务人员的操作,节约时间;
批量导入方法有很多种,从原理上可以分为两大类;一类是录制屏幕,一类是功能调用。

BAPI数据导入更改采购订单

BAPI是一种SAP系统预留的标准对象的操作函数,可以使用SE37查看代码。
开发者通过自定义程序,按照操作函数的使用规范;把一定格式的数据,导入到BAPI的参数里面;系统会自动创建标准对象;从而达到批处理的效果。

1.使用ME22事务查看采购订单更改前状态
在这里插入图片描述
2.使用SE37事务码,在上方功能模块进入测试序列
在这里插入图片描述
按顺序输入BAPI_PO_CHANGE、BAPI_TRANSACTION_COMMIT,点击执行
在这里插入图片描述
在导入参数输入更改的PO,点击POITEM表
在这里插入图片描述
更改POITEM条目,输入项目行和更改的短文本,点击继续

在这里插入图片描述
点击POITEMX表
在这里插入图片描述
输入项目行和,设置SHORT_TEXT字段为’X’

在这里插入图片描述
返回至初始屏幕,点击执行
在这里插入图片描述
自动进入下一测试序列,点击执行
在这里插入图片描述
在这里插入图片描述
3.使用ME22查看更改的PO,PO的短文本变更成功
在这里插入图片描述

BDC数据导入更改采购订单

Batch Input是一种数据批量输入SAP系统的辅助程序,SAP系统的资料、格式可以通过Batch Input录入SAP系统。
Batch Input的机制是模拟事务处理将数据录入R/3系统 Batch Input类似SAP的CATT,控制性更好,处理能力更强。

1.使用SHDB进入事务记录器,新建记录,输入记录名和事务码,点击开始记录
在这里插入图片描述
2.跳转至ME22,输入PO后回车
在这里插入图片描述
修改PO短文本后点击保存
在这里插入图片描述
在这里插入图片描述
点击返回
在这里插入图片描述
保存更改到记录条目
在这里插入图片描述
选中记录生成程序,输入程序名称并点击继续
在这里插入图片描述
为程序分配包和请求
在这里插入图片描述

程序中调用BAPI更改采购订单

BAPI_PO_CHANGE:更改采购订单

*&---------------------------------------------------------------------*
*& Form FRM_CHANGE_PO_BY_BAPI
*&---------------------------------------------------------------------*
*& 根据传入的数据对PO进行修改
*&---------------------------------------------------------------------*
*&      <-- <FS_OUTPUT>
*&---------------------------------------------------------------------*
FORM FRM_CHANGE_PO_BY_BAPI  CHANGING IS_OUTPUT TYPE TY_OUTPUT.
  DATA: LT_RETURN TYPE STANDARD TABLE OF BAPIRET2,
        LT_ITEM   TYPE STANDARD TABLE OF BAPIMEPOITEM,
        LS_ITEM   TYPE BAPIMEPOITEM,
        LS_ITEMX  TYPE BAPIMEPOITEMX,
        LT_ITEMX  TYPE STANDARD TABLE OF BAPIMEPOITEMX.

  LS_ITEM-PO_ITEM = IS_OUTPUT-EBELP.
  LS_ITEM-SHORT_TEXT = IS_OUTPUT-TXZ01.
  APPEND LS_ITEM TO LT_ITEM.

  LS_ITEMX-PO_ITEM = IS_OUTPUT-EBELP.
  LS_ITEMX-SHORT_TEXT = 'X'.
  APPEND LS_ITEMX TO LT_ITEMX.

  CALL FUNCTION 'BAPI_PO_CHANGE'
    EXPORTING
      PURCHASEORDER = IS_OUTPUT-EBELN
    TABLES
      RETURN        = LT_RETURN
      POITEM        = LT_ITEM
      POITEMX       = LT_ITEMX.

*检查BAPI调用是否正确,LT_RETURN 里不能有type是A/X/E的消息
  LOOP AT LT_RETURN INTO DATA(LS_RETURN).
    IF LS_RETURN-TYPE = 'A' OR LS_RETURN-TYPE = 'E' OR LS_RETURN-TYPE = 'X'.
      "说明这条数据没有更新成功
      IS_OUTPUT-STATUS = ICON_LED_RED. "更新红绿灯
      IS_OUTPUT-MSG = LS_RETURN-MESSAGE."更新错误消息
    ENDIF.
  ENDLOOP.

  IF IS_OUTPUT-STATUS = ICON_LED_RED.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ELSE.
    IS_OUTPUT-STATUS = ICON_LED_GREEN."更新红绿灯
    IS_OUTPUT-MSG    = '更新成功'.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
  ENDIF.


ENDFORM.

程序中使用BDC更改采购订单

FORM FRM_CHANGE_PO_BY_BDC  CHANGING IS_OUTPUT TYPE TY_OUTPUT.
  DATA: LV_POS2 TYPE C LENGTH 2.
  DATA: LV_VAL TYPE BDC_FVAL.
*准备BDC的数据
  PERFORM BDC_DYNPRO      USING 'SAPMM06E' '0105'.
*perform bdc_field       using 'BDC_CURSOR'
*                              'RM06E-BSTNR'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM BDC_FIELD       USING 'RM06E-BSTNR'
                                IS_OUTPUT-EBELN."record-BSTNR_001. "PO HEADER号

  PERFORM BDC_DYNPRO      USING 'SAPMM06E' '0120'.
*perform bdc_field       using 'BDC_CURSOR'
*                              'EKPO-TXZ01(01)'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '=BU'.
*perform bdc_field       using 'RM06E-EBELP'
*                              record-EBELP_002. "ITEM的行项目
*处理短文本的字段名字
* 第一步:根据00010->01
  LV_POS2 = IS_OUTPUT-EBELP+2(2).
  LV_VAL  = 'EKPO-TXZ01(' && LV_POS2 && ')'.
  PERFORM BDC_FIELD       USING LV_VAL
                                IS_OUTPUT-TXZ01." record-TXZ01_01_003. "短文本
  PERFORM BDC_DYNPRO      USING 'SAPLSPO1' '0300'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '=YES'.
*perform bdc_transaction using 'ME22'.
*调用事务代码
  CALL TRANSACTION 'ME22' USING BDCDATA  "ME22代表的是事务代码
        MODE 'N'"N-no screen mode ,不弹出屏幕 A-all screen mode E-only error screen
        UPDATE 'A' "A/S 同步异步
        MESSAGES INTO BDCMESSAGE.
  IF SY-SUBRC = 0.
    LOOP AT BDCMESSAGE INTO DATA(LW_MESSAGE).
      IF LW_MESSAGE-MSGTYP = 'A' OR LW_MESSAGE-MSGTYP = 'E' OR LW_MESSAGE-MSGTYP = 'X'.
        "说明这条数据没有更新成功
        IS_OUTPUT-STATUS = ICON_LED_RED. "更新红绿灯
        IS_OUTPUT-MSG = '更新失败'."更新错误消息
      ENDIF.
    ENDLOOP.
  ELSE.
    IS_OUTPUT-STATUS = ICON_LED_RED. "更新红绿灯
    IS_OUTPUT-MSG = '更新失败'."更新错误消息
  ENDIF.

  IF IS_OUTPUT-STATUS = ICON_LED_RED.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ELSE.
    IS_OUTPUT-STATUS = ICON_LED_GREEN."更新红绿灯
    IS_OUTPUT-MSG    = '更新成功'.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
  ENDIF.
ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值