Saturday, 10 November 2012

CLASSICAL INTERACTIVE AND ALV IN SINGLE REPORT


*&---------------------------------------------------------------------*
*& Report  ZRA_TEST_046
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zra_test_046.
TABLES: mara.
TYPE-POOLS:vrm,slis.
TYPES: BEGIN OF ty_mara,
         c1 TYPE char1,
         matnr TYPE matnr,
         ersda TYPE ersda,
        END OF ty_mara,
        BEGIN OF ty_marc,
          matnr TYPE matnr,
          werks TYPE werks_d,
          END OF ty_marc.
DATA: it_mara TYPE STANDARD TABLE OF ty_mara INITIAL SIZE 0,
      wa_mara TYPE ty_mara,
      it_marc TYPE STANDARD TABLE OF ty_marc INITIAL SIZE 0,
      wa_marc TYPE ty_marc,
      lv_matnr TYPE matnr,
      it_dlist TYPE vrm_values,
      wa_dlist TYPE vrm_value,
      i_fldcat TYPE slis_t_fieldcat_alv,
      wa_fldcat TYPE slis_fieldcat_alv,
      wa_layout TYPE slis_layout_alv.
PARAMETERS: p_dlist TYPE c AS LISTBOX VISIBLE LENGTH 15.
SELECT-OPTIONS: s_matnr FOR mara-matnr.

INITIALIZATION.
  REFRESH: it_dlist.
  CLEAR: wa_dlist.

  wa_dlist-key = '1'.
  wa_dlist-text = 'CLASSICAL'.
  APPEND wa_dlist TO it_dlist.

  CLEAR: wa_dlist.

  wa_dlist-key = '2'.
  wa_dlist-text = 'INTERACTIVE'.
  APPEND wa_dlist TO it_dlist.

  CLEAR: wa_dlist.

  wa_dlist-key = '3'.
  wa_dlist-text = 'ALV'.
  APPEND wa_dlist TO it_dlist.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id                    = 'P_DLIST'
      values                = it_dlist

            .
AT SELECTION-SCREEN OUTPUT .

  CASE p_dlist.
    WHEN '1'.
      s_matnr-low = '1'.
      s_matnr-high = '1000'.
      s_matnr-sign = 'I'.
      APPEND s_matnr.
    WHEN '2'.
      CLEAR s_matnr.
      REFRESH s_matnr.
      s_matnr-low = '1001'.
      s_matnr-high = '2000'.
      s_matnr-sign = 'I'.
      APPEND s_matnr.
    WHEN '3'.
      CLEAR s_matnr.
      REFRESH s_matnr.
      s_matnr-low = '1'.
      s_matnr-high = '2000'.
      s_matnr-sign = 'I'.
      APPEND s_matnr.

  ENDCASE.

START-OF-SELECTION.
  SELECT matnr
         ersda
   FROM mara
    INTO CORRESPONDING FIELDS OF TABLE it_mara
    WHERE matnr IN s_matnr.
  IF sy-subrc = 0.
    SORT it_mara BY matnr.
  ENDIF.

END-OF-SELECTION.
  IF p_dlist = '1'.
    PERFORM display_classical.
  ELSEIF p_dlist = '2'.
    PERFORM display_classical.
  ELSEIF p_dlist = '3'.
    PERFORM create_fieldcatalog.
    PERFORM create_layout.
    PERFORM create_display.
ENDIF.

AT LINE-SELECTION.
  IF p_dlist = '2'.
    REFRESH it_marc.
    SELECT matnr
           werks
     FROM marc
   INTO TABLE it_marc
      WHERE matnr = wa_mara-matnr.
    IF sy-subrc = 0.
      SORT it_marc BY matnr.
      LOOP AT it_marc INTO wa_marc.
        WRITE: / wa_marc-matnr,
                 wa_marc-werks.
      ENDLOOP.
    ELSE.
      MESSAGE 'NO ENTRIES IN MARC' TYPE 'E'.
    ENDIF.
  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  display_classical
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_classical .
  IF it_mara IS NOT INITIAL.
    LOOP AT it_mara INTO wa_mara.
      WRITE: / wa_mara-matnr,
               wa_mara-ersda.
      HIDE wa_mara-matnr.
    ENDLOOP.
  ENDIF.
ENDFORM.                    " display_classical
*&---------------------------------------------------------------------*
*&      Form  create_fieldcatalog
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM create_fieldcatalog .
  DATA: c_pos TYPE i VALUE 1,
        r_pos TYPE i VALUE 1.

  wa_fldcat-col_pos = c_pos.
  wa_fldcat-row_pos = r_pos.
  wa_fldcat-fieldname = 'C1'.
  wa_fldcat-seltext_l = 'SELECT'.
  wa_fldcat-tabname = 'IT_MARA'.
  wa_fldcat-checkbox = 'X'.
  wa_fldcat-edit = 'X'.
  APPEND wa_fldcat TO i_fldcat.
  CLEAR wa_fldcat.

  c_pos = c_pos + 1.
  wa_fldcat-col_pos = c_pos.
  wa_fldcat-row_pos = r_pos.
  wa_fldcat-fieldname = 'MATNR'.
  wa_fldcat-seltext_l = 'MATERIAL NO.'.
  wa_fldcat-tabname = 'IT_MARA'.
  wa_fldcat-no_zero = 'X'.
  APPEND wa_fldcat TO i_fldcat.
  CLEAR wa_fldcat.

  c_pos = c_pos + 1.
  wa_fldcat-col_pos = c_pos.
  wa_fldcat-row_pos = r_pos.
  wa_fldcat-fieldname = 'ERSDA'.
  wa_fldcat-seltext_l = 'CREATED ON'.
  wa_fldcat-tabname = 'IT_MARA'.
  APPEND wa_fldcat TO i_fldcat.
ENDFORM.                    " create_fieldcatalog
*&---------------------------------------------------------------------*
*&      Form  create_layout
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM create_layout .
  wa_layout-colwidth_optimize = 'X'.
  wa_layout-zebra = 'X'.
ENDFORM.                    " create_layout
*&---------------------------------------------------------------------*
*&      Form  create_display
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM create_display .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
     i_callback_program                = sy-repid
     is_layout                         = wa_layout
     it_fieldcat                       = i_fldcat
TABLES
      t_outtab                          = it_mara.
ENDFORM.                    " create_display

No comments: