Conteúdo

Função onde você passa uma tabela e ela retorna um ALV lindão


Então bate aquele momento que você volta a brincar com classes e métodos, então lembra que o mundo é perfeito, que desenvolvedores são os caras, e que OO não são dois olhinhos esbugalhados.

Bem-vindo à Orientação a Objetos.

Esta função basta você passar como parâmetro uma tabela populada, dados de posicionamento/popup se quiser, e então ela retorna um ALV bunitinho já formatado, inclusive se for TYPE Standard, com campos chave, etc. Sendo assim, um exemplo prático para padronizar relatórios.

FUNCTION ZF_SAPeiros.
*"----------------------------------------------------------------------
*"*"Interface local:
*"  IMPORTING
*"     REFERENCE(I_INI_COLUNA) TYPE I    OPTIONAL
*"     REFERENCE(I_FIM_COLUNA) TYPE I    OPTIONAL
*"     REFERENCE(I_INI_LINHA)  TYPE I    OPTIONAL
*"     REFERENCE(I_FIM_LINHA)  TYPE I    OPTIONAL
*"     REFERENCE(I_POPUP)      TYPE FLAG OPTIONAL
*"  TABLES
*"      T_TABELA               TYPE STANDARD TABLE
*"----------------------------------------------------------------------
* EXEMPLO DE COMO CHAMÁ-LA:
*"----------------------------------------------------------------------
*TYPES:
*  BEGIN OF ty_mara,
*    matnr TYPE mara-matnr,
*    END OF ty_mara.
*
*SELECT matnr
*  UP TO 10 ROWS
*  FROM mara
*  INTO TABLE t_mara.
*
*sy-title = 'SAPeiros: Registros da tabela MARA'.
*
*CALL FUNCTION 'ZF_ALV_SIMPLES'
*  EXPORTING
*    i_ini_coluna = 1          "Início da coluna
*    i_fim_coluna = 100        "Fim da coluna
*    i_ini_linha  = 1          "Início da linha
*    i_fim_linha  = 10         "Fim da linha
*    i_popup      = abap_true  "Exibir como popup
*  TABLES
*    t_tabela     = t_mara.    "Tabela a ser exibida
*=======================================================================
* Classes locais
  DATA:
    cl_alv        TYPE REF TO cl_salv_table,          "ALV
    cl_functions  TYPE REF TO cl_salv_functions_list. "Funções do ALV

* Instancia o ALV com dados enviados para T_TABELA
  TRY.

      cl_salv_table=>factory(
        IMPORTING
          r_salv_table = cl_alv
        CHANGING
          t_table      = t_tabela[] ).

    CATCH cx_salv_msg.

  ENDTRY.

* Recupera e habilita todas as funções do ALV
  cl_functions = cl_alv->get_functions( ).
  cl_functions->set_all( abap_true ).

* Verifica se o ALV foi criado com sucesso
  IF cl_alv IS BOUND.

* Se Popup marcado, seta para exibir em modo popup
    IF i_popup EQ abap_true.

      cl_alv->set_screen_popup(
        start_column = i_ini_coluna
        end_column   = i_fim_coluna
        start_line   = i_ini_linha
        end_line     = i_fim_linha ).

    ENDIF.

* Exibe Relatório ALV
    cl_alv->display( ).

  ENDIF.
ENDFUNCTION.