Monday, 4 November 2013

ALV in Blocks



*&---------------------------------------------------------------------*
*& Report  ZTEST_ALV_BLOCK
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZTEST_ALV_BLOCK.

*&---------------------------------------------------------------------*
*& Report  Z99_ALVBLOCK
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*


TYPE-POOLSslis.
TYPESBEGIN OF ty_mara,
          matnr TYPE matnr,
          matkl TYPE matkl,
      END OF ty_mara,

      BEGIN OF ty_marc,
        matnr TYPE matnr,
        werks TYPE werks_d,
      END OF ty_marc,

      BEGIN OF ty_makt,
        matnr TYPE matnr,
        maktx TYPE maktx,
      END OF ty_makt.

DATA:it_mara TYPE STANDARD TABLE OF ty_mara,
      it_marc TYPE STANDARD TABLE OF ty_marc,
      it_makt TYPE STANDARD TABLE OF ty_makt,
      v_matnr TYPE mara-matnr.

SELECT-OPTIONSs_matnr FOR v_matnr.

DATA :wa_fieldcat TYPE slis_fieldcat_alv"workspace
      v_layout TYPE slis_layout_alv,
      it_events1 TYPE slis_t_event,            "it is for events: we are using top of page here
      it_events2 TYPE slis_t_event,            "it is for events we are using top of page here
      it_events3 TYPE slis_t_event,            "it is for events we are using top of page here
      wa_events TYPE slis_alv_event,
      it_fieldcat_mara TYPE slis_t_fieldcat_alv,
      it_fieldcat_marc TYPE slis_t_fieldcat_alv,
      it_fieldcat_makt TYPE slis_t_fieldcat_alv" Table

START-OF-SELECTION.
  " Simple selection of data
  SELECT matnr matkl FROM mara INTO TABLE it_mara WHERE matnr IN s_matnr.

  IF it_mara IS NOT INITIAL.

    SELECT matnr werks FROM marc INTO TABLE it_marc
          FOR ALL ENTRIES IN it_mara
             WHERE matnr EQ it_mara-matnr.
    SELECT matnr maktx FROM makt INTO TABLE it_makt
          FOR ALL ENTRIES IN it_mara
              WHERE matnr EQ it_mara-matnr AND spras EQ sy-langu.

  ENDIF.
  PERFORM f_buildcatalog.
  " Now lets start ALV block display

END-OF-SELECTION.
  "Start the ALV block list
  CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
    EXPORTING
      i_callback_program       sy-repid
*     I_CALLBACK_PF_STATUS_SET = ' '
*     I_CALLBACK_USER_COMMAND  = ' '
*     IT_EXCLUDING             =
    .
  " Just append each ALV required,
  " All first 4 export parameters are mandatory, you can leave it blank though like i_tabname here
  CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
    EXPORTING
      is_layout                        v_layout
      it_fieldcat                      it_fieldcat_mara
      i_tabname                        ''
      it_events                        it_events1
*   IT_SORT                          =
*   I_TEXT                           = ' '
    TABLES
      t_outtab                         it_mara
* EXCEPTIONS
*   PROGRAM_ERROR                    = 1
*   MAXIMUM_OF_APPENDS_REACHED       = 2
*   OTHERS                           = 3
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
    EXPORTING
      is_layout                        v_layout
      it_fieldcat                      it_fieldcat_marc
      i_tabname                        ''
      it_events                        it_events2
*   IT_SORT                          =
*   I_TEXT                           = ' '
    TABLES
      t_outtab                         it_marc
* EXCEPTIONS
*   PROGRAM_ERROR                    = 1
*   MAXIMUM_OF_APPENDS_REACHED       = 2
*   OTHERS                           = 3
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
    EXPORTING
      is_layout                        v_layout
      it_fieldcat                      it_fieldcat_makt
      i_tabname                        =''
      it_events                        it_events3
*   IT_SORT                          =
*   I_TEXT                           = ' '
    TABLES
      t_outtab                         it_makt
* EXCEPTIONS
*   PROGRAM_ERROR                    = 1
*   MAXIMUM_OF_APPENDS_REACHED       = 2
*   OTHERS                           = 3
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
  " After all appending , just display the list: without this function call , list wont be displayed
  CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
* EXPORTING
*   I_INTERFACE_CHECK             = ' '
*   IS_PRINT                      =
*   I_SCREEN_START_COLUMN         = 0
*   I_SCREEN_START_LINE           = 0
*   I_SCREEN_END_COLUMN           = 0
*   I_SCREEN_END_LINE             = 0
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER       =
*   ES_EXIT_CAUSED_BY_USER        =
* 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.
  "TOP OF PAGE for all 3 ALV list
*&---------------------------------------------------------------------*
*&      Form  top_page1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM top_page1.
  WRITE:'MARA DETAILS' COLOR 5.
ENDFORM.                                                    "TOP_PAGE1
*&---------------------------------------------------------------------*
*&      Form  top_page2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM top_page2.
  WRITE:'MARC DETAILS' COLOR 5.
ENDFORM.                                                    "TOP_PAGE2
*&---------------------------------------------------------------------*
*&      Form  top_page3
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM top_page3.
  WRITE:'MAKT DETAILS' COLOR 5.
ENDFORM.                    "TOP_PAGE


*&---------------------------------------------------------------------*
*&      Form  f_buildcatalog
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_buildcatalog.
  wa_fieldcat-col_pos 1.
  wa_fieldcat-fieldname 'MATNR'.
  wa_fieldcat-ref_tabname 'MARA'.
  APPEND wa_fieldcat TO it_fieldcat_mara.
  CLEAR wa_fieldcat.

  wa_fieldcat-col_pos 2.
  wa_fieldcat-fieldname 'MATKL'.
  wa_fieldcat-ref_tabname 'MARA'.
  APPEND wa_fieldcat TO it_fieldcat_mara.
  CLEAR wa_fieldcat.

  wa_fieldcat-col_pos 1.
  wa_fieldcat-fieldname 'MATNR'.
  wa_fieldcat-ref_tabname 'MARA'.
  APPEND wa_fieldcat TO it_fieldcat_marc.
  CLEAR wa_fieldcat.

  wa_fieldcat-col_pos 2.
  wa_fieldcat-fieldname 'WERKS'.
  wa_fieldcat-ref_tabname 'MARC'.
  APPEND wa_fieldcat TO it_fieldcat_marc.
  CLEAR wa_fieldcat.

  wa_fieldcat-col_pos 1.
  wa_fieldcat-fieldname 'MATNR'.
  wa_fieldcat-ref_tabname 'MARA'.
  APPEND wa_fieldcat TO it_fieldcat_makt.
  CLEAR wa_fieldcat.

  wa_fieldcat-col_pos 2.
  wa_fieldcat-fieldname 'MATKX'.
  wa_fieldcat-ref_tabname 'MAKT'.
  APPEND wa_fieldcat TO it_fieldcat_makt.
  CLEAR wa_fieldcat.

  "Assign each  top of page of alv list to a form, where you will display the header/any text
  wa_events-name 'TOP_OF_PAGE'.
  wa_events-form 'TOP_PAGE1'.
  APPEND wa_events TO it_events1.
  CLEAR wa_events.

  wa_events-name 'TOP_OF_PAGE'.
  wa_events-form 'TOP_PAGE2'.
  APPEND wa_events TO it_events2.
  CLEAR wa_events.

  wa_events-name 'TOP_OF_PAGE'.
  wa_events-form 'TOP_PAGE3'.
  APPEND wa_events TO it_events3.
  CLEAR wa_events.

ENDFORM.                    "f_buildcatalog




No comments:

Post a Comment