Relatórios ALV em SAP Tutorial – Visualizador de lista ABAP
⚡ Resumo Inteligente
Relatórios ALV em SAPAs listas geradas pelo ABAP List Viewer oferecem alinhamento de colunas, classificação, filtragem, totais e subtotais sem a necessidade de programação personalizada. Esta página explica os tipos de lista simples, em bloco e hierárquica, seus módulos de função REUSE e variantes de exibição.

O que é ALV em SAP ABAP?
As funcionalidades mais comuns em relatórios são alinhamento de colunas, classificação, filtragem, subtotais, totais, etc. Implementar essas funcionalidades do zero exige um grande esforço de programação. Para evitar isso, podemos usar um conceito chamado ABAP List Viewer (ALV).
Cada um desses relatórios fornece módulos de função que ajudam na produção do resultado desejado sem muito esforço. Vamos examiná-los em detalhes –
O ALV clássico oferece três tipos de listas, e cada uma possui seu próprio conjunto de módulos de função REUSE:
- Relatório simples: uma tabela interna exibida como uma lista ou uma grade.
- Relatório de bloco: diversas tabelas internas são apresentadas uma abaixo da outra como blocos separados.
- Relatório hierárquico: Uma tabela de cabeçalho e uma tabela de itens vinculadas por uma chave comum.
Relatório Simples
Módulos de função importantes nestes está -
- Reuse_alv_fieldcatalog_merge
- Reuse_alv_list_display
- Reuse_alv_events_get
- Reuse_alv_grid_display
- Reutilizar_alv_commentary_write
REUSE_ALV_FIELDCATALOG_MERGE
Este módulo de função é utilizado para preencher um catálogo de campos que é essencial para exibir os dados no ALV.
Se os dados de saída vierem de uma única tabela de dicionário e todas as colunas estiverem selecionadas, não precisaremos criar exclusivamente o catálogo de campos. Basta mencionar o nome da tabela como parâmetro (I_structure_name) no REUSE_ALV_LIST_DISPLAY. Mas em outros casos precisamos criá-lo.
Nota: O Fieldcatalog também pode ser preenchido manualmente preenchendo todos os detalhes necessários na tabela interna
Parâmetros importantes são:
1. Exportar:
- I_program_name: ID do relatório
- I_internal_tabname: a tabela de saída interna
- I_inclname : include ou o nome do relatório onde todos os formulários dinâmicos são tratados.
2. Mudança
- ct_fieldcat: um mesa interna com o tipo SLIS_T_FIELDCAT_ALV que é declarado no pool de tipos SLIS.
REUSE_ALV_LIST_DISPLAY
Este é o módulo de função que imprime os dados.
Os parâmetros importantes são:
1. Exportar:
- I_callback_program: ID do relatório
- I_bypassing_buffer: 'X'
- I_buffer_active: ' '
- I_callback_pf_status_set : rotina onde um usuário pode definir seu próprio status de PF ou alterar a funcionalidade do status de PF existente.
- I_callback_user_command : rotina onde são tratados os códigos de função.
- I_estrutura nome: nome da tabela do dicionário
- Is_Layout : estrutura para definir o layout do relatório
- It_fieldcat : tabela interna com a lista de todos os campos e seus atributos que serão impressos (esta tabela pode ser preenchida automaticamente pela função)
- It_events : tabela interna com uma lista de todos os eventos possíveis do ALV e seus nomes de formulário correspondentes.
2. Tabelas:
- a. t_outtab: tabela interna com os dados a serem gerados
REUSE_ALV_EVENTS_GET
Retorna tabela de eventos possíveis para um tipo de lista
1. Importação:
Et_Events :A tabela de eventos é retornada com todos os eventos CALLBACK possíveis para o tipo de lista especificado (coluna 'NOME'). Para que os eventos sejam processados pelo Callback, o seu campo ‘FORM’ deverá ser preenchido. Se o campo for inicializado, o evento será ignorado. A entrada pode ser lida a partir da tabela de eventos, o campo 'FORM' preenchido e a entrada modificada utilizando constantes do tipo pool SLIS.
2. Exportar:
I_list_type: 0 = lista simples REUSE_ALV_LIST_DISPLAY
1 = lista hierárquica-sequencial REUSE_ALV_HIERSEQ_LIST_DISPLAY
2 = lista de bloqueio simples REUSE_ALV_BLOCK_LIST_APPEND
3 = lista de blocos hierárquico-sequencial REUSE_ALV_BLOCK_LIST_HS_APPEND
REUSE_ALV_GRID_DISPLAY
Uma nova função da versão ABAP4.6, para exibir os resultados em grade ao invés de uma visualização.
Parâmetros: iguais a reuse_alv_list_display
Observação: O grid não consegue lidar com grandes volumes de dados. Funções como ordenação e rolagem consomem muitos recursos/tempo se o volume de dados a ser exibido for alto. Não existe uma definição clara de que, se a quantidade de dados for X, seja melhor usar uma lista ou um grid; o desenvolvedor deve tomar uma decisão com base em sua experiência. Em caso de dúvida, a lista é a melhor opção.
REUSE_ALV_COMMENTARY_WRITE
Isso é usado no evento Topo da página para imprimir os títulos e outros comentários da lista.
Parâmetros Importantes
- It_list_commentary: Tabela interna com os títulos do tipo slis_t_listheader.
Esta tabela interna possui três campos:
- Tipo: 'H' – cabeçalho, 'S' – seleção, 'A' – ação
- Chave: somente quando typ é 'S'.
- Info: o texto a ser impresso
Exemplo: Um relatório de grade ALV simples
O programa abaixo transforma os módulos de função acima em um relatório funcional. Ele lê a tabela de horários de voo SPFLI, constrói o catálogo de campos automaticamente e exibe o resultado em uma grade.
REPORT z_alv_demo. TYPE-POOLS: slis. DATA: lt_spfli TYPE STANDARD TABLE OF spfli, lt_fieldcat TYPE slis_t_fieldcat_alv, ls_layout TYPE slis_layout_alv. START-OF-SELECTION. * 1. Read the data into the output table SELECT * FROM spfli INTO TABLE lt_spfli. * 2. Build the field catalog from the dictionary structure CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING i_program_name = sy-repid i_internal_tabname = 'LT_SPFLI' i_structure_name = 'SPFLI' CHANGING ct_fieldcat = lt_fieldcat. * 3. Set the layout and display the grid ls_layout-zebra = 'X'. ls_layout-colwidth_optimize = 'X'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid is_layout = ls_layout it_fieldcat = lt_fieldcat i_save = 'A' TABLES t_outtab = lt_spfli.
Três parâmetros realizam a maior parte do trabalho. I_STRUCTURE_NAME permite que o catálogo de campos seja derivado do dicionário, de modo que nenhuma coluna seja descrita manualmente. IS_LAYOUT ativa linhas listradas e larguras de coluna otimizadas. I_SAVE = 'A' permite que variantes de exibição específicas do usuário e padrão sejam salvas da lista finalizada.
Relatório de bloqueio
Parece um relatório simples, mas possui apenas recursos de classificação e filtragem. Este relatório é usado se você precisar exibir mais de um relatório na saída. Tecnicamente falando, se você tiver várias tabelas internas com dados a serem exibidos como blocos separados, optaremos pelo relatório de bloco do ALV.
As funções importantes usadas para criar este relatório são:
- REUSE_ALV_BLOCK_LIST_INIT
- REUSE_ALV_BLOCK_LIST_APPEND
- REUSE_ALV_BLOCK_LIST_DISPLAY
REUSE_ALV_BLOCK_LIST_INIT
Este módulo de função é usado para definir o status padrão da GUI, etc. Os parâmetros são semelhantes aos usados em reuse_alv_list_display ou reuse_alv_grid_display
REUSE_ALV_BLOCK_LIST_APPEND
Este módulo de função adiciona os dados ao bloco.
Parâmetros Importantes
1.Exportar:
- is_layout: configurações de layout para bloco
- it_fieldcat: catálogo de campos
- I_tabname: nome da tabela interna com todos os eventos possíveis
2. Tabelas:
- t_outtab: tabela interna com dados de saída.
REUSE_ALV_BLOCK_LIST_DISPLAY
Este módulo de função exibe a lista com os dados anexados pela função acima.
Parâmetros: Todos os parâmetros são opcionais.
Relatórios Hierárquicos
A exibição hierárquica é usada para exibir dados relacionados. Como pedidos de vendas e detalhes do item. Aqui, os detalhes do pedido de venda podem ser os dados do cabeçalho, enquanto os itens do pedido de venda podem ser os dados do item
O módulo de função usado para isso é
REUSE_ALV_HIERSEQ_LIST_DISPLAY
Exportar:
- I_CALLBACK_PROGRAM
- I_CALLBACK_PF_STATUS_SET
- I_CALLBACK_USER_COMMAND
- IS_LAYOUT
- It_fieldcat
- It_eventos
- I_tabname_header: Nome da tabela interna do programa que contém os dados de saída do nível hierárquico mais alto.
- I_tabname_item: Nome da tabela interna do programa que contém os dados de saída do nível hierárquico mais baixo.
- Is_keyinfo: Esta estrutura contém os nomes dos campos do cabeçalho e da tabela de itens que vinculam as duas tabelas (chave compartilhada).
Tabelas
- t_outtab_header: Tabela de cabeçalho com dados a serem gerados
- t_outtab_item: Nome da tabela interna do programa que contém os dados de saída do nível hierárquico mais baixo.
Todas as definições de tabelas internas, estruturas e constantes são declaradas em um type-pool chamado SLIS. Esta tabela interna pode ser preenchida automaticamente usando REUSE_ALV_FIELDCATALOG_MERGE'.
Variantes de exibição
- As variantes de exibição são usadas para definir as propriedades padrão de uma saída alv, como critérios de classificação, critérios de filtragem, totalização e subtotalização, etc.
- As variantes de exibição podem ser específicas do usuário e padrão (as variantes padrão podem ser usadas por qualquer usuário)
- O tipo de variantes de exibição que podem ser salvas é controlado pelo parâmetro `i_save`, que é passado nos módulos de função `reuse_alv_list_display` / `reuse_alv_grid_display`.
- Você pode fornecer uma opção na tela de seleção para selecionar qual variante de exibição será usada
Os módulos de função comuns relacionados à seleção/validação de variantes de exibição são
- Reuse_alv_variant_default_get
- Reuse_alv_variant_f4
- Reuse_alv_variant_existence
💡 Dica: Passe I_SAVE = 'U' para permitir apenas variantes específicas do usuário, 'X' para apenas variantes padrão e 'A' para ambas. Um valor vazio impede completamente o salvamento.
Isso é tudo para ABAP – Programação ALV!
