0% found this document useful (0 votes)
25 views16 pages

Sales Order Change and Delete

Sales order change and delete

Uploaded by

Tushar Karhale
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
Download as txt, pdf, or txt
0% found this document useful (0 votes)
25 views16 pages

Sales Order Change and Delete

Sales order change and delete

Uploaded by

Tushar Karhale
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1/ 16

*&---------------------------------------------------------------------*

*& Report ZSD_SALESORD_CHG


*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zsd_salesord_chg.

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.

TYPES: BEGIN OF ty_output,


vbeln TYPE vbeln,
posnr TYPE posnr_va,
message TYPE char100,
END OF ty_output.

DATA: gt_upload TYPE TABLE OF ty_upload,


gs_upload TYPE ty_upload,
gt_output TYPE TABLE OF ty_output,
gs_output TYPE ty_output.

DATA: gt_file_table TYPE filetable,


gs_file_table TYPE file_table,
lv_rc TYPE i.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.


*
PARAMETERS: p_file TYPE rlgrap-filename OBLIGATORY.

PARAMETERS: cb_chg RADIOBUTTON GROUP g1,


cb_add RADIOBUTTON GROUP g1,
cb_del RADIOBUTTON GROUP g1.

SELECTION-SCREEN END OF BLOCK b1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.


CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Please select File to be uploaded'
CHANGING
file_table = gt_file_table
rc = lv_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4.
IF sy-subrc <> 0.
MESSAGE 'Error occured while selecting file' TYPE 'E'.
ELSE.
READ TABLE gt_file_table INTO gs_file_table INDEX 1.
IF sy-subrc EQ 0.
p_file = gs_file_table-filename.
* ELSE.
* MESSAGE ‘ Could not select file’ TYPE ‘E’.
ENDIF.
ENDIF.

*&---------------------------------------------------------------------*
*& 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.

DATA : lv_file TYPE string,


lt_records TYPE solix_tab,
lv_headerxstring TYPE xstring,
lv_filelength TYPE i.
FIELD-SYMBOLS : <fs>.
FIELD-SYMBOLS : <gt_data1> TYPE STANDARD TABLE .
FIELD-SYMBOLS : <ls_data1> TYPE any,
<lv_field> TYPE any,
<fs1>.
DATA: lv_line TYPE i.

DATA: lw_headx TYPE bapisdh1x,


lw_head TYPE bapisdh1,
lw_itemx TYPE bapisditmx,
lt_itemx TYPE STANDARD TABLE OF bapisditmx,
lw_item TYPE bapisditm,
lw_order TYPE bapisdtext,
lt_order TYPE TABLE OF bapisdtext,
lw_CONDITIONS_IN TYPE bapicond,
lt_CONDITIONS_IN TYPE TABLE OF bapicond,
lw_CONDITIONS_INX TYPE bapicondx,
lt_CONDITIONS_INX TYPE TABLE OF bapicondx,
lw_SCHEDULE_LINES TYPE bapischdl,
lt_SCHEDULE_LINES TYPE TABLE OF bapischdl,
lw_SCHEDULE_LINESx TYPE bapischdlx,
lt_SCHEDULE_LINESx TYPE TABLE OF bapischdlx,
lt_item TYPE STANDARD TABLE OF bapisditm,
lt_item_1 TYPE STANDARD TABLE OF bapisditm,
lt_return TYPE STANDARD TABLE OF bapiret2,
lv_index TYPE sy-tabix.

* IF p_file IS NOT INITIAL.


** CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
** EXPORTING
** i_field_seperator = lv_field_seperator
** i_line_header = lv_line_header
** i_tab_raw_data = lt_tab_raw_data
** i_filename = p_file
** TABLES
** i_tab_converted_data = gt_upload
** EXCEPTIONS
** conversion_failed = 1.
** IF sy-subrc NE 0.
** MESSAGE 'Error fetching DATA from Excel File' TYPE 'I'.
** LEAVE LIST-PROCESSING.
** ENDIF.
* ENDIF.
REFRESH: gt_upload.
lv_file = p_file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = lv_file
filetype = 'BIN'
* has_field_separator = 'X'
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
dat_mode = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* CHECK_BOM = ' '
* VIRUS_SCAN_PROFILE =
* NO_AUTH_CHECK = ' '
IMPORTING
filelength = lv_filelength
header = lv_headerxstring
TABLES
data_tab = lt_records
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'


EXPORTING
input_length = lv_filelength
IMPORTING
buffer = lv_headerxstring
TABLES
binary_tab = lt_records
EXCEPTIONS
failed = 1
OTHERS = 2.
DATA : lo_excel_ref TYPE REF TO cl_fdt_xl_spreadsheet .

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 .

"Get List of Worksheets


TRY.
lo_excel_ref->if_fdt_doc_spreadsheet~get_worksheet_names(
IMPORTING
worksheet_names = DATA(lt_worksheets) ).
CATCH cx_fdt_excel_core INTO lo_exc.
READ TABLE lo_exc->mt_message INTO lwa_msg_1 WITH KEY msgty = 'E'.
MESSAGE lwa_msg_1-text TYPE 'E'.
ENDTRY.

IF NOT lt_worksheets IS INITIAL.


READ TABLE lt_worksheets INTO DATA(lv_woksheetname) INDEX 1.
DATA(lo_data_ref) = lo_excel_ref-
>if_fdt_doc_spreadsheet~get_itab_from_worksheet(
lv_woksheetname ).
"now you have excel work sheet data in dyanmic internal table
ASSIGN lo_data_ref->* TO <gt_data1>.
ENDIF.
LOOP AT <gt_data1> ASSIGNING <ls_data1> FROM 2 .
"processing columns
DO 15 TIMES.
ASSIGN COMPONENT sy-index OF STRUCTURE <ls_data1> TO <lv_field> .
IF sy-subrc = 0 .
ASSIGN COMPONENT sy-index OF STRUCTURE gs_upload TO <fs1>.
MOVE <lv_field> TO <fs1>.
ENDIF.
ENDDO .
APPEND gs_upload TO gt_upload.
CLEAR gs_upload.
ENDLOOP.
IF sy-subrc NE 0.
MESSAGE 'Unable to read file, kindly place file in nearest folder (C:\)' TYPE
'E'.
ENDIF.

* 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>).

READ TABLE lt_vbap INTO DATA(ls_vbap) WITH KEY vbeln = <lfs_upd>-vbeln


posnr = <lfs_upd>-posnr.
IF sy-subrc IS INITIAL.

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'.

APPEND: lw_item TO lt_item,


lw_itemx TO lt_itemx.
IF <lfs_upd>-item_text_ztx0 IS NOT INITIAL.
lw_order-doc_number = <lfs_upd>-vbeln.
lw_order-itm_number = <lfs_upd>-posnr.
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 = <lfs_upd>-posnr.
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.

READ TABLE lt_vbep INTO DATA(ls_vbep) WITH KEY vbeln = <lfs_upd>-vbeln


posnr = <lfs_upd>-posnr.
IF sy-subrc = 0.
lw_SCHEDULE_LINES-itm_number = <lfs_upd>-posnr.
lw_SCHEDULE_LINES-sched_line = ls_vbep-etenr .
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 = 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.

IF <lfs_upd>-kbetr IS NOT INITIAL.


lw_conditions_in-itm_number = <lfs_upd>-posnr.
lw_conditions_in-cond_type = 'ZPR0'.
lw_conditions_in-cond_value = <lfs_upd>-kbetr.
lw_conditions_in-currency = <lfs_upd>-waers.
lw_conditions_in-cond_p_unt = '1'."<lfs_upd>-kpein.

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'.

APPEND: lw_conditions_in TO lt_conditions_in ,


lw_conditions_inx TO lt_conditions_inx.
ENDIF.
" changes on 13.03.2024
IF <lfs_upd>-kbetr_zpr1 IS NOT INITIAL.
lw_conditions_in-itm_number = <lfs_upd>-posnr.
lw_conditions_in-cond_type = 'ZPR1'.
lw_conditions_in-cond_value = <lfs_upd>-kbetr_zpr1.
lw_conditions_in-currency = <lfs_upd>-waers_zpr1.
lw_conditions_in-cond_p_unt = '1'."<lfs_upd>-kpein.

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'.

APPEND: lw_conditions_in TO lt_conditions_in ,


lw_conditions_inx TO lt_conditions_inx.
ENDIF.
"EOC
IF <lfs_upd>-kbetr IS NOT INITIAL.
IF <lfs_upd>-fright IS NOT INITIAL.
lw_conditions_in-itm_number = <lfs_upd>-posnr.
lw_conditions_in-cond_type = 'ZF00'.
lw_conditions_in-cond_value = <lfs_upd>-kbetr.
lw_conditions_in-currency = <lfs_upd>-waers.
lw_conditions_in-cond_p_unt = '1'."<lfs_upd>-kpein.

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'.

APPEND: lw_conditions_in TO lt_conditions_in ,


lw_conditions_inx TO lt_conditions_inx.
ENDIF.
ENDIF.
IF <lfs_upd>-kbetr_zpr1 IS NOT INITIAL.
IF <lfs_upd>-fright IS NOT INITIAL.
lw_conditions_in-itm_number = <lfs_upd>-posnr.
lw_conditions_in-cond_type = 'ZF00'.
lw_conditions_in-cond_value = <lfs_upd>-kbetr_zpr1.
lw_conditions_in-currency = <lfs_upd>-waers_zpr1.
lw_conditions_in-cond_p_unt = '1'."<lfs_upd>-kpein.

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'.

APPEND: lw_conditions_in TO lt_conditions_in ,


lw_conditions_inx TO lt_conditions_inx.
ENDIF.
ENDIF.
IF <lfs_upd>-kbetr IS NOT INITIAL.
IF <lfs_upd>-insurance IS NOT INITIAL.
lw_conditions_in-itm_number = <lfs_upd>-posnr.
lw_conditions_in-cond_type = 'ZI01'.
lw_conditions_in-cond_value = <lfs_upd>-kbetr.
lw_conditions_in-currency = <lfs_upd>-waers.
lw_conditions_in-cond_p_unt = '1'."<lfs_upd>-kpein.

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'.

APPEND: lw_conditions_in TO lt_conditions_in ,


lw_conditions_inx TO lt_conditions_inx.
ENDIF.
ENDIF.
IF <lfs_upd>-kbetr_zpr1 IS NOT INITIAL.
IF <lfs_upd>-insurance IS NOT INITIAL.
lw_conditions_in-itm_number = <lfs_upd>-posnr.
lw_conditions_in-cond_type = 'ZI01'.
lw_conditions_in-cond_value = <lfs_upd>-kbetr_zpr1.
lw_conditions_in-currency = <lfs_upd>-waers_zpr1.
lw_conditions_in-cond_p_unt = '1'."<lfs_upd>-kpein.

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'.

APPEND: lw_conditions_in TO lt_conditions_in ,


lw_conditions_inx TO lt_conditions_inx.
ENDIF.
ENDIF.

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.

