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

TYPE-POOLS:icon.

*** HSN Code Change File Data
TYPESBEGIN 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
TYPESBEGIN 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
DATAh_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
CONSTANTSlc_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-SCREENPUSHBUTTON 2(60cmdgen 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.
  DATAlt_return TYPE TABLE OF bapi_matreturn2.

**** Po Line Item Addition Declarations & Amount / QTY Changes
  DATAlv_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
  DATAls_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_returnWITH 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.
        CLEARgs_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.
          CLEARgs_alv.
        ENDLOOP.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ENDIF.
    ENDLOOP.

*** 2nd Radio Button
  ELSEIF rb_po EQ abap_true.

    DATAlv_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_tabixsy-tabix.
        READ TABLE lt_ekpo INTO DATA(ls_ekpoINDEX 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.
            CLEARgs_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.
            CLEARgs_alv.
          ENDIF.

        ENDIF.
        CLEARls_header,ls_version,ls_del,ls_headerx,ls_delx,ws_return,lv_po_no,
        lt_poitemlt_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.
            CLEARgs_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.
            CLEARgs_alv.
          ENDIF.

        ENDIF.
        CLEARls_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.
        CLEARgs_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.
        CLEARgs_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:  'Material',
                              'Plant',
                              'HSN Code'.
  ELSEIF rb_po abap_true.
    PERFORM fill_cell USING:  1  'PO Number',
                              2  'PO Line Item',
                              3  'Del Indicator',
                              4  'Delivery Date',
                              5  'New Date',
                              6  'PR No.',
                              7  'PR line item',
                              8  'New Qty',
                              9  'Amount',
                              10 'Text',
                              11 'Hold'.
  ELSEIF rb_amt abap_true.
    PERFORM fill_cell USING:  'PO Number',
                              'PO Line Item',
                              'Qty',
                              'Amount',
                              'Delivery Date',
                              'Text',
                              'Hold'.

  ELSEIF rb_upd abap_true.
    PERFORM fill_cell USING:  'Sno',
                              'PO Number',
                              '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 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

Popular posts from this blog

PO rejection notification & rejection comments for Fiori

FB60 Vendor Invoice Post using BAPI

Service Invoice Upload For FB70 (BAPI)