Sales Order Change and Delete
Sales Order Change and Delete
INCLUDE zsd_salesord_chg_top.
INCLUDE zsd_salesord_chg_f01.
START-OF-SELECTION.
PERFORM process_data.
PERFORM bapi_logs.
*&---------------------------------------------------------------------*
*& Include ZSD_SALESORD_CHG_TOP
*&---------------------------------------------------------------------*
TYPE-POOLS: slis.
TYPES: BEGIN OF ty_upload,
vbeln TYPE vbeln_va,
posnr TYPE posnr_va,
matnr TYPE matnr,
arktx TYPE arktx,
kdmat TYPE matnr_ku,
zmeng TYPE dzmeng,
pstyv TYPE pstyv,
werks TYPE werks_ext,
posid TYPE ps_posid,
kbetr TYPE vfprc_element_amount,
waers TYPE waers,
kbetr_zpr1 TYPE vfprc_element_amount,
waers_zpr1 TYPE waers,
* kpein TYPE kpein,
item_text_ZTX0 TYPE string,
item_text_ZTX1 TYPE string,
* item_lang TYPE spras,
fright TYPE kbetr,
insurance TYPE kbetr,
END OF ty_upload.
*&---------------------------------------------------------------------*
*& Include ZSD_SALESORD_CHG_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form process_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM process_data .
DATA : lv_field_seperator TYPE char01 VALUE 'X',
lv_line_header TYPE char01 VALUE 'X',
lt_tab_raw_data TYPE truxs_t_text_data.
DATA : lv_increment TYPE posnr_va.
TRY .
lo_excel_ref = NEW cl_fdt_xl_spreadsheet(
document_name = lv_file
xdocument = lv_headerxstring ) .
CATCH cx_fdt_excel_core INTO DATA(lo_exc).
READ TABLE lo_exc->mt_message INTO DATA(lwa_msg_1) WITH KEY msgty = 'E'.
MESSAGE lwa_msg_1-text TYPE 'E'.
"Implement suitable error handling here
ENDTRY .
* BREAK tushark.
IF gt_upload[] IS NOT INITIAL.
LOOP AT gt_upload ASSIGNING FIELD-SYMBOL(<lfs_upload>).
<lfs_upload>-vbeln = |{ <lfs_upload>-vbeln ALPHA = IN } |.
ENDLOOP.
SELECT * FROM vbak INTO TABLE @DATA(lt_vbak)
FOR ALL ENTRIES IN @gt_upload
WHERE vbeln = @gt_upload-vbeln.
IF sy-subrc IS INITIAL.
SELECT * FROM vbap INTO TABLE @DATA(lt_vbap)
FOR ALL ENTRIES IN @gt_upload
WHERE vbeln = @gt_upload-vbeln.
"AND posnr = @gt_upload-posnr.
SELECT * FROM vbep INTO TABLE @DATA(lt_vbep)
FOR ALL ENTRIES IN @gt_upload
WHERE vbeln = @gt_upload-vbeln.
"AND posnr = @gt_upload-posnr.
ENDIF.
SORT lt_vbap BY posnr DESCENDING.
LOOP AT gt_upload INTO gs_upload GROUP BY ( vbeln = gs_upload-vbeln )
ASSIGNING FIELD-SYMBOL(<group>).
DATA(ls_vbeln) = <group>.
IF cb_chg IS NOT INITIAL.
lw_headx-updateflag = 'U'.
LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<lfs_upd>).
DATA(lv_posnr) = ls_vbap-posnr.
lw_item-itm_number = <lfs_upd>-posnr.
lw_item-material = <lfs_upd>-matnr.
lw_item-short_text = <lfs_upd>-arktx.
lw_item-cust_mat35 = <lfs_upd>-kdmat.
* lw_item-target_qty = <lfs_upd>-zmeng.
lw_item-item_categ = <lfs_upd>-pstyv.
lw_item-plant = <lfs_upd>-werks.
lw_item-wbs_elem = <lfs_upd>-posid.
lw_itemx-itm_number = <lfs_upd>-posnr.
lw_itemx-material = 'X'.
lw_itemx-short_text = 'X'.
lw_itemx-cust_mat35 = 'X'.
* lw_itemx-target_qty = 'X'.
lw_itemx-item_categ = 'X'.
lw_itemx-plant = 'X'.
lw_itemx-wbs_elem = 'X'.
lw_itemx-updateflag = 'U'.
lw_schedule_linesx-itm_number = <lfs_upd>-posnr.
lw_schedule_linesx-req_qty = 'X'.
lw_schedule_linesx-sched_line = ls_vbep-etenr.
lw_schedule_linesx-updateflag = 'U'.
APPEND:lw_SCHEDULE_LINES TO lt_SCHEDULE_LINES,
lw_SCHEDULE_LINESx TO lt_SCHEDULE_LINESx.
ELSE. " changed on 5.03.2024
lw_SCHEDULE_LINES-itm_number = <lfs_upd>-posnr.
lw_SCHEDULE_LINES-sched_line = '0001' .
lw_SCHEDULE_LINES-req_qty = <lfs_upd>-zmeng.
lw_schedule_linesx-itm_number = <lfs_upd>-posnr.
lw_schedule_linesx-req_qty = 'X'.
lw_schedule_linesx-sched_line = '0001'.
lw_schedule_linesx-updateflag = 'I'.
APPEND:lw_SCHEDULE_LINES TO lt_SCHEDULE_LINES,
lw_SCHEDULE_LINESx TO lt_SCHEDULE_LINESx. "end of change
ENDIF.
lw_conditions_inx-itm_number = <lfs_upd>-posnr.
lw_conditions_inx-cond_type = 'ZPR0'.
lw_conditions_inx-cond_value = 'X'.
lw_conditions_inx-currency = 'X'.
lw_conditions_inx-cond_p_unt = 'X'.
lw_conditions_inx-updateflag = 'U'.
lw_conditions_inx-itm_number = <lfs_upd>-posnr.
lw_conditions_inx-cond_type = 'ZPR1'.
lw_conditions_inx-cond_value = 'X'.
lw_conditions_inx-currency = 'X'.
lw_conditions_inx-cond_p_unt = 'X'.
lw_conditions_inx-updateflag = 'U'.
lw_conditions_inx-itm_number = <lfs_upd>-posnr.
lw_conditions_inx-cond_type = 'ZF00'.
lw_conditions_inx-cond_value = 'X'.
lw_conditions_inx-currency = 'X'.
lw_conditions_inx-cond_p_unt = 'X'.
lw_conditions_inx-updateflag = 'U'.
lw_conditions_inx-itm_number = <lfs_upd>-posnr.
lw_conditions_inx-cond_type = 'ZF00'.
lw_conditions_inx-cond_value = 'X'.
lw_conditions_inx-currency = 'X'.
lw_conditions_inx-cond_p_unt = 'X'.
lw_conditions_inx-updateflag = 'U'.
lw_conditions_inx-itm_number = <lfs_upd>-posnr.
lw_conditions_inx-cond_type = 'ZI01'.
lw_conditions_inx-cond_value = 'X'.
lw_conditions_inx-currency = 'X'.
lw_conditions_inx-cond_p_unt = 'X'.
lw_conditions_inx-updateflag = 'U'.
lw_conditions_inx-itm_number = <lfs_upd>-posnr.
lw_conditions_inx-cond_type = 'ZI01'.
lw_conditions_inx-cond_value = 'X'.
lw_conditions_inx-currency = 'X'.
lw_conditions_inx-cond_p_unt = 'X'.
lw_conditions_inx-updateflag = 'U'.
ELSE.
MESSAGE 'Line item No not exist in Sales order' TYPE 'I'.
ENDIF.
ENDLOOP.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = <lfs_upd>-vbeln
* ORDER_HEADER_IN =
order_header_inx = lw_headx
TABLES
return = lt_return
order_item_in = lt_item
order_item_inx = lt_itemx
schedule_lines = lt_SCHEDULE_LINES
schedule_linesx = lt_SCHEDULE_LINESX
order_text = lt_order
conditions_in = lt_conditions_in
conditions_inx = lt_conditions_inx.
lw_item-material = <lfs_upd>-matnr.
lw_item-short_text = <lfs_upd>-arktx.
lw_item-cust_mat35 = <lfs_upd>-kdmat.
* lw_item-target_qty = <lfs_upd>-zmeng.
lw_item-item_categ = <lfs_upd>-pstyv.
lw_item-plant = <lfs_upd>-werks.
lw_item-wbs_elem = <lfs_upd>-posid.
lw_itemx-itm_number = lw_item-itm_number.
lw_itemx-material = 'X'.
lw_itemx-short_text = 'X'.
lw_itemx-cust_mat35 = 'X'.
* lw_itemx-target_qty = 'X'.
lw_itemx-item_categ = 'X'.
lw_itemx-plant = 'X'.
lw_itemx-wbs_elem = 'X'.
lw_itemx-updateflag = 'I'.
lw_order-text_id = 'ZTX0'.
lw_order-text_line = <lfs_upd>-item_text_ztx0.
lw_order-langu = 'E'."<lfs_upd>-item_lang.
APPEND lw_order TO lt_order.
ENDIF.
IF <lfs_upd>-item_text_ztx1 IS NOT INITIAL.
lw_order-doc_number = <lfs_upd>-vbeln.
lw_order-itm_number = lw_item-itm_number.
lw_order-text_id = 'ZTX1'.
lw_order-text_line = <lfs_upd>-item_text_ztx1.
lw_order-langu = 'E'."<lfs_upd>-item_lang.
APPEND lw_order TO lt_order.
ENDIF.
lw_schedule_linesx-itm_number = lw_item-itm_number.
lw_schedule_linesx-req_qty = 'X'.
lw_schedule_linesx-sched_line = ls_vbep-etenr.
lw_schedule_linesx-updateflag = 'I'.
APPEND:lw_SCHEDULE_LINES TO lt_SCHEDULE_LINES,
lw_SCHEDULE_LINESx TO lt_SCHEDULE_LINESx.
ENDIF.
lw_conditions_inx-itm_number = lw_item-itm_number.
lw_conditions_inx-cond_type = 'ZPR0'.
lw_conditions_inx-cond_value = 'X'.
lw_conditions_inx-currency = 'X'.
lw_conditions_inx-cond_p_unt = 'X'.
lw_conditions_inx-updateflag = 'I'.
lw_conditions_inx-itm_number = <lfs_upd>-posnr.
lw_conditions_inx-cond_type = 'ZPR1'.
lw_conditions_inx-cond_value = 'X'.
lw_conditions_inx-currency = 'X'.
lw_conditions_inx-cond_p_unt = 'X'.
lw_conditions_inx-updateflag = 'I'.
lw_conditions_inx-itm_number = lw_item-itm_number.
lw_conditions_inx-cond_type = 'ZF00'.
lw_conditions_inx-cond_value = 'X'.
lw_conditions_inx-currency = 'X'.
lw_conditions_inx-cond_p_unt = 'X'.
lw_conditions_inx-updateflag = 'I'.
lw_conditions_inx-itm_number = lw_item-itm_number.
lw_conditions_inx-cond_type = 'ZI01'.
lw_conditions_inx-cond_value = 'X'.
lw_conditions_inx-currency = 'X'.
lw_conditions_inx-cond_p_unt = 'X'.
lw_conditions_inx-updateflag = 'I'.
lw_conditions_inx-itm_number = lw_item-itm_number.
lw_conditions_inx-cond_type = 'ZF00'.
lw_conditions_inx-cond_value = 'X'.
lw_conditions_inx-currency = 'X'.
lw_conditions_inx-cond_p_unt = 'X'.
lw_conditions_inx-updateflag = 'I'.
lw_conditions_inx-itm_number = lw_item-itm_number.
lw_conditions_inx-cond_type = 'ZI01'.
lw_conditions_inx-cond_value = 'X'.
lw_conditions_inx-currency = 'X'.
lw_conditions_inx-cond_p_unt = 'X'.
lw_conditions_inx-updateflag = 'I'.
ENDLOOP.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = <lfs_upd>-vbeln
* ORDER_HEADER_IN =
order_header_inx = lw_headx
TABLES
return = lt_return
order_item_in = lt_item
order_item_inx = lt_itemx
schedule_lines = lt_SCHEDULE_LINES
schedule_linesx = lt_SCHEDULE_LINESX
order_text = lt_order
conditions_in = lt_conditions_in
conditions_inx = lt_conditions_inx.
*
ELSEIF cb_del IS NOT INITIAL.
* lw_headx-updateflag = 'U'.
* LOOP AT GROUP <group> ASSIGNING <lfs_upd>.
*
* READ TABLE lt_vbap INTO ls_vbap WITH KEY vbeln = <lfs_upd>-vbeln
* posnr = <lfs_upd>-posnr.
* IF sy-subrc IS INITIAL.
* lw_item-itm_number = <lfs_upd>-posnr.
* lw_item-wbs_elem = ' '.
*
*
* lw_itemx-itm_number = <lfs_upd>-posnr.
* lw_itemx-wbs_elem = 'X'.
* lw_itemx-updateflag = 'U'.
*
* APPEND: lw_item TO lt_item,
* lw_itemx TO lt_itemx.
*
* CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
* EXPORTING
* salesdocument = <lfs_upd>-vbeln
** ORDER_HEADER_IN =
* order_header_inx = lw_headx
* TABLES
* return = lt_return
* order_item_in = lt_item
* order_item_inx = lt_itemx.
*
* READ TABLE lt_return INTO DATA(ls_return) WITH KEY type = 'E'.
* IF sy-subrc <> 0.
* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
* WAIT UP TO 2 SECONDS.
* ENDIF.
* lt_item_1 = lt_item.
* REFRESH: lt_item[],lt_itemx[].
* CLEAR : lw_headx.
* ENDIF.
* IF sy-subrc IS INITIAL.
** lw_headx-updateflag = 'D'.
*
* lw_headx-updateflag = 'U'.
* lw_item-itm_number = <lfs_upd>-posnr.
* lw_itemx-updateflag = 'D'.
* lw_itemx-itm_number = <lfs_upd>-posnr.
* APPEND: lw_item TO lt_item,
* lw_itemx TO lt_itemx.
* ENDIF.
* ENDLOOP.
BREAK tushark.
lw_headx-updateflag = 'U'.
LOOP AT GROUP <group> ASSIGNING <lfs_upd>.
lw_itemx-itm_number = <lfs_upd>-posnr.
lw_itemx-wbs_elem = 'X'.
lw_itemx-updateflag = 'U'.
CLEAR:lt_return[],lw_headx,lt_item[],lt_itemx[],
lt_SCHEDULE_LINES[],lt_SCHEDULE_LINESX[],
lt_order[],lt_conditions_in[],lt_conditions_inx[],lv_pre_posnr.
ENDLOOP.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form bapi_logs
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM bapi_logs .
DATA: lt_fcat TYPE TABLE OF slis_fieldcat_alv,
ls_fcat TYPE slis_fieldcat_alv,
l_layout TYPE slis_layout_alv. " Changed by Tushar
l_layout-colwidth_optimize = 'X'.
CLEAR ls_fcat.
ls_fcat-fieldname = 'VBELN'.
ls_fcat-seltext_m = 'Sales Order'.
APPEND ls_fcat TO lt_fcat.
CLEAR ls_fcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'POSNR'.
ls_fcat-seltext_m = 'Line item No'.
APPEND ls_fcat TO lt_fcat.
CLEAR ls_fcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'MESSAGE'.
ls_fcat-seltext_m = 'Message'.
APPEND ls_fcat TO lt_fcat.
CLEAR ls_fcat.