Thursday, August 30, 2018

ALV Grid Report -using Multiple Tables

                  

ALV Grid Report - Multiple Tables.

In   this simple example , we are showing how to use mutiple tables in one ALV.REUSE_ALV_GRID_DISPLAY we have to pass program name, field catalog table and output table. In this program we have taken 3 tables and created a simple AVL output displayed in grid format, and we have not taken any event , we simply called another function module  for Top-of-page to be inside the alv output, that is REUSE_ALV_COMMENTARY_WRITE.


 If your asked in interview how to create ALV with multiple table then you can simply explain it in few steps that are as follows:
1: declare the type structure and internal table and workarea ,fieldcatlog (internal table and workarea) ,header, events layout .
2: perform select query and store in internal table,or workarea  but keep in mind , when mutiple table are involved try to use FOR ALL ENTRIES IN ,you should use this after the first query, so that all the table has same data .
3: create a fieldcatlog , in fieldcatlog you have multiple option like (hotspot,editable,sum)try using it as per need and then pass the workarea records one by one into fieldcatlog internal table.
4: Now simply pass the fieldcatlog internal table ,into function module REUSE_ALV_GRID_DISPLAY.
 and then you get your  output in grid format.



*&---------------------------------------------------------------------*
*& Report  ZALVMUTLIPLE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZALVMUTLIPLE.

TABLESmaramarcmardmakt.

TYPE-POOLSslis.  

TYPESBEGIN OF ty_mara,
        matnr TYPE mara-matnr,
        ersda TYPE mara-ersda,
        ernam TYPE mara-ernam,
        mtart TYPE mara-mtart,
       END OF ty_mara,

       BEGIN OF ty_marc,
         matnr TYPE marc-matnr,
         werks TYPE marc-werks,
         xchar TYPE marc-xchar,
       END OF ty_marc,

       BEGIN OF ty_mard,
         matnr TYPE mard-matnr,
         werks TYPE mard-werks,
         lgort TYPE mard-lgort,
       END OF ty_mard,

       BEGIN OF ty_makt,
         matnr TYPE makt-matnr,
         spras TYPE makt-spras,
         maktx TYPE makt-maktx,
       END OF ty_makt,

       BEGIN OF ty_out,
        sel,
        matnr TYPE mara-matnr,
        werks TYPE marc-werks,
        lgort TYPE mard-lgort,
        mtart TYPE mara-mtart,
        ersda TYPE mara-ersda,
        ernam TYPE mara-ernam,
        xchar TYPE marc-xchar,
        maktx TYPE makt-maktx,
       END OF ty_out.

DATAwa_mara TYPE ty_mara,
      wa_marc TYPE ty_marc,
      wa_mard TYPE ty_mard,
      wa_makt TYPE ty_makt,
      wa_out  TYPE ty_out,
      it_mara TYPE STANDARD TABLE OF ty_mara,
      it_marc TYPE STANDARD TABLE OF ty_marc,
      it_mard TYPE STANDARD TABLE OF ty_mard,
      it_makt TYPE STANDARD TABLE OF ty_makt,
      it_out  TYPE STANDARD TABLE OF ty_out.

DATAwa_fcat_out TYPE slis_fieldcat_alv,
      it_fcat_out TYPE slis_t_fieldcat_alv,
      wa_layout   TYPE slis_layout_alv,
      wa_top      TYPE slis_listheader,
      it_top      TYPE slis_t_listheader.

DATAv_prog TYPE sy-repid,
      v_name TYPE sy-uname,
      v_date TYPE char12.

INITIALIZATION.
  v_prog sy-repid.
  v_name sy-uname.

  SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  PARAMETERS       p_mtart TYPE mtart OBLIGATORY.
  SELECT-OPTIONS   s_matnr FOR mara-matnr.
  SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.
  PERFORM get_material.
  PERFORM get_plant.
  PERFORM get_storage.
  PERFORM describe.
  PERFORM output.

END-OF-SELECTION.
  PERFORM prepare_fieldcat.
  PERFORM layout.
  PERFORM alv_list_display.

TOP-OF-PAGE.
  PERFORM top_of_page.
