Updating Delivery Completion Indicator through Mass Uplaod
New mass upload program has to be developed to allow users to perform on/off toggling of Delivery Complete Indicator on PO line item through Mass Upload using BAPI_PO_CHANGE.
*&---------------------------------------------------------------------*
*& Report ZVB_DCI
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZVB_DCI.
TYPES: BEGIN OF ty_file,
ebeln(10) TYPE c,
ebelp(5) TYPE c,
elikz(1) TYPE c,
END OF ty_file.
TYPES: BEGIN OF ty_final,
ebeln(10) TYPE c,
ebelp(5) TYPE c,
elikz(1) TYPE c,
remarks(1000) TYPE c,
uname TYPE sy-uname,
date TYPE sy-datum,
status_icon TYPE char4,
END OF ty_final.
DATA: gt_file TYPE STANDARD TABLE OF ty_file,
gw_file TYPE ty_file.
DATA:it_final TYPE TABLE OF ty_final,
iw_final TYPE ty_final.
DATA: it_listheader TYPE slis_t_listheader,
wa_listheader TYPE slis_listheader.
DATA: iv_dummy TYPE ekko-ebeln,
iv_dummy1 TYPE ekpo-ebelp.
FIELD-SYMBOLS : <gt_data> TYPE STANDARD TABLE .
PARAMETERS : p_file TYPE ibipparms-path OBLIGATORY,
p_ncol TYPE i OBLIGATORY DEFAULT 3.
PARAMETERS p_test AS CHECKBOX DEFAULT ''.
** AT SELECTION-SCREEN ON VALUE-REQUEST FOR
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'P_FILE'
IMPORTING
file_name = p_file.
START-OF-SELECTION .
PERFORM read_file .
PERFORM process_file.
PERFORM call_bapi_po_change.
PERFORM call_reuse_alv_display.
FORM get_file .
DATA: lv_rc TYPE i.
DATA: lt_file_table TYPE filetable,
ls_file_table TYPE file_table.
DATA:lv_window_title TYPE string.
lv_window_title = TEXT-021.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = lv_window_title
CHANGING
file_table = lt_file_table
rc = lv_rc.
IF sy-subrc = 0.
READ TABLE lt_file_table INTO ls_file_table INDEX 1.
p_file = ls_file_table-filename.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form read_file
*&---------------------------------------------------------------------*
FORM read_file .
DATA : lv_filename TYPE string,
lt_records TYPE solix_tab,
lv_headerxstring TYPE xstring,
lv_filelength TYPE i.
lv_filename = p_file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = lv_filename
filetype = 'BIN'
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.
"convert binary data to xstring
"if you are using cl_fdt_xl_spreadsheet in odata then skips this step
"as excel file will already be in xstring
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.
IF sy-subrc <> 0.
"Implement suitable error handling here
ENDIF.
DATA : lo_excel_ref TYPE REF TO cl_fdt_xl_spreadsheet .
TRY .
lo_excel_ref = NEW cl_fdt_xl_spreadsheet(
document_name = lv_filename
xdocument = lv_headerxstring ) .
CATCH cx_fdt_excel_core.
"Implement suitable error handling here
ENDTRY .
"Get List of Worksheets
lo_excel_ref->if_fdt_doc_spreadsheet~get_worksheet_names(
IMPORTING
worksheet_names = DATA(lt_worksheets) ).
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_data>.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form process_file
*&---------------------------------------------------------------------*
FORM process_file .
DATA : lv_numberofcolumns TYPE i,
lv_date_string TYPE string,
lv_target_date_field TYPE datum.
FIELD-SYMBOLS : <ls_data> TYPE any,
<lv_field> TYPE any,
<lv_field1> TYPE any.
"you could find out number of columns dynamically from table <gt_data>
lv_numberofcolumns = p_ncol .
LOOP AT <gt_data> ASSIGNING <ls_data> FROM 2 .
"processing columns
DO lv_numberofcolumns TIMES.
ASSIGN COMPONENT sy-index OF STRUCTURE <ls_data> TO <lv_field> .
ASSIGN COMPONENT SY-INDEX OF STRUCTURE GW_FILE TO <lv_field1>.
IF <lv_field> IS ASSIGNED AND <lv_field1> IS ASSIGNED.
<lv_field1> = <lv_field>.
ENDIF.
UNASSIGN: <lv_field1>, <lv_field>.
ENDDO .
APPEND GW_FILE TO GT_FILE.
CLEAR GW_FILE.
ENDLOOP .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form call_bapi_po_change
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM call_bapi_po_change .
DATA: l_ponumber LIKE bapimepoheader-po_number,
i_po_items TYPE TABLE OF bapimepoitem WITH HEADER LINE,
iw_items TYPE bapimepoitem,
i_po_itemsx TYPE TABLE OF bapimepoitemx WITH HEADER LINE,
iw_itemsx TYPE bapimepoitemx,
i_return TYPE TABLE OF bapiret2 WITH HEADER LINE,
iw_return TYPE bapiret2.
CLEAR: i_po_items, i_po_items[],
i_po_itemsx, i_po_itemsx[],
i_return, i_return[].
DATA:iv_error TYPE c.
FIELD-SYMBOLS:<fs> TYPE any.
LOOP AT gt_file INTO gw_file.
CLEAR:iv_dummy,iv_dummy1.
SELECT SINGLE ebeln
FROM ekko
INTO iv_dummy
WHERE ebeln = gw_file-ebeln.
IF sy-subrc NE 0.
iw_final-remarks = 'po does not exist'.
iw_final-status_icon = icon_red_light.
iv_error = 'X'.
ELSE.
SELECT SINGLE ebelp
FROM ekpo
INTO iv_dummy1
WHERE ebeln = gw_file-ebeln AND ebelp = gw_file-ebelp.
IF sy-subrc NE 0.
iw_final-remarks = 'po item not matching'.
iw_final-status_icon = icon_red_light.
iv_error = 'X'.
ELSE.
IF gw_file-elikz IS INITIAL.
iw_final-remarks = 'no change'.
iw_final-status_icon = icon_yellow_light.
iv_error = 'X'.
ENDIF.
ENDIF.
ENDIF.
IF iv_error = 'X'.
iw_final-ebeln = gw_file-ebeln.
iw_final-ebelp = gw_file-ebelp.
iw_final-elikz = gw_file-elikz.
iw_final-uname = sy-uname.
iw_final-date = sy-datum.
APPEND iw_final TO it_final.
ELSE.
l_ponumber = gw_file-ebeln.
iw_items-po_item = gw_file-ebelp.
IF gw_file-elikz = 'Y'.
iw_items-no_more_gr = 'X'.
ELSE.
iw_items-no_more_gr = ' '.
ENDIF.
APPEND iw_items TO i_po_items.
iw_itemsx-po_item = iw_items-po_item.
iw_itemsx-po_itemx = 'X'. "Item holds changes
iw_itemsx-no_more_gr = 'X'. "Delivery complete indicator
APPEND iw_itemsx TO i_po_itemsx.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = l_ponumber
testrun = p_test
TABLES
poitem = i_po_items
poitemx = i_po_itemsx
return = i_return.
READ TABLE i_return WITH KEY type = 'E'.
IF sy-subrc EQ 0.
iw_final-status_icon = icon_red_light.
LOOP AT i_return INTO iw_return WHERE type = 'E'.
IF iw_final-remarks IS INITIAL.
iw_final-remarks = iw_return-message.
ELSE.
CONCATENATE iw_final-remarks iw_return-message INTO iw_return-message SEPARATED BY ','.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT i_return INTO iw_return WHERE type = 'E'.
IF iw_final-remarks IS INITIAL.
iw_final-remarks = iw_return-message.
ELSE.
CONCATENATE iw_final-remarks iw_return-message INTO iw_final-remarks SEPARATED BY ','.
ENDIF.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
iw_final-REMARKS = 'Success'.
iw_final-status_icon = icon_green_light.
ENDIF.
iw_final-ebeln = gw_file-ebeln.
iw_final-ebelp = gw_file-ebelp.
iw_final-elikz = gw_file-elikz.
iw_final-uname = sy-uname.
iw_final-date = sy-datum.
APPEND iw_final TO it_final.
REFRESH: i_return,i_po_items,i_po_itemsx.
CLEAR:iw_final,l_ponumber.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CALL_REUSE_ALV_DISPLAY
*&---------------------------------------------------------------------*
FORM call_reuse_alv_display .
DATA:it_fcat TYPE slis_t_fieldcat_alv,
is_fcat TYPE slis_fieldcat_alv.
REFRESH:it_fcat.
CLEAR:is_fcat.
is_fcat-fieldname = 'EBELN'.
is_fcat-seltext_m = 'PO Number'.
is_fcat-outputlen = '10'.
APPEND is_fcat TO it_fcat.
CLEAR:is_fcat.
is_fcat-fieldname = 'EBELP'.
is_fcat-seltext_m = 'PO Item'.
is_fcat-outputlen = '10'.
APPEND is_fcat TO it_fcat.
CLEAR:is_fcat.
is_fcat-fieldname = 'ELIKZ'.
is_fcat-seltext_m = 'Del Comp Ind'.
is_fcat-outputlen = '15'.
APPEND is_fcat TO it_fcat.
CLEAR:is_fcat.
is_fcat-fieldname = 'STATUS_ICON'.
is_fcat-seltext_m = 'Status'.
is_fcat-outputlen = '10'.
is_fcat-icon = 'X'.
APPEND is_fcat TO it_fcat.
CLEAR:is_fcat.
is_fcat-fieldname = 'REMARKS'.
is_fcat-seltext_m = 'Remarks'.
is_fcat-outputlen = '50'.
APPEND is_fcat TO it_fcat.
CLEAR:is_fcat.
is_fcat-fieldname = 'UNAME'.
is_fcat-seltext_m = 'Updated By'.
is_fcat-outputlen = '10'.
APPEND is_fcat TO it_fcat.
CLEAR:is_fcat.
is_fcat-fieldname = 'Date'.
is_fcat-seltext_m = 'Updated on'.
is_fcat-outputlen = '10'.
APPEND is_fcat TO it_fcat.
* PERFORM top_of_page.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_top_of_page = 'TOP_OF_PAGE'
it_fieldcat = it_fcat
TABLES
t_outtab = it_final.
ENDFORM.
FORM top_of_page.
REFRESH:it_listheader.
CLEAR wa_listheader.
IF p_test = 'X'.
* Type H is used to display headers i.e. big font
wa_listheader-typ = 'H'.
wa_listheader-info = 'TEST RUN (Changes are not reflected)'.
ELSE.
wa_listheader-typ = 'H'.
wa_listheader-info = 'Actual run'.
ENDIF.
APPEND wa_listheader TO it_listheader.
CLEAR wa_listheader.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_listheader.
ENDFORM.
Input:
Output:
Comments
Post a Comment