SAP BAPI_PO_CREATE1创建指定数量的PO

107 篇文章 117 订阅
59 篇文章 32 订阅

创建指定数量的PO(不使用SAP建议采购的数量)

以下代码是RFC接口:

表参数结构:

代码如下所示:

FUNCTION RFC_Z_SCE_POCREATE.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(IBUKRS) TYPE  BUKRS
*"     VALUE(ILIFNR) TYPE  ELIFN
*"     VALUE(IBSART) TYPE  ESART
*"     VALUE(IBEDAT) TYPE  EBDAT
*"     VALUE(IEKORG) TYPE  EKORG
*"     VALUE(IEKGRP) TYPE  EKGRP
*"     VALUE(IWAERS) TYPE  WAERS
*"  EXPORTING
*"     VALUE(OEBELN) TYPE  EBELN
*"     VALUE(OMSGNO) TYPE  CHAR01
*"     VALUE(OMESSG) TYPE  STRING
*"  TABLES
*"      T_POITEM STRUCTURE  ZMMSCEPOITEM
*"----------------------------------------------------------------------
  DATA: L_PO_ITEM(5) TYPE N.
  DATA: L_BSART      LIKE IBSART.
  DATA: L_TEMP       TYPE STRING.
  DATA: LS_PO_HEADER LIKE BAPIMEPOHEADER,
        LS_POHEADERX LIKE BAPIMEPOHEADERX.

  DATA: LT_PO_ITEMS          LIKE BAPIMEPOITEM OCCURS 0 WITH HEADER LINE,
        LT_PO_ITEM_SCHEDULES LIKE BAPIMEPOSCHEDULE OCCURS 0 WITH HEADER LINE,
        LT_POACCOUNT         LIKE BAPIMEPOACCOUNT OCCURS 0 WITH HEADER LINE,
        LT_RETURN            LIKE  BAPIRET2 OCCURS 0 WITH HEADER LINE,
        LT_ITEMX             LIKE BAPIMEPOITEMX OCCURS 0 WITH HEADER LINE,
        LT_SCHEDULX          LIKE BAPIMEPOSCHEDULX OCCURS 0 WITH HEADER LINE,
        LT_POACCOUNTX        LIKE BAPIMEPOACCOUNTX OCCURS 0 WITH HEADER LINE.
  DATA: LT_POCOND            LIKE BAPIMEPOCOND OCCURS 0 WITH HEADER LINE,
        LT_POCONDX           LIKE BAPIMEPOCONDX OCCURS 0 WITH HEADER LINE.

  DATA: LT_POCOMPONENTS      LIKE BAPIMEPOCOMPONENT OCCURS 0 WITH HEADER LINE,
        LT_POCOMPONENTSX     LIKE BAPIMEPOCOMPONENTX OCCURS 0 WITH HEADER LINE.
  DATA: L_MSG TYPE STRING.
  DATA: RT_FLAG(1) TYPE C.



  REFRESH: LT_PO_ITEMS,LT_PO_ITEM_SCHEDULES,LT_RETURN,
           LT_ITEMX,LT_SCHEDULX.

  CASE IBSART.
    WHEN 'NB'.
      MOVE 'NB' TO L_BSART.
    WHEN 'KB'.
      MOVE 'NB' TO L_BSART.
    WHEN 'LB'.
      MOVE 'NB' TO L_BSART.
  ENDCASE.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  = ILIFNR
    IMPORTING
      OUTPUT = ILIFNR.

  "抬头信息
  MOVE IBUKRS  TO LS_PO_HEADER-COMP_CODE.
  MOVE L_BSART TO LS_PO_HEADER-DOC_TYPE.
  MOVE IBEDAT  TO LS_PO_HEADER-CREAT_DATE.
  MOVE ILIFNR  TO LS_PO_HEADER-VENDOR.
  MOVE IEKORG  TO LS_PO_HEADER-PURCH_ORG.
  MOVE IEKGRP  TO LS_PO_HEADER-PUR_GROUP.
  MOVE IWAERS  TO LS_PO_HEADER-CURRENCY.

  LS_POHEADERX-COMP_CODE   = 'X'.
  LS_POHEADERX-DOC_TYPE    = 'X'.
  LS_POHEADERX-CREAT_DATE  = 'X'.
  LS_POHEADERX-VENDOR      = 'X'.
  LS_POHEADERX-PURCH_ORG   = 'X'.
  LS_POHEADERX-PUR_GROUP   = 'X'.
  LS_POHEADERX-CURRENCY    = 'X'.

  FIELD-SYMBOLS: <FS_POITEM> LIKE LINE OF T_POITEM.
  LOOP AT T_POITEM ASSIGNING <FS_POITEM>.

    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
      EXPORTING
        INPUT  = <FS_POITEM>-MATNR
      IMPORTING
        OUTPUT = <FS_POITEM>-MATNR.

    "行项目号
    L_PO_ITEM             = L_PO_ITEM + 10.
    LT_PO_ITEMS-PO_ITEM   = L_PO_ITEM.
    LT_PO_ITEMS-PLANT     = <FS_POITEM>-WERKS.
    LT_PO_ITEMS-QUANTITY  = <FS_POITEM>-MENGE.
    LT_PO_ITEMS-STGE_LOC  = <FS_POITEM>-LGORT.
    LT_PO_ITEMS-PO_UNIT   = 'ST'.
    LT_PO_ITEMS-NO_ROUNDING   = 'X'. "以输入数量为准,不使用SAP建议舍入的数量

    IF <FS_POITEM>-MATNR IS INITIAL."文本订单
      LT_PO_ITEMS-SHORT_TEXT  = <FS_POITEM>-TXZ01.
      LT_PO_ITEMS-ACCTASSCAT  = 'K'.
      LT_PO_ITEMS-MATL_GROUP  = <FS_POITEM>-MATKL.

      LT_POACCOUNT-PO_ITEM     = L_PO_ITEM.
      LT_POACCOUNT-GL_ACCOUNT  = <FS_POITEM>-SAKTO.
      LT_POACCOUNT-COSTCENTER  = <FS_POITEM>-KOSTL.
      LT_POACCOUNT-ORDERID     = <FS_POITEM>-AUFNR.
      APPEND LT_POACCOUNT.CLEAR LT_POACCOUNT.

      LT_POACCOUNTX-PO_ITEM     = L_PO_ITEM.
      LT_POACCOUNTX-GL_ACCOUNT  = 'X'.
      LT_POACCOUNTX-COSTCENTER  = 'X'.
      LT_POACCOUNTX-ORDERID     = 'X'.
      APPEND LT_POACCOUNTX.CLEAR LT_POACCOUNTX.

      CLEAR LT_POCOND.
      LT_POCOND-ITM_NUMBER   = L_PO_ITEM.
      LT_POCOND-COND_TYPE    = 'PBXX'.
      LT_POCOND-COND_VALUE   = 1.
      LT_POCOND-COND_P_UNT   = 1.
      LT_POCOND-CURRENCY     = IWAERS.
      LT_POCOND-CHANGE_ID    = 'U'.
      APPEND LT_POCOND.

      CLEAR LT_POCONDX.
      LT_POCONDX-ITM_NUMBER    = L_PO_ITEM.
      LT_POCONDX-COND_TYPE    = 'X'.
      LT_POCONDX-COND_VALUE   = 'X'.
      LT_POCONDX-COND_P_UNT   = 'X'.
      LT_POCONDX-CURRENCY     = 'X'.
      LT_POCONDX-CHANGE_ID    = 'X'.
      APPEND LT_POCONDX.
    ELSE."正常订单
      IF IBSART EQ 'LB'.
        LT_PO_ITEMS-ITEM_CAT  = '3'.
      ENDIF.
      LT_PO_ITEMS-MATERIAL  = <FS_POITEM>-MATNR.
    ENDIF.
    APPEND LT_PO_ITEMS.CLEAR LT_PO_ITEMS.


    LT_ITEMX-PO_ITEM     = L_PO_ITEM.
    LT_ITEMX-PO_ITEMX    = 'X'.
    LT_ITEMX-PLANT       = 'X'.
    LT_ITEMX-QUANTITY    = 'X'.
    LT_ITEMX-STGE_LOC    = 'X'.
    LT_ITEMX-PO_UNIT     = 'X'.
    LT_ITEMX-NO_ROUNDING   = 'X'.
    IF <FS_POITEM>-MATNR IS INITIAL.
      LT_ITEMX-SHORT_TEXT  = 'X'.
      LT_ITEMX-ACCTASSCAT  = 'X'.
      LT_ITEMX-MATL_GROUP  = 'X'.
    ELSE.
      IF IBSART EQ 'LB'.
        LT_ITEMX-ITEM_CAT  = 'X'.
      ENDIF.
      LT_ITEMX-MATERIAL    = 'X'.
    ENDIF.
    APPEND LT_ITEMX.CLEAR  LT_ITEMX.

    LT_PO_ITEM_SCHEDULES-PO_ITEM       = L_PO_ITEM.
    LT_PO_ITEM_SCHEDULES-DELIVERY_DATE = <FS_POITEM>-EINDT.
    APPEND LT_PO_ITEM_SCHEDULES.
    CLEAR  LT_PO_ITEM_SCHEDULES.

    LT_SCHEDULX-PO_ITEM   =  L_PO_ITEM.
    LT_SCHEDULX-PO_ITEMX  = 'X'.
    LT_SCHEDULX-DELIVERY_DATE = 'X'.
    APPEND LT_SCHEDULX.
    CLEAR  LT_SCHEDULX.
  ENDLOOP.

  CALL FUNCTION 'BAPI_PO_CREATE1'
    EXPORTING
      POHEADER         = LS_PO_HEADER
      POHEADERX        = LS_POHEADERX
    IMPORTING
      EXPPURCHASEORDER = OEBELN
    TABLES
      RETURN           = LT_RETURN
      POITEM           = LT_PO_ITEMS
      POITEMX          = LT_ITEMX
      POSCHEDULE       = LT_PO_ITEM_SCHEDULES
      POSCHEDULEX      = LT_SCHEDULX
      POACCOUNT        = LT_POACCOUNT
      POACCOUNTX       = LT_POACCOUNTX
      POCOND           = LT_POCOND
      POCONDX          = LT_POCONDX.


