BAPI_SALESORDER_CHANGE - ooxxvv/MySAPnotes GitHub Wiki
BAPI_SALESORDER_CHANGE
- 更改、刪除銷售訂單
EXPORTING
IMPORTING
TABLES
EXCEPTIONS
Attributes
Methods
Code
{{{#!abap DATA: lw_headerx LIKE bapisdh1x, lw_header LIKE bapisdh1, lt_item LIKE bapisditm OCCURS 0 WITH HEADER LINE, lt_itemx LIKE bapisditmx OCCURS 0 WITH HEADER LINE, lt_partnerc LIKE bapiparnrc OCCURS 0 WITH HEADER LINE, lt_schedule LIKE bapischdl OCCURS 0 WITH HEADER LINE, lt_schedulex LIKE bapischdlx OCCURS 0 WITH HEADER LINE, lt_condition LIKE bapicond OCCURS 0 WITH HEADER LINE, lt_conditionx LIKE bapicondx OCCURS 0 WITH HEADER LINE, lt_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE, l_msgstr_success TYPE string, l_msgstr_error TYPE string, l_updateflag LIKE bapisditmx-updateflag.
CLEAR: lw_header, lw_headerx, l_updateflag, lt_item, lt_item[], lt_itemx, lt_itemx[], lt_partnerc, lt_partnerc[], lt_schedule, lt_schedule[], lt_schedulex, lt_schedulex[], lt_condition, lt_condition[], lt_conditionx, lt_conditionx[], lt_return, lt_return[], l_msgstr_success, l_msgstr_error.
IF g_save NE 'X'. EXIT. ENDIF.
*-Get old data DATA: lw_old_vbak LIKE zjoey_vbak, lt_old_vbap LIKE zjoey_vbap OCCURS 0 WITH HEADER LINE.
SELECT SINGLE * INTO lw_old_vbak FROM zjoey_vbak WHERE vbelnc EQ zjoey_vbak-vbelnc.
IF sy-subrc NE 0. it_message-vbelnc = zjoey_vbak-vbelnc. it_message-msgtyp = 'E'. it_message-msgstr = text-m19. APPEND it_message. EXIT. ENDIF.
SELECT * INTO TABLE lt_old_vbap FROM zjoey_vbap WHERE vbelnc EQ zjoey_vbak-vbelnc.
*-Compare Old and New data SORT lt_old_vbap BY vbelnc posnr. SORT it_zjoey_vbap BY vbelnc posnr.
IF lw_old_vbak EQ zjoey_vbak AND lt_old_vbap[] EQ it_zjoey_vbap[].
it_message-vbelnc = zjoey_vbak-vbelnc.
it_message-msgtyp = 'E'.
it_message-msgstr = text-m20.
APPEND it_message.
EXIT.
ENDIF.
*-SD Header data l_updateflag = 'U'.
lw_headerx-updateflag = l_updateflag.
lw_header-sales_org = zjoey_vbak-vkorg. lw_headerx-sales_org = 'X'.
lw_header-distr_chan = zjoey_vbak-vtweg. lw_headerx-distr_chan = 'X'.
lw_header-division = zjoey_vbak-spart. lw_headerx-division = 'X'.
lw_header-sales_off = zjoey_vbak-vkbur. lw_headerx-sales_off = 'X'.
lw_header-ref_1 = zjoey_vbak-ihrez. lw_headerx-ref_1 = 'X'.
lw_header-pmnttrms = zjoey_vbak-zterm. lw_headerx-pmnttrms = 'X'.
lw_header-ship_cond = zjoey_vbak-vsbed. lw_headerx-ship_cond = 'X'.
*-SD Header partner lt_partnerc-document = zjoey_vbak-vbeln. lt_partnerc-itm_number = '000000'. lt_partnerc-updateflag = l_updateflag. *-Ship-to partner lt_partnerc-partn_role = 'WE'. lt_partnerc-p_numb_new = zjoey_vbak-kunwe. APPEND lt_partnerc. *-Sales Employee partner lt_partnerc-partn_role = 'VE'. lt_partnerc-p_numb_new = zjoey_vbak-pernr. APPEND lt_partnerc.
*-Items (Delete) LOOP AT lt_old_vbap. CLEAR: lt_item, lt_itemx, it_zjoey_vbap. *---Check old data READ TABLE it_zjoey_vbap WITH KEY vbelnc = lt_old_vbap-vbelnc posnr = lt_old_vbap-posnr. IF sy-subrc EQ 0. CONTINUE. ELSE. l_updateflag = 'D'. lt_itemx-updateflag = l_updateflag. lt_itemx-itm_number = lt_old_vbap-posnr. lt_item-itm_number = lt_old_vbap-posnr. APPEND: lt_item, lt_itemx. ENDIF. ENDLOOP.
*-Items (Change) LOOP AT it_zjoey_vbap. CLEAR: lt_old_vbap, lt_item, lt_itemx, lt_schedule, lt_schedulex, lt_condition, lt_conditionx.
*-Update flag READ TABLE lt_old_vbap WITH KEY vbelnc = it_zjoey_vbap-vbelnc posnr = it_zjoey_vbap-posnr. IF sy-subrc EQ 0. l_updateflag = 'U'. ELSE. l_updateflag = 'I'. ENDIF.
*---Normal data lt_itemx-updateflag = l_updateflag. lt_item-itm_number = it_zjoey_vbap-posnr. lt_itemx-itm_number = it_zjoey_vbap-posnr. lt_item-material = it_zjoey_vbap-matnr. lt_itemx-material = 'X'. lt_item-short_text = it_zjoey_vbap-maktx. lt_itemx-short_text = 'X'. lt_item-plant = it_zjoey_vbap-werks. lt_itemx-plant = 'X'. lt_item-store_loc = it_zjoey_vbap-lgort. lt_itemx-store_loc = 'X'.
*---Amt. lt_conditionx-updateflag = l_updateflag. lt_condition-itm_number = it_zjoey_vbap-posnr. lt_conditionx-itm_number = it_zjoey_vbap-posnr. lt_condition-cond_type = 'PR00'. lt_conditionx-cond_type = 'X'. PERFORM change_amt_factor USING it_zjoey_vbap-netwr it_zjoey_vbap-waerk CHANGING lt_condition-cond_value. lt_conditionx-cond_value = 'X'. lt_condition-currency = it_zjoey_vbap-waerk. lt_conditionx-currency = 'X'.
*---Qty. lt_schedulex-updateflag = l_updateflag. lt_schedule-itm_number = it_zjoey_vbap-posnr. lt_schedulex-itm_number = it_zjoey_vbap-posnr. lt_schedule-sched_line = '0001'. lt_schedulex-sched_line = '00001'. lt_schedule-req_qty = it_zjoey_vbap-kwmeng. lt_schedulex-req_qty = 'X'. lt_item-target_qty = it_zjoey_vbap-kwmeng. lt_itemx-target_qty = 'X'. lt_item-sales_unit = it_zjoey_vbap-vrkme. lt_itemx-sales_unit = 'X'.
APPEND: lt_item,
lt_itemx,
lt_schedule,
lt_schedulex,
lt_condition,
lt_conditionx.
ENDLOOP.
*-Call BAPI CALL FUNCTION 'BAPI_SALESORDER_CHANGE' EXPORTING salesdocument = zjoey_vbak-vbeln order_header_in = lw_header order_header_inx = lw_headerx TABLES return = lt_return order_item_in = lt_item order_item_inx = lt_itemx schedule_lines = lt_schedule schedule_linesx = lt_schedulex conditions_in = lt_condition conditions_inx = lt_conditionx partnerchanges = lt_partnerc.
*-Get BAPI message & SD number IF sy-subrc NE 0. it_message-vbelnc = zjoey_vbak-vbelnc. it_message-msgtyp = 'E'. it_message-msgstr = l_msgstr_error. APPEND it_message. ELSE. LOOP AT lt_return. it_message-vbelnc = zjoey_vbak-vbelnc. it_message-msgtyp = lt_return-type. it_message-msgstr = lt_return-message. APPEND it_message. ENDLOOP. ENDIF.
*-Check message READ TABLE it_message WITH KEY msgtyp = 'E'. IF sy-subrc NE 0. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF. }}}