*&---------------------------------------------------------------------*
*&      Form  GET_MATERIAL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_material .

  SELECT matnr ersda ernam mtart
    FROM mara INTO TABLE it_mara
    WHERE matnr IN s_matnr
      AND mtart =  p_mtart.

  IF sy-subrc 0.
    SORT it_mara BY matnr.
  ENDIF.

ENDFORM.                    " GET_MATERIAL
*&---------------------------------------------------------------------*
*&      Form  GET_PLANT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_plant .

  IF it_mara IS NOT INITIAL.
    SELECT matnr werks xchar
      FROM marc INTO TABLE it_marc
      FOR ALL ENTRIES IN it_mara
      WHERE matnr it_mara-matnr.

    IF sy-subrc 0.
      SORT it_marc BY matnr.
    ENDIF.
  ENDIF.

ENDFORM.                    " GET_PLANT
*&---------------------------------------------------------------------*
*&      Form  GET_STORAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_storage .

  IF it_marc IS NOT INITIAL.
    SELECT matnr werks lgort
      FROM mard INTO TABLE it_mard
      FOR ALL ENTRIES IN it_marc
      WHERE matnr it_marc-matnr
        AND werks it_marc-werks.

    IF sy-subrc 0.
      SORT it_mard BY matnr.
    ENDIF.
  ENDIF.

ENDFORM.                    " GET_STORAGE
*&---------------------------------------------------------------------*
*&      Form  GET_DESCRIPTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM  describe.

  IF it_mara IS NOT INITIAL.
    SELECT matnr spras maktx
      FROM makt INTO TABLE it_makt
      FOR ALL ENTRIES IN it_mara
      WHERE matnr it_mara-matnr.

    IF sy-subrc 0.
      SORT it_makt BY matnr.
    ENDIF.
  ENDIF.

ENDFORM.                    " GET_DESCRIPTION
*&---------------------------------------------------------------------*
*&      Form  PREPARE_OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM output.

  IF    it_mara IS NOT INITIAL
    AND it_marc IS NOT INITIAL
    AND it_mard IS NOT INITIAL.

    LOOP AT it_mara INTO wa_mara.
      wa_out-matnr wa_mara-matnr.
      wa_out-ersda wa_mara-ersda.
      wa_out-ernam wa_mara-ernam.
      wa_out-mtart wa_mara-mtart.

      READ TABLE it_makt INTO wa_makt
      WITH KEY matnr wa_mara-matnr BINARY SEARCH.
      IF sy-subrc 0.
        wa_out-maktx wa_makt-maktx.
      ENDIF.

      LOOP AT it_marc INTO wa_marc
        WHERE matnr wa_mara-matnr.
        wa_out-werks wa_marc-werks.
        wa_out-xchar wa_marc-xchar.

        LOOP AT it_mard INTO wa_mard
          WHERE matnr wa_marc-matnr
            AND werks wa_marc-werks.
          wa_out-lgort wa_mard-lgort.

          APPEND wa_out TO it_out.
          CLEARwa_outwa_marawa_makt.

          CLEAR wa_mard.
        ENDLOOP.
        CLEAR wa_marc.
      ENDLOOP.
    ENDLOOP.
  ENDIF.