ELSEIF cb_add 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.
* READ TABLE lt_vbap INTO DATA(ls_vbap_1) INDEX 1.
* READ TABLE lt_vbap INTO DATA(ls_vbap_2) INDEX 2.
IF sy-subrc = 0.
IF <lfs_upd>-posnr IS NOT INITIAL.
MESSAGE 'Item Number column should be blank for amend' TYPE 'E'
DISPLAY LIKE 'I'.
ENDIF.
* lv_increment = ls_vbap_1-posnr - ls_vbap_2-posnr.
DESCRIBE TABLE lt_item LINES lv_line.
IF lv_line IS INITIAL.
lw_item-itm_number = ls_vbap-posnr + 10.
DATA(lv_pre_posnr) = lw_item-itm_number.
ELSE.
lw_item-itm_number = lv_pre_posnr + 10.
lv_pre_posnr = lw_item-itm_number.
ENDIF.

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'.

APPEND: lw_item TO lt_item,


lw_itemx TO lt_itemx.
IF <lfs_upd>-item_text_ztx0 IS NOT INITIAL.
lw_order-doc_number = <lfs_upd>-vbeln.
lw_order-itm_number = lw_item-itm_number.

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.

READ TABLE lt_vbep INTO ls_vbep WITH KEY vbeln = <lfs_upd>-vbeln.


"posnr = <lfs_upd>-posnr.
IF sy-subrc = 0.
lw_SCHEDULE_LINES-itm_number = lw_item-itm_number.
lw_SCHEDULE_LINES-sched_line = ls_vbep-etenr .
lw_SCHEDULE_LINES-req_qty = <lfs_upd>-zmeng.

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.

IF <lfs_upd>-kbetr IS NOT INITIAL.


lw_conditions_in-itm_number = lw_item-itm_number.
lw_conditions_in-cond_type = 'ZPR0'.
lw_conditions_in-cond_value = <lfs_upd>-kbetr.
lw_conditions_in-currency = <lfs_upd>-waers.
lw_conditions_in-cond_p_unt = '1'."<lfs_upd>-kpein.

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'.

APPEND: lw_conditions_in TO lt_conditions_in ,


lw_conditions_inx TO lt_conditions_inx.
ENDIF.

" changes on 13.03.2024


IF <lfs_upd>-kbetr_zpr1 IS NOT INITIAL.
lw_conditions_in-itm_number = <lfs_upd>-posnr.
lw_conditions_in-cond_type = 'ZPR1'.
lw_conditions_in-cond_value = <lfs_upd>-kbetr_zpr1.
lw_conditions_in-currency = <lfs_upd>-waers_zpr1.
lw_conditions_in-cond_p_unt = '1'."<lfs_upd>-kpein.

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'.

APPEND: lw_conditions_in TO lt_conditions_in ,


lw_conditions_inx TO lt_conditions_inx.
ENDIF.
"EOC
IF <lfs_upd>-kbetr IS NOT INITIAL.
IF <lfs_upd>-fright IS NOT INITIAL.
lw_conditions_in-itm_number = lw_item-itm_number.
lw_conditions_in-cond_type = 'ZF00'.
lw_conditions_in-cond_value = <lfs_upd>-kbetr.
lw_conditions_in-currency = <lfs_upd>-waers.
lw_conditions_in-cond_p_unt = '1'."<lfs_upd>-kpein.

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'.

APPEND: lw_conditions_in TO lt_conditions_in ,


lw_conditions_inx TO lt_conditions_inx.
ENDIF.
IF <lfs_upd>-insurance IS NOT INITIAL.
lw_conditions_in-itm_number = lw_item-itm_number.
lw_conditions_in-cond_type = 'ZI01'.
lw_conditions_in-cond_value = <lfs_upd>-kbetr.
lw_conditions_in-currency = <lfs_upd>-waers.
lw_conditions_in-cond_p_unt = '1'."<lfs_upd>-kpein.

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'.

APPEND: lw_conditions_in TO lt_conditions_in ,


lw_conditions_inx TO lt_conditions_inx.
ENDIF.
ENDIF.
IF <lfs_upd>-kbetr_zpr1 IS NOT INITIAL.
IF <lfs_upd>-fright IS NOT INITIAL.
lw_conditions_in-itm_number = lw_item-itm_number.
lw_conditions_in-cond_type = 'ZF00'.
lw_conditions_in-cond_value = <lfs_upd>-kbetr_zpr1.
lw_conditions_in-currency = <lfs_upd>-waers_zpr1.
lw_conditions_in-cond_p_unt = '1'."<lfs_upd>-kpein.

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'.

