Início > ALV > Modelo para criação de ALV com Hotspot

Modelo para criação de ALV com Hotspot

Segue abaixo um modelo que poderá ser utilizado para criar um ALV seja ele com Hotspot ou não.

************************************************************************
* Pool de Tipos Padrão Usados no ALV *
************************************************************************
TYPE-POOLS: slis, kkblo." Tipos para uso em ALV

*ALV & HEADER
DATA: repid LIKE sy-repid.
DATA: fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA: layout TYPE slis_layout_alv.
DATA: print TYPE slis_print_alv.
DATA: hide TYPE slis_sel_hide_alv.
DATA: sort TYPE slis_t_sortinfo_alv WITH HEADER LINE.
DATA: variante LIKE disvariant, def_variante LIKE disvariant.
DATA title TYPE lvc_title.
DATA: header TYPE kkblo_listheader.
DATA: it_header TYPE kkblo_t_listheader.

************************************************************************
 *                           Tabelas internas                           *
 ************************************************************************
 *Tabela usada para definições dos atributos das colunas do ALV.
   DATA:  ti_fieldcat    TYPE slis_t_fieldcat_alv WITH HEADER LINE.

 *Tabela usada para definições dos atributos do Layout do ALV.
   DATA:  ti_layout_alv  TYPE slis_layout_alv.

 * Define o efeito ZEBRA na exibição do relatório.
   ti_layout_alv-zebra = 'X'.

 * Define o flag para marcar toda uma linha do ALV. Deve ser criado
 * também campo flag na tabela de saída.
   ti_layout_alv-box_fieldname = 'FLAG'.

 *Tabela de Saída do ALV.
   DATA: BEGIN OF ti_saida OCCURS 0,
          flag  TYPE c,
          name1 LIKE kna1-name1,  "Nome
          stras LIKE kna1-stras,  "Rua e Nº
          pstlz LIKE kna1-pstlz,  "Cep
          ort01 LIKE kna1-ort01,  "Cidade
          telf1 LIKE kna1-telf1,  "Telefone
         END OF ti_saida.



 ************************************************************************
 *                              Include                                 *
 ************************************************************************
   INCLUDE <icon>.

 ************************************************************************
 *                              Macros                                  *
 ************************************************************************
   DEFINE coluna_alv.
 * Monta tabela de campos a serem exibidos no ALV
     clear ti_fieldcat.
     ti_fieldcat-fieldname     = &1.   " Ref. Campo Tabela Interna
     ti_fieldcat-tabname       = &2.   " Ref. Tabela Interna
     ti_fieldcat-ref_tabname   = &3.   " Ref. Campo Tabela Standard
     ti_fieldcat-ref_fieldname = &4.   " Ref. Tabela Standard
     ti_fieldcat-reptext_ddic  = &5.   " Título da Coluna
     ti_fieldcat-outputlen     = &6.   " Largura da Coluna
     ti_fieldcat-hotspot       = &7.   " Coluna com HOTSPOT
     ti_fieldcat-do_sum        = &8.   " Colunas com somatório
     append ti_fieldcat.
   END-OF-DEFINITION.

 ************************************************************************
 *                          Tela de Parâmetros                          *
 ************************************************************************
   SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-004.
   PARAMETER:      p_land1   LIKE kna1-land1 DEFAULT 'BR',    "País
                   p_bukrs   LIKE bkpf-bukrs DEFAULT '1000',  "Empresa
                   p_gjahr   LIKE bkpf-gjahr DEFAULT '2005'.  "Ano

   SELECTION-SCREEN: END OF BLOCK b1.

 ************************************************************************
 *                          At Selection Screen                         *
 ************************************************************************
 *at selection-screen.


 ************************************************************************
 *                             Start-of-selection                       *
 ************************************************************************
 START-OF-SELECTION.

 *Montando o Header do ALV
   PERFORM ysmonta_header_alv.

 *Selecionando os dados
   PERFORM ys_selecao_dados.


 *DEFINIÇÃO DAS COLUNAS:
 ************************************************************************
 * ASSIM:
 * define dados das Colunas através da MACRO
 *  PERFORM ys_define_colunas_macro.

 * OU ASSIM:
 * Define dados das colunas do ALV
   PERFORM ys_define_colunas_alv.
 ************************************************************************
 * Exibe relatório em formato ALV
   PERFORM ys_exibe_alv.


 *----------------------------------------------------------------------*
 * Rotina executada para gerar a área de cabeçalho do ALV               *
 * Este form é chamado de dentro da função REUSE_ALV_GRID_DISPLAY       *
 *----------------------------------------------------------------------*
 FORM top_of_page_alv.
 *LOGOTIPO (TRANSAÇÃO OAOR, Classe: Picture, Categoria de Classe: OT)
 *Para importar uma figura, transação 0FPM002.
 *Nome da Classe: PICTURES,
 *Categoria de Classe: OT,
 *Chave do objeto: NOME DO LOGO
 *Descrição: QUALQUER DESCRIÇÃO
 *Tipo de documento: POC_GIF
 *Expandir a pasta "TIPO DE DOCUMENTOS STANDARD"
 *Clique duplo no nome "Tela".

   CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
     EXPORTING
       it_list_commentary = it_header
       i_logo             = 'LOGO_PETROBRAS'.
 ENDFORM.                    "top_of_page_alv
 *----------------------------------------------------------------------*
 *      Form  YSMONTA_HEADER_ALV                                        *
 *----------------------------------------------------------------------*
 *      Monta o header do ALV                                           *
 *----------------------------------------------------------------------*
 FORM ysmonta_header_alv.
   CLEAR header.
   header-typ  = 'H'.
   header-info = 'Relação de Fornecedores'.
   APPEND header TO it_header.

   CLEAR header.
   header-typ  = 'S'.
   header-key  = 'Empresa:'.
   header-info = p_bukrs.
   APPEND header TO it_header.

   CLEAR header.
   header-typ  = 'S'.
   header-key  = 'Exercício:'.
   header-info = p_gjahr.
   APPEND header TO it_header.

   CLEAR header.
   header-typ  = 'S'.
   header-key  = 'Usuário:'.
   header-info = sy-uname.
   APPEND header TO it_header.

 ENDFORM.                    " YSMONTA_HEADER_ALV

 *----------------------------------------------------------------------*
 *      Form  YS_SELECAO_DADOS                                          *
 *----------------------------------------------------------------------*
 *      Selecão dos dados do ALV                                        *
 *----------------------------------------------------------------------*
 FORM ys_selecao_dados.
   SELECT
        name1   "Nome
        stras   "Região
        pstlz   "Cep
        ort01   "Cidade
        telf1   "Telefone
    FROM kna1
    INTO TABLE ti_saida
    WHERE land1 = p_land1.
 ENDFORM.                    " YS_SELECAO_DADOS

 *----------------------------------------------------------------------*
 *      Form  ys_define_colunas_macro                                   *
 *----------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 * Define as colunas através da MACRO definida no início do Programa.
 *----------------------------------------------------------------------*
 FORM ys_define_colunas_macro.

 * Define atributos das colunas do ALV.

 *  ti_fieldcat-fieldname     = &1.   " Campo Tabela Interna
 *  ti_fieldcat-tabname       = &2.   " Tabela Interna
 *  ti_fieldcat-ref_tabname   = &3.   " Campo da Tabela Standard
 *  ti_fieldcat-ref_fieldname = &4.   " Tabela Standard
 *  ti_fieldcat-reptext_ddic  = &5.   " Título da Coluna
 *  ti_fieldcat-outputlen     = &6.   " Largura da Coluna
 *  ti_fieldcat-hotspot       = &7.   " Coluna com HOTSPOT
 *  ti_fieldcat-do_sum        = &8.   " Colunas com somatório

 *                &1        &2       &3      &4      &5     &6  &7  &8
   coluna_alv  'NAME1'  'TI_SAIDA' 'NAME1' 'KNA1' text-001 '44' 'X' ''.
   coluna_alv  'STRAS'  'TI_SAIDA' 'STRAS' 'KNA1' text-002 '35' ''  ''.
   coluna_alv  'PSTLZ'  'TI_SAIDA' 'PSTLZ' 'KNA1' text-003 '10' ''  ''.
   coluna_alv  'ORT01'  'TI_SAIDA' 'ORT01' 'KNA1' text-004 '35' ''  ''.
   coluna_alv  'TELF1'  'TI_SAIDA' 'TELF1' 'KNA1' text-005 '16' ''  ''.
 ENDFORM.                    " ys_define_colunas_macro


 *----------------------------------------------------------------------*
 *      Form  ys_define_colunas_alv                                     *
 *----------------------------------------------------------------------*
 *  REPETE OS BLOCO TANTAS VEZES QUATAS FOREM OS Nº DE COLUNAS DO ALV   *
 *----------------------------------------------------------------------*
 FORM ys_define_colunas_alv.

 * 1ª COLUNA:
   CLEAR ti_fieldcat.
   ti_fieldcat-fieldname     = 'NAME1'.        " Campo Tabela Interna
   ti_fieldcat-tabname       = 'TI_SAIDA'.     " Tabela Interna
   ti_fieldcat-ref_tabname   = 'NAME1'.        " Campo Tabela Standard
   ti_fieldcat-ref_fieldname = 'KNA1'.         " Tabela Standard
   ti_fieldcat-reptext_ddic  =  text-001.      " Tít. da Coluna
   ti_fieldcat-outputlen     = '35'.           " Largrura da Coluna
   ti_fieldcat-hotspot       = 'X'.            " Define Hotspot
   ti_fieldcat-do_sum        = ''.             " Colunas com somatório
   APPEND ti_fieldcat.

 * 2ª COLUNA:
   CLEAR ti_fieldcat.
   ti_fieldcat-fieldname     = 'STRAS'.        " Campo Tabela Interna
   ti_fieldcat-tabname       = 'TI_SAIDA'.     " Tabela Interna
   ti_fieldcat-ref_tabname   = 'NAME1'.        " Campo Tabela Standard
   ti_fieldcat-ref_fieldname = 'STRAS'.        " Tabela Standard
   ti_fieldcat-reptext_ddic  = text-002.       " Tít. da Coluna
   ti_fieldcat-outputlen     = '35'.           " Largrura da Coluna
   ti_fieldcat-hotspot       = 'X'.            " Define Hotspot
   ti_fieldcat-do_sum        = ''.             " Colunas com somatório
   APPEND ti_fieldcat.

 * 3ª COLUNA:
   CLEAR ti_fieldcat.
   ti_fieldcat-fieldname     = 'PSTLZ'.        " Campo Tabela Interna
   ti_fieldcat-tabname       = 'TI_SAIDA'.     " Tabela Interna
   ti_fieldcat-ref_tabname   = 'PSTLZ'.        " Campo Tabela Standard
   ti_fieldcat-ref_fieldname = 'KNA1'.         " Tabela Standard
   ti_fieldcat-reptext_ddic  = text-003.       " Tít. da Coluna
   ti_fieldcat-outputlen     = '10'.            " Largrura da Coluna
   ti_fieldcat-hotspot       = ''.             " Define Hotspot
   ti_fieldcat-do_sum        = ''.             " Colunas com somatório
   APPEND ti_fieldcat.

 * 4ª COLUNA:
   CLEAR ti_fieldcat.
   ti_fieldcat-fieldname     = 'ORT01'.        " Campo Tabela Interna
   ti_fieldcat-tabname       = 'TI_SAIDA'.     " Tabela Interna
   ti_fieldcat-ref_tabname   = 'ORT01'.        " Campo Tabela Standard
   ti_fieldcat-ref_fieldname = 'KNA1'.         " Tabela Standard
   ti_fieldcat-reptext_ddic  = text-004.       " Tít. da Coluna
   ti_fieldcat-outputlen     = '35'.           " Largrura da Coluna
   ti_fieldcat-hotspot       = ''.             " Define Hotspot
   ti_fieldcat-do_sum        = ''.             " Colunas com somatório
   APPEND ti_fieldcat.

 * 5ª COLUNA:
   CLEAR ti_fieldcat.
   ti_fieldcat-fieldname     = 'TELF1'.        " Campo Tabela Interna
   ti_fieldcat-tabname       = 'TI_SAIDA'.     " Tabela Interna
   ti_fieldcat-ref_tabname   = 'TELF1'.        " Campo Tabela Standard
   ti_fieldcat-ref_fieldname = 'KNA1'.         " Tabela Standard
   ti_fieldcat-reptext_ddic  = text-005.       " Tít. da Coluna
   ti_fieldcat-outputlen     = '16'.           " Largrura da Coluna
   ti_fieldcat-hotspot       = ''.             " Define Hotspot
   ti_fieldcat-do_sum        = ''.             " Colunas com somatório
   APPEND ti_fieldcat.
 ENDFORM.                    " ys_define_colunas_alv

 *----------------------------------------------------------------------*
 *      Form  ys_exibe_alv                                              *
 *----------------------------------------------------------------------*
 *      EXIBIÇÃO DO ALV                                                 *
 *----------------------------------------------------------------------*
 FORM ys_exibe_alv.
 * Evitar efeito colateral na chamada do ALV
   DATA: lc_repid TYPE sy-repid.
 * Define nome do programa chamados do ALV
   lc_repid = sy-repid.

   ti_layout_alv-get_selinfos         = 'X'.

 * Exibe relatório em formato ALV (Gride)
   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
             i_callback_program       = lc_repid  "Nome programa
 *            i_callback_pf_status_set = 'PF_STATUS_SET'
             is_layout                = ti_layout_alv  "Tab. de Layout
             i_callback_top_of_page   = 'TOP_OF_PAGE_ALV'  "Cabeçalho
             i_callback_user_command  = 'USER_COMMAND'
             it_fieldcat              = ti_fieldcat[]  "Tab.de Colunas
             i_default                = 'X'
             i_save                   = 'A'
             i_background_id          = ''
        TABLES
             t_outtab                 = ti_saida  " Tabela interna
        EXCEPTIONS
             program_error            = 1
             OTHERS                   = 2.
   IF sy-subrc <> 0.
 * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
 *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
   ENDIF.
 ENDFORM.                    " ys_exibe_alv

 *----------------------------------------------------------------------*
 *       Form  PF_STATUS_SET
 *       Evento PF_STATUS_SET USADO NA FUNÇÃO ACIMA
 *----------------------------------------------------------------------*
 *Para copiar o PF_STATUS_SET standard, vou num pgm que o usa,
 *clico no ícone"Exibir Lista de Objetos"(Ctrl+Shift+F5),
 *Botão direito no Statusgui e copio para o meu programa.
 *EXCLUDING pf_tab abixo, exclui alguns ícones.
 *----------------------------------------------------------------------*
 FORM pf_status_set USING pf_tab TYPE slis_t_extab.

   SET PF-STATUS 'STANDARD_FULLSCREEN' ."EXCLUDING pf_tab.

 ENDFORM.                    " PF_STATUS_SET

 *----------------------------------------------------------------------*
 *       FORM AT_USER_COMMAND                                           *
 *----------------------------------------------------------------------*
 *      Trata o que irá ser feito quando o usuário clicar nas colunas   *
 *----------------------------------------------------------------------*
 FORM user_command USING ucomm LIKE sy-ucomm
                            selfield TYPE kkblo_selfield.
   selfield = selfield.   "Selfield contem a coluna selecionada
   CASE ucomm.
     WHEN '&IC1'.
 * Lê na tabela de saída
       READ TABLE ti_saida INDEX selfield-tabindex.

       IF sy-subrc EQ 0.
 * Se foi clicado na coluna NAME1.
         IF selfield-fieldname = 'NAME1'.
 * Passa o valor clicado na coluna como parâmetro para a transação que
 *se quer chamar.
 * Passa o id do campo Contrato na transação SE38.
 *         Set parameter id 'XXX' field ti_saida-NAME1.
 * Chamo a transação
           CALL TRANSACTION 'SE38'." AND SKIP FIRST SCREEN.
         ENDIF.
       ENDIF.
     WHEN OTHERS.
   ENDCASE.
 ENDFORM.                    "user_command
CategoriasALV Tags:,
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 45 outros seguidores

%d blogueiros gostam disto: