首页 > 其他分享 >【ABAP——批量导入】

【ABAP——批量导入】

时间:2024-11-26 18:57:48浏览次数:6  
标签:BAPI 批量 BDC ABAP 导入 LS OUTPUT TYPE PO

文章目录


在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

相关文章

  • 网络药理学之薛定谔Schrödinge Maestro:2、基础使用(导入大分子蛋白、更改配体样式、相
    本人是win11,薛定谔版本是12.9。官网:https://www.schrodinger.com/本篇文章的示例大分子蛋白PDBID为4KNN,小分子配体的MOLID为MOL004004。打开软件,最原始的界面如下:我个人将其分为几个板块,由上到下由左到右分别是:常见软件导航栏,包括基础的导入导出文件,操作撤回等。......
  • 帝国CMS批量正文提取第一张图片为标题图片
    新闻正文字段作为主表的情况使用以下SQL语句:updatephome_ecms_newssettitlepic=concat(replace(SUBSTRING_INDEX(SUBSTRING_INDEX(newstext,'src=',-1),'.gif',1),'"',''),'.gif')wherenewstextlike'%.gif%'......
  • ABAP开发学习——二分法查找问题记录
    在ABAP中使用二分法查找之前需要注意内表需要提前经过排序,尤其注意根据哪个字段使用BINARYSEARCH,就要针对哪个字段进行排序。使用两个及以上字段更要注意这一点,不可以用AB排序,再用BC去二分法查找,这样通常是读不到所需数据的。TYPES:BEGINOFty_data,field1TYP......
  • ABAP开发实战——SMARTFORMS输出字段长度问题
    再smartforms中需要给输出的字段分配所在单元格的长度和宽度,如果,输出长度都不够,数据就无法完全输出,此时可以通过增加输出时的高度,数据会自动换行继续输出,如图所示        同时,这里涉及到了数量的输出问题,数量如果是参考某个数据元素,那么就会有一个初始长度,这里举个例......
  • 百家号批量删除文章脚本
    补一句,百家号真恶心!functionsleep(ms){returnnewPromise(resolve=>setTimeout(resolve,ms));}asyncfunctionexecuteTasks(){while(1==1){awaitsleep(5000);constmouseOverEvent=newMouseEvent('m......
  • vue2 数据导入excel
    1、安装npminstallxlsx 一、前端<el-uploadstyle="display:inline-block"actionaccept=".xlsx,.xls":auto-upload="false":show-file-list="false":on-change="handleUpload"......
  • 【ABAP——DAILOG_1】
    文章目录程序类型Report程序:1类型程序Online程序:M类型程序Online程序的主要对象Screen界面中的事件块(EventBlock)界面中常用关键字程序类型Report程序:1类型程序制作报表,数据列表(DataList)输出Online程序:M类型程序查询数据,录入、修改、删除等ModulePool程......
  • ABAP 面向对象开发
    一、面向对象        面向对象(Object-Oriented,OO)是现代编程的一种思想和方法,它通过模拟现实世界中的对象及其相互作用来组织和设计程序。ABAP中的面向对象和JAVA、C++等类似,有面向对象的语言开发基础的理解起来会更加快速。有关的事务码:SE24(全局定义),SE38(在代码中定......
  • Jupyter Notebook无法导入外部模块—引出对环境变量的思考
    JupyterNotebook简介JupyterNotebook是一种交互式的计算环境,允许用户通过Notebook形式创建和共享代码、可视化和文档的组合。它是一个非常流行的数据科学工具,广泛用于数据分析、机器学习。今天主要使用了NumPy——科学计算库;Matplotlib——数据绘图库下文中,为方便起......
  • MySQL frm、MYD、MYI数据文件恢复,导入MySQL中
    前言.frm、.MYI、.MYD 文件分别是 MySQL 的 MyISAM存储引擎存储的表结构、索引、数据文件。简单方法恢复数据.frm、.MYI、.MYD文件如果直接以文本打开,全部会以二进制形式显示,而我们希望看到的是 .sql 类型的文件。找到你对应版本的 mysql 的安装目录下的 data 文......