APPEND: lw_conditions_in TO lt_conditions_in ,


lw_conditions_inx TO lt_conditions_inx.
ENDIF.
IF <lfs_upd>-insurance IS NOT INITIAL.
lw_conditions_in-itm_number = lw_item-itm_number.
lw_conditions_in-cond_type = 'ZI01'.
lw_conditions_in-cond_value = <lfs_upd>-kbetr_zpr1.
lw_conditions_in-currency = <lfs_upd>-waers_zpr1.
lw_conditions_in-cond_p_unt = '1'."<lfs_upd>-kpein.

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'.

APPEND: lw_conditions_in TO lt_conditions_in ,


lw_conditions_inx TO lt_conditions_inx.
ENDIF.
ENDIF.
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.
*
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>.

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.
CLEAR:lw_item,lw_itemx.
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.

READ TABLE lt_return INTO DATA(ls_return) WITH KEY type = 'E'.


IF sy-subrc <> 0.
DESCRIBE TABLE lt_item LINES DATA(gv_line).
IF gv_line GT 80.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
WAIT UP TO 120 SECONDS.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
WAIT UP TO 2 SECONDS.
ENDIF.
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'.
CLEAR:lw_item,lw_itemx.
LOOP AT GROUP <group> ASSIGNING <lfs_upd>.
* 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.
CLEAR:lw_item,lw_itemx.
ENDLOOP.
ENDIF.

CALL FUNCTION 'BAPI_SALESORDER_CHANGE'


EXPORTING
salesdocument = <lfs_upd>-vbeln
* order_header_in = lw_head
order_header_inx = lw_headx
TABLES
return = lt_return
order_item_in = lt_item
order_item_inx = lt_itemx.
* APPEND LINES OF lt_item to lt_item_1.
ENDIF.

READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.


IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
WAIT UP TO 2 SECONDS.
IF cb_chg IS NOT INITIAL.
LOOP AT lt_item INTO DATA(ls_item) .
gs_output-vbeln = ls_vbeln."gs_upload-vbeln.
gs_output-posnr = ls_item-itm_number.
gs_output-message = 'SO line item changed successfully'.
APPEND gs_output TO gt_output.
CLEAR gs_output.
ENDLOOP.
ELSEIF cb_add IS NOT INITIAL.
LOOP AT lt_item INTO ls_item .
gs_output-vbeln = ls_vbeln."gs_upload-vbeln.
gs_output-posnr = ls_item-itm_number.
gs_output-message = 'SO line item changed successfully'.
APPEND gs_output TO gt_output.
CLEAR gs_output.
ENDLOOP.
ELSEIF cb_del IS NOT INITIAL.
* LOOP AT lt_item_1 INTO ls_item .
LOOP AT lt_item INTO ls_item .
gs_output-vbeln = ls_vbeln."gs_upload-vbeln.
gs_output-posnr = ls_item-itm_number.
gs_output-message = 'SO line item Deleted successfully'.
APPEND gs_output TO gt_output.
CLEAR gs_output.
ENDLOOP.
ENDIF.
ELSE.
LOOP AT lt_return INTO ls_return WHERE type = 'E'.
gs_output-vbeln = ls_vbeln."gs_upload-vbeln.
gs_output-message = ls_return-message.
APPEND gs_output TO gt_output.
CLEAR gs_output.
ENDLOOP.
ENDIF.

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.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'


EXPORTING
i_callback_program = sy-repid
* i_structure_name = ls_output
it_fieldcat = lt_fcat
i_save = 'X'
is_layout = l_layout
TABLES
t_outtab = gt_output
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.

You might also like