且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何利用BAPI SD_SALESDOCUMENT_CHANGE修改Sales Order的字段

更新时间:2022-09-14 21:34:46

S/4HANA

250 篇文章8 订阅

订阅专栏

假设我想修改S/4HANA里Sales Order抬头的Service Date字段SERV_DATE:


首先从数据库表VBKD里查找到SERV_DATE修改之前的值为2020年1月1日




使用如下代码,将这个字段的值改成2020年1月2日。


 

REPORT zchange_so1.

DATA: lv_num        TYPE bapivbeln-vbeln,

     ls_doc_header TYPE bapisdhd1,

     lt_vbap       TYPE STANDARD  TABLE OF vbap.

lv_num = '0000000268'.

CALL FUNCTION 'SD_VBAP_READ_WITH_VBELN'

 EXPORTING

   i_vbeln          = lv_num

 TABLES

   et_vbap          = lt_vbap

 EXCEPTIONS

   record_not_found = 1

   OTHERS           = 2.

BREAK-POINT.

DATA: i_order_header_in  LIKE bapisdhd1 .

DATA: i_order_header_inx LIKE bapisdhd1x,

     lt_bapiret2        LIKE bapiret2   OCCURS 0 WITH HEADER LINE.

i_order_header_inx-updateflag = 'U'.

i_order_header_in-serv_date = '20200102' .

i_order_header_inx-serv_date = 'X'.

CALL FUNCTION 'SD_SALESDOCUMENT_CHANGE'

 EXPORTING

   salesdocument    = lv_num

   order_header_in  = i_order_header_in

   order_header_inx = i_order_header_inx

 TABLES

   return           = lt_bapiret2.

clear: lt_bapiret2.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

 IMPORTING

    RETURN = lt_bapiret2.

BREAK-POINT.执行之后,从输出参数lt_bapiret2里查看到这个Sales Order已经成功被更新了。


从后台数据库表VBKD里查看到这个字段的值也已经成功更新了: