BAPI调用 - SO创建、修改、查看BAPI

本文详细介绍了如何使用BAPIs SD_SALESDOCUMENT_CREATE、SD_SALESDOCUMENT_CHANGE、BAPISDORDER_GETDETAILEDLIST等在创建、删除、更新销售订单时的操作步骤及注意事项,包括参数设置、流程说明和实例演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SO相关的几个常用BAPI

创建SO:

SD_SALESDOCUMENT_CREATE

BAPI_SALESORDER_CREATEFROMDAT2  

两个BAPI参数设置相同

修改SO:

SD_SALESDOCUMENT_CHANGE

BAPI_SALESORDER_CHANGE

查看SO明细:
BAPISDORDER_GETDETAILEDLIST

 

注意点一:创建SO

* 创建SO的参数设置如下:
  CALL FUNCTION 'SD_SALESDOCUMENT_CREATE'
    EXPORTING
      SALES_HEADER_IN      WA_H
      SALES_HEADER_INX     WA_HX
    IMPORTING
      SALESDOCUMENT_EX     G_VBELN
    TABLES
      RETURN               IT_RETURN
      SALES_ITEMS_IN       IT_T
*     SALES_ITEMS_INX      = 
      SALES_PARTNERS       IT_PARTER
*     SALES_SCHEDULES_IN   =
*     SALES_SCHEDULES_INX  =
*     SALES_CONDITIONS_IN  =

执行后后发现一个问题,如下图所示:

我们传入的订单数量时不为0的,检查发现,此处订单数量是在TABLE参数SALES_SCHEDULES_IN中设置

设置如下:

WA_SCHDL-ITM_NUMBER WA_T_OUT-ITM_NUMBER"行项目
    WA_SCHDL-REQ_QTY WA_T_OUT-REQ_QTY.    "数量
    APPEND WA_SCHDL TO IT_SCHDL.

 

 注意点二:删除SO

使用SD_SALESDOCUMENT_CHANGE 删除SO操作,必须设置删除标识 = 'D'

1)删除整单

SALESDOCUMENT = <doc. number>.

ORDER_HEADER_INX-UPDATEFLAG = 'D'.

2)删除行项目

SALESDOCUMENT = <doc. number>.

ORDER_ITEM_IN-ITM_NUMBER = <item number>.

ORDER_ITEM_INX-ITM_NUMBER = <item number>.

ORDER_ITEM_INX-UPDATEFLAG = 'D'.

 

注意点三:更新SO

使用SD_SALESDOCUMENT_CHANGE或者BAPI_SALESORDER_CHANGE 更新SO操作,必须设置更新标识 = 'U'

 实例:关闭销售订单->设置行项目拒绝原因=Z3


header中ls_h_inx-updateflag = 'U'.  需要修改的行项目ls_item_inx-updateflag = 'U'.
  DATA:
    ls_h_inx    TYPE bapisdh1x,
    lt_item_in  TYPE STANDARD TABLE OF bapisditm,
    ls_item_in  TYPE bapisditm,
    lt_item_inx TYPE STANDARD TABLE OF bapisditmx,
    ls_item_inx TYPE bapisditmx,
    lt_return   TYPE STANDARD TABLE OF bapiret2,
    ls_return   TYPE bapiret2.


  SELECT vbeln posnr
    INTO CORRESPONDING FIELDS OF TABLE lt_vbap
    FROM vbap
    WHERE vbeln = ls_vbak-vbeln.

  LOOP AT lt_vbap INTO ls_vbap.
    ls_item_in-itm_number = ls_vbap-posnr.
    ls_item_in-reason_rej = 'Z3'.
    APPEND ls_item_in TO lt_item_in.

    ls_item_inx-itm_number = ls_vbap-posnr.
    ls_item_inx-updateflag = 'U'.
    ls_item_inx-reason_rej = 'X'.
    APPEND ls_item_inx TO lt_item_inx.

    CLEAR: ls_item_in,
           ls_item_inx.
  ENDLOOP.

  ls_h_inx-updateflag = 'U'.

  CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
    EXPORTING
      salesdocument    = ls_vbak-vbeln
      order_header_inx = ls_h_inx
    TABLES
      return           = lt_return
      order_item_in    = lt_item_in
      order_item_inx   = lt_item_inx.


  LOOP AT lt_return INTO ls_return WHERE type CA 'AEX'.
    IF return-ifmsg = space.
      return-ifmsg = ls_return-message.
    ELSE.
      return-ifmsg = return-ifmsg && '/' && ls_return-message.
    ENDIF.
  ENDLOOP.
  IF sy-subrc = 0.
    return-guid     = ls_control-guid.
    return-busno    = ''.
    return-if_statu = '02'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.

    return-guid     = ls_control-guid.
    return-busno    = ''.
    return-if_statu = '01'.
    return-ifmsg = '销售订单' && ls_zdata-vbeln && '关闭成功'.
  ENDIF.


注意点四:通过参考销售合同(VA43)创建销售订单

设置行项目参数ORDER_ITEM_IN如下三个字段

     ORDER_ITEM_IN-VAL_CONTR   "价值参考合同
     ORDER_ITEM_IN-VAL_CON_I    "价值参考合同行项目
      ORDER_ITEM_IN-REF_DOC_CA = 'G'."参考凭证类别
(固定)

 

 

 

 

 

 


 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王小磊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值