HSN Code Change in line items (ME22N)
*& Report ZMM_HSN_PO_LINE_CHANGE
*&---------------------------------------------------------------------*
************************************************************************
* Program : ZMM_HSN_PO_LINE_CHANGE
* Author : King Of ABAP'r
* Created on : 2024
* Requested By : Functional Consultant
*----------------------------------------------------------------------*
* Description : Cutover Object
* Assumption :
* Called from :
* Called to : N/A
* Includes : N/A
* Logical DB : N/A
*----------------------------------------------------------------------*
REPORT zmm_hsn_po_line_change.
INCLUDE zmm_hsn_po_line_change_top.
INCLUDE zmm_hsn_po_line_change_sel.
INCLUDE zmm_hsn_po_line_change_f01.
START-OF-SELECTION.
PERFORM get_file.
PERFORM mat_bapi_change.
PERFORM disply_data.
*&---------------------------------------------------------------------*
*& Include ZMM_HSN_PO_LINE_CHANGE_TOP
*&---------------------------------------------------------------------*
TABLES: sscrfields.
TYPE-POOLS:icon.
*** HSN Code Change File Data
TYPES: BEGIN OF ty_file,
material TYPE matnr,
plant TYPE werks_d,
hsncode TYPE steuc,
END OF ty_file.
DATA:lt_file TYPE TABLE OF ty_file.
*** PO Add Line Items File Data
TYPES:BEGIN OF ty_change,
po_no TYPE ebeln,
po_item TYPE char5,
del_ind TYPE flag,
del_date TYPE char10,
new_date TYPE char10,
pr_no TYPE banfn,
pr_item TYPE char5,
new_qty TYPE char13,
amount(15),
text TYPE txz01_dcm,
END OF ty_change.
DATA:gt_file TYPE TABLE OF ty_change.
*** Po QTY And Amount Change File
TYPES:BEGIN OF ty_amt,
po_no(10),
po_item(5),
qty(13),
amount(15),
del_date(10),
text(60),
END OF ty_amt.
DATA:it_file TYPE TABLE OF ty_amt.
*** PO Line Item Material Updated HSN
TYPES:BEGIN OF ty_hsn,
sno TYPE i,
po_no(10),
po_item(5),
* del_date(10),
END OF ty_hsn.
DATA:it_hsn TYPE TABLE OF ty_hsn.
*** Error Log
TYPES: BEGIN OF ty_alv,
sno TYPE i,
matnr TYPE mara-matnr,
ebeln TYPE ekko-ebeln,
ebelp TYPE ebelp,
type TYPE char10, "bapi_mtype,
message TYPE bapi_msg,
END OF ty_alv.
DATA:gt_alv TYPE STANDARD TABLE OF ty_alv,
gs_alv TYPE ty_alv.
DATA:sno TYPE i.
***Excel File Dowload Button
DATA: h_excel TYPE ole2_object, " Excel object
h_mapl TYPE ole2_object, " list of workbooks
h_map TYPE ole2_object, " workbook
h_zl TYPE ole2_object, " cell
h_f TYPE ole2_object. " font
*** Constant Values Declarations
CONSTANTS: lc_e TYPE char1 VALUE 'E',
lc_s TYPE char1 VALUE 'S',
lc_id TYPE char2 VALUE 'M3'.
*&---------------------------------------------------------------------*
*& Include ZMM_HSN_PO_LINE_CHANGE_SEL
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE TEXT-001.
PARAMETERS : rb_hsn RADIOBUTTON GROUP 001 USER-COMMAND cmd DEFAULT 'X' , " USER-COMMAND text."
rb_po RADIOBUTTON GROUP 001,
rb_amt RADIOBUTTON GROUP 001,
rb_upd RADIOBUTTON GROUP 001.
SELECTION-SCREEN END OF BLOCK a1.
* Selection Screen Design
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-002.
PARAMETERS:p_file TYPE rlgrap-filename." OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-003.
SELECTION-SCREEN: PUSHBUTTON 2(60) cmdgen USER-COMMAND a_gen VISIBLE LENGTH 20.
SELECTION-SCREEN END OF BLOCK b2.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* File Upload
PERFORM file_upload.
INITIALIZATION.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = icon_xxl
text = 'Generate Template'
info = 'Generate Excel File Template'
IMPORTING
result = cmdgen
EXCEPTIONS
OTHERS = 0.
AT SELECTION-SCREEN.
CASE sscrfields.
WHEN 'A_GEN'.
PERFORM generate_template.
ENDCASE.
*&---------------------------------------------------------------------*
*& Include ZMM_HSN_PO_LINE_CHANGE_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form get_file
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_file .
DATA: lt_raw TYPE truxs_t_text_data.
* Convert the XL file to Internal Table
**** HSN Code Update in Material
IF rb_hsn = abap_true.
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 = lt_file
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'No data Found' TYPE 'E'.
ENDIF.
*** Po line Items add
ELSEIF rb_po = abap_true.
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_file
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'No data Found' TYPE 'E'.
ENDIF.
*** Po Amount and QTY Update
ELSEIF rb_amt = abap_true.
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 = it_file
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'No data Found' TYPE 'E'.
ENDIF.
** HSN Code Update in PO
ELSEIF rb_upd = abap_true.
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 = it_hsn
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'No data Found' TYPE 'E'.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& 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 = 'P_FILE'
IMPORTING
file_name = p_file.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form mat_bapi_change
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM mat_bapi_change .
DATA:e_return TYPE bapiret2.
DATA:ls_headerdata TYPE bapimathead,
ls_plantdata TYPE bapi_marc,
ls_plantdatax TYPE bapi_marcx.
DATA: lt_return TYPE TABLE OF bapi_matreturn2.
**** Po Line Item Addition Declarations & Amount / QTY Changes
DATA: lv_po_no TYPE bapimepoheader-po_number.
* Internal Table Declaration
DATA:
lt_del TYPE TABLE OF bapimeposchedule,
lt_delx TYPE TABLE OF bapimeposchedulx,
lt_poitem TYPE TABLE OF bapimepoitem,
lt_poitemx TYPE TABLE OF bapimepoitemx,
it_return TYPE TABLE OF bapiret2.
* Work Area Declaration
DATA: ls_header TYPE bapimepoheader,
ls_headerx TYPE bapimepoheaderx,
ls_no_price_from_po TYPE bapiflag-bapiflag,
ls_version TYPE bapimedcm,
ls_del TYPE bapimeposchedule,
ls_delx TYPE bapimeposchedulx,
ls_poitem TYPE bapimepoitem,
ls_poitemx TYPE bapimepoitemx,
ws_return TYPE bapiret2.
DATA:ls_memory_uncomplete TYPE bapiflag.
DATA:ls_memory_complete TYPE bapiflag.
DATA:lv_ebelp TYPE ebelp.
*** 1st Radio Button
IF rb_hsn EQ abap_true.
LOOP AT lt_file ASSIGNING FIELD-SYMBOL(<lfs_file>).
CLEAR:ls_headerdata,ls_plantdata,ls_plantdatax.
*** Header Data Fill
ls_headerdata-material = |{ <lfs_file>-material ALPHA = IN }|.
ls_plantdata-plant = <lfs_file>-plant.
ls_plantdata-ctrl_code = <lfs_file>-hsncode.
ls_plantdatax-plant = <lfs_file>-plant.
ls_plantdatax-ctrl_code = abap_true.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = ls_headerdata
plantdata = ls_plantdata
plantdatax = ls_plantdatax
IMPORTING
return = e_return
TABLES
returnmessages = lt_return.
READ TABLE lt_return INTO DATA(ls_return) WITH KEY type = lc_s
id = lc_id.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
gs_alv-matnr = <lfs_file>-material.
gs_alv-type = icon_led_green.
gs_alv-message = ls_return-message.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
ELSE.
LOOP AT lt_return INTO ls_return.
gs_alv-matnr = <lfs_file>-material.
gs_alv-type = icon_led_red.
gs_alv-message = ls_return-message.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
ENDLOOP.
*** 2nd Radio Button
ELSEIF rb_po EQ abap_true.
DATA: lv_lines TYPE char2.
SELECT * FROM ekpo INTO TABLE @DATA(lt_ekpo)
FOR ALL ENTRIES IN @gt_file
WHERE ebeln EQ @gt_file-po_no.
SORT lt_ekpo BY ebelp DESCENDING.
DESCRIBE TABLE lt_ekpo LINES lv_lines.
LOOP AT gt_file ASSIGNING FIELD-SYMBOL(<gfs_file>).
IF <gfs_file>-del_ind = abap_true.
lv_po_no = <gfs_file>-po_no.
*** Header PO No.
ls_header-po_number = <gfs_file>-po_no.
*** Set the Flag
ls_headerx-po_number = abap_true.
*** Versions
ls_version-completed = abap_true.
ls_version-reason = 'XYZ'.
ls_version-description = <gfs_file>-text.
ls_version-req_by = sy-uname.
*** PO Item Details Fill
ls_poitem-po_item = <gfs_file>-po_item.
ls_poitem-delete_ind = <gfs_file>-del_ind.
APPEND ls_poitem TO lt_poitem.
CLEAR:ls_poitem.
*** PO Item Flag
ls_poitemx-po_item = <gfs_file>-po_item.
ls_poitemx-po_itemx = abap_true.
ls_poitemx-delete_ind = abap_true.
* ls_poitemx-quantity = abap_true.
APPEND ls_poitemx TO lt_poitemx.
CLEAR:ls_poitemx.
*** Item Data Fill
ls_del-po_item = <gfs_file>-po_item.
ls_del-delivery_date = <gfs_file>-del_date.
APPEND ls_del TO lt_del.
CLEAR:ls_del.
*** Set the Flag
ls_delx-po_item = <gfs_file>-po_item.
ls_delx-po_itemx = abap_true.
ls_delx-delivery_date = abap_true.
APPEND ls_delx TO lt_delx.
CLEAR:ls_delx.
ENDIF.
*** Versions
IF <gfs_file>-pr_no IS NOT INITIAL.
lv_po_no = <gfs_file>-po_no.
*** Header PO No.
ls_header-po_number = <gfs_file>-po_no.
*** Set the Flag
ls_headerx-po_number = abap_true.
*** Version Fill
ls_version-completed = abap_true.
ls_version-reason = 'XYZ'.
ls_version-description = <gfs_file>-text.
ls_version-req_by = sy-uname.
***no_price_from_po
ls_no_price_from_po = abap_true.
***** Added on 06.03.2025
*** If PO is at Hold Stage
IF <gfs_file>-hold IS NOT INITIAL.
ls_memory_uncomplete-bapiflag = abap_true.
ls_memory_complete-bapiflag = abap_true.
ENDIF.
*** PR No. AND New QTY
DATA(lv_tabix) = sy-tabix.
READ TABLE lt_ekpo INTO DATA(ls_ekpo) INDEX 1.
IF lv_tabix LE 1.
CLEAR:lv_ebelp.
lv_ebelp = ls_ekpo-ebelp + 10.
ELSE.
lv_ebelp = lv_ebelp + 10.
ENDIF.
ls_poitem-po_item = lv_ebelp.
ls_poitem-preq_no = |{ <gfs_file>-pr_no ALPHA = IN }|.
ls_poitem-preq_item = <gfs_file>-pr_item .
ls_poitem-quantity = <gfs_file>-new_qty.
ls_poitem-net_price = <gfs_file>-amount.
APPEND ls_poitem TO lt_poitem.
SORT lt_poitem BY po_item .
CLEAR:ls_poitem.
*** PO Item Flag
ls_poitemx-po_item = lv_ebelp.
ls_poitemx-po_itemx = abap_true.
ls_poitemx-preq_no = abap_true.
ls_poitemx-preq_item = abap_true.
ls_poitemx-quantity = abap_true.
ls_poitemx-net_price = abap_true.
APPEND ls_poitemx TO lt_poitemx.
SORT lt_poitemx BY po_item .
CLEAR:ls_poitemx.
*** PO Item Details Fill
*** Item Data Fill
ls_del-po_item = lv_ebelp.
ls_del-delivery_date = <gfs_file>-new_date.
APPEND ls_del TO lt_del.
SORT lt_del BY po_item .
CLEAR:ls_del.
**** PO Item Flag
ls_delx-po_item = lv_ebelp.
ls_delx-po_itemx = abap_true.
ls_delx-delivery_date = abap_true.
APPEND ls_delx TO lt_delx.
SORT lt_delx BY po_item .
CLEAR:ls_delx.
ENDIF.
*** Call the BAPI PO Change
AT END OF po_no.
BREAK eswar.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = lv_po_no
poheader = ls_header
poheaderx = ls_headerx
versions = ls_version
no_price_from_po = ls_no_price_from_po
memory_uncomplete = ls_memory_uncomplete " Added On 06.03.2025
memory_complete = ls_memory_complete " Added On 06.03.2025
TABLES
return = it_return
poitem = lt_poitem
poitemx = lt_poitemx
poschedule = lt_del
poschedulex = lt_delx.
READ TABLE it_return INTO ws_return WITH KEY type = lc_e.
IF sy-subrc = 0.
LOOP AT it_return INTO ws_return.
gs_alv-ebeln = lv_po_no.
gs_alv-type = icon_led_red.
gs_alv-message = ws_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.
READ TABLE it_return INTO ws_return WITH KEY type = lc_s.
IF sy-subrc = 0.
gs_alv-ebeln = lv_po_no.
gs_alv-type = icon_led_green.
gs_alv-message = ws_return-message.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
ENDIF.
ENDIF.
CLEAR: ls_header,ls_version,ls_del,ls_headerx,ls_delx,ws_return,lv_po_no,
lt_poitem, lt_poitemx,lt_del,lt_delx,it_return.
ENDAT.
CLEAR:ls_ekpo.
ENDLOOP.
ELSEIF rb_amt EQ abap_true.
LOOP AT it_file ASSIGNING FIELD-SYMBOL(<wfs_file>).
lv_po_no = <wfs_file>-po_no.
ls_header-po_number = <wfs_file>-po_no.
*** Set the Flag
ls_headerx-po_number = abap_true.
*** Versions
ls_version-completed = abap_true.
ls_version-reason = 'XYZ'.
ls_version-description = <wfs_file>-text.
ls_version-req_by = sy-uname.
***** Added on 06.03.2025
*** If PO is at Hold Stage
IF <wfs_file>-hold IS NOT INITIAL.
ls_memory_uncomplete-bapiflag = abap_true.
ls_memory_complete-bapiflag = abap_true.
ENDIF.
*** PR No. AND New QTY
ls_poitem-po_item = <wfs_file>-po_item.
ls_poitem-quantity = <wfs_file>-qty.
ls_poitem-net_price = <wfs_file>-amount.
APPEND ls_poitem TO lt_poitem.
CLEAR:ls_poitem.
*** PO Item Flag
ls_poitemx-po_item = <wfs_file>-po_item.
ls_poitemx-po_itemx = abap_true.
ls_poitemx-quantity = abap_true.
ls_poitemx-net_price = abap_true.
APPEND ls_poitemx TO lt_poitemx.
CLEAR:ls_poitemx.
*** PO Item Details Fill
*** Item Data Fill
ls_del-po_item = <wfs_file>-po_item.
ls_del-delivery_date = <wfs_file>-del_date.
APPEND ls_del TO lt_del.
CLEAR:ls_del.
**** PO Item Flag
* ls_delx-po_item = <gfs_file>-po_item.
ls_delx-po_item = <wfs_file>-po_item.
ls_delx-po_itemx = abap_true.
ls_delx-delivery_date = abap_true.
APPEND ls_delx TO lt_delx.
CLEAR:ls_delx.
*** Call the BAPI PO Change
AT END OF po_no.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = lv_po_no
poheader = ls_header
poheaderx = ls_headerx
versions = ls_version
memory_uncomplete = ls_memory_uncomplete " Added On 06.03.2025
memory_complete = ls_memory_complete " Added On 06.03.2025
TABLES
return = it_return
poitem = lt_poitem
poitemx = lt_poitemx
poschedule = lt_del
poschedulex = lt_delx.
READ TABLE it_return INTO ws_return WITH KEY type = lc_e.
IF sy-subrc = 0.
LOOP AT it_return INTO ws_return.
gs_alv-ebeln = lv_po_no.
gs_alv-type = icon_led_red.
gs_alv-message = ws_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.
READ TABLE it_return INTO ws_return WITH KEY type = lc_s.
IF sy-subrc = 0.
gs_alv-ebeln = lv_po_no.
gs_alv-type = icon_led_green.
gs_alv-message = ws_return-message.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
ENDIF.
ENDIF.
CLEAR: ls_header,ls_version,ls_del,ls_headerx,ls_delx,ws_return,lv_po_no.
ENDAT.
ENDLOOP.
**** HSN Update in PO
ELSEIF rb_upd EQ abap_true.
BREAK eswar.
LOOP AT it_hsn ASSIGNING FIELD-SYMBOL(<wfs_hsn>).
SELECT SINGLE * INTO @DATA(ls_mseg)
FROM mseg WHERE ebeln EQ @<wfs_hsn>-po_no
AND ebelp EQ @<wfs_hsn>-po_item
AND bwart EQ '101'.
IF ls_mseg IS INITIAL.
SELECT SINGLE * INTO ls_ekpo
FROM ekpo WHERE ebeln EQ <wfs_hsn>-po_no
AND ebelp EQ <wfs_hsn>-po_item.
IF ls_ekpo IS NOT INITIAL.
SELECT SINGLE * INTO @DATA(ls_marc)
FROM marc WHERE matnr EQ @ls_ekpo-matnr
AND werks EQ @ls_ekpo-werks.
ENDIF.
ls_ekpo-j_1bnbm = ls_marc-steuc.
MODIFY ekpo FROM ls_ekpo.
* sno = sno + 1.
gs_alv-sno = <wfs_hsn>-sno.
gs_alv-type = icon_led_green. "'S'.
gs_alv-ebeln = <wfs_hsn>-po_no.
gs_alv-ebelp = <wfs_hsn>-po_item.
gs_alv-message = |Standard Domestic PO { <wfs_hsn>-po_no } Changed|.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
ELSEIF ls_mseg IS NOT INITIAL.
gs_alv-sno = <wfs_hsn>-sno.
gs_alv-type = icon_led_red. "'E'.
gs_alv-ebeln = <wfs_hsn>-po_no.
gs_alv-ebelp = <wfs_hsn>-po_item.
gs_alv-message = |PO Not Changed - GRN done|.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
ENDIF.
CLEAR:ls_mseg,ls_mseg,ls_marc.
ENDLOOP.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form disply_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM disply_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.
IF rb_hsn EQ abap_true.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MATNR'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Material Number'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'TYPE'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Status'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MESSAGE'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Message'.
APPEND ls_fieldcat TO lt_fieldcat.
ELSEIF rb_amt EQ abap_true.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'EBELN'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'PO Number'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'TYPE'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Status'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MESSAGE'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Message'.
APPEND ls_fieldcat TO lt_fieldcat.
ELSEIF rb_po EQ abap_true.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'EBELN'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'PO Number'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'TYPE'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Status'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MESSAGE'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Message'.
APPEND ls_fieldcat TO lt_fieldcat.
ELSEIF rb_upd EQ abap_true.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'SNO'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Serail No.'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'TYPE'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Status'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'EBELN'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'PO Number'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'EBELP'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'PO Item'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MESSAGE'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Message'.
APPEND ls_fieldcat TO lt_fieldcat.
ENDIF.
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 h_excel 'EXCEL.APPLICATION'.
SET PROPERTY OF h_excel 'Visible' = 1.
* get list of workbooks, initially empty
CALL METHOD OF
h_excel
'Workbooks' = h_mapl.
*** Error handle File
PERFORM err_hdl.
* add a new workbook
CALL METHOD OF
h_mapl
'Add' = h_map.
*** Error handle File
PERFORM err_hdl.
IF rb_hsn = abap_true.
PERFORM fill_cell USING: 1 1 0 'Material',
1 2 0 'Plant',
1 3 0 'HSN Code'.
ELSEIF rb_po = abap_true.
PERFORM fill_cell USING: 1 1 0 'PO Number',
1 2 0 'PO Line Item',
1 3 0 'Del Indicator',
1 4 0 'Delivery Date',
1 5 0 'New Date',
1 6 0 'PR No.',
1 7 0 'PR line item',
1 8 0 'New Qty',
1 9 0 'Amount',
1 10 0 'Text',
1 11 0 'Hold'.
ELSEIF rb_amt = abap_true.
PERFORM fill_cell USING: 1 1 0 'PO Number',
1 2 0 'PO Line Item',
1 3 0 'Qty',
1 4 0 'Amount',
1 5 0 'Delivery Date',
1 6 0 'Text',
1 7 0 'Hold'.
ELSEIF rb_upd = abap_true.
PERFORM fill_cell USING: 1 1 0 'Sno',
1 2 0 'PO Number',
1 3 0 'PO Line Item'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form err_hdl
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM err_hdl .
IF sy-subrc <> 0.
CALL METHOD OF
h_excel
'QUIT'.
FREE OBJECT h_excel.
h_excel-handle = -1.
MESSAGE: 'Failed to generate template.' TYPE 'E'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form fill_cell
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_1
*& --> P_1
*& --> P_0
*& --> P_
*&---------------------------------------------------------------------*
FORM fill_cell USING i j bold val.
CALL METHOD OF
h_excel
'Cells' = h_zl
EXPORTING
#1 = i
#2 = j.
PERFORM err_hdl.
SET PROPERTY OF h_zl 'Value' = val .
PERFORM err_hdl.
GET PROPERTY OF h_zl 'Font' = h_f.
PERFORM err_hdl.
SET PROPERTY OF h_f 'Bold' = bold .
PERFORM err_hdl.
ENDFORM.
Comments
Post a Comment