摘抄——使用bapi[BAPI_SALESORDER_CHANGE]修改add-on字段

要将增强字段一并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

 

STR BVPE_VBAP

STR BVPE_VBAPX

STR VBAPKOZ

 

STR VBAPKOZX

 

代码如下

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

 

 

 

 
posted @ 2022-03-01 08:33  三秒真男  阅读(373)  评论(0编辑  收藏  举报