Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 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