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.

  • 📋 Objetivo principal: O ABAP List Viewer fornece os recursos padrão de lista por meio de módulos de função prontos para uso, eliminando a necessidade de reprogramá-los.
  • 🗂️ Catálogo de Campos: REUSE_ALV_FIELDCATALOG_MERGE cria o catálogo que descreve cada coluna de saída e também pode ser preenchido manualmente.
  • 🖥️ Lista e Grade: REUSE_ALV_LIST_DISPLAY exibe uma lista clássica, e REUSE_ALV_GRID_DISPLAY exibe os mesmos dados em um controle de grade.
  • 🧱 Relatório de Bloco: INIT, APPEND e DISPLAY combinam várias tabelas internas em uma única saída composta por blocos separados.
  • ???? Relatório Hierárquico: REUSE_ALV_HIERSEQ_LIST_DISPLAY vincula uma tabela de cabeçalho e uma tabela de itens por meio da chave compartilhada em IS_KEYINFO.
  • 🧰 Tipo de Pool SLIS: Todas as estruturas, tipos de tabela e constantes usadas pelo ALV clássico são declaradas no conjunto de tipos SLIS.
  • 💾 Variantes de exibição: Uma variante armazena as configurações padrão de classificação, filtragem e totalização, e o parâmetro I_SAVE decide se ela é específica do usuário ou padrão.

Relatórios ALV em SAP ABAP

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:

  1. Tipo: 'H' – cabeçalho, 'S' – seleção, 'A' – ação
  2. Chave: somente quando typ é 'S'.
  3. 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

  1. Reuse_alv_variant_default_get
  2. Reuse_alv_variant_f4
  3. 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!

Perguntas Frequentes

Os módulos REUSE pertencem ao ALV clássico, baseado em funções. O CL_GUI_ALV_GRID é o controle orientado a objetos incorporado em um contêiner personalizado em um dynpro, e oferece células editáveis ​​e tratamento de eventos por meio de métodos.

Defina DO_SUM no catálogo de campos para a coluna que deve ser somada e passe uma tabela de classificação com SUBTOT ativado para a coluna que agrupa as linhas. Nenhum código de cálculo adicional é necessário.

Passe o nome de um formulário para I_CALLBACK_USER_COMMAND. O formulário recebe o código da função e a linha selecionada, para que o programa possa ler o registro e abrir uma lista de detalhes ou uma transação.

Sim. Os assistentes de IA nas ferramentas de desenvolvimento ABAP geram a instrução SELECT, o catálogo de campos e a chamada da função REUSE_ALV_GRID_DISPLAY a partir de uma descrição das colunas necessárias. A instrução SELECT gerada ainda precisa de uma verificação de desempenho.

Não. O ALV continua sendo a saída padrão de SAP Relatórios com interface gráfica do usuário (GUI). Assistentes de IA agregam valor a esses relatórios, resumindo listas extensas, identificando valores discrepantes e respondendo a perguntas sobre os dados exibidos em linguagem simples.

Resuma esta postagem com: