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.