/* POPUP INI */
/* POPUP FIM */

Conteúdo

ALV com Layout informado na tela de parâmetros

Basicamente você escolhe o layout do relatório já na tela de parâmetros.

Para isto é necessário que antes você tenha gravado um layout, claro!


REPORT ZSAPeiros.
* Global Declarations
DATA:
  gs_key      TYPE salv_s_layout_key,
  gs_layouts  TYPE salv_s_layout_info,
  gs_layout   TYPE lvc_s_layo,
  gt_saida    TYPE TABLE OF mara,
  gt_fieldcat TYPE lvc_t_fcat,
  gs_variant  TYPE disvariant.

* Parameters
PARAMETERS p_layout TYPE slis_vari.

* Action for Layout parameter field
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_layout.
  gs_key-report = sy-repid.
  gs_layouts    = cl_salv_layout_service=>f4_layouts( s_key = gs_key
                                                      restrict = '1' ).
  p_layout      = gs_layouts-layout.

START-OF-SELECTION.
* Populate Data Report
  SELECT * UP TO 10 ROWS FROM mara INTO TABLE gt_saida.

  IF sy-subrc IS INITIAL.
    SORT gt_saida BY matnr.
  ENDIF.

* Layout
  gs_layout-col_opt    = abap_true.
  gs_layout-zebra      = abap_true.

* Layout Variant
  gs_variant-report    = sy-repid.
  gs_variant-variant   = p_layout.

* Get fields from structure/table
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name       = 'MARA'
      i_client_never_display = abap_true
    CHANGING
      ct_fieldcat            = gt_fieldcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.

* Display ALV Report Data
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = sy-repid
      is_layout_lvc      = gs_layout
      it_fieldcat_lvc    = gt_fieldcat
      i_save             = abap_true
      is_variant         = gs_variant
    TABLES
      t_outtab           = gt_saida[]
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.

  IF sy-subrc IS NOT INITIAL.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
/* POPUP INI */ /* POPUP FIM */