首页 > 其他分享 >ABAP:ME22N采购订单修改BAPI

ABAP:ME22N采购订单修改BAPI

时间:2022-12-19 11:13:40浏览次数:41  
标签:ME22N BAPI poitemx ABAP ls zsdt024 pocondx poitem po

ME22N采购订单修改BAPI:

FUNCTION zsdfu015.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_ID) TYPE  ZRFC_LOGID OPTIONAL
*"     VALUE(I_CANUM) TYPE  CANUM OPTIONAL
*"  EXPORTING
*"     VALUE(E_CODE) TYPE  MSGTY
*"     VALUE(E_MSG) TYPE  MSGTXT
*"     VALUE(E_FLOW_END) TYPE  CHAR01
*"  TABLES
*"      ET_RETURN STRUCTURE  ZRFCT005 OPTIONAL
*"----------------------------------------------------------------------
  DATA:ls_zsdt024  TYPE zsdt024,
       lt_zsdt024  TYPE TABLE OF zsdt024,
       ls_zsdt008  TYPE zsdt008,
       lt_zsdt008  TYPE TABLE OF zsdt008,
       ls_zrfct002 TYPE zrfct002,
       ls_zrfct005 TYPE zrfct005.

  "获取源表数据
  CLEAR:lt_zsdt024.
  SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_zsdt024 FROM zsdt024 WHERE zrfc_logid = i_id.
  IF lt_zsdt024 IS INITIAL.
    e_code = 'E'.
    e_msg  = '无可执行数据'.
    RETURN.
  ENDIF.

  "采购订单修改BAPI结构定义
  DATA:purchaseorder TYPE bapimepoheader-po_number,
       return        LIKE TABLE OF bapiret2 WITH HEADER LINE,
       poitem        LIKE TABLE OF bapimepoitem WITH HEADER LINE,
       poitemx       LIKE TABLE OF bapimepoitemx WITH HEADER LINE,
       pocond        LIKE TABLE OF bapimepocond WITH HEADER LINE,
       pocondx       LIKE TABLE OF bapimepocondx WITH HEADER LINE,
       poschedule    LIKE TABLE OF bapimeposchedule    WITH HEADER LINE,
       poschedulex   LIKE TABLE OF bapimeposchedulx    WITH HEADER LINE.

  CLEAR:purchaseorder,
        return[],
        return,
        poitem,
        poitem[],
        poitemx,
        poitemx[],
        pocond,
        pocond[],
        pocondx,
        pocondx[].

  DATA:lv_mtart TYPE mara-mtart.

  LOOP AT lt_zsdt024 INTO ls_zsdt024.

    AT END OF ebeln.
      purchaseorder = ls_zsdt024-ebeln.
    ENDAT.

    IF ls_zsdt024-zbs = 'U'."修改

      poitem-po_item = ls_zsdt024-ebelp.
      poitemx-po_item = ls_zsdt024-ebelp.
      poitemx-po_itemx = 'X'.
      APPEND: poitemx,poitem.
      CLEAR: poitem, poitemx.

      poschedule-po_item = ls_zsdt024-ebelp."行项目
      poschedulex-po_item = ls_zsdt024-ebelp.
      poschedule-sched_line = '0001'.
      poschedulex-sched_line = '0001'.
      poschedule-delivery_date = ls_zsdt024-eindt.    "交货日期
      poschedulex-delivery_date = 'X'.
      poschedule-quantity = ls_zsdt024-menge."数量
      poschedulex-quantity = 'X'.
      APPEND:poschedule,poschedulex.
      CLEAR:poschedule,poschedulex.

      pocond-itm_number = ls_zsdt024-ebelp.
      pocond-change_id = 'U'.
      APPEND pocond.

      pocondx-itm_number = ls_zsdt024-ebelp.
      pocondx-itm_numberx = 'X'.
      pocond-change_id = 'X'.
      APPEND pocondx.
      CLEAR:pocond,pocondx.
    ELSEIF ls_zsdt024-zbs = 'I'."新增
      "行项目
      poitem-po_item = ls_zsdt024-ebelp.
      poitemx-po_item = ls_zsdt024-ebelp.
      poitemx-po_itemx = 'X'.
      poitem-material = ls_zsdt024-matnr."物料
      poitemx-material = 'X'.
      poitem-quantity = ls_zsdt024-menge."数量
      poitemx-quantity = 'X'.
      poitem-plant = ls_zsdt024-werks."工厂
      poitemx-plant = 'X'.
