PO Vendor Update (ME22N) Using BAPI
*&---------------------------------------------------------------------*
*& Report ZMM_PO_VENDOR_UPDATE*&---------------------------------------------------------------------*
************************************************************************
* Program : ZMM_PO_VENDOR_UPDATE
* Author : King Of ABAP'r
* Created on : 2024
* Requested By : Functional Consultant
* Project : client
* Transport-No : 1234927260
*----------------------------------------------------------------------*
* Description : Cutover Object
* Assumption :
* Called from :
* Called to : N/A
* Includes : N/A
* Logical DB : N/A
*----------------------------------------------------------------------*
REPORT zmm_po_vendor_update.
INCLUDE zmm_po_vendor_update_top.
INCLUDE zmm_po_vendor_update_sel.
INCLUDE zmm_po_vendor_update_f01.
START-OF-SELECTION.
PERFORM get_file_data.
PERFORM update_ztable.
PERFORM bapi_po_change.
PERFORM display_data.
*&---------------------------------------------------------------------*
*& Include ZMM_PO_VENDOR_UPDATE_TOP
*&---------------------------------------------------------------------*
TABLES: sscrfields.
TYPE-POOLS: icon.
TYPES: BEGIN OF ty_final,
po_no(10) TYPE c,
item(5) TYPE c,
cond_typ(4) TYPE c,
vendor(10) TYPE c,
amount(11) TYPE c,
currency(5) TYPE c,
END OF ty_final.
##NEEDED
DATA:gt_final TYPE TABLE OF ty_final.
TYPES: BEGIN OF ty_alv,
type TYPE char10, "bapi_mtype,
ebeln TYPE ebeln,
ebelp TYPE ebelp,
vendor(10) TYPE c,
message TYPE bapi_msg,
END OF ty_alv.
##NEEDED
DATA:gt_alv TYPE STANDARD TABLE OF ty_alv,
##NEEDED
gs_alv TYPE ty_alv.
##NEEDED
DATA: gv_excel TYPE ole2_object, " Excel object
##NEEDED
gv_mapl TYPE ole2_object, " list of workbooks
##NEEDED
gv_map TYPE ole2_object, " workbook
##NEEDED
gv_zl TYPE ole2_object, " cell
##NEEDED
gv_f TYPE ole2_object. " font
CONSTANTS: gc_e TYPE char1 VALUE 'E',
gc_s TYPE char1 VALUE 'S'.
DATA:gt_zven TYPE TABLE OF zmm_ven,
gs_zven TYPE zmm_ven.
*& Include ZMM_PO_VENDOR_UPDATE_TOP
*&---------------------------------------------------------------------*
TABLES: sscrfields.
TYPE-POOLS: icon.
TYPES: BEGIN OF ty_final,
po_no(10) TYPE c,
item(5) TYPE c,
cond_typ(4) TYPE c,
vendor(10) TYPE c,
amount(11) TYPE c,
currency(5) TYPE c,
END OF ty_final.
##NEEDED
DATA:gt_final TYPE TABLE OF ty_final.
TYPES: BEGIN OF ty_alv,
type TYPE char10, "bapi_mtype,
ebeln TYPE ebeln,
ebelp TYPE ebelp,
vendor(10) TYPE c,
message TYPE bapi_msg,
END OF ty_alv.
##NEEDED
DATA:gt_alv TYPE STANDARD TABLE OF ty_alv,
##NEEDED
gs_alv TYPE ty_alv.
##NEEDED
DATA: gv_excel TYPE ole2_object, " Excel object
##NEEDED
gv_mapl TYPE ole2_object, " list of workbooks
##NEEDED
gv_map TYPE ole2_object, " workbook
##NEEDED
gv_zl TYPE ole2_object, " cell
##NEEDED
gv_f TYPE ole2_object. " font
CONSTANTS: gc_e TYPE char1 VALUE 'E',
gc_s TYPE char1 VALUE 'S'.
DATA:gt_zven TYPE TABLE OF zmm_ven,
gs_zven TYPE zmm_ven.
*&---------------------------------------------------------------------*
*& Include ZMM_PO_VENDOR_UPDATE_SEL
*&---------------------------------------------------------------------*
* Selection Screen Design
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. "File Upload
PARAMETERS:p_file TYPE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002. "Download Excel File Template
SELECTION-SCREEN: PUSHBUTTON 2(60) cmdgen USER-COMMAND a_gen VISIBLE LENGTH 20.
SELECTION-SCREEN END OF BLOCK b2.
INITIALIZATION.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = icon_xxl
text = TEXT-019 "'Generate Template'
info = TEXT-020 "'Generate Excel File Template'
IMPORTING
result = cmdgen
EXCEPTIONS
OTHERS = 0.
AT SELECTION-SCREEN.
CASE sscrfields.
WHEN 'A_GEN'. "#EC CI_CONV_OK
PERFORM generate_template.
ENDCASE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* File Upload
PERFORM file_upload.
*& Include ZMM_PO_VENDOR_UPDATE_SEL
*&---------------------------------------------------------------------*
* Selection Screen Design
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. "File Upload
PARAMETERS:p_file TYPE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002. "Download Excel File Template
SELECTION-SCREEN: PUSHBUTTON 2(60) cmdgen USER-COMMAND a_gen VISIBLE LENGTH 20.
SELECTION-SCREEN END OF BLOCK b2.
INITIALIZATION.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = icon_xxl
text = TEXT-019 "'Generate Template'
info = TEXT-020 "'Generate Excel File Template'
IMPORTING
result = cmdgen
EXCEPTIONS
OTHERS = 0.
AT SELECTION-SCREEN.
CASE sscrfields.
WHEN 'A_GEN'. "#EC CI_CONV_OK
PERFORM generate_template.
ENDCASE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* File Upload
PERFORM file_upload.
*&---------------------------------------------------------------------*
*& Include ZMM_PO_VENDOR_UPDATE_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form file_upload
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM file_upload .
* F4 Functionality
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = TEXT-022
IMPORTING
file_name = p_file.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_file_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_file_data .
DATA: lt_raw TYPE truxs_t_text_data.
* Convert the XL file to Internal Table
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = abap_true
i_tab_raw_data = lt_raw
i_filename = p_file
TABLES
i_tab_converted_data = gt_final
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
CASE sy-subrc.
WHEN 1.
MESSAGE TEXT-021 TYPE gc_e DISPLAY LIKE gc_s.
ENDCASE.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form update_ztable
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM update_ztable .
LOOP AT gt_final ASSIGNING FIELD-SYMBOL(<gs_final>).
gs_zven-mandt = sy-mandt.
gs_zven-po_no = <gs_final>-po_no.
gs_zven-item_no = <gs_final>-item.
gs_zven-cond_typ = <gs_final>-cond_typ.
SELECT SINGLE knumv FROM ekko INTO @DATA(ls_knumv)
WHERE ebeln EQ @<gs_final>-po_no.
IF ls_knumv IS NOT INITIAL.
SELECT SINGLE lifnr FROM prcd_elements
INTO @DATA(ls_lifnr) WHERE knumv EQ @ls_knumv
AND kposn EQ @<gs_final>-item
AND kschl EQ @<gs_final>-cond_typ.
ENDIF.
gs_zven-exit_ven = ls_lifnr.
gs_zven-upd_vendor = |{ <gs_final>-vendor ALPHA = IN }|.
gs_zven-updated_on = sy-datum.
gs_zven-ztime = sy-uzeit.
gs_zven-currency = <gs_final>-currency.
APPEND gs_zven TO gt_zven.
CLEAR:gs_zven,ls_lifnr,ls_knumv.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form insert_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM insert_data .
CALL FUNCTION 'ENQUEUE_E_TABLE'
EXPORTING
* MODE_RSTABLE = 'E'
tabname = 'ZMM_VEN'
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
* if condition satisfy modify the ztable.
IF sy-subrc = 0.
LOOP AT gt_zven INTO DATA(ls_data).
IF sy-subrc = 0.
MODIFY zmm_ven FROM ls_data.
COMMIT WORK.
ENDIF.
ENDLOOP.
ENDIF.
* TO unlock the table.
CALL FUNCTION 'DEQUEUE_E_TABLE'
EXPORTING
tabname = 'ZMM_VEN'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form bapi_po_change
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM bapi_po_change .
DATA: lv_po_no TYPE bapimepoheader-po_number.
* Internal Table Declaration
DATA:
lt_cond TYPE TABLE OF bapimepocond,
lt_condx TYPE TABLE OF bapimepocondx,
lt_return TYPE TABLE OF bapiret2.
* Work Area Declaration
DATA: ls_header TYPE bapimepoheader,
ls_headerx TYPE bapimepoheaderx,
ls_cond TYPE bapimepocond,
ls_condx TYPE bapimepocondx,
ls_return TYPE bapiret2.
*** COnstant Value Declarations
CONSTANTS: lc_doctyp(3) TYPE c VALUE 'ZIM'.
LOOP AT gt_final ASSIGNING FIELD-SYMBOL(<ls_final>).
**** Header Data Fill
lv_po_no = <ls_final>-po_no.
ls_header-po_number = lv_po_no.
ls_header-doc_type = lc_doctyp.
*** Set the Flag
ls_headerx-po_number = abap_true.
ls_headerx-doc_type = abap_true.
IF <ls_final>-cond_typ IS NOT INITIAL.
ls_cond-itm_number = |{ <ls_final>-item ALPHA = IN }|.
ls_cond-cond_type = <ls_final>-cond_typ.
ls_cond-change_id = 'U'.
ls_cond-vendor_no = |{ <ls_final>-vendor ALPHA = IN }|.
ls_cond-cond_value = <ls_final>-amount.
ls_cond-currency = <ls_final>-currency.
APPEND: ls_cond TO lt_cond.
*** Set Flag
ls_condx-cond_type = abap_true.
ls_condx-itm_number = |{ <ls_final>-item ALPHA = IN }|.
ls_condx-change_id = abap_true.
ls_condx-vendor_no = abap_true.
ls_condx-cond_value = abap_true.
ls_condx-currency = abap_true.
APPEND: ls_condx TO lt_condx.
ENDIF.
*** Call the BAPI PO Change
AT END OF po_no.
CALL FUNCTION 'BAPI_PO_CHANGE' "#EC CI_USAGE_OK[2438131]
EXPORTING
purchaseorder = lv_po_no
poheader = ls_header
poheaderx = ls_headerx
TABLES
return = lt_return
pocond = lt_cond
pocondx = lt_condx.
READ TABLE lt_return INTO ls_return WITH KEY type = gc_e. "#EC CI_STDSEQ
IF sy-subrc = 0.
"#EC CI_NESTED
LOOP AT lt_return INTO ls_return. "#EC CI_NESTED
gs_alv-ebeln = lv_po_no.
gs_alv-ebelp = <ls_final>-item.
gs_alv-vendor = <ls_final>-vendor.
gs_alv-type = icon_led_red. "ls_return-type.
gs_alv-message = ls_return-message.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
gs_alv-ebeln = lv_po_no.
gs_alv-ebelp = <ls_final>-item.
gs_alv-vendor = <ls_final>-vendor.
gs_alv-type = icon_led_green."gc_s.
gs_alv-message = TEXT-003.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
PERFORM insert_data.
ENDIF.
CLEAR: ls_header,ls_cond,ls_headerx,ls_condx,ls_return,lv_po_no,lt_return.
ENDAT.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM display_data .
TYPE-POOLS:
slis.
DATA:
ls_fieldcat TYPE slis_fieldcat_alv,
ls_layout TYPE slis_layout_alv.
DATA:
lt_fieldcat TYPE slis_t_fieldcat_alv.
DATA:
lv_program TYPE sy-repid.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = TEXT-007."'TYPE'.
ls_fieldcat-tabname = TEXT-005. "GT_ALV
ls_fieldcat-seltext_m = TEXT-008."'STATUS'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = TEXT-004. "EBELN
ls_fieldcat-tabname = TEXT-005. "GT_ALV
ls_fieldcat-seltext_m = TEXT-006. "Po Number
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = TEXT-023. "EBELP
ls_fieldcat-tabname = TEXT-005. "GT_ALV
ls_fieldcat-seltext_m = TEXT-024. "Item Number
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = TEXT-025. "VENDOR
ls_fieldcat-tabname = TEXT-005. "GT_ALV
ls_fieldcat-seltext_m = TEXT-026. "Vendor Number
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = TEXT-009.
ls_fieldcat-tabname = TEXT-005. "GT_ALV
ls_fieldcat-seltext_m = TEXT-010.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_layout.
ls_layout-colwidth_optimize = abap_true.
ls_layout-zebra = abap_true.
lv_program = sy-repid.
* Display The Final Display
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = lv_program
is_layout = ls_layout
it_fieldcat = lt_fieldcat
TABLES
t_outtab = gt_alv
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form generate_template
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM generate_template .
* start Excel
CREATE OBJECT gv_excel 'EXCEL.APPLICATION'.
SET PROPERTY OF gv_excel 'Visible' = 1. "#EC CI_CONV_OK
* get list of workbooks, initially empty
CALL METHOD OF
gv_excel
'Workbooks' = gv_mapl.
*** Error handle File
PERFORM err_hdl.
* add a new workbook
CALL METHOD OF
gv_mapl
'Add' = gv_mapl.
*** Error handle File
PERFORM err_hdl.
PERFORM fill_cell USING: 1 1 0 TEXT-006, "'Po Number',
1 2 0 TEXT-011, "'Item',
1 3 0 TEXT-012, "'Condition Type',
1 4 0 TEXT-013, "'Vendor',
1 5 0 TEXT-027,
1 6 0 TEXT-028.
ENDFORM.
FORM err_hdl .
IF sy-subrc <> 0.
CALL METHOD OF
gv_excel
'QUIT'.
FREE OBJECT gv_excel.
gv_excel-handle = -1.
MESSAGE TEXT-014 TYPE gc_e."'E'.
ENDIF.
ENDFORM.
"#EC CI_CONV_OK
FORM fill_cell USING p_i p_j p_bold p_val.
"#EC CI_CONV_OK
CALL METHOD OF "#EC CI_CONV_OK
gv_excel
'Cells' = gv_zl "#EC CI_CONV_OK
EXPORTING
#1 = p_i
#2 = p_j.
PERFORM err_hdl. "#EC CI_CONV_OK
SET PROPERTY OF gv_zl TEXT-015 = p_val . "#EC CI_CONV_OK
PERFORM err_hdl. "#EC CI_CONV_OK
GET PROPERTY OF gv_zl TEXT-016 = gv_f. "#EC CI_CONV_OK
PERFORM err_hdl. "#EC CI_CONV_OK
SET PROPERTY OF gv_f TEXT-017 = p_bold . "#EC CI_CONV_OK
PERFORM err_hdl. "#EC CI_CONV_OK
ENDFORM.
*& Include ZMM_PO_VENDOR_UPDATE_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form file_upload
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM file_upload .
* F4 Functionality
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = TEXT-022
IMPORTING
file_name = p_file.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_file_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_file_data .
DATA: lt_raw TYPE truxs_t_text_data.
* Convert the XL file to Internal Table
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = abap_true
i_tab_raw_data = lt_raw
i_filename = p_file
TABLES
i_tab_converted_data = gt_final
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
CASE sy-subrc.
WHEN 1.
MESSAGE TEXT-021 TYPE gc_e DISPLAY LIKE gc_s.
ENDCASE.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form update_ztable
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM update_ztable .
LOOP AT gt_final ASSIGNING FIELD-SYMBOL(<gs_final>).
gs_zven-mandt = sy-mandt.
gs_zven-po_no = <gs_final>-po_no.
gs_zven-item_no = <gs_final>-item.
gs_zven-cond_typ = <gs_final>-cond_typ.
SELECT SINGLE knumv FROM ekko INTO @DATA(ls_knumv)
WHERE ebeln EQ @<gs_final>-po_no.
IF ls_knumv IS NOT INITIAL.
SELECT SINGLE lifnr FROM prcd_elements
INTO @DATA(ls_lifnr) WHERE knumv EQ @ls_knumv
AND kposn EQ @<gs_final>-item
AND kschl EQ @<gs_final>-cond_typ.
ENDIF.
gs_zven-exit_ven = ls_lifnr.
gs_zven-upd_vendor = |{ <gs_final>-vendor ALPHA = IN }|.
gs_zven-updated_on = sy-datum.
gs_zven-ztime = sy-uzeit.
gs_zven-currency = <gs_final>-currency.
APPEND gs_zven TO gt_zven.
CLEAR:gs_zven,ls_lifnr,ls_knumv.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form insert_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM insert_data .
CALL FUNCTION 'ENQUEUE_E_TABLE'
EXPORTING
* MODE_RSTABLE = 'E'
tabname = 'ZMM_VEN'
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
* if condition satisfy modify the ztable.
IF sy-subrc = 0.
LOOP AT gt_zven INTO DATA(ls_data).
IF sy-subrc = 0.
MODIFY zmm_ven FROM ls_data.
COMMIT WORK.
ENDIF.
ENDLOOP.
ENDIF.
* TO unlock the table.
CALL FUNCTION 'DEQUEUE_E_TABLE'
EXPORTING
tabname = 'ZMM_VEN'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form bapi_po_change
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM bapi_po_change .
DATA: lv_po_no TYPE bapimepoheader-po_number.
* Internal Table Declaration
DATA:
lt_cond TYPE TABLE OF bapimepocond,
lt_condx TYPE TABLE OF bapimepocondx,
lt_return TYPE TABLE OF bapiret2.
* Work Area Declaration
DATA: ls_header TYPE bapimepoheader,
ls_headerx TYPE bapimepoheaderx,
ls_cond TYPE bapimepocond,
ls_condx TYPE bapimepocondx,
ls_return TYPE bapiret2.
*** COnstant Value Declarations
CONSTANTS: lc_doctyp(3) TYPE c VALUE 'ZIM'.
LOOP AT gt_final ASSIGNING FIELD-SYMBOL(<ls_final>).
**** Header Data Fill
lv_po_no = <ls_final>-po_no.
ls_header-po_number = lv_po_no.
ls_header-doc_type = lc_doctyp.
*** Set the Flag
ls_headerx-po_number = abap_true.
ls_headerx-doc_type = abap_true.
IF <ls_final>-cond_typ IS NOT INITIAL.
ls_cond-itm_number = |{ <ls_final>-item ALPHA = IN }|.
ls_cond-cond_type = <ls_final>-cond_typ.
ls_cond-change_id = 'U'.
ls_cond-vendor_no = |{ <ls_final>-vendor ALPHA = IN }|.
ls_cond-cond_value = <ls_final>-amount.
ls_cond-currency = <ls_final>-currency.
APPEND: ls_cond TO lt_cond.
*** Set Flag
ls_condx-cond_type = abap_true.
ls_condx-itm_number = |{ <ls_final>-item ALPHA = IN }|.
ls_condx-change_id = abap_true.
ls_condx-vendor_no = abap_true.
ls_condx-cond_value = abap_true.
ls_condx-currency = abap_true.
APPEND: ls_condx TO lt_condx.
ENDIF.
*** Call the BAPI PO Change
AT END OF po_no.
CALL FUNCTION 'BAPI_PO_CHANGE' "#EC CI_USAGE_OK[2438131]
EXPORTING
purchaseorder = lv_po_no
poheader = ls_header
poheaderx = ls_headerx
TABLES
return = lt_return
pocond = lt_cond
pocondx = lt_condx.
READ TABLE lt_return INTO ls_return WITH KEY type = gc_e. "#EC CI_STDSEQ
IF sy-subrc = 0.
"#EC CI_NESTED
LOOP AT lt_return INTO ls_return. "#EC CI_NESTED
gs_alv-ebeln = lv_po_no.
gs_alv-ebelp = <ls_final>-item.
gs_alv-vendor = <ls_final>-vendor.
gs_alv-type = icon_led_red. "ls_return-type.
gs_alv-message = ls_return-message.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
gs_alv-ebeln = lv_po_no.
gs_alv-ebelp = <ls_final>-item.
gs_alv-vendor = <ls_final>-vendor.
gs_alv-type = icon_led_green."gc_s.
gs_alv-message = TEXT-003.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
PERFORM insert_data.
ENDIF.
CLEAR: ls_header,ls_cond,ls_headerx,ls_condx,ls_return,lv_po_no,lt_return.
ENDAT.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM display_data .
TYPE-POOLS:
slis.
DATA:
ls_fieldcat TYPE slis_fieldcat_alv,
ls_layout TYPE slis_layout_alv.
DATA:
lt_fieldcat TYPE slis_t_fieldcat_alv.
DATA:
lv_program TYPE sy-repid.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = TEXT-007."'TYPE'.
ls_fieldcat-tabname = TEXT-005. "GT_ALV
ls_fieldcat-seltext_m = TEXT-008."'STATUS'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = TEXT-004. "EBELN
ls_fieldcat-tabname = TEXT-005. "GT_ALV
ls_fieldcat-seltext_m = TEXT-006. "Po Number
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = TEXT-023. "EBELP
ls_fieldcat-tabname = TEXT-005. "GT_ALV
ls_fieldcat-seltext_m = TEXT-024. "Item Number
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = TEXT-025. "VENDOR
ls_fieldcat-tabname = TEXT-005. "GT_ALV
ls_fieldcat-seltext_m = TEXT-026. "Vendor Number
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = TEXT-009.
ls_fieldcat-tabname = TEXT-005. "GT_ALV
ls_fieldcat-seltext_m = TEXT-010.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_layout.
ls_layout-colwidth_optimize = abap_true.
ls_layout-zebra = abap_true.
lv_program = sy-repid.
* Display The Final Display
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = lv_program
is_layout = ls_layout
it_fieldcat = lt_fieldcat
TABLES
t_outtab = gt_alv
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form generate_template
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM generate_template .
* start Excel
CREATE OBJECT gv_excel 'EXCEL.APPLICATION'.
SET PROPERTY OF gv_excel 'Visible' = 1. "#EC CI_CONV_OK
* get list of workbooks, initially empty
CALL METHOD OF
gv_excel
'Workbooks' = gv_mapl.
*** Error handle File
PERFORM err_hdl.
* add a new workbook
CALL METHOD OF
gv_mapl
'Add' = gv_mapl.
*** Error handle File
PERFORM err_hdl.
PERFORM fill_cell USING: 1 1 0 TEXT-006, "'Po Number',
1 2 0 TEXT-011, "'Item',
1 3 0 TEXT-012, "'Condition Type',
1 4 0 TEXT-013, "'Vendor',
1 5 0 TEXT-027,
1 6 0 TEXT-028.
ENDFORM.
FORM err_hdl .
IF sy-subrc <> 0.
CALL METHOD OF
gv_excel
'QUIT'.
FREE OBJECT gv_excel.
gv_excel-handle = -1.
MESSAGE TEXT-014 TYPE gc_e."'E'.
ENDIF.
ENDFORM.
"#EC CI_CONV_OK
FORM fill_cell USING p_i p_j p_bold p_val.
"#EC CI_CONV_OK
CALL METHOD OF "#EC CI_CONV_OK
gv_excel
'Cells' = gv_zl "#EC CI_CONV_OK
EXPORTING
#1 = p_i
#2 = p_j.
PERFORM err_hdl. "#EC CI_CONV_OK
SET PROPERTY OF gv_zl TEXT-015 = p_val . "#EC CI_CONV_OK
PERFORM err_hdl. "#EC CI_CONV_OK
GET PROPERTY OF gv_zl TEXT-016 = gv_f. "#EC CI_CONV_OK
PERFORM err_hdl. "#EC CI_CONV_OK
SET PROPERTY OF gv_f TEXT-017 = p_bold . "#EC CI_CONV_OK
PERFORM err_hdl. "#EC CI_CONV_OK
ENDFORM.
Comments
Post a Comment