SAP BAPI_PO_RELEASE 直接跳出程序的问题

53 篇文章 5 订阅

业务原先要求 创建并release 采购订单,近期发现部分接口有点问题,调用了没有返回。

经过查找,得出问题,创建的采购订单不需要审批,程序直接dump了,所以没有返回。

顺带把采购订单的审批策略梳理一下

四个特征代码 

FPG_EKKO_BSART
FPG_EKKO_EKORG
FPG_EKKO_EKGRP
FPG_EKKO_WERKS

function:  BAPI_CLASS_GETDETAIL 根据

获取4个参数

tables:

AUSP CABN   CABNT 

ATINN还不能用 要去CABN 名称转换到 特性号码

有了以上,可以根据工厂 采购组 采购组织 订单类型 get到审批策略,再判断订单是否继续生成 

FUNCTION ZRFC_SRM_POCREATE.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(LIFNR) TYPE  LIFNR
*"     VALUE(BUKRS) TYPE  BUKRS
*"     VALUE(EKORG) TYPE  EKORG
*"     VALUE(EKGRP) TYPE  EKGRP
*"     VALUE(PRCID) TYPE  CHAR40
*"     VALUE(OWERKS) TYPE  WERKS_D
*"     VALUE(OLGORT) TYPE  LGORT_D
*"  EXPORTING
*"     VALUE(L_PO_NUMBER) TYPE  BAPIMEPOHEADER-PO_NUMBER
*"     VALUE(MESSAGE) TYPE  BAPI_MSG
*"     VALUE(L_ERRFLAG) TYPE  BAPI_CORU_RETURN-TYPE
*"     VALUE(OUTPUT) TYPE  ZSM8_SALESORDER_CREATE_OUTPUT
*"  TABLES
*"      VMISTR STRUCTURE  ZVMISTR
*"      VMISTR1 STRUCTURE  ZVMISTR1 OPTIONAL
*"      ZRETITEMS TYPE  ZTBAPIRET2 OPTIONAL
*"----------------------------------------------------------------------

  DATA:GS_POHEADER           TYPE                   BAPIMEPOHEADER,
       GS_POHEADERX          TYPE                   BAPIMEPOHEADERX,
       GT_RETURN             TYPE STANDARD TABLE OF BAPIRET2,
       GWA_RETURN            TYPE                   BAPIRET2,
       GT_ITEM               TYPE STANDARD TABLE OF BAPIMEPOITEM,
       GWA_ITEM              TYPE                   BAPIMEPOITEM,
       GT_ITEMX              TYPE STANDARD TABLE OF BAPIMEPOITEMX,
       GWA_ITEMX             TYPE                   BAPIMEPOITEMX,
       GT_POSCHEDULE         TYPE STANDARD TABLE OF BAPIMEPOSCHEDULE,
       GWA_POSCHEDULE        TYPE                   BAPIMEPOSCHEDULE,
       GT_POSCHEDULEX        TYPE STANDARD TABLE OF BAPIMEPOSCHEDULX,
       GWA_POSCHEDULEX       TYPE                   BAPIMEPOSCHEDULX,
       GT_POCOND             TYPE STANDARD TABLE OF BAPIMEPOCOND,
       GWA_POCOND            TYPE                   BAPIMEPOCOND,
       GT_POCONDX            TYPE STANDARD TABLE OF BAPIMEPOCONDX,
       GWA_POCONDX           TYPE                   BAPIMEPOCONDX,
       GT_POCOMPONENTS       TYPE STANDARD TABLE OF BAPIMEPOCOMPONENT,
       GWA_POCOMPONENTS      TYPE                   BAPIMEPOCOMPONENT,
       GWA_POCOMPONENTS_TEMP TYPE                   BAPIMEPOCOMPONENT,
       GT_POCOMPONENTSX      TYPE STANDARD TABLE OF BAPIMEPOCOMPONENTX,
       GWA_POCOMPONENTSX     TYPE                   BAPIMEPOCOMPONENTX.
  DATA:LV_NUM TYPE BAPIMEPOHEADER-PO_NUMBER.
  DATA:LMATNR TYPE MATNR18.
  DATA:LLIFNR TYPE LIFNR.
  DATA:LT_EORD TYPE STANDARD TABLE OF EORD.
  DATA:LT_A017 TYPE STANDARD TABLE OF A017.
  DATA:L_PO_NUMBER1 TYPE BAPIMEPOHEADER-PO_NUMBER.
  DATA:LWERKS LIKE MARC-WERKS.