*      IF LS_ZSDT024-WERKS = '7888'.
*        SELECT SINGLE LGFSB INTO POITEM-STGE_LOC FROM MARC WHERE MATNR = LS_ZSDT024-MATNR AND WERKS = LS_ZSDT024-WERKS.
*      ELSE.
*        CLEAR:LV_MTART.
*        SELECT SINGLE MTART INTO LV_MTART FROM MARA WHERE MATNR = LS_ZSDT024-MATNR.
*        SELECT SINGLE LGORT INTO POITEM-STGE_LOC FROM ZSDT003 WHERE MTART = LV_MTART AND WERKS = LS_ZSDT024-WERKS.
*      ENDIF.

      poitemx-stge_loc = 'X'.
      SELECT SINGLE meins INTO  poitem-po_unit FROM mara WHERE matnr = ls_zsdt024-matnr.
      poitemx-po_unit = 'X'.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = ls_zsdt024-banfn
        IMPORTING
          output = ls_zsdt024-banfn.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = ls_zsdt024-bnfpo
        IMPORTING
          output = ls_zsdt024-bnfpo.


      poitem-preq_no = ls_zsdt024-banfn."采购申请
      poitemx-preq_no = 'X'.
      poitem-preq_item = ls_zsdt024-bnfpo."采购申请项目
      poitemx-preq_item = 'X'.

      SELECT SINGLE infnr INTO poitem-info_rec FROM eina WHERE matnr = ls_zsdt024-matnr AND lifnr = ls_zsdt024-lifnr
       AND loekz <> 'X' .

      poitemx-info_rec = 'X'.
      poitem-tax_code = ls_zsdt024-mwskz. " 税码
      poitemx-tax_code  = 'X'.
      poitem-no_rounding = 'X'.
      poitemx-no_rounding = 'X'.
      APPEND poitemx.
      APPEND poitem.
      CLEAR: poitem, poitemx.

      poschedule-po_item = ls_zsdt024-ebelp."行项目
      poschedulex-po_item = ls_zsdt024-ebelp.
      poschedule-del_datcat_ext = 'D'.           "交货日期的类别
      poschedulex-del_datcat_ext = 'X'.

      poschedule-delivery_date = sy-datum.
      poschedulex-delivery_date = 'X'.
      poschedule-quantity = ls_zsdt024-menge."数量
      poschedulex-quantity = 'X'.
      APPEND:poschedule,poschedulex.
      CLEAR:poschedule,poschedulex.

      pocond-itm_number = ls_zsdt024-ebelp.
      pocond-cond_type = 'PB00'.    " Give the pricing condition type that derives netprice
      pocond-cond_value = ls_zsdt024-brtwr.
      pocond-currency = ls_zsdt024-koein.
      pocond-cond_p_unt = ls_zsdt024-kpein.
      pocond-change_id = 'I'.
      pocondx-itm_number = ls_zsdt024-ebelp.
      pocondx-itm_numberx = 'X'.
      pocondx-cond_type = 'X'.
      pocondx-cond_value = 'X'.
      pocondx-currency = 'X'.
      pocondx-cond_p_unt = 'X'.
      pocondx-change_id = 'X'.
      APPEND:pocondx,pocond.
    ELSEIF ls_zsdt024-zbs = 'D'."删除
      poitem-po_item = ls_zsdt024-ebelp.
      poitemx-po_item = ls_zsdt024-ebelp.
      poitemx-po_itemx = 'X'.
      poitem-delete_ind = 'X'. "采购订单行项目删除标识
      poitemx-delete_ind = 'X'.
      APPEND: poitemx,poitem.
      CLEAR: poitem, poitemx.
    ENDIF.

    CLEAR:ls_zsdt024.
  ENDLOOP.

  CALL FUNCTION 'BAPI_PO_CHANGE'
    EXPORTING
      purchaseorder    = purchaseorder
      no_price_from_po = 'X'
    TABLES
      poitem           = poitem
      poitemx          = poitemx
      poschedule       = poschedule
      poschedulex      = poschedulex
