BAPI_PO_CREATE1

BAPI_PO_CREATE1

注意行项目号的赋值,注意选择正确的字段

BAPI_PO_CREATE1是针对事务码ME21N的一个FUNCTION,传入参数主要分为抬头和行项目。

根据填入信息从BAPI_PO_CREATE1的导入和表中找到对应字段。

image-20220601143136569

POHEADER拥有的字段如下

image-20220601143406181

行项目字段在“表”中查找

image-20220601143732257

选取 __ 字段后需要将 ___X 中同样字段打上‘X’。

然后调用BAPI_PO_CREATE1即可完成BAPI插入,具体代码实现如下。

FORM FRM_BAPI_CREATE .
  DATA: LS_POHEADER  TYPE BAPIMEPOHEADER,
        LS_POHEADERX TYPE BAPIMEPOHEADERX,
        LS_RETURN    TYPE BAPIRET2,
        LT_RETURN    TYPE TABLE OF BAPIRET2,
        LS_POITEM    TYPE BAPIMEPOITEM,
        LT_POITEM    TYPE TABLE OF BAPIMEPOITEM,
        LS_POITEMX   TYPE BAPIMEPOITEMX,
        LT_POITEMX   TYPE TABLE OF BAPIMEPOITEMX,
        LS_SCHEDULE  TYPE BAPIMEPOSCHEDULE,
        LT_SCHEDULE  TYPE TABLE OF BAPIMEPOSCHEDULE,
        LS_SCHEDULEX TYPE BAPIMEPOSCHEDULX,
        LT_SCHEDULEX TYPE TABLE OF BAPIMEPOSCHEDULX,
        LS_POCOND    TYPE BAPIMEPOCOND,
        LT_POCOND    TYPE TABLE OF BAPIMEPOCOND,
        LS_POCONDX   TYPE BAPIMEPOCONDX,
        LT_POCONDX   TYPE TABLE OF BAPIMEPOCONDX,
        LS_CONTRACT  TYPE BAPIESUCC,
        LT_CONTRACT  TYPE TABLE OF BAPIESUCC,
        LV_POSNR     TYPE CHAR5.             "行项目号
  REFRESH: LT_RETURN,LT_POITEM,LT_POITEMX,LT_SCHEDULE,LT_SCHEDULEX,LT_POCOND.
  LOOP AT GT_DATA INTO GS_DATA.
    CLEAR: LS_POHEADER,LS_POHEADERX,LS_POITEM,LS_POITEMX,LS_SCHEDULE,LS_SCHEDULEX,LS_POCOND,LS_RETURN.
    LV_POSNR = SY-TABIX * 10.     "行项目不能重复号
    CONDENSE LV_POSNR NO-GAPS.    "去空格

    LS_POHEADER-COMP_CODE  = GS_DATA-BUKRS.          "公司代码
    LS_POHEADER-DOC_TYPE = 'NB'.                     "单据类别 20220530
    LS_POHEADER-PUR_GROUP  = GS_DATA-EKGRP.          "采购组
    LS_POHEADER-PURCH_ORG  = GS_DATA-EKORG.          "采购组织
    LS_POHEADER-VENDOR     = GS_DATA-LLIEF.          "供应商
    LS_POHEADER-DOC_DATE   = GS_DATA-BEDAT.          "凭证日期
    LS_POHEADER-LANGU      = SY-LANGU.
    LS_POHEADERX-DOC_TYPE = 'X'.
    LS_POHEADERX-COMP_CODE  = 'X'.
    LS_POHEADERX-PUR_GROUP  = 'X'.
    LS_POHEADERX-PURCH_ORG  = 'X'.
    LS_POHEADERX-DOC_DATE   = 'X'.
    LS_POHEADERX-VENDOR     = 'X'.
    LS_POHEADER-LANGU       = 'X'.

    LS_POITEM-PO_ITEM   = LV_POSNR.
    LS_POITEM-EMATERIAL = GS_DATA-MATNR.             "物料
    LS_POITEM-QUANTITY  = GS_DATA-MENGE.             "订单数量
    LS_POITEM-PO_UNIT   = GS_DATA-MEINS.             "单位
    LS_POITEM-PLANT     = GS_DATA-WERKS.             "工厂
    LS_POITEM-NET_PRICE = GS_DATA-NETPR.             "单价
    LS_POITEMX-PO_ITEM    = LV_POSNR.
    LS_POITEMX-EMATERIAL = 'X'.
    LS_POITEMX-QUANTITY  = 'X'.
    LS_POITEMX-PO_UNIT   = 'X'.
    LS_POITEMX-PLANT     = 'X'.
    LS_POITEMX-NET_PRICE = 'X'.
    APPEND LS_POITEM TO LT_POITEM.
    APPEND LS_POITEMX TO LT_POITEMX.

    LS_SCHEDULE-PO_ITEM       = LV_POSNR.
    LS_SCHEDULE-DELIVERY_DATE = GS_DATA-FNDAT.       "交货日期
    LS_SCHEDULEX-PO_ITEM       = LV_POSNR.
    LS_SCHEDULEX-DELIVERY_DATE = 'X'.
    APPEND LS_SCHEDULE TO LT_SCHEDULE.
    APPEND LS_SCHEDULEX TO LT_SCHEDULEX.

