美文网首页
使用bapi[BAPI_SALESORDER_CHANGE]修改

使用bapi[BAPI_SALESORDER_CHANGE]修改

作者: 赵大宝宝 | 来源:发表于2019-11-05 15:12 被阅读0次

    要将增强字段一并append到如下四个表/结构中:

    如果增强字段在销售订单抬头(vbak)上

    • VBAKKOZ
    • VBAKKOZX
    • BAPE_VBAK
    • BAPE_VBAKX

    在行项目(vbap)上:

    • VBAPKOZ
    • VBAPKOZX
    • BAPE_VBAP
    • BAPE_VBAPX

    在运货计划行(VBEP)上:

    • VBEPKOZ
    • BEPKOZX
    • BAPE_VBEP
    • BAPE_VBEPX

    11-08今天做了一个测试,实际操作了一下append进去ABAP中,然后通过BAPI去修改字段

    TABLE VBAP

    vbap append构造

    STR BVPE_VBAP

    BVPE_VBAP append构造

    STR BVPE_VBAPX

    BVPE_VBAPX append构造

    STR VBAPKOZ

    VBAPKOZ append构造

    STR VBAPKOZX

    VBAPKOZX append构造

    代码如下

    DATA:
      LV_SALESDOCUMENT    TYPE BAPIVBELN-VBELN,
      LW_ORDER_HEADER_IN  TYPE BAPISDH1,
      LW_ORDER_HEADER_INX TYPE BAPISDH1X,
      LIT_ORDER_ITEM_IN   TYPE STANDARD TABLE OF BAPISDITM,
      LW_ORDER_ITEM_IN    TYPE BAPISDITM,
      LIT_ORDER_ITEM_INX  TYPE STANDARD TABLE OF BAPISDITMX,
      LW_ORDER_ITEM_INX   TYPE BAPISDITMX,
      LIT_EXTENSIONIN     TYPE STANDARD TABLE OF BAPIPAREX,
      LW_EXTENSIONIN      TYPE BAPIPAREX,
      LW_BAPE_VBAP        TYPE BAPE_VBAP,                                 "BAPI インタフェース: テーブル VBAP 拡張
      LW_BAPE_VBAPX       TYPE BAPE_VBAPX,                                "BAPI チェックボックス: テーブル VBAP 拡張
      LIT_RETURN          TYPE STANDARD TABLE OF BAPIRET2.
    
    ************** SO ORDER*********************
    LV_SALESDOCUMENT = LV_VBELN.
    
    ************** HEADER  *********************
    *LW_ORDER_HEADER_IN-DOC_DATE = '20191106'.
    
    ************** HEADERX  ********************
    LW_ORDER_HEADER_INX-UPDATEFLAG = 'U'.
    *LW_ORDER_HEADER_INX-DOC_DATE = ABAP_TRUE.
    
    ************** ITEM_IN *********************
    LW_ORDER_ITEM_IN-ITM_NUMBER = LV_POSNR.
    LW_ORDER_ITEM_IN-TARGET_QTY = '2'.
    LW_ORDER_ITEM_IN-PYMT_METH = '3'.
    APPEND LW_ORDER_ITEM_IN TO LIT_ORDER_ITEM_IN.
    
    ************** ITEM_INX ********************
    LW_ORDER_ITEM_INX-ITM_NUMBER = LV_POSNR.
    LW_ORDER_ITEM_INX-UPDATEFLAG = 'U'.
    LW_ORDER_ITEM_INX-TARGET_QTY = ABAP_TRUE.
    LW_ORDER_ITEM_INX-PYMT_METH = ABAP_TRUE.
    APPEND LW_ORDER_ITEM_INX TO LIT_ORDER_ITEM_INX.
    
    LW_BAPE_VBAP-VBELN = LV_VBELN.
    LW_BAPE_VBAP-POSNR = LV_POSNR.
    LW_BAPE_VBAP-ZNNZZ = '123456'.
    LW_BAPE_VBAP-ZNSZZ = 'ZNSZZ'.
    LW_BAPE_VBAP-ZORZZ = '001'.
    
    LW_BAPE_VBAPX-VBELN = LV_VBELN.
    LW_BAPE_VBAPX-POSNR = LV_POSNR.
    LW_BAPE_VBAPX-ZNNZZ = ABAP_TRUE.
    LW_BAPE_VBAPX-ZNSZZ = ABAP_TRUE.
    LW_BAPE_VBAPX-ZORZZ = ABAP_TRUE.
    *LW_BAPE_VBAPX-FSH_SEASON_YEAR = ABAP_TRUE.
    
    CALL METHOD CL_EEWA_CONVERT=>CONVERT_BAPIPAREX_IN
      EXPORTING
        PAR_STRUCTNAME   = 'BAPE_VBAP'
        PAR_DATA         = LW_BAPE_VBAP
      CHANGING
        PAR_BAPIPAREXTAB = LIT_EXTENSIONIN.
    
    CALL METHOD CL_EEWA_CONVERT=>CONVERT_BAPIPAREX_IN
      EXPORTING
        PAR_STRUCTNAME   = 'BAPE_VBAPX'
        PAR_DATA         = LW_BAPE_VBAPX
      CHANGING
        PAR_BAPIPAREXTAB = LIT_EXTENSIONIN.
    
    CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
      EXPORTING
        SALESDOCUMENT    = LV_SALESDOCUMENT
        ORDER_HEADER_IN  = LW_ORDER_HEADER_IN
        ORDER_HEADER_INX = LW_ORDER_HEADER_INX
      TABLES
        RETURN           = LIT_RETURN
        ORDER_ITEM_IN    = LIT_ORDER_ITEM_IN
        ORDER_ITEM_INX   = LIT_ORDER_ITEM_INX
        EXTENSIONIN      = LIT_EXTENSIONIN.
    
    LOOP AT LIT_RETURN ASSIGNING FIELD-SYMBOL(<LW_RETURN>).
    
    
    ENDLOOP.
    
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    * EXPORTING
    *   WAIT          =
    * IMPORTING
    *   RETURN        =
      .
    

    这次还遇到了一个非常有意思的问题。刚开始没办法修改成功(return的东message都是成功),最后通过查找资料发现,构造VBAPKOZX的类型必须使用char1去定义,如果和其他一样用char,长度1,没法识别。
    https://answers.sap.com/questions/1691488/bapisalesorderchange-extensionin-not-working.html

    image.png

    相关文章

      网友评论

          本文标题:使用bapi[BAPI_SALESORDER_CHANGE]修改

          本文链接:https://www.haomeiwen.com/subject/wyzsbctx.html