一个简单的内部调用BAPI实例

这篇博客提供了一个使用内部调用BAPI_BAPI_PO_CREATE1创建采购订单的简单实例。博客中详细展示了如何设置采购订单头数据、行项目数据以及调用BAPI的参数。通过示例代码,读者可以了解如何处理返回值并进行事务处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

REPORT  ztestusebapi.

*&---------------------------------------------------------------------*
*DATA DECLARATION.
*&---------------------------------------------------------------------*
TABLES bapimepoheader.

CONSTANTS : c_x VALUE 'X'.

DATA wa_poheader TYPE bapimepoheader.
DATA wa_poheaderx TYPE bapimepoheaderx.

DATA wa_poitem TYPE bapimepoitem.
DATA itab_poitem LIKE TABLE OF wa_poitem.
DATA wa_poitemx TYPE bapimepoitemx.
DATA itab_poitemx LIKE TABLE OF wa_poitemx.
DATA wa_return TYPE bapiret2.
DATA itab_return LIKE TABLE OF wa_return.


*&---------------------------------------------------------------------*
*parameters
*&---------------------------------------------------------------------*.
*head
PARAMETERS :p_poty LIKE bapimepoheader-doc_type DEFAULT 'ZPO1',
            p_ponm LIKE bapimepoheader-po_number,
            p_vendor LIKE bapimepoheader-vendor DEFAULT 'Y200707',
            p_poorg LIKE bapimepoheader-purch_org DEFAULT 'CN01',
            p_pogrp LIKE bapimepoheader-pur_group DEFAULT 'KXX',
            p_comcd LIKE bapimepoheader-comp_code DEFAULT 'CN01'.

*Item
PARAMETERS :p_poitem LIKE bapimepoitem-po_item DEFAULT 1,
p_matnr LIKE bapimepoitem-material DEFAULT 'FWA-3600',
p_plant LIKE bapimepoitem-plant DEFAULT 'CKB3',
p_lgort LIKE bapimepoitem-stge_loc DEFAULT '0021',
p_qty LIKE bapimepoitem-quantity DEFAULT 3.

*&---------------------------------------------------------------------*
*START-OF-SELECTION.
*&---------------------------------------------------------------------*
START-OF-SELECTION.


*&---------------------------------------------------------------------*
*PO HEADER DATA.
*&---------------------------------------------------------------------*

  wa_poheader-po_number = p_ponm.
  wa_poheader-comp_code = p_comcd.
  wa_poheader-doc_type = p_poty.
  wa_poheader-vendor = p_vendor.      "1 供应商,普通PO,和下面2二选一
*wa_poheader-SUPPL_PLNT = p_vendor. "2 供货工厂,STO
  wa_poheader-purch_org = p_poorg.
  wa_poheader-pur_group = p_pogrp.

*&---------------------------------------------------------------------*
*PO HEADER FLAG.
*&---------------------------------------------------------------------*

  wa_poheaderx-po_number = c_x.
  wa_poheaderx-comp_code = c_x.
  wa_poheaderx-doc_type = c_x.
  wa_poheaderx-vendor = c_x.        "1 供应商,普通PO,和下面2二选一
*wa_poheaderx-SUPPL_PLNT = c_X.   "2 供货工厂,STO
  wa_poheaderx-purch_org = c_x.
  wa_poheaderx-pur_group = c_x.

*&---------------------------------------------------------------------*
*PO ITEM DATA.
*&---------------------------------------------------------------------*
  wa_poitem-po_item = p_poitem.
  wa_poitem-material = p_matnr.
  wa_poitem-plant = p_plant.
  wa_poitem-stge_loc = p_lgort.
  wa_poitem-quantity = p_qty.
  wa_poitem-preq_name = 'xj'.
  APPEND wa_poitem TO itab_poitem.

*&---------------------------------------------------------------------*
*PO ITEM FLAG.
*&---------------------------------------------------------------------*
  wa_poitemx-po_item = p_poitem.
  wa_poitemx-material = c_x.
  wa_poitemx-plant = c_x.
  wa_poitemx-stge_loc = c_x.
  wa_poitemx-quantity = c_x.
  wa_poitemx-preq_name = c_x.
  APPEND wa_poitemx TO itab_poitemx.

*&---------------------------------------------------------------------*
*CALL BAPI
*&---------------------------------------------------------------------*

  CALL FUNCTION 'BAPI_PO_CREATE1'
    EXPORTING
      poheader                     = wa_poheader
      poheaderx                    = wa_poheaderx
*   POADDRVENDOR                 =
*   TESTRUN                      =
*   MEMORY_UNCOMPLETE            =
*   MEMORY_COMPLETE              =
*   POEXPIMPHEADER               =
*   POEXPIMPHEADERX              =
*   VERSIONS                     =
*   NO_MESSAGING                 =
*   NO_MESSAGE_REQ               =
*   NO_AUTHORITY                 =
*   NO_PRICE_FROM_PO             =
* IMPORTING
*   EXPPURCHASEORDER             =
*   EXPHEADER                    =
*   EXPPOEXPIMPHEADER            =
   TABLES
      return                       = itab_return
      poitem                       = itab_poitem
      poitemx                      = itab_poitemx
*   POADDRDELIVERY               =
*   POSCHEDULE                   =
*   POSCHEDULEX                  =
*   POACCOUNT                    =
*   POACCOUNTPROFITSEGMENT       =
*   POACCOUNTX                   =
*   POCONDHEADER                 =
*   POCONDHEADERX                =
*   POCOND                       =
*   POCONDX                      =
*   POLIMITS                     =
*   POCONTRACTLIMITS             =
*   POSERVICES                   =
*   POSRVACCESSVALUES            =
*   POSERVICESTEXT               =
*   EXTENSIONIN                  =
*   EXTENSIONOUT                 =
*   POEXPIMPITEM                 =
*   POEXPIMPITEMX                =
*   POTEXTHEADER                 =
*   POTEXTITEM                   =
*   ALLVERSIONS                  =
*   POPARTNER                    =
            .
  DATA error_log TYPE c.
  LOOP AT itab_return INTO wa_return.
    IF wa_return-type = 'E'.
      error_log = 'X'.
      EXIT.
    ENDIF.
    CLEAR wa_return.
  ENDLOOP.

  IF error_log = 'X'.

    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
*   RETURN        =
    .

    WRITE '有错误存在,不能生成PO'.
    LOOP AT itab_return INTO wa_return.
      WRITE: / wa_return-type,wa_return-message.
      CLEAR wa_return.
    ENDLOOP.

  ELSE.

*奇怪,未Commit已经提交了,似乎下面的是多余的.

*&---------------------------------------------------------------------*
*Confirm the document creation by calling database COMMIT
*&---------------------------------------------------------------------*

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
     EXPORTING
       wait          = 'X'
* IMPORTING
*   RETURN        =
              .

    LOOP AT itab_return INTO wa_return.
      WRITE: / wa_return-type,wa_return-message.
      CLEAR wa_return.
    ENDLOOP.


  ENDIF.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值