*--------------------------------------------------------------------------------*
*                 抬头赋值
*--------------------------------------------------------------------------------*
  LLIFNR = LIFNR.
  SHIFT LLIFNR LEFT DELETING LEADING '0'.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  = LIFNR
    IMPORTING
      OUTPUT = GS_POHEADER-VENDOR.     "供应商编号

  GS_POHEADER-DOC_TYPE = 'NB'.   "标准订单
* GS_POHEADER-VENDOR = LIFNR.
  GS_POHEADER-PURCH_ORG = EKORG.  "采购组织
  GS_POHEADER-PUR_GROUP = EKGRP.  "采购组
  GS_POHEADER-COMP_CODE = BUKRS.  "公司代码
  GS_POHEADER-CURRENCY = 'CNY'."货币
  GS_POHEADER-DOC_DATE = SY-DATUM.  "采购凭证日期
  GS_POHEADER-LANGU = SY-LANGU.   "语言代码
  GS_POHEADER-STATUS = 'I'.
*      GS_POHEADER-INFO_UPD = 'I'.
*      GS_POHEADER-ITEM_INTVL = ''.
*      GS_POHEADER-ITEM_INTVL = ''.

  GS_POHEADERX-DOC_TYPE = 'X'.
  GS_POHEADERX-VENDOR = 'X'.
  GS_POHEADERX-PURCH_ORG = 'X'.
  GS_POHEADERX-PUR_GROUP = 'X'.
  GS_POHEADERX-COMP_CODE = 'X'.
  GS_POHEADERX-DOC_DATE = 'X'.
  GS_POHEADERX-LANGU = 'X'.       "语言代码
  GS_POHEADERX-CURRENCY = 'X'.    "货币
  GS_POHEADERX-STATUS = 'X'.      "采购凭证状态
* GS_POHEADERX-ITEM_INTVL = 'X'.

*--------------------------------------------------------------------------------*
*                 PO_ITEM1  行项目赋值
*--------------------------------------------------------------------------------*
  CLEAR GT_RETURN[].
  LOOP AT VMISTR.
    LWERKS = VMISTR-WERKS.
    CLEAR GWA_ITEM.
    CLEAR GWA_ITEMX.
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
      EXPORTING
        INPUT  = VMISTR-MATNR
      IMPORTING
        OUTPUT = GWA_ITEM-MATERIAL.    "物料号

    CLEAR LT_EORD[].
    "$. Region 货源清单 eord的校验
    SELECT * INTO TABLE LT_EORD
     FROM EORD WHERE MATNR = GWA_ITEM-MATERIAL AND LIFNR = GS_POHEADER-VENDOR
     AND WERKS = VMISTR-WERKS AND VDATU <= SY-DATUM AND BDATU >=  SY-DATUM.
    IF LT_EORD[] IS INITIAL.
      GWA_RETURN-TYPE = 'E'.
      LMATNR = VMISTR-MATNR.
      SHIFT LMATNR LEFT DELETING LEADING '0'.
      GWA_RETURN-MESSAGE = '物料' && LMATNR && '与供方' &&  LLIFNR && '不存在有效货源记录'.
      OUTPUT-RETURN-MSGTY = GWA_RETURN-TYPE.
      OUTPUT-RETURN-MSGTX = GWA_RETURN-MESSAGE.
      APPEND GWA_RETURN TO GT_RETURN.
    ENDIF.

    "$. Endregion 货源清单 eord的校验

    "$. Region 采购单价的校验
    CLEAR LT_A017[].
    SELECT * INTO TABLE LT_A017
    FROM A017 WHERE MATNR = GWA_ITEM-MATERIAL AND LIFNR = GS_POHEADER-VENDOR
    AND EKORG = EKORG
    AND WERKS = VMISTR-WERKS AND DATAB <= SY-DATUM AND DATBI >=  SY-DATUM.
    IF LT_A017[] IS INITIAL.
      GWA_RETURN-TYPE = 'E'.
      LMATNR = VMISTR-MATNR.
      SHIFT LMATNR LEFT DELETING LEADING '0'.
      GWA_RETURN-MESSAGE = '物料' && LMATNR && '与供方' &&  LLIFNR && '在工厂'
      && VMISTR-WERKS && '下采购组织' && EKORG && '缺失有效采购价格'.
      OUTPUT-RETURN-MSGTY = GWA_RETURN-TYPE.
      OUTPUT-RETURN-MSGTX = GWA_RETURN-MESSAGE.
      APPEND GWA_RETURN TO GT_RETURN.
    ENDIF.
    "$. Endregion 采购竞价的校验
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = VMISTR-EBELP
      IMPORTING
        OUTPUT = GWA_ITEM-PO_ITEM.     "行项目编号

