文章目录
在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.
标签:BAPI,批量,BDC,ABAP,导入,LS,OUTPUT,TYPE,PO
From: https://blog.csdn.net/irisawy/article/details/143884216