*     POACCOUNT        = LT_POACCOUNT
*     POACCOUNTX       = LT_POACCOUNTX
*     POSERVICES       = IT_SERVICE
*     POSRVACCESSVALUES = LT_POSRVACCESSVALUES
      pocond           = pocond
      pocondx          = pocondx
      return           = return.


  LOOP AT return WHERE type = 'E' OR type = 'A' OR type = 'X'.
    CONCATENATE e_msg return-message INTO e_msg SEPARATED BY '/'.
  ENDLOOP.
  IF sy-subrc NE 0.
    CALL METHOD zcl_rfc=>get_source
      EXPORTING
        i_id       = i_id
        i_canum    = i_canum
      IMPORTING
        e_zrfct002 = ls_zrfct002.
*      RECEIVING
*        R_SOURCE   = LS_SOURCE.

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.

    CLEAR:ls_zsdt008.
    ls_zsdt008-canum      = ls_zrfct002-canum.
    ls_zsdt008-objtype    = ls_zrfct002-objtype_save.
    ls_zsdt008-objkey     = purchaseorder.
    ls_zsdt008-zrfcid     = ls_zrfct002-zrfcid.
    ls_zsdt008-zrfc_logid = i_id.
    APPEND ls_zsdt008 TO lt_zsdt008.

    MODIFY zsdt008 FROM TABLE lt_zsdt008.

    e_code = 'S'.
    CONCATENATE 'PO:' purchaseorder '修改成功' INTO e_msg.
    CLEAR:ls_zrfct005.
    ls_zrfct005-status = '53'.
    ls_zrfct005-msgty = e_code.
    ls_zrfct005-msgid = '00'.
    ls_zrfct005-msgno = '001'.
    ls_zrfct005-msgv1 = e_msg.
    ls_zrfct005-msgv4 = purchaseorder.
    APPEND ls_zrfct005 TO et_return.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    e_code = 'E'.
  ENDIF.
ENDFUNCTION.

 

标签:ME22N,BAPI,poitemx,ABAP,ls,zsdt024,pocondx,poitem,po
From: https://www.cnblogs.com/ap-ad-java-abap/p/16991667.html

相关文章

  • ABAP:VF01销售开票BAPI
    VF01销售开票BAPI:FUNCTIONzsdfu007.*"----------------------------------------------------------------------*"*"本地接口:*"IMPORTING*"VALUE(I_ID)TY......
  • ABAP:ME22N采购订单修改增强
    ME22N采购订单修改增强:BADI名称:ME_PROCESS_PO_CUST SE18找到BADI创建实施        找到对应的方法:PROCESS_HEADER:methodIF_EX_ME_PROCES......
  • ABAP:VA02销售订单修改BAPI
    VA02销售订单修改BAPIFUNCTIONzsdfu016.*"----------------------------------------------------------------------*"*"本地接口:*"IMPORTING*"VALUE(I_ID)......
  • ABAP:销售订单审批及反审函数
    销售订单审批及反审函数:DATA:ls_zsdt028TYPEzsdt028,lt_zsdt028TYPETABLEOFzsdt028,ls_zsdt008TYPEzsdt008,lt_zsdt008TYPETABLE......
  • ABAP:MIGO收货BAPI
    MIGO收货BAPI:DATA:lt_zsdt008TYPETABLEOFzsdt008,ls_zsdt008LIKELINEOFlt_zsdt008,ls_zsdt008_2LIKELINEOFlt_zsdt008,ls_z......
  • SAP ABAP CDS view 里 INNER JOIN 和 Association 的区别
    最近有朋友在我的知识星球里向我提问,SAPABAPCDSview的INNERJOIN和Association的功能可以理解为一样吗?(关于加入我的知识星球的方式,请移步本文文末)本文就来聊一......
  • WebApi 路由机制剖析
    从网上看了WEBAPI理解感觉不错分享一下一、MVC和WebApi路由机制比较1、MVC里面的路由在MVC里面,默认路由机制是通过url路径去匹配对应的action方法,比如/Home/GetUser这个......
  • WebApi 接口参数不再困惑:传参详解
    从网上看了WEBAPI理解感觉是不错的分享一下前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料。如今,使用WebApi也有段时间了,今天就记录下API接口传参......
  • SAP ABAP CDS view Association 引入的缘由
    ABAPCDSview支持三种join方式:InnerJoinLeftOuterjoinRightouterjoin我们使用ABAPDevelopmentTool的CDSview向导创建一个CDSview:向导里包含的$......
  • 在Asp.Net WebApi中使用DotNetZip压缩响应流过滤器
    usingIonic.Zlib;usingSystem;usingSystem.IO;usingSystem.Linq;usingSystem.Net.Http;usingSystem.Threading;usingSystem.Threading.Tasks;usingSystem.......