*    GWA_ITEM-PO_ITEM = '00010'. "采购凭证的项目编号
*    GWA_ITEM-MATERIAL = '000000000018007349'.
*    GWA_ITEM-ITEM_CAT = 'L'.
*    GWA_ITEM-SHORT_TEXT = 'SHORT'."短文本
    GWA_ITEM-QUANTITY = VMISTR-MENGE.
*    GWA_ITEM-PO_UNIT = MEINS ."采购订单的计量单位
    GWA_ITEM-PLANT = VMISTR-WERKS.
    GWA_ITEM-STGE_LOC = VMISTR-LGORT.
*    GWA_ITEM-TAX_CODE = MWSKZ.  "税码
*    GWA_ITEM-DATE_QTY_FIXED = 'X'.      "交货日期和数量己确定
    GWA_ITEM-NO_ROUNDING = 'X'.    "不使用SAP建议采购的数量
    APPEND GWA_ITEM TO GT_ITEM.

    "行项目更新标识赋值
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = VMISTR-EBELP
      IMPORTING
        OUTPUT = GWA_ITEMX-PO_ITEM.     "行项目编号

    GWA_ITEMX-PO_ITEMX = 'X'. "采购凭证的项目编号 (行项目 更新标识)
    GWA_ITEMX-MATERIAL = 'X'.
*    GWA_ITEMX-SHORT_TEXT = 'X'."短文本
    GWA_ITEMX-QUANTITY = 'X'."采购订单数量
*    GWA_ITEMX-PO_UNIT = 'X' ."采购订单的计量单位
    GWA_ITEMX-PLANT = 'X'."工厂
    GWA_ITEMX-STGE_LOC = 'X'. "库存地点
*    GWA_ITEMX-ITEM_CAT = 'X'.
*    GWA_ITEMX-TAX_CODE = 'X'.  "税码
*    GWA_ITEMX-DATE_QTY_FIXED = 'X'.
    GWA_ITEMX-NO_ROUNDING = 'X'.    "不使用SAP建议采购的数量
    APPEND GWA_ITEMX TO GT_ITEMX.
  ENDLOOP.