ENDFORM.                    " PREPARE_OUTPUT
*&---------------------------------------------------------------------*
*&      Form  PREPARE_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM prepare_fieldcat .

  CLEAR wa_fcat_out.
  REFRESH it_fcat_out.

  IF it_out IS NOT INITIAL.
    DATAlv_col TYPE VALUE 0.

    lv_col                + lv_col.
    wa_fcat_out-col_pos   lv_col.
    wa_fcat_out-fieldname 'MATNR'.
    wa_fcat_out-tabname   'IT_OUT'.
    wa_fcat_out-seltext_l 'Material No.'.
    APPEND wa_fcat_out TO it_fcat_out.
    CLEAR wa_fcat_out.

    lv_col                + lv_col.
    wa_fcat_out-col_pos   lv_col.
    wa_fcat_out-fieldname 'WERKS'.
    wa_fcat_out-tabname   'IT_OUT'.
    wa_fcat_out-seltext_l 'PLANT'.
    APPEND wa_fcat_out TO it_fcat_out.
    CLEAR wa_fcat_out.

    lv_col                + lv_col.
    wa_fcat_out-col_pos   lv_col.
    wa_fcat_out-fieldname 'LGORT'.
    wa_fcat_out-tabname   'IT_OUT'.
    wa_fcat_out-seltext_l 'STORAGE LOCATION'.
    APPEND wa_fcat_out TO it_fcat_out.
    CLEAR wa_fcat_out.

    lv_col                + lv_col.
    wa_fcat_out-col_pos   lv_col.
    wa_fcat_out-fieldname 'MTART'.
    wa_fcat_out-tabname   'IT_OUT'.
    wa_fcat_out-seltext_l 'MATERIAL TYPE'.
    APPEND wa_fcat_out TO it_fcat_out.
    CLEAR wa_fcat_out.

    lv_col                + lv_col.
    wa_fcat_out-col_pos   lv_col.
    wa_fcat_out-fieldname 'ERSDA'.
    wa_fcat_out-tabname   'IT_OUT'.
    wa_fcat_out-seltext_l 'DATE'.
    APPEND wa_fcat_out TO it_fcat_out.
    CLEAR wa_fcat_out.

    lv_col                + lv_col.
    wa_fcat_out-col_pos   lv_col.
    wa_fcat_out-fieldname 'ERNAM'.
    wa_fcat_out-tabname   'IT_OUT'.
    wa_fcat_out-seltext_l 'NAME'.
    APPEND wa_fcat_out TO it_fcat_out.
    CLEAR wa_fcat_out.

    lv_col                + lv_col.
    wa_fcat_out-col_pos   lv_col.
    wa_fcat_out-fieldname 'XCHAR'.
    wa_fcat_out-tabname   'IT_OUT'.
    wa_fcat_out-seltext_l 'BATCH NUMBER'.
    APPEND wa_fcat_out TO it_fcat_out.
    CLEAR wa_fcat_out.

    lv_col                + lv_col.
    wa_fcat_out-col_pos   lv_col.
    wa_fcat_out-fieldname 'MAKTX'.
    wa_fcat_out-tabname   'IT_OUT'.
    wa_fcat_out-seltext_l 'MATERIAL DESCRIPTION'.
    APPEND wa_fcat_out TO it_fcat_out.
    CLEAR wa_fcat_out.
  ENDIF.

ENDFORM.                    " PREPARE_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  ALV_LIST_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM alv_list_display .

  IF    it_out IS NOT INITIAL
    AND it_fcat_out IS NOT INITIAL.

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
     EXPORTING

        i_callback_program                v_prog

        i_callback_top_of_page            'TOP_OF_PAGE'

        is_layout                         wa_layout
        it_fieldcat                       it_fcat_out

      TABLES
        t_outtab                          it_out
      EXCEPTIONS
        program_error                     1
        OTHERS                            2.
  ENDIF.

ENDFORM.                    " ALV_LIST_DISPLAY
*&---------------------------------------------------------------------*
*&      Form  TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM top_of_page .

  CLEAR wa_top.
  REFRESH it_top.

  CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
    EXPORTING
      date_internal            sy-datum
    IMPORTING
      date_external            v_date
    EXCEPTIONS
      date_internal_is_invalid 1
      OTHERS                   2.

  wa_top-typ 'H'.
  wa_top-info 'MATERIAL REPORT'.
  APPEND wa_top TO it_top.
  CLEAR wa_top.

  wa_top-typ 'S'.
  wa_top-info 'Report: '.
  CONCATENATE wa_top-info v_prog
  INTO wa_top-info.
  APPEND wa_top TO it_top.
  CLEAR wa_top.

  wa_top-typ 'S'.
  wa_top-info 'User Name: '.
  CONCATENATE wa_top-info v_name
  INTO wa_top-info.
  APPEND wa_top TO it_top.
  CLEAR wa_top.

  wa_top-typ 'S'.
  wa_top-info 'Date: '.
  CONCATENATE wa_top-info v_date
  INTO wa_top-info.
  APPEND wa_top TO it_top.
  CLEAR wa_top.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary       it_top

            .

ENDFORM.                    " TOP_OF_PAGE
*&---------------------------------------------------------------------*
*&      Form  PREPARE_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM layout .

  wa_layout-zebra 'X'.
  wa_layout-colwidth_optimize 'X'.
  wa_layout-box_fieldname 'SEL'.


ENDFORM.