**** COMMIT WORK
  READ TABLE LT_RETURN WITH KEY TYPE = 'E'.
  IF SY-SUBRC NE 0.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = 'X'.
    CONCATENATE '采购订单' OEBELN '创建成功.'
           INTO OMESSG.
    MOVE '0' TO OMSGNO.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    LOOP AT LT_RETURN WHERE TYPE = 'E'.
      MESSAGE ID LT_RETURN-ID TYPE LT_RETURN-TYPE NUMBER LT_RETURN-NUMBER
                              WITH LT_RETURN-MESSAGE_V1 LT_RETURN-MESSAGE_V2
                                   LT_RETURN-MESSAGE_V3 LT_RETURN-MESSAGE_V4
                           INTO L_TEMP.
      CONCATENATE OMESSG L_TEMP INTO OMESSG SEPARATED BY ';'.
    ENDLOOP.
    MOVE '1' TO OMSGNO.
  ENDIF.
ENDFUNCTION.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
SAP BAPI_PO_CREATE1是一个SAP系统中的功能模块,用于创建采购订单(Purchase Order)。通过该功能模块,我们可以使用SAP系统来快速创建和维护采购订单的相关数据。 使用BAPI_PO_CREATE1,我们可以通过调用该功能模块来向SAP系统中创建新的采购订单。在调用该功能模块时,我们需要提供一些必要的输入参数,如采购订单的相关信息、采购组织和公司代码等。 这个功能模块可以帮助我们在SAP系统中自动化采购订单的创建流程。它可以根据输入的参数,自动生成采购订单,并将相关的物料、供应商和价格等信息添加到订单中。 通过使用BAPI_PO_CREATE1,我们可以实现以下功能: 1. 创建采购订单:我们可以通过调用该功能模块来创建新的采购订单。在调用时,我们需要提供订单的相关信息,如供应商、物料、数量、交货日期等。系统会根据提供的信息自动创建采购订单。 2. 修改采购订单:除了创建新的采购订单,我们还可以使用BAPI_PO_CREATE1来修改现有的采购订单。在调用时,我们需要提供订单的标识符和要修改的字段及对应的值。系统将根据提供的信息来更新采购订单的数据。 3. 检查采购订单:在调用BAPI_PO_CREATE1之前,我们可以先使用BAPI_PO_EXISTENCE_CHECK来检查采购订单是否存在。这可以帮助我们避免重复创建订单或更新不存在的订单。 总而言之,SAP BAPI_PO_CREATE1是一个用于创建和维护采购订单的功能模块。它可以帮助我们在SAP系统中实现自动化的采购订单处理,并提高采购过程的效率和准确性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Willie Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值