**  审批策略预先获取
  SELECT OBJEK  FROM AUSP   JOIN  CABN ON CABN~ATINN = AUSP~ATINN
  WHERE   ATNAM =  'FPG_EKKO_EKORG' AND ATWRT = @EKORG AND OBJEK IN (
  SELECT OBJEK FROM AUSP JOIN  CABN ON CABN~ATINN = AUSP~ATINN
  WHERE   ATNAM =  'FPG_EKKO_BSART' AND ATWRT = 'NB')
  AND OBJEK IN (   SELECT OBJEK FROM AUSP JOIN  CABN ON CABN~ATINN = AUSP~ATINN
  WHERE   ATNAM =  'FPG_EKKO_EKGRP' AND ATWRT = @EKGRP ) AND OBJEK IN (
  SELECT OBJEK FROM AUSP JOIN  CABN ON CABN~ATINN = AUSP~ATINN
  WHERE   ATNAM =  'FPG_EKKO_WERKS' AND ATWRT = @LWERKS )
  INTO TABLE @DATA(LTAUSP).

  IF LTAUSP[] IS INITIAL.
    OUTPUT-RETURN-MSGTY = 'E'.
    OUTPUT-RETURN-MSGTX = '采购订单类型NB,采购组' && EKGRP && ',采购组织' && EKORG && ',工厂' && LWERKS &&
    '没有对应的审批策略,请核实业务'.
  ELSE.

    IF GT_RETURN[] IS NOT INITIAL.
      OUTPUT-RETURN-ZITEM =  GT_RETURN.
      ZRETITEMS[]  = GT_RETURN[].
    ELSEIF GT_RETURN[] IS INITIAL.
      CALL FUNCTION 'BAPI_PO_CREATE1'
        EXPORTING
          POHEADER         = GS_POHEADER
          POHEADERX        = GS_POHEADERX
        IMPORTING
          EXPPURCHASEORDER = L_PO_NUMBER
        TABLES
          RETURN           = GT_RETURN
          POITEM           = GT_ITEM
          POITEMX          = GT_ITEMX.


      READ TABLE GT_RETURN INTO GWA_RETURN INDEX 1.
      CLEAR L_ERRFLAG.
      L_ERRFLAG = GWA_RETURN-TYPE.
      IF L_ERRFLAG = 'S'.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            WAIT = 'X'.

        DATA:PO_REL_CODE TYPE BAPIMMPARA-PO_REL_COD.    "审批代码

        SELECT SINGLE FRGC1 INTO PO_REL_CODE
        FROM EKKO
        JOIN T16FS ON T16FS~FRGGR = EKKO~FRGGR AND T16FS~FRGSX = EKKO~FRGSX
        WHERE EBELN = L_PO_NUMBER.
        CLEAR L_PO_NUMBER1.
        DO 60 TIMES.
          SELECT SINGLE EBELN INTO L_PO_NUMBER1 FROM EKKO WHERE EBELN =  L_PO_NUMBER.
          IF L_PO_NUMBER1 IS INITIAL.
            WAIT UP TO 2 SECONDS.
          ENDIF.
        ENDDO.

        IF  L_PO_NUMBER1 IS INITIAL.
          CONCATENATE '创建采购凭证成功,审批未成功,' '凭证号:' L_PO_NUMBER  INTO MESSAGE.
        ELSE.
          UPDATE EKKO SET ZZBSTKD = PRCID OWERKS = OWERKS OLGORT = OLGORT WHERE EBELN = L_PO_NUMBER.
          COMMIT WORK AND WAIT.
          CALL FUNCTION 'BAPI_PO_RELEASE'
            EXPORTING
              PURCHASEORDER = L_PO_NUMBER
              PO_REL_CODE   = PO_REL_CODE.

          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              WAIT = 'X'.
          CONCATENATE '创建采购凭证成功,' '凭证号:' L_PO_NUMBER INTO MESSAGE.
        ENDIF.
      ELSE.
        LOOP AT GT_RETURN INTO GWA_RETURN WHERE TYPE = 'E' OR TYPE = 'A'.
          MESSAGE = MESSAGE && GWA_RETURN-ID && GWA_RETURN-NUMBER && GWA_RETURN-MESSAGE && '|'.
        ENDLOOP.
      ENDIF.
      OUTPUT-RETURN-MSGTY = L_ERRFLAG.
      OUTPUT-RETURN-MSGTX = MESSAGE.
      OUTPUT-RETURN-ZITEM =  GT_RETURN.

      SELECT  MATNR NETPR  MWSKZ  PEINH INTO TABLE VMISTR1 FROM EKPO WHERE  EBELN = L_PO_NUMBER.
      FIELD-SYMBOLS <FS> TYPE ZVMISTR1.
      LOOP AT VMISTR1 ASSIGNING <FS>.

        DATA: T_FTAXP LIKE TABLE OF FTAXP WITH HEADER LINE.
        DATA:TAXRATE LIKE FTAXP-KBETR.
        CALL FUNCTION 'GET_TAX_PERCENTAGE'
          EXPORTING
            ALAND   = 'CN'      "国家语言
            DATAB   = SY-DATUM  "当前时间
            MWSKZ   = <FS>-MWSKZ  "税码
            TXJCD   = ' '
          TABLES
            T_FTAXP = T_FTAXP.

        "读取获取出来的数据
        READ TABLE T_FTAXP INTO T_FTAXP  WITH KEY KSCHL = 'MWVS'.
        IF SY-SUBRC EQ 0.
          TAXRATE = T_FTAXP-KBETR / 1000."税率
        ENDIF.
        <FS>-NETPR = <FS>-NETPR / <FS>-PEINH * ( 1 + TAXRATE ) .
      ENDLOOP.
    ENDIF.
  ENDIF.
ENDFUNCTION.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
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系统中实现自动化的采购订单处理,并提高采购过程的效率和准确性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

gavin_gxh

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

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

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

打赏作者

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

抵扣说明:

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

余额充值