*    LS_CONTRACT-CON_NUMBER = GS_DATA-ZZCONID.
*    APPEND LS_CONTRACT TO LT_CONTRACT.


    CALL FUNCTION 'BAPI_PO_CREATE1'
      EXPORTING
        POHEADER    = LS_POHEADER
        POHEADERX   = LS_POHEADERX
      TABLES
        RETURN      = LT_RETURN
        POITEM      = LT_POITEM
        POITEMX     = LT_POITEMX
        POSCHEDULE  = LT_SCHEDULE
        POSCHEDULEX = LT_SCHEDULEX.
    LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE = 'E' OR TYPE = 'A' .
    ENDLOOP.
    IF SY-SUBRC = 0.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. "事务回滚
      MESSAGE 'ERROR' TYPE 'S'.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'    "事务提交
        EXPORTING
          WAIT = 'X'.
      .
      MESSAGE 'SUCCESS' TYPE 'S'.
    ENDIF.
  ENDLOOP.
ENDFORM.

在上面程序中对BAPI返回信息进行检查,如果返回信息中有ERROR或者ALERT的话就事务回滚,如果没有的话就事务提交。

LS_POITEM TO LT_POITEM.
    APPEND LS_POITEMX TO LT_POITEMX.

    LS_SCHEDULE-PO_ITEM       = LV_POSNR.
    LS_SCHEDULE-DELIVERY_DATE = GS_DATA-FNDAT.       "交货日期
    LS_SCHEDULEX-PO_ITEM       = LV_POSNR.
    LS_SCHEDULEX-DELIVERY_DATE = 'X'.
    APPEND LS_SCHEDULE TO LT_SCHEDULE.
    APPEND LS_SCHEDULEX TO LT_SCHEDULEX.

*    LS_CONTRACT-CON_NUMBER = GS_DATA-ZZCONID.
*    APPEND LS_CONTRACT TO LT_CONTRACT.


    CALL FUNCTION 'BAPI_PO_CREATE1'
      EXPORTING
        POHEADER    = LS_POHEADER
        POHEADERX   = LS_POHEADERX
      TABLES
        RETURN      = LT_RETURN
        POITEM      = LT_POITEM
        POITEMX     = LT_POITEMX
        POSCHEDULE  = LT_SCHEDULE
        POSCHEDULEX = LT_SCHEDULEX.
    LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE = 'E' OR TYPE = 'A' .
    ENDLOOP.
    IF SY-SUBRC = 0.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. "事务回滚
      MESSAGE 'ERROR' TYPE 'S'.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'    "事务提交
        EXPORTING
          WAIT = 'X'.
      .
      MESSAGE 'SUCCESS' TYPE 'S'.
    ENDIF.
  ENDLOOP.
ENDFORM.

在上面程序中对BAPI返回信息进行检查,如果返回信息中有ERROR或者ALERT的话就事务回滚,如果没有的话就事务提交。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值