Volume
GUIA DE PROGRAMAÇÃO
Desenvolvimento de aplicações ABAP ABAP
Guia Básico de Programação ALV ( ABAP List Viwer )
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
DESENVOLVIMENTO DE APLICAÇÕES ABAP
Guia Básico de Programação ALV
Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected] ã
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
1
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
DESENVOLVIMENTO DE APLICAÇÕES ABAP
Guia Básico de Programação ALV
Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected] ã
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
1
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Índice Capítulo 1
Introdução ............................................................................. 3
Capítulo 2
Meu Primeiro ALV .............................................................. 4
Capítulo 3
Montando a estrutura da lista ............................................. 8
Capítulo 4
Ordenando a lista...................................................................12
Capítulo 5
Criando grupos de campos .................................................15
Capítulo 6
Chamando uma variante de exibição .................................21
Capítulo 7
Parâmetros de Impressão ....................................................25
Capítulo 8
Variações de Layout ..............................................................27
Capítulo 9
Criando Evntos .....................................................................31
Capítulo 10
Barra de Status Personalizada .............................................37
Capítulo 11
Trabalhando com checkbox ...............................................41
Capítulo 12
Mudando cores dos campos ...............................................43
Capítulo 13
Inserindo Ícone .....................................................................48 Considerações Gerais ( Copyright e Trademarks )...........51 Apêndice A ( Listagem de Programas Exemplos )...........52
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
2
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo
Introdução Apresentação da ferramenta ABAP LIST VIEWER conhecida simplesmente por ALV. ferramenta ALV ( ABAP LIST VIEWER ) permite criar listas de uma maneira fácil e prática. Consiste basicamente em utilizar funções genéricas pertencentes basicamente a classe de desenvolvimento SLIS. Para nossos estudos será utilizado basicamente o grupo de funções, o SALV, para o formato de lista simples. Este mesmo grupo também contempla as listas dos tipos hierárquica e popup, e o grupo SLVC_FULLSCREEN para a lista no formato de GRID CONTROL. Existe a opção de utilizar objetos para a construção das listas mas não serão abordadas neste manual, para isto consulte a ajuda do sistema no seguinte tópico: SAP Library " Basis Components " Basis Service / Communications Interfaces (BC-SRV) "BC - ALV Grid Control. Nos próximos capítulos vamos apresentar a ferramenta de maneira prática com exemplos para evitar a leitura pesada regularmente utilizada em manuais, mas para isto será exigido do leitor prévio conhecimento da linguagem de programação ABAP. As listas dos tipos hierárquica, popup e grid não serão tratadas neste volume, ficando seu estudo para o v olume 2 desta obra.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
3
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo
Meu primeiro ALV Criar uma lista utilizando os recursos do ALV.
N
este capítulo vamos criar uma lista bastante simples, porém muito útil e versátil para apresentação de informações.
O layout da lista será baseado em uma estrutura definida no dicionário de dados do ABAP. No próximo capítulo mostraremos que é possível determinar os campos da lista sem utilizar uma estrutura do dicionário, utilizando outros recursos do ALV. No R/3, através da transação SE38, ou SE80 àqueles que preferem uma visualização dos processos separadamente, vamos criar nosso primeiro programa através da primeira transação mencionada. Iremos chamá-lo de ZFRA0023_2 e implementaremos novas funcionalidades de acordo com o assunto tratado em cada capítulo. 1 – Declarar a tabela interna que irá conter os dados a serem listados, que terá a mesma estrutura da tabela VBAK ( Cabeçalho da ordem de venda ), e algumas outras variáveis que iremos precisar futuramente: *$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida. INCLUDE STRUCTURE vbak. TYPES: END OF we_saida. *$*$ Tabelas Internas -------------------------------------------------DATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE. *$*$ Variáveis --------------------------------------------------------* Nome do programa DATA: wv_repid LIKE sy-repid.
2 – Criar uma tela de parâmetros simples apenas para melhorar a performance da busca de informações: *$*$ Tela de Seleção --------------------------------------------------SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-902. SELECT-OPTIONS: s_vbeln FOR wt_saida-vbeln. SELECTION-SCREEN END OF BLOCK b1.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
4
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
3 – Criar o evento INITIALIZATION para inicializar algumas variáveis: *$*$ Inicialização ----------------------------------------------------INITIALIZATION. wv_repid = sy-repid.
4 – Criar uma sub-rotina para obter as informações da base de dados, aqui a chamaremos de Z_OBTER_DADOS. Criaremos também uma outra sub-rotina chamada Z_SAPGUI_PROGRESS_INDICATOR para interagir com a interface do R/3 informando ao usuário os processos que o programa está executando: *&---------------------------------------------------------------------* *& Form Z_BUSCAR_DADOS *&---------------------------------------------------------------------* * Obter informações para lista *----------------------------------------------------------------------* FORM z_buscar_dados. PERFORM z_sapgui_progress_indicator USING 'Selecionando dados. Aguarde...'. SELECT * INTO TABLE wt_saida FROM vbak WHERE vbeln IN s_vbeln. ENDFORM.
" Z_BUSCAR_DADOS
*&---------------------------------------------------------------------* *& Form Z_SAPGUI_PROGRESS_INDICATOR *&---------------------------------------------------------------------* * Interagir com o front-end - Enviar mensagens *----------------------------------------------------------------------* * --> PV_TEXT - Mensagem *----------------------------------------------------------------------* FORM z_sapgui_progress_indicator using value(pv_text). CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING * PERCENTAGE = 0 TEXT = pv_text. ENDFORM.
" Z_SAPGUI_PROGRESS_INDICATOR
5 – Até aqui os processos são basicamente o que qualquer outro programa de lista precisaria, agora vamos utilizar efetivamente recursos do ALV. Para isto vamos criar uma sub-rotina para impressão da lista que se chamará Z_LIST_DISPLAY: *&---------------------------------------------------------------------* *& Form Z_LIST_DISPLAY *&---------------------------------------------------------------------* * Lista informações na tela *----------------------------------------------------------------------* FORM z_list_display. PERFORM z_sapgui_progress_indicator USING 'Estruturando a lista. Aguarde...'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
5
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
i_callback_program = wv_repid i_structure_name = 'VBAK' i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 others = 2. * Verificar processamento da função IF sy-subrc NE 0. MESSAGE ID sy-msgid type sy-msgty number sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
Veja que passamos como parâmteros: i_callback_program = wv_repid = Nome do programa para o qual a função deve retornar o controle após a execução; i_structure_name = ‘VBAK’ referenciada no dicionário;
=
Nome da ma para o qual a função deve ser
i_save = ‘A’ = Permitir salvar variante de exibição; t_outtab = wt_saida = Tabela com os dados a serem impressos; 6 – Resultado
FIGURA 2.1 Lista ALV simples utilizando a estrutura da tabela VBAK Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
6
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Agora com a lista pronta é possível mudar o layout do mesmo ocultando colunas, sumarizando colunas de valor, ordenando outras, etc... e gravar os layouts para visualizações futuras. Para isto utilize a barra de status que contem os botões para acionar estas funcionalidades.
FIGURA 2.2 Barra de status com funcionalidades para lista.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
7
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo
Montando a estrutura da lista Montar a estrutura de campos da lista sem utilizar estrutura do dicionário de dados do R/3.
N
o capítulo anterior aprendemos a criar uma lista referenciando uma estrutura do banco de dados. Agora vamos gerar uma lista onde os campos da lista serão determinados no próprio programa.
Vamos copiar o programa ZFRA0023_2 e chamá-lo de ZFRA0023_3 faremos algumas mudanças a seguir descritas. 1 – Declarar o tipo de pool SLIS que contém as definições necessárias para interagir com as funções ALV: *$*$ Type pools -------------------------------------------------------TYPE-POOLS: slis.
2 – Redefinir o tipo WE_SAIDA, como descrito abaixo; TYPES: BEGIN OF we_saida, vbeln LIKE vbak-vbeln, erdat LIKE vbak-erdat, ernam LIKE vbak-ernam, audat LIKE vbak-audat, auart LIKE vbak-auart, netwr LIKE vbak-netwr, vkorg LIKE vbak-vkorg, vtweg LIKE vbak-vtweg, spart LIKE vbak-spart, vkgrp LIKE vbak-vkgrp, vkbur LIKE vbak-vkbur, END OF we_saida.
" " " " " " " " " " "
Nro da ordem de venda Data de criação Criado por Data da ordem Tipo de ordem Valor líq. da ordem Org. de vendas Canal de distribuição Setor de atividade Grupo de vendedores Escritório de vendas
3 – Declarar a tabela que conterá as configurações dos campos da lista; DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.
4 – Modificar a busca das informações na rotina Z_OBTER_DADOS; Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
8
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp vkbur INTO TABLE wt_saida FROM vbak WHERE vbeln IN s_vbeln.
5 – Agora vamos criar a sub-rotina de configuração de campos da estrutura de lista a qual chamaremos de Z_FIELDCAT_INIT; *---------------------------------------------------------------------* * FORM Z_FIELDCAT_INIT * *---------------------------------------------------------------------* * Inicializar estrutura das informações da lista * *---------------------------------------------------------------------* * --> PT_FIELDCAT - Tab. com estrutura de linha * *---------------------------------------------------------------------* FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv. * Estruturas DATA: lf_fieldcat TYPE slis_fieldcat_alv. * Limpar tabela CLEAR pt_fieldcat[]. * Cód. doc. venda CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VBELN'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Data de Criação CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERDAT'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Criado por CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERNAM'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Tipo de Ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'AUART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Valor líq. da ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'NETWR'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Organização de vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKORG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Canal de distribuição CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VTWEG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Setor de atividade CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'SPART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Grupo de Vendedores CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKGRP'. lf_fieldcat-ref_tabname = 'VBAK'. Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
9
" Nome do Campo " Tab. de Referência " Gravar na tab. config.
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
APPEND lf_fieldcat TO pt_fieldcat. * Escritório de Vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKBUR'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. ENDFORM.
" FORM Z_FIELDCAT_INIT
Veja que este tipo de construção de exige mais esforços que quando referenciamos uma estrutura do dicionário, devido a isto muitos desenvolvedores preferem criar suas próprias estruturas no dicionário e referenciar as mesmas. Estamos utilizando os atributos básicos da estrutura SLIS_T_FIELDCAT_ALV, referenciada aqui pela tabela wt_fieldcat. Fica a cargo do leitor estudar os outros atributos desta estrutura, pois os mesmo tratam formatação, layout, etc... tais como indicar que o campo tem a característica “hotspot”, definir tamanho, mudar desto de cabeçalho, etc... 6 – Inserir chamada a subrotina Z_FIELDCAT_INIT; *$*$ Programa Principal -----------------------------------------------START-OF-SELECTION. PERFORM z_buscar_dados. * Indicar campos para exibição na lista PERFORM z_fieldcat_init USING wt_fieldcat[]. END-OF-SELECTION. * Construção da lista propriamente dita ( Exibição das informações ) PERFORM z_list_display.
7 – Modificar o processo de listar informações, Z_LIST_DISPLAY; *&---------------------------------------------------------------------* *& Form Z_LIST_DISPLAY *&---------------------------------------------------------------------* * Lista informações na tela *----------------------------------------------------------------------* FORM z_list_display. PERFORM z_sapgui_progress_indicator USING 'Estruturando a lista. Aguarde...'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = wv_repid * i_structure_name = 'VBAK' it_fieldcat = wt_fieldcat i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verificar processamento da função IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
10
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ENDFORM.
ALV
" Z_LIST_DISPLAY
Veja que comentamos a linha de parâmetro “ i_structure_name ” e inserimos o parâmetro it_fieldcat que recebe a tabela wt_fieldcat. it_fieldcat = wt_fieldcat = Nome da tabela interna com as configurações dos campos da lista; 8 – Vejamos a lista resultante do programa;
FIGURA 3.1 Lista com campos determinados na tabela wt_fieldcat.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
11
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo
Ordenando a lista Utilizando recursos para ordenação da lista antes da apresentação.
N
o capítulo anterior aprendemos uma outra forma de criar uma lista simples, agora vamos a cada capítulo implementar novos recursos disponíveis no ALV. Um deles é a ordenação. Apesar da possibilidade de ordenar a tabela interna antes da apresentação da lista, ou mesmo a lista depois da execução do programa através das variantes de exibição, as vezes é necessário que a lista já apresente uma ordenação padrão logo que a mesma apareça na tela. Para isto vamos implementar uma rotina para fazer isto através do ALV. Mais adiante veremos que é possível chamar uma variante de exibição na primeira tela, dessa forma economizando precioso tempo já que muitas rotinas poderão ser descartadas, pois todos os atributos da lista tais como ordenações de colunas e linhas, sumarizações, etc, estarão definidos na variante. Mas não se preocupe, pois teremos um capítulo específico para tratar este assunto. Vamos copiar o programa ZFRA0023_3 e chamá-lo de ZFRA0023_4 e implementaremos as funcionalidades, caso você tenha pulado capítulo 1, você pode copiar o modelo que encontra-se no final do manual. 1 – Declarar a tabela interna que conterá as informações para ordenação; * Tab. com informações sobre a ordenação da lista DATA: wt_sort TYPE slis_t_sortinfo_alv.
2 – Criar uma rotina para definir a ordenação, chamaremos a mesma de Z_ORDENAR_LISTA, e nela pediremos para ordenar pelo campo de usuário de criação ( ERDAT ); *&---------------------------------------------------------------------* *& Form Z_ORDENAR_LISTA *&---------------------------------------------------------------------* * Ordenação da lista *----------------------------------------------------------------------* * --> PT_SORT[] - Tabela com informações de ordenação dos campos *----------------------------------------------------------------------* FORM z_ordenar_lista USING pt_sort TYPE slis_t_sortinfo_alv. * Estrutura para gravar na lista DATA: lf_sort TYPE slis_sortinfo_alv.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
12
GUIA
BÁSICO
DE
CLEAR lf_sort. * Montar estrutura lf_sort-spos lf_sort-fieldname lf_sort-tabname lf_sort-up lf_sort-expa APPEND lf_sort TO ** * * * * * *
PROGRAMAÇÃO
= 1. = 'ERNAM'. = 'WT_SAIDA'. = 'X'. = 'X'. wt_sort.
" " " " "
ALV
Sequência de ordenação Nome do campo Nome da tabela de lista Ordenação Crescente Expandir lista
Outras opções possíveis de utilização lf_sort-down = 'X'. " Ordenação decrescente lf_sort-group = '*'. " Mudança de controle: quebra de " página, inserir sublinha lf_sort-subtot = 'X'. " Subtotal lf_sort-comp = 'X'. " Comprimir lista mostrando " apenas os subtotais
ENDFORM.
" Z_ORDENAR_LISTA
Veja que existem outras opções para ordenação, depois você pode mudar o código para testá-las. 4 – Inserir chamada a rotina Z_ORDENAR_LISTA, antes da rotina de Z_LIST_DISPLAY; *$*$ Programa Principal -----------------------------------------------START-OF-SELECTION. PERFORM z_buscar_dados. * Indicar campos para exibição na lista PERFORM z_fieldcat_init USING wt_fieldcat[]. * Ordenar lista PERFORM z_ordenar_lista USING wt_sort[]. END-OF-SELECTION. * Construção da lista propriamente dita ( Exibição das informações ) PERFORM z_list_display.
5 – Agora vamos passar mais um parâmetros para a função REUSE que está na subrotina Z_LIST_DISPLAY: *&---------------------------------------------------------------------* *& Form Z_LIST_DISPLAY *&---------------------------------------------------------------------* * Lista informações na tela *----------------------------------------------------------------------* form z_list_display. perform z_sapgui_progress_indicator using 'Estruturando a lista. Aguarde...'. call function 'REUSE_ALV_LIST_DISPLAY' exporting i_callback_program = wv_repid * i_structure_name = 'VBAK' it_fieldcat = wt_fieldcat it_sort = wt_sort i_save = 'A' tables t_outtab = wt_saida exceptions program_error = 1 Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
13
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
others = 2. * Verificar processamento da função if sy-subrc ne 0. message id sy-msgid type sy-msgty number sy-msgno with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. endif. endform.
" Z_LIST_DISPLAY
Veja que passamos como novo parâmetro: it_sort = wt_sort = Nome da tabela interna com as configurações para ordenação; 5 – Resultado
FIGURA 4.1 Lista ordenada pelo coluna ERNAM, usuário de criação.
Veja que a lista foi apresentada ordenada pela coluna “Criado por”, de forma crescente.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
14
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo
Criando grupos de campos Especificação de grupo de campos para variantes de exibição
O
capítulo 1 mostrou que é possível montar a estrutura de campos da lista sem referenciar estruturas do dicionário. Um grupo de campos pode ser bastante útil para selecionar os mesmos para uma variante de exibição, pois facilita a pesquisa para a composição da lista de saída.
Aqui vamos criar apenas dois grupos para demonstração. Para isto vamos copiar o programa ZFRA0023_4 e chamá-lo de ZFRA0023_5 1 – Declarar a tabela interna que conterá as informações para formar os grupos de campos; * Tab. de especificação de grupos DATA: wt_sp_group TYPE slis_t_sp_group_alv.
2 – Criar uma rotina para definir os grupos de campos, chamaremos a mesma de Z_SP_GROUP_BUILD; *---------------------------------------------------------------------* * FORM Z_SP_GROUP_BUILD * *---------------------------------------------------------------------* * Definir tipos de grupos de campos * *---------------------------------------------------------------------* * --> PT_SP_GROUP - Estrutura do grupo de campos * *---------------------------------------------------------------------* form z_sp_group_build using pt_sp_group type slis_t_sp_group_alv. * Variáveis data: lf_sp_group type slis_sp_group_alv. * Atribuir valores * Ordem de Venda clear lf_sp_group. lf_sp_group-sp_group = 'A'. lf_sp_group-text = 'Ordem de Venda'(g01). append lf_sp_group to pt_sp_group. * Status da Ordem de Venda clear lf_sp_group. lf_sp_group-sp_group = 'V'. lf_sp_group-text = 'Valores'(g02). append lf_sp_group to pt_sp_group.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
15
GUIA
BÁSICO
DE
PROGRAMAÇÃO
endform.
ALV
" FORM Z_SP_GROUP_BUILD
4 – Inserir chamada à rotina Z_SP_GROUP_BUILD; *$*$ Programa Principal -----------------------------------------------START-OF-SELECTION. PERFORM z_buscar_dados. * Indicar campos para exibição na lista PERFORM z_fieldcat_init USING wt_fieldcat[]. * Ordenar lista PERFORM z_ordenar_lista USING wt_sort[]. * Grupos de campos perform z_sp_group_build using wt_sp_group[]. END-OF-SELECTION. * Construção da lista propriamente dita ( Exibição das informações ) PERFORM z_list_display.
5 – Especificar na rotina Z_FIELDCAT_INIT, quais campos vão pertencer aos grupos criados; FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv. * Estruturas DATA: lf_fieldcat TYPE slis_fieldcat_alv. * Limpar tabela CLEAR pt_fieldcat[]. * Cód. doc. venda CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VBELN'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. APPEND lf_fieldcat TO pt_fieldcat. * Data de Criação CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERDAT'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. APPEND lf_fieldcat TO pt_fieldcat. * Criado por CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERNAM'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. APPEND lf_fieldcat TO pt_fieldcat. * Tipo de Ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'AUART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Valor líq. da ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'NETWR'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'V'. APPEND lf_fieldcat TO pt_fieldcat. ... ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
" Nome do Campo " Tab. de Referência " Grupo de Ordem Vendas " Gravar na tab. config.
" Grupo de Ordem Vendas
" Grupo de Ordem Vendas
" Grupo de Valores
" FORM Z_FIELDCAT_INIT
16
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
6 – Agora vamos passar mais um parâmetros para a função REUSE que está na rotina Z_LIST_DISPLAY: *&---------------------------------------------------------------------* *& Form Z_LIST_DISPLAY *&---------------------------------------------------------------------* * Lista informações na tela *----------------------------------------------------------------------* FORM z_list_display. PERFORM z_sapgui_progress_indicator USING 'Estruturando a lista. Aguarde...'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = wv_repid * i_structure_name = 'VBAK' it_fieldcat = wt_fieldcat it_sort = wt_sort it_special_groups = wt_sp_group i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verificar processamento da função IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
Veja que passamos como parâmteros: it_special_groups = wt_sp_group para especificação de grupos;
=
Nome da tabela interna com as configurações
7 – Podemos visualizar os efeitos deste processo quando acionamos a criação de variante de exibição; Tecle o botão de “ Exibição de Variante Atual ” abaixo aparecerá;
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
17
ou “ CRTL + F8 ”, e a tela
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
FIGURA 5.1 Tela para montar variante de exibição.
Agora vamos ocultar todos os campos para que possamos identificar a especificação dos campos, para isto tecle no ícone .
FIGURA 5.2 Tela com campos ocultados. Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
18
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Veja que todos os campos passaram para o lado direito ( Campos ocultados ). Agora tecle na “Combo Box” onde esta inscrito “Todos os Campos”, e veremos os grupos que criamos;
FIGURA 5.3 Tela mostrando as opções de grupos especificadores existentes.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
19
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Vamos escolher o grupo “Valores” e veremos que apenas o campo especificado para este grupo aparecerá.
FIGURA 5.4 Tela apenas com campos do Grupo Valores..
Isto é interessante quanto temos uma lista grande de campos disponíveis para composição da lista, para que possamos identificar melhor cada um deles. Neste exemplo isto seria irrelevante já que temos poucos campos e todos podem ser visualizados de maneira simples já na primeira tela.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
20
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo
Chamando uma variante de exibição Como chamar uma variante de exibição já na primeira tela, tela de seleção. qui vamos aprender como chamar uma variante de exibição já na primeira tela, desde que ela já tenha sido criada previamente, ou seja, na tela de seleção, sem a necessidade de executar o programa para depois escolher a mesma melhorando assim a performance pois a seleção pode conter vários registros, e o mais importante, agilizando o processo para o usuário. Vamos copiar o programa ZFRA0023_5 e chamá-lo de ZFRA0023_6. 1 – Declarar algumas estruturas para trabalhar com as variantes de exibição; *$*$--- Estruturas ----------------------------------------------------data: wf_x_variant like disvariant. data: wf_variant like disvariant.
2 – Criar na tela de parâmetros a entrada pela escolha da variante de exibição: *$*$ Tela de Seleção --------------------------------------------------* Variante selection-screen begin of block b2 with frame title text-s02. parameters: p_vari like disvariant-variant. selection-screen end of block b2.
3 – No evento de inicialização incluiremos instruções para identificar para qual programa deve-se procurar variantes de exibição já gravadas: * Atribuições para variante clear wf_variant. wf_variant-report = wv_repid.
4 – Criar de ajuda para o campo de variante, para que seja possível procurar a mesma através do recurso de matchcode ( F4 ), declarar o evento “AT SELECTIONSCREEN ON VALUE REQUEST...”, e depois criaremos uma rotina a qual chamaremos de Z_F4_FOR_VARIANT: Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
21
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*$*$ Ajudas de tela ---------------------------------------------------* Processo de ajuda para variante at selection-screen on value-request for p_vari. perform z_f4_for_variant.
*&---------------------------------------------------------------------* *& Form Z_F4_FOR_VARIANT *&---------------------------------------------------------------------* * Processo de ajuda pra variante *----------------------------------------------------------------------* form z_f4_for_variant. * Variável local data: lv_exit. * Encontrar variante call function 'REUSE_ALV_VARIANT_F4' exporting is_variant = wf_variant i_save = 'A' * it_default_fieldcat = importing e_exit = lv_exit es_variant = wf_x_variant exceptions not_found = 2. * Verificar processamento da função if sy-subrc = 2. message id sy-msgid type 'S' number sy-msgno with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. else. * Atribuir valor if lv_exit = space. p_vari = wf_x_variant-variant. endif. endif. endform.
" Z_F4_FOR_VARIANT
6 – Criar o evento “AT SELECTION-SCREEN ON...” para validação do conteúdo do campo de variante, e depois criar a rotina Z_VALIDACAO_VARIANTE: *$*$ Validações de tela -----------------------------------------------at selection-screen on p_vari. perform z_validacao_variante.
*&---------------------------------------------------------------------* *& Form Z_VALIDACAO_VARIANTE *&---------------------------------------------------------------------* * Realizar validação da variante de exibição *----------------------------------------------------------------------* form z_validacao_variante. * Variante if not p_vari is initial. move: wf_variant to wf_x_variant, p_vari to wf_x_variant-variant. * Verificar existencia call function 'REUSE_ALV_VARIANT_EXISTENCE' exporting i_save = 'A' changing cs_variant = wf_x_variant. wf_variant = wf_x_variant.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
22
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
else. clear: wf_variant. wf_variant-report = wv_repid. endif. endform.
" Z_VALIDACAO_VARIANTE
7 – Neste caso, veremos o resultado, na tela de seleção:
FIGURA 6.1 Tela de seleção com opção de escolher a variante de exibição antes da execução do programa
Caso ainda não tenha criado uma variante de exibição anteriormente, execute o programa ( F8 ), tecle selecione os campos e depois grave a variante através do botão
. Agora retorne a tela de seleção.
Com o cursor posicionado no campo de “Variante de Exibição” acionar a tecla “F4” e a ajuda será acionada. Será aberta uma janela que conterá as variantes de exibição globais, e as específicas para o usuário. Veja a figura 6.2
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
23
GUIA
BÁSICO
DE
PROGRAMAÇÃO
FIGURA 6.2 Janela POPUP com variantes de exibição.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
24
ALV
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo
Parâmetros para impressão Configurar alguns parâmetros de impressão da lista através de estruturas do ALV. s vezes queremos configurar um relatório de modo que o mesmo não tenha uma página de rosto para economizar papel, ou então necessitamos reservar linhas para impressão de um rodapé, etc... Neste capítulo veremos como é possível fazer estas configurações internamente no programa. Vamos copiar o programa ZFRA0023_6 e chamá-lo de ZFRA0023_7 e implementaremos as funcionalidades, caso você tenha pulado os capítulos anteriores, você pode copiar o que está no final do manual. 1 – Declarar a estrutura que conterá os campos de configurações: DATA: wf_print
TYPE slis_print_alv.
2 – Criar uma rotina que definirá os parâmetros a serem utilizados, o qual chamaremos de Z_PRINT_BUILD, que receberá como parâmetro a estrutura declarada no item 1; ... * Parâmetros de impressão PERFORM z_print_build USING wf_print.
... 3 – Código para o form Z_PRINT_BUILD: *---------------------------------------------------------------------* * FORM Z_PRINT_BUILD * *---------------------------------------------------------------------* * Definir atributos de impressão da lista * *---------------------------------------------------------------------* * --> PF_PRINT - Estrutura com atributos da impressão da lista * *---------------------------------------------------------------------* FORM z_print_build USING pf_print TYPE slis_print_alv.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
25
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
* *
PF_PRINT-PRINT = 'X'. " Imprimir no SPOOL pf_print-no_print_selinfos = 'X'. " Não listar info. sobre seleção pf_print-no_coverpage = 'X'. " Não listar página de rostp pf_print-no_print_listinfos = 'X'. " Não listar info. sobre a lista * PF_PRINT-RESERVE_LINES = 'X'. " Reservar linhas * PF_PRINT-NO_NEW_PAGE = 'X'. " Sem novas páginas * PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " Não alterar tamanho da linha ENDFORM.
" Z_PRINT_BUILD
4 – Agora vamos passar mais um parâmetro para a função REUSE que está na rotina Z_LIST_DISPLAY: *&---------------------------------------------------------------------* *& Form Z_LIST_DISPLAY *&---------------------------------------------------------------------* * Lista informações na tela *----------------------------------------------------------------------* FORM z_list_display. PERFORM z_sapgui_progress_indicator USING 'Estruturando a lista. Aguarde...'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = wv_repid * i_structure_name = 'VBAK' it_fieldcat = wt_fieldcat it_sort = wt_sort it_special_groups = wt_sp_group is_print = wf_print i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verificar processamento da função IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
Veja que passamos como parâmetros: is_print = wf_print = Nome da estrutura com as configurações de impressão;
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
26
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo
Variações de Layout Incluindo características novas a lista. eremos neste capítulo que é possível mudar algumas características da linha da lista, tais como criar uma checkbox, permitir níveis de quebra diferentes nas totalizações, entre outros. Faremos duas inclusões básicas e deixaremos ao leitor a função de pesquisar outras características a serem exploradas. Para tal veja a estrutura “SLIS_LAYOUT_ALV” do grupo de tipos “SLIS”. Vamos copiar o programa ZFRA0023_7 e chamá-lo de ZFRA0023_8. 1 – Criar um campo novo na tabela de saída para que o mesmo seja um checkbox; que chamaremos de BOX; … *$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida, vbeln LIKE vbak-vbeln, " Nro da ordem de venda erdat LIKE vbak-erdat, " Data de criação ernam LIKE vbak-ernam, " Criado por audat LIKE vbak-audat, " Data da ordem auart LIKE vbak-auart, " Tipo de ordem netwr LIKE vbak-netwr, " Valor líq. da ordem vkorg LIKE vbak-vkorg, " Org. de vendas vtweg LIKE vbak-vtweg, " Canal de distribuição spart LIKE vbak-spart, " Setor de atividade vkgrp LIKE vbak-vkgrp, " Grupo de vendedores vkbur LIKE vbak-vkbur, " Escritório de vendas box , " Checkbox END OF we_saida. …
2 – Declarar estrutura de layout; … DATA: wf_layout …
TYPE slis_layout_alv.
3 – Criar uma rotina que definirá os parâmetros a serem utilizados, o qual chamaremos de Z_PRINT_BUILD, que receberá como parâmetro a estrutura declarada no item 1; Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
27
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
... * Layout Layout da lis lista ta - Ref Refere erente nte as def defini iniçõe ções s PERFORM PERFORM z_layout_b z_layout_build uild USING USING wf_layout wf_layout. .
... 4 – Código para o form Z_PRINT_BUILD: *&--------------------------------------------------*&-------------------------------------------------------------------------------------* * *& Form Z_LAYOUT_BUILD *&--------------------------------*&------------------------------------------------------------------------------------------------------* * * Layout de saída *---------------------------------*-------------------------------------------------------------------------------------------------------* * * --> -> PF PF_L _LAY AYOU OUT T - Est Estru rutu tura ra par ara a la layo yout ut de sa saíd ída a da da lis lista ta *---------------------------------*-------------------------------------------------------------------------------------------------------* * FORM z_layout_ z_layout_build build USING USING pf_layout pf_layout TYPE slis_layou slis_layout_al t_alv. v. * Permit Permitir ir mud mudanç ança a de nív níves es de que quebra bra par para a sub subto totai tais s pf_layout-group_change_edit pf_layout-group_change_edit = 'X'. * Ch Chec eck k bo box x na lista lista pf_l pf_lay ayou outt-bo box_ x_fi fiel eldn dnam ame e = 'BOX 'BOX'. '. pf_l pf_lay ayou outt-bo box_ x_ta tabn bnam ame e = 'WT_ 'WT_SA SAID IDA' A'. . ENDFORM.
" Z_LAYOUT_BUILD
5 – Agora vamos passar mais um parâmetro para para a função REUSE que está na rotina Z_LIST_DISPLAY: *&--------------------------------------------------*&-------------------------------------------------------------------------------------* * *& Form Z_LIST_DISPLAY *&--------------------------------*&------------------------------------------------------------------------------------------------------* * * Lista informações na tela *---------------------------------*-------------------------------------------------------------------------------------------------------* * FORM z_list_display. PERFORM z_sapgui_progress_indicator z_sapgui_progress_indicator USING 'Estrutura 'Estruturando ndo a lista. lista. Aguarde.. Aguarde...'. .'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callbac i_callback_pro k_program gram = wv_repid wv_repid * i_structure_name = 'VBAK' it_fieldcat = wt_fieldcat it_sort = wt_sort it_specia it_special_gro l_groups ups = wt_sp_gr wt_sp_group oup is_print = wf_print is_layout = wf_layout i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verif Verificar icar proc processam essamento ento da funçã função o IF sy-s sy-sub ubrc rc NE 0. MESSAGE MESSAGE ID sy-msgid sy-msgid TYPE sy-msgty sy-msgty NUMBER NUMBER sy-msgno sy-msgno WITH sy-msgv1 sy-msgv1 sy-msgv2 sy-msgv2 sy-msgv3 sy-msgv3 sy-msgv4. sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
Veja que passamos como parâmetros: Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
28
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
is_layout = wf_layout = Nome da estrutura com as configurações layout;
6 – Tela do Relatório:
FIGURA 8.1 Lista com checkbox.
7 – Totalize a coluna do valor líquido, e depois acione o botão de subtotal
.
A janela a seguir será exibida, mostrando as opções de ordenação para a totalização, porém o mais in interessante teressante é a coluna “GR’, onde é possível escolher os níveis de quebra de totais, posicione o cursor no mesmo e tecle a função F4 ( Fig. 8.2 )
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
29
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
FIGURA 8.2 Tela com a opção de tipos de quebra diferentes para os níveis de totais
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
30
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo
Criando Eventos Criando eventos para ações específicas para o relatório.
E
xistem vários eventos que podemos acionar para executar os mais diversos processos no relatório. Neste capítulo vamos tratar os eventos principais, ou mais usados, para mostrar que é possível interferir no processamento da lista ALV.
Vamos copiar o programa ZFRA0023_8 e chamá-lo de ZFRA0023_9. 1 – Declarar a tabela de eventos; … * Tab. de eventos DATA: wt_events TYPE slis_t_event. …
2 – Criar uma rotina que definirá os eventos a serem utilizados, que chamaremos de Z_EVENTTAB_BUID;... ... * Eventos que podem ser acionados na lista PERFORM z_eventtab_build USING wt_events[]. ...
3 – Codificação para a rotina Z_EVENTTAB_BUILD: Para atribuir nomes mais amigáveis as rotinas de eventos, ou tenha uma identificação melhor, é possível fazê-lo conforme mostrado na rotina abaixo: *---------------------------------------------------------------------* * FORM Z_EVENTTAB_BUILD * *---------------------------------------------------------------------* * Definir eventos associados a lista * *---------------------------------------------------------------------* * --> PT_EVENTS - Eventos associados a lista * *---------------------------------------------------------------------* FORM z_eventtab_build USING pt_events TYPE slis_t_event. * Variáveis DATA: lf_event TYPE slis_alv_event. * Obter eventos permitidos para lista grid CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
31
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
EXPORTING i_list i_list_ty _type pe = 0 IMPORTING et_e et_eve vent nts s = pt_e pt_eve vent nts. s. * Ver Verifi ificar car se eve evento nto foi enc encont ontrad rado o * Ver Verifi ificar car se eve evento nto foi enc encont ontrad rado o LOOP LOOP AT pt_eve pt_events nts INTO INTO lf_eve lf_event. nt. CASE lf_event-name. WHEN slis_ev_user_command. slis_ev_user_command. MOVE 'Z_USER_C 'Z_USER_COMMAN OMMAND' D' TO lf_eventlf_event-form. form. WHEN slis_ev_item_data_expand. slis_ev_item_data_expand. * move mo ve 'Z 'Z_I _ITE TEM_ M_DA DATA TA_E _EXP XPAN AND' D' to lf lf_e _eve vent nt-f -for orm. m. WHEN slis_ev_reprep_sel_modify. slis_ev_reprep_sel_modify. * move mo ve 'Z 'Z_R _REP EPRE REP_ P_SE SEL_ L_MO MODI DIFY FY' ' to lf lf_e _eve vent nt-f -for orm. m. WHEN slis_ev_caller_exit_at_start. slis_ev_caller_exit_at_start. * MOVE MO VE 'Z_ Z_CA CALL LLER ER_E _EXI XIT' T' TO lf lf_e _eve vent nt-f -for orm. m. WHEN slis_ev_top_of_page. slis_ev_top_of_page. MOVE 'Z_TOP_OF 'Z_TOP_OF_PAGE _PAGE' ' TO lf_eventlf_event-form. form. WHEN slis_ev_top_of_coverpage. slis_ev_top_of_coverpage. * move mo ve 'Z 'Z_T _TOP OP_O _OF_ F_CO COVE VERP RPAG AGE' E' to lf lf_e _eve vent nt-f -for orm. m. WHEN slis_ev_end_of_coverpage. slis_ev_end_of_coverpage. * move mo ve 'Z 'Z_E _END ND_O _OF_ F_CO COVE VERP RPAG AGE' E' to lf lf_e _eve vent nt-f -for orm. m. WHEN slis_ev_foreign_top_of_page. slis_ev_foreign_top_of_page. * move mo ve 'Z 'Z_F _FOR OREI EIGN GN_T _TOP OP_O _OF_ F_PA PAGE GE' ' to lf lf_e _eve vent nt-f -for orm. m. WHEN slis_ev_foreign_end_of_page. slis_ev_foreign_end_of_page. * move mo ve 'Z 'Z_F _FOR OREI EIGN GN_E _END ND_O _OF_ F_PA PAGE GE' ' to lf lf_e _eve vent nt-f -for orm. m. WHEN slis_ev_pf_status_set. slis_ev_pf_status_set. * MOVE MO VE 'Z_ Z_PF PF_S _STA TATU TUS_ S_SE SET' T' TO lf lf_e _eve vent nt-f -for orm m. WHEN slis_ev_list_modify. slis_ev_list_modify. * MOVE MO VE 'Z_ Z_LI LIST ST_M _MOD ODIF IFY' Y' TO lf lf_e _eve vent nt-f -for orm. m. WHEN slis_ev_top_of_list. slis_ev_top_of_list. MOVE 'Z_TOP_OF 'Z_TOP_OF_LIST _LIST' ' TO lf_eventlf_event-form. form. WHEN slis_ev_end_of_page. slis_ev_end_of_page. MOVE 'Z_END_ 'Z_END_OF_P OF_PAGE' AGE' TO lf_event lf_event-form -form. . WHEN slis_ev_end_of_list. slis_ev_end_of_list. MOVE 'Z_END_OF 'Z_END_OF_LIST _LIST' ' TO lf_eventlf_event-form. form. WHEN slis_ev_after_line_output. slis_ev_after_line_output. * MOVE MO VE 'Z 'Z_A _AFT FTER ER_L _LIN INE_ E_OU OUTP TPUT UT' ' TO lf lf_e _eve vent nt-f -for orm. m. WHEN slis_ev_before_line_output. slis_ev_before_line_output. * MOVE MO VE 'Z 'Z_B _BEF EFOR ORE_ E_LI LINE NE_O _OUT UTPU PUT' T' TO lf lf_e _eve vent nt-f -for orm. m. WHEN slis_ev_subtotal_text. slis_ev_subtotal_text. * MOVE MO VE 'Z_ Z_SU SUBT BTOT OTAL AL_T _TEX EXT' T' TO lf lf_e _eve vent nt-f -for orm m. ENDCASE. MODIFY MODIFY pt_events pt_events FROM lf_event. lf_event. ENDLOOP. * ENDFORM. " FORM Z_EVENTTAB_BUILD
Veja que no parâmetro “i_list_type” atribuímos o valor 0 (zero), que especifica os eventos para lista simples. Este parâmetro pode receber os seguintes valores: 0 = Lista Simples ( Função REUSE_ALV_LIST_DISPLAY ) 1 = Lista hierárquica seqüencial ( REUSE_ALV_HIERSE REUSE_ALV_HIERSEQ_LIST_DIS Q_LIST_DISPLAY PLAY ) 2 = Lista em blocos simples ( REUSE_ALV_BLOCK_LIST_APPEND REUSE_ALV_BLOCK _LIST_APPEND ) 3 = Lista em blocos hierárquica ( REUSE_ALV_BLOCK_LIST_HS REUSE_ALV_BLOCK_LIST_HS_APPEND _APPEND )
As demais serão vistas em outra oportunidade. 4 – Agora vamos passar mais um parâmetro para para a função REUSE que está na rotina Z_LIST_DISPLAY:
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
32
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*&--------------------------------------------------*&-------------------------------------------------------------------------------------* * *& Form Z_LIST_DISPLAY *&--------------------------------*&------------------------------------------------------------------------------------------------------* * * Lista informações na tela *---------------------------------*-------------------------------------------------------------------------------------------------------* * FORM z_list_display. PERFORM z_sapgui_progress_indicator z_sapgui_progress_indicator USING 'Estrutura 'Estruturando ndo a lista. lista. Aguarde.. Aguarde...'. .'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callbac i_callback_pro k_program gram = wv_repid wv_repid it_fieldcat = wt_fieldcat it_sort = wt_sort it_specia it_special_gro l_groups ups = wt_sp_gr wt_sp_group oup is_print = wf_print is_layout = wf_layout it_events = wt_events i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verif Verificar icar proc processam essamento ento da funçã função o IF sy-s sy-sub ubrc rc NE 0. MESSAGE MESSAGE ID sy-msgid sy-msgid TYPE sy-msgty sy-msgty NUMBER NUMBER sy-msgno sy-msgno WITH sy-msgv1 sy-msgv1 sy-msgv2 sy-msgv2 sy-msgv3 sy-msgv3 sy-msgv4. sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
Veja que passamos como parâmetros: is_events = wt_events = Nome da tabela com os eventos; 6 – Veremos cada evento descrito no tópico 3 ( três ) de forma resumida apenas para o leitor ter uma idéia dos benefícios que as mesmas podem nos proporcionar. 6.1 – O evento USER_COMMAND serve para tratar ações do usuário, aqui daremos um exemplo simples que quando houver um duplo clique no campo do número da ordem de venda, a transação VA03 ( Exibir ordem de cliente ) será acionada exibindo assim a ordem em questão. *---------------------------------------------------*--------------------------------------------------------------------------------------* * * FORM Z_USER_COMMAND * *---------------------------------*-------------------------------------------------------------------------------------------------------* * * Ações do usuário * *---------------------------------*-------------------------------------------------------------------------------------------------------* * FORM FORM z_us z_user er_c _com omma mand nd USIN USING G pv_uc pv_ucom omm m LIKE LIKE sy-u sy-uco comm mm pf_sel pf_selfie field ld TYPE TYPE slis_se slis_selfi lfield eld. . "#EC "#EC CALLED CALLED * CASE pv_ucomm. pv_ucomm. * Ação Aç ão de Cli Click ck dup duplo lo '&I '&IC1 C1' ' WHEN '&IC1'. '&IC1'. * Posi Po sici cion onar ar no re regi gist stro ro se sele leci cion onad ado o READ TABLE TABLE wt_saida wt_saida INDEX INDEX pf_selfie pf_selfield-ta ld-tabinde bindex. x. * Veri Ve rifi fica car r ca camp mpo o se sele leci cion onad ado o CASE pf_selfield-sel_tab_field. pf_selfield-sel_tab_field. WHEN 'WT_SAIDA-VBELN'. 'WT_SAIDA-VBELN'. * Determinar nro da ord rde em de venda ao parâ râm metro de memó mór ria
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
33
GUIA
*
BÁSICO
DE
PROGRAMAÇÃO
ALV
SET PARAMETE PARAMETER R ID 'AUN' 'AUN' FIELD wt_sai wt_saida da-vb -vbeln eln. . Chamar transação de exibição da ordem de venda CALL CALL TRANSA TRANSACTI CTION ON 'VA03' 'VA03' AND SKIP SKIP FIRST FIRST SCREEN SCREEN. . ENDCASE. ENDCASE.
ENDFORM.
6.2 – O evento TOP_OF_PAGE serve para criar um cabeçalho para cada página do relatório. Apenas um comentário será feito na rotina para visualização do efeito do mesmo no relatório. *---------------------------------------------------*--------------------------------------------------------------------------------------* * * FORM Z_TOP_OF_PAGE * *---------------------------------*-------------------------------------------------------------------------------------------------------* * * Evento de cabeçalho * *---------------------------------*-------------------------------------------------------------------------------------------------------* * FORM z_top_of_page. "#EC CALLED WRITE: WRITE: / 'Evento: 'Evento: top-of-pa top-of-page'. ge'. ENDFORM.
6.3 – O evento END_OF_PAGE serve para criar um rodapé para cada página do relatório. *---------------------------------------------------*--------------------------------------------------------------------------------------* * * FORM Z_END_OF_PAGE * *---------------------------------*-------------------------------------------------------------------------------------------------------* * * Evento para rodapé da lista * *---------------------------------*-------------------------------------------------------------------------------------------------------* * form z_end_of_page. "#EC CALLED write: write: / 'Evento: 'Evento: end_of_pa end_of_page'. ge'. endform.
6.4 – O evento TOP_OF_LIST, será impresso apenas uma vez ao início da lista. *---------------------------------------------------*--------------------------------------------------------------------------------------* * * FORM Z_TOP_OF_LIST * *---------------------------------*-------------------------------------------------------------------------------------------------------* * * Evento para topo da lista * *---------------------------------*-------------------------------------------------------------------------------------------------------* * form z_top_of_list. "#EC CALLED write: write: / 'Evento: 'Evento: top-of-li top-of-list'. st'. endform.
6.5 – O evento END_OF_LIST, será impresso apenas uma vez ao final da lista. *---------------------------------------------------*--------------------------------------------------------------------------------------* * * FORM Z_END_OF_LIST * *---------------------------------*-------------------------------------------------------------------------------------------------------* * * Evento de final de lista * *---------------------------------*-------------------------------------------------------------------------------------------------------* * form z_end_of_list. "#EC CALLED
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
34
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
write: / 'Evento: end_of_list'. endform.
6.5 – Este é um evento interessante, o PF_STATUS_SET, nele é possível indicar qual a barra de status que deve ser apresentada para o relatório. Veremos em um tópico específico como funciona este evento, assim criaremos uma funcionalidade específica deste evento interagindo com o checkbox. *----------------------------------------------------------------------* * FORM Z_PF_STATUS_SET * *----------------------------------------------------------------------* * Especificar barra de status * *----------------------------------------------------------------------* form z_pf_status_set using pt_extab type slis_t_extab. "#EC CALLED * Acionar barra de comandos * set pf-status 'STANDARD' excluding pt_extab. endform.
6.6 – Abaixo segue a interface dos outros eventos mais utilizados. Você pode testá-los ativando os mesmos no evento Z_EVENTTAB_BUILD. Os pontos de paradas estão comentados, mas você pode ativá-los para verificar melhor o momento em que cada um deles é acionado. *----------------------------------------------------------------------* * FORM Z_CALLER_EXIT * *----------------------------------------------------------------------* * Evento * *----------------------------------------------------------------------* form z_caller_exit using pf_data. "#EC CALLED endform. *----------------------------------------------------------------------* * FORM Z_BEFORE_LINE_OUTPUT * *----------------------------------------------------------------------* * Evento antes da impressão da linha * *----------------------------------------------------------------------* form z_before_line_output using pf_lineinfo type slis_lineinfo. "#EC CALLED *
break-point.
endform. *----------------------------------------------------------------------* * FORM Z_AFTER_LINE_OUTPUT * *----------------------------------------------------------------------* * Evento depois da impressão da linha * *----------------------------------------------------------------------* form z_after_line_output using pf_lineinfo type slis_lineinfo. "#EC CALLED *
break-point.
endform.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
35
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*----------------------------------------------------------------------* * FORM Z_LIST_MODIFY * *----------------------------------------------------------------------* * Evento modifica linha da lista * *----------------------------------------------------------------------* form z_list_modify using pv_tabname type slis_tabname pv_index like sy-tabix pv_index_slave like sy-tabix pv_index_sum like sy-tabix. "#EC CALLED *
break-point.
endform.
7 – Uma pequena amostra da tela com alguns eventos implementados.
FIGURA 9.1 Tela exibindo a aplicação de alguns eventos
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
36
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo
Barra de Status Personalizada Atribuindo uma barra de status específica para o programa.
P
odemos criar barra de status ( Status da Interface ) específicas para os programas. Isto já deve ser sabido por todos, porém no ALV temos uma maneira especial para indicar qual será a barra de status que o programa deverá utilizar.
Vamos copiar o programa ZFRA0023_9 e chamá-lo de ZFRA0023_10. Para não perdermos as funcionalidades já existentes para os programas ALVs, vamos copiar uma barra de status padrão para os programas e depois adicionaremos nossas funções; 1 – Copiando uma barra de status padrão para ALV; 1.1 – Execute a transação SE41 ( Menu Painter ), escolha o programa SAPLKKBL e a barra de status STANDARD.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
37
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
FIGURA 10.1 Copiando barra de status.
1.2 – Copiar o status acionando o botão
.
1.3 – Altere o nome do programa “Para”, para ZFRA0023_10;
FIGURA 10.2 Tela de cópia.
1.4 – Salve e ative a barra de status; 2 – Alterar o programa para utilizar a barra de status específica para o ZFRA0023_10. Na rotina Z_EVENTTAB_BUID, tire o comentário da linha do evento de barra de status.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
38
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*---------------------------------------------------------------------* * FORM Z_EVENTTAB_BUILD * *---------------------------------------------------------------------* * Definir eventos associados a lista * *---------------------------------------------------------------------* * --> PT_EVENTS - Eventos associados a lista * *---------------------------------------------------------------------* FORM z_eventtab_build USING pt_events TYPE slis_t_event.
… WHEN slis_ev_pf_status_set. MOVE 'Z_PF_STATUS_SET' TO lf_event-form.
…
3 – Na rotina Z_PF_STATUS_SET elimine o comentário para acionar a barra de status STANDARD; *----------------------------------------------------------------------* * FORM Z_PF_STATUS_SET * *----------------------------------------------------------------------* * Especificar barra de status * *----------------------------------------------------------------------* FORM z_pf_status_set USING pt_extab TYPE slis_t_extab. "#EC CALLED * Acionar barra de comandos SET PF-STATUS 'STANDARD' EXCLUDING pt_extab. ENDFORM.
4 – Agora vamos adicionar um botão específico para o programa ZFRA0023. Insira um separador e depois adicione um botão chamado “TESTE”. Neste caso vamos associar este botão a PF “CTRL + F10”.
FIGURA 10.3 Adicionando um botão específico.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
39
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
FIGURA 10.4 Botão TESTE ao final da barra de status.
A construção da barra de status funciona da mesma forma como para os outros programas ABAP, sendo possível associar ícones aos botões, etc, porém aqui queremos apenas mostrar a personalização da barra de status portanto deixamos a cargo do leitor as questões de layout da barra de status, que pode ser obtida através da ajuda para pesquisa da transação SE41. No próximo capítulo veremos como associar o botão TESTE a um determinado evento.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
40
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo
Trabalhando com checkbox Associando um evento para trabalhar com as linhas selecionadas através do checkbox. seleção de uma ou mais linhas pode ser feita através de um checkbox como aprendemos no capítulo 8, e no capítulo 10 aprendemos a criar uma barra de status específica para adicionarmos nossas próprias funções com o intuito de acionar eventos específicos. Agora neste capítulo vamos integrar estas duas funcionalidades. Vamos copiar o programa ZFRA0023_10 e chamá-lo de ZFRA0023_11. Não se esqueça de selecionar também a barra de status para a cópia ( interfaces do usuário ). 1 – Na rotina Z_USER_COMMAND vamos criar uma entrada para o evento “TESTE”; *----------------------------------------------------------------------* * FORM Z_USER_COMMAND * *----------------------------------------------------------------------* * Ações do usuário * *----------------------------------------------------------------------* FORM z_user_command USING pv_ucomm LIKE sy-ucomm pf_selfield TYPE slis_selfield. "#EC CALLED * CASE pv_ucomm. * Ação de Click duplo '&IC1' WHEN '&IC1'. * Posicionar no registro selecionado READ TABLE wt_saida INDEX pf_selfield-tabindex. * Verificar campo selecionado CASE pf_selfield-sel_tab_field. WHEN 'WT_SAIDA-VBELN'. * Determinar nro da ordem de venda ao parâmetro de memória SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln. * Chamar transação de exibição da ordem de venda CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN. ENDCASE. WHEN 'TESTE'. PERFORM z_rotina_teste. ENDCASE. ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
41
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
2 – Criar a rotina Z_ROTINA_TESTE, que exibirá uma mensagem indicando quais linhas foram selecionadas. *&---------------------------------------------------------------------* *& Form Z_ROTINA_TESTE *&---------------------------------------------------------------------* * Rotina para o evento TESTE ( Botão ) *----------------------------------------------------------------------* FORM z_rotina_teste. LOOP AT wt_saida. Verificar se linha foi selecionada CHECK wt_saida-box EQ 'X'. * Enviar mensagem para informar linha selecionada MESSAGE i899(bd) WITH 'Foi escolhida a ordem:' wt_saida-vbeln. ENDLOOP. *
ENDFORM.
" Z_ROTINA_TESTE
3 – Tela da lista;
FIGURA 11.1 Tela com mensagem de linha selecionada.
A mensagem será exibida quantas linhas forem selecionadas, indicando na mesma o número da ordem de venda.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
42
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo
Mudando cores dos campos Mudando os atributos de cores de campos.
N
o capítulo 8 ( Variações de Layout ) vimos que é possível mudar algumas características da lista através da configuração da estrutura “is_layout”. Com relação a cores pode-se configurar o parâmetro “zebra” para que as linhas da lista alternem as cores para que as mesmas sejam melhores identificadas. Neste capítulo vamos aprender como mudar os atributos de cores para campos da lista e conseqüentemente para a linha. Vamos copiar o programa ZFRA0023_11 e chamá-lo de ZFRA0023_12. Não se esqueça de selecionar também a barra de status para a cópia ( interfaces do usuário ). 1 – Incluir estrutura de cores na estrutura we_saída; *$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida, vbeln LIKE vbak-vbeln, " Nro da ordem de venda erdat LIKE vbak-erdat, " Data de criação ernam LIKE vbak-ernam, " Criado por audat LIKE vbak-audat, " Data da ordem auart LIKE vbak-auart, " Tipo de ordem netwr LIKE vbak-netwr, " Valor líq. da ordem vkorg LIKE vbak-vkorg, " Org. de vendas vtweg LIKE vbak-vtweg, " Canal de distribuição spart LIKE vbak-spart, " Setor de atividade vkgrp LIKE vbak-vkgrp, " Grupo de vendedores vkbur LIKE vbak-vkbur, " Escritório de vendas box , " Checkbox color TYPE slis_t_specialcol_alv, END OF we_saida.
2 – Vamos criar duas tabelas internas que conterão uma configuração específica de cores. * Tabs. de cores DATA: wt_color_normal
TYPE slis_t_specialcol_alv WITH HEADER LINE,
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
43
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
wt_color_selecao TYPE slis_t_specialcol_alv WITH HEADER LINE.
4 – Criar rotina para atribuição de cores; *&---------------------------------------------------------------------* *& Form Z_FIELD_COLOR *&---------------------------------------------------------------------* * <-- PT_COLOR - Tab. com configuração das cores * --> PV_COLOR - Cor * --> PV_INTENSIFIED - Intensificado * --> PV_INVERSE - Inversão de cores *----------------------------------------------------------------------* FORM z_field_color TABLES pt_color TYPE slis_t_specialcol_alv USING value(pv_color) TYPE i value(pv_intensified) TYPE i value(pv_inverse) TYPE i. DEFINE z_field_color. pt_color-color-col = pv_color. pt_color-color-int = pv_intensified. pt_color-color-inv = pv_inverse. pt_color-fieldname = &1. append pt_color. END-OF-DEFINITION. * Inicializar tabela CLEAR: pt_color[], pt_color. * Definir campos z_field_color: 'VBELN', 'ERDAT', 'ERNAM', 'AUDAT', 'AUART', 'NETWR', 'VKORG', 'VTWEG', 'SPART', 'VKGRP', 'VKBUR'. ENDFORM.
" Z_FIELD_COLOR
5 – Criar chamada da rotina para atribuição de cores; *$*$ Programa Principal -----------------------------------------------START-OF-SELECTION. … * Determinar cores PERFORM z_field_color: TABLES wt_color_normal USING 2 0 0, TABLES wt_color_selecao USING 5 0 0. ...
6 – Indicar a tabela de cores na rotina Z_LAYOUT_BUILD; *&---------------------------------------------------------------------* *& Form Z_LAYOUT_BUILD *&---------------------------------------------------------------------* * Layout de saída *----------------------------------------------------------------------* * --> PF_LAYOUT - Estrutura para layout de saída da lista *----------------------------------------------------------------------* FORM z_layout_build USING pf_layout TYPE slis_layout_alv. pf_layout-group_change_edit = * Check box na lista pf_layout-box_fieldname = pf_layout-box_tabname = * Determinar a tabela de cores pf_layout-coltab_fieldname =
'X'. 'BOX'. 'WT_SAIDA'.
'COLOR'.
ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
" Z_LAYOUT_BUILD
44
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
7 – Vamos aproveitar a rotina Z_ROTINA_TESTE para implementar a mudança de cor. Faremos que as linhas que estiverem selecionadas no momento em que o botão “TESTE” seja acionado mudem de cor. *&---------------------------------------------------------------------* *& Form Z_ROTINA_TESTE *&---------------------------------------------------------------------* * Rotina para o evento TESTE ( Botão ) *----------------------------------------------------------------------* FORM z_rotina_teste. LOOP AT wt_saida. Verificar se linha foi selecionada CHECK wt_saida-box EQ 'X' IF wt_saida-box EQ 'X'. * Enviar mensagem para informar linha selecionada MESSAGE i899(bd) WITH 'Foi escolhida a ordem:' wt_saida-vbeln. * Mudar cor da linha selecionada wt_saida-color[] = wt_color_selecao[]. ELSE. * Mudar cor da linha selecionada wt_saida-color[] = wt_color_normal[]. ENDIF. MODIFY wt_saida TRANSPORTING color. ENDLOOP. * *
ENDFORM.
" Z_ROTINA_TESTE
Veja que mudamos um pouco a rotina, trocamos o comando CHECK por um IF, pois desta forma poderemos identificar as linhas que não estão selecionadas e retornálas a cor original caso tenham sido selecionadas em algum momento. Atribuiremos as cores configuradas na tabela “wt_color_selecao”, para as linhas selecionadas, caso contrário será atribuída as da “wt_color_normal”. 8 – Detalhe importante, devemos informar que deve ser feito um REFRESH da lista para que as alterações, neste caso das cores, sejam atualizadas na lista. Para isto vamos informar ao evento Z_USER_COMMAND o parâmetro de REFRESH. *----------------------------------------------------------------------* * FORM Z_USER_COMMAND * *----------------------------------------------------------------------* * Ações do usuário * *----------------------------------------------------------------------* FORM z_user_command USING pv_ucomm LIKE sy-ucomm pf_selfield TYPE slis_selfield. "#EC CALLED * CASE pv_ucomm. * Ação de Click duplo '&IC1' WHEN '&IC1'. * Posicionar no registro selecionado READ TABLE wt_saida INDEX pf_selfield-tabindex. * Verificar campo selecionado CASE pf_selfield-sel_tab_field. WHEN 'WT_SAIDA-VBELN'. * Determinar nro da ordem de venda ao parâmetro de memória SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln. * Chamar transação de exibição da ordem de venda CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN. ENDCASE. WHEN 'TESTE'.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
45
GUIA
*
BÁSICO
DE
PROGRAMAÇÃO
ALV
PERFORM z_rotina_teste. Realizar um REFRESH da lista pf_selfield-refresh = 'X'. ENDCASE.
ENDFORM.
O parâmetro REFRESH também pode ser utilizado para atualizar a tela quando alguma informação da tabela interna ( wt_saida ) sobre alguma alteração no conteúdo.
9 – Teremos que realizar uma alteração na rotina Z_BUSCAR_DADOS, pois não será aceito o SELECT... INTO TABLE diretamente na tabela de saída “wt_saida” pois a mesma com a inclusão do campo color, do tipo SLIS_T_SPECIALCOL_ALV, que é uma tabela, passou a ter mais de uma dimensão, e a cláusula INTO TABLE aceita apenas tabelas internas unidimensionais. *&---------------------------------------------------------------------* *& Form Z_BUSCAR_DADOS *&---------------------------------------------------------------------* * Obter informações para lista *----------------------------------------------------------------------* FORM z_buscar_dados. * Variáveis DATA: BEGIN OF lt_saida OCCURS 0, vbeln LIKE vbak-vbeln, " Nro da ordem de venda erdat LIKE vbak-erdat, " Data de criação ernam LIKE vbak-ernam, " Criado por audat LIKE vbak-audat, " Data da ordem auart LIKE vbak-auart, " Tipo de ordem netwr LIKE vbak-netwr, " Valor líq. da ordem vkorg LIKE vbak-vkorg, " Org. de vendas vtweg LIKE vbak-vtweg, " Canal de distribuição spart LIKE vbak-spart, " Setor de atividade vkgrp LIKE vbak-vkgrp, " Grupo de vendedores vkbur LIKE vbak-vkbur, " Escritório de vendas END OF lt_saida. * Exibir aviso PERFORM z_sapgui_progress_indicator USING 'Selecionando dados. Aguarde...'. * Seleção das informações SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp vkbur * INTO TABLE wt_saida INTO TABLE lt_saida FROM vbak WHERE vbeln IN s_vbeln. * Atribuir valores a tabela de saída LOOP AT lt_saida. MOVE-CORRESPONDING lt_saida TO wt_saida. APPEND wt_saida. ENDLOOP. ENDFORM.
" Z_BUSCAR_DADOS
Veja que apenas foi criado um passo intermediário para incluir os campos na tabela de saída “wt_saída”. 10 – Telas antes e depois de acionar o botão “TESTE” com uma linha selecionada;
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
46
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
FIGURA 12.1 Tela antes de apertar o botão TESTE
FIGURA 12.2 Tela DEPOIS de apertar o botão TESTE, já com a linha selecionada colorida.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br
[email protected]
47
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo
Inserindo Ícones Agregando ícones a linhas da lista.
U
m recurso bastante interessante é a inclusão de ícones nas linhas da lista. Neste capítulo vamos aprender como é simples dispor deste recurso e como a lista pode ficar muito mais apresentável ao usuário.
Vamos copiar o programa ZFRA0023_11 e chamá-lo de ZFRA0023_13. Não se esqueça de selecionar também a barra de status para a cópia. 1 – Referenciar o include de definição de ícones; *$*$ Includes ---------------------------------------------------------INCLUDE
.
… 2 – Incluir campo na tabela de saída “wt_saida” que receberá o código do ícone; *$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida, vbeln LIKE vbak-vbeln, " Nro da ordem de venda erdat LIKE vbak-erdat, " Data de criação ernam LIKE vbak-ernam, " Criado por audat LIKE vbak-audat, " Data da ordem auart LIKE vbak-auart, " Tipo de ordem netwr LIKE vbak-netwr, " Valor líq. da ordem vkorg LIKE vbak-vkorg, " Org. de vendas vtweg LIKE vbak-vtweg, " Canal de distribuição spart LIKE vbak-spart, " Setor de atividade vkgrp LIKE vbak-vkgrp, " Grupo de vendedores vkbur LIKE vbak-vkbur, " Escritório de vendas box TYPE c , " Checkbox icone(30) TYPE c , " Ícone END OF we_saida.
3 – Faremos uma alteração na rotina Z_BUSCAR_DADOS, considerando o valor líquido da ordem de venda como referência para atribuição de ícones. *&---------------------------------------------------------------------* *& Form Z_BUSCAR_DADOS *&---------------------------------------------------------------------* * Obter informações para lista *----------------------------------------------------------------------* FORM z_buscar_dados.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
48
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
* Exibir mensagem PERFORM z_sapgui_progress_indicator USING 'Selecionando dados. Aguarde...'. * Obter dados da base SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp vkbur INTO TABLE wt_saida FROM vbak WHERE vbeln IN s_vbeln. * Atribuir ícones LOOP AT wt_saida. * Verificar valor líquido IF wt_saida-netwr GT '1000'. wt_saida-icone = icon_red_light. ELSEIF wt_saida-netwr GT '500'. wt_saida-icone = icon_yellow_light. ELSE. wt_saida-icone = icon_green_light. ENDIF. MODIFY wt_saida TRANSPORTING icone. ENDLOOP. ENDFORM.
" Z_BUSCAR_DADOS
Este é um exemplo da aplicação de ícones a listas ALVs. Neste caso estamos considerando que, ipoteticamente, ordens com valores líquidos entre 0 e 500 estariam liberadas, entre 501 e 1000 deveriam ter atenção e acima de 1000 devem ser analisadas, como se existissem limites para que uma ordem fosse liberada, etc... Você pode avaliar suas aplicações e encontrar uma aplicação real, aqui apenas queremos mostrar a ferramenta. 4 – Finalmente incluiremos o campos ICONE na tabela wt_fieldcat; *---------------------------------------------------------------------* * FORM Z_FIELDCAT_INIT * *---------------------------------------------------------------------* * Inicializar estrutura das informações da lista * *---------------------------------------------------------------------* * --> PT_FIELDCAT - Tab. com estrutura de linha * *---------------------------------------------------------------------* FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv. * Estruturas DATA: lf_fieldcat TYPE slis_fieldcat_alv. * Limpar tabela CLEAR pt_fieldcat[]. * Ícone clear lf_fieldcat. add 1 to lv_col_pos. lf_fieldcat-col_pos = lv_col_pos. lf_fieldcat-fieldname = 'ICONE'. lf_fieldcat-icon = 'X'. lf_fieldcat-datatype = 'CHAR'. lf_fieldcat-outputlen = '4'. append lf_fieldcat to pt_fieldcat. * Cód. doc. venda CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência lf_fieldcat-sp_group = 'A'. " Grupo de Ordem Vendas APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.
...
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
49
GUIA
BÁSICO
DE
PROGRAMAÇÃO
5 – Tela da lista;
FIGURA 13.1 Tela de lista com ícones.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
50
ALV
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Considerações Gerais Referências e ressalvas. Copyright:
Copyright 2001 Flavio Ricardo de Almeida. Todos os direitos reservados. O material contido neste manual pode ser reproduzido, alterado e redistribuído sem autorização prévia, desde que mantido os créditos. Sem vínculo algum com a SAP AG ou quaisquer de suas subsidiárias. Trademakrs: SAP®, R/3®, ABAP/4®, ABAP® são marcas registradas da SAP AG.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
51
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Apêndice A Programas utilizados como exemplos. Os programas podem ser baixados do site “Flavio’s Home Page” no endereço www.almeidafr.hpg.ig.com.br .
Capítulo 2 *$*$******************************************************************** *$*$ * *$*$ PROGRAMA: Meu primeiro ALV * *$*$ TIPO : Lista ALV * *$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria * *$*$ DATA : 12/12/2001 * *$** OBS. : * *$** * *$*$******************************************************************** *$*$ HISTÓRICO DAS MODIFICAÇÕES * *$*$-------------------------------------------------------------------* *$*$ DATA | AUTOR | DESCRIÇÃO * *$*$-------------------------------------------------------------------* *$** | | * *$*$******************************************************************** REPORT zfra0023_2 . *$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida. INCLUDE STRUCTURE vbak. TYPES: END OF we_saida. *$*$ Tabelas Internas -------------------------------------------------DATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE. *$*$ Variáveis --------------------------------------------------------* Nome do programa DATA: wv_repid LIKE sy-repid. *$*$ Tela de Seleção --------------------------------------------------SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-902. SELECT-OPTIONS: s_vbeln FOR wt_saida-vbeln. SELECTION-SCREEN END OF BLOCK b1. *$*$ Inicialização ----------------------------------------------------INITIALIZATION. wv_repid = sy-repid. *$*$ Programa Principal -----------------------------------------------START-OF-SELECTION. PERFORM z_buscar_dados. END-OF-SELECTION. * Construção da lista propriamente dita ( Exibição das informações ) PERFORM z_list_display. *$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------* *& Form Z_BUSCAR_DADOS
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
52
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*&---------------------------------------------------------------------* * Obter informações para lista *----------------------------------------------------------------------* FORM z_buscar_dados. PERFORM z_sapgui_progress_indicator USING 'Selecionando dados. Aguarde...'. SELECT * INTO TABLE wt_saida FROM vbak WHERE vbeln IN s_vbeln. ENDFORM.
" Z_BUSCAR_DADOS
*&---------------------------------------------------------------------* *& Form Z_LIST_DISPLAY *&---------------------------------------------------------------------* * Lista informações na tela *----------------------------------------------------------------------* FORM z_list_display. PERFORM z_sapgui_progress_indicator USING 'Estruturando a lista. Aguarde...'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = wv_repid i_structure_name = 'VBAK' i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verificar processamento da função IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
*&---------------------------------------------------------------------* *& Form Z_SAPGUI_PROGRESS_INDICATOR *&---------------------------------------------------------------------* * Interagir com o front-end - Enviar mensagens *----------------------------------------------------------------------* * --> PV_TEXT - Mensagem *----------------------------------------------------------------------* FORM z_sapgui_progress_indicator USING value(pv_text). CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING * PERCENTAGE = 0 text = pv_text. ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
" Z_SAPGUI_PROGRESS_INDICATOR
53
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo 3 *$*$******************************************************************** *$*$ * *$*$ PROGRAMA: Montando estrutura da lista ALV * *$*$ TIPO : Lista ALV * *$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria * *$*$ DATA : 12/12/2001 * *$** OBS. : * *$** * *$*$******************************************************************** *$*$ HISTÓRICO DAS MODIFICAÇÕES * *$*$-------------------------------------------------------------------* *$*$ DATA | AUTOR | DESCRIÇÃO * *$*$-------------------------------------------------------------------* *$** | | * *$*$******************************************************************** REPORT zfra0023_3. *$*$ Type pools -------------------------------------------------------TYPE-POOLS: slis. *$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida, vbeln LIKE vbak-vbeln, " Nro da ordem de venda erdat LIKE vbak-erdat, " Data de criação ernam LIKE vbak-ernam, " Criado por audat LIKE vbak-audat, " Data da ordem auart LIKE vbak-auart, " Tipo de ordem netwr LIKE vbak-netwr, " Valor líq. da ordem vkorg LIKE vbak-vkorg, " Org. de vendas vtweg LIKE vbak-vtweg, " Canal de distribuição spart LIKE vbak-spart, " Setor de atividade vkgrp LIKE vbak-vkgrp, " Grupo de vendedores vkbur LIKE vbak-vkbur, " Escritório de vendas END OF we_saida. *$*$ Tabelas Internas -------------------------------------------------DATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE. DATA: wt_fieldcat TYPE slis_t_fieldcat_alv. *$*$ Variáveis --------------------------------------------------------* Nome do programa DATA: wv_repid LIKE sy-repid. *$*$ Tela de Seleção --------------------------------------------------SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-902. SELECT-OPTIONS: s_vbeln FOR wt_saida-vbeln. SELECTION-SCREEN END OF BLOCK b1. *$*$ Inicialização ----------------------------------------------------INITIALIZATION. wv_repid = sy-repid. *$*$ Programa Principal -----------------------------------------------START-OF-SELECTION. PERFORM z_buscar_dados. * Indicar campos para exibição na lista PERFORM z_fieldcat_init USING wt_fieldcat[]. END-OF-SELECTION. * Construção da lista propriamente dita ( Exibição das informações ) PERFORM z_list_display. *$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------* *& Form Z_BUSCAR_DADOS Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
54
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*&---------------------------------------------------------------------* * Obter informações para lista *----------------------------------------------------------------------* FORM z_buscar_dados. PERFORM z_sapgui_progress_indicator USING 'Selecionando dados. Aguarde...'. SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp vkbur INTO TABLE wt_saida FROM vbak WHERE vbeln IN s_vbeln. ENDFORM.
" Z_BUSCAR_DADOS
*&---------------------------------------------------------------------* *& Form Z_LIST_DISPLAY *&---------------------------------------------------------------------* * Lista informações na tela *----------------------------------------------------------------------* FORM z_list_display. PERFORM z_sapgui_progress_indicator USING 'Estruturando a lista. Aguarde...'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = wv_repid * i_structure_name = 'VBAK' it_fieldcat = wt_fieldcat i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verificar processamento da função IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
*&---------------------------------------------------------------------* *& Form Z_SAPGUI_PROGRESS_INDICATOR *&---------------------------------------------------------------------* * Interagir com o front-end - Enviar mensagens *----------------------------------------------------------------------* * --> PV_TEXT - Mensagem *----------------------------------------------------------------------* FORM z_sapgui_progress_indicator USING value(pv_text). CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING * PERCENTAGE = 0 text = pv_text. ENDFORM.
" Z_SAPGUI_PROGRESS_INDICATOR
*---------------------------------------------------------------------* * FORM Z_FIELDCAT_INIT * *---------------------------------------------------------------------* * Inicializar estrutura das informações da lista * *---------------------------------------------------------------------* * --> PT_FIELDCAT - Tab. com estrutura de linha * *---------------------------------------------------------------------*
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
55
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv. * Estruturas DATA: lf_fieldcat TYPE slis_fieldcat_alv. * Limpar tabela CLEAR pt_fieldcat[]. * Cód. doc. venda CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VBELN'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Data de Criação CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERDAT'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Criado por CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERNAM'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Tipo de Ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'AUART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Valor líq. da ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'NETWR'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Organização de vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKORG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Canal de distribuição CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VTWEG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Setor de atividade CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'SPART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Grupo de Vendedores CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKGRP'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Escritório de Vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKBUR'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
" Nome do Campo " Tab. de Referência " Gravar na tab. config.
" FORM Z_FIELDCAT_INIT
56
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo 4 *$*$******************************************************************** *$*$ * *$*$ PROGRAMA: Ordenação de lista * *$*$ TIPO : Lista ALV * *$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria * *$*$ DATA : 12/12/2001 * *$** OBS. : * *$** * *$*$******************************************************************** *$*$ HISTÓRICO DAS MODIFICAÇÕES * *$*$-------------------------------------------------------------------* *$*$ DATA | AUTOR | DESCRIÇÃO * *$*$-------------------------------------------------------------------* *$** | | * *$*$******************************************************************** REPORT zfra0023_4. *$*$ Type pools -------------------------------------------------------TYPE-POOLS: slis. *$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida, vbeln LIKE vbak-vbeln, " Nro da ordem de venda erdat LIKE vbak-erdat, " Data de criação ernam LIKE vbak-ernam, " Criado por audat LIKE vbak-audat, " Data da ordem auart LIKE vbak-auart, " Tipo de ordem netwr LIKE vbak-netwr, " Valor líq. da ordem vkorg LIKE vbak-vkorg, " Org. de vendas vtweg LIKE vbak-vtweg, " Canal de distribuição spart LIKE vbak-spart, " Setor de atividade vkgrp LIKE vbak-vkgrp, " Grupo de vendedores vkbur LIKE vbak-vkbur, " Escritório de vendas END OF we_saida. *$*$ Tabelas Internas -------------------------------------------------* Tab. com dados para lista DATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE. * Tab. com informações sobre as características dos campos DATA: wt_fieldcat TYPE slis_t_fieldcat_alv. * Tab. com informações sobre a ordenação da lista DATA: wt_sort TYPE slis_t_sortinfo_alv. *$*$ Variáveis --------------------------------------------------------* Nome do programa DATA: wv_repid LIKE sy-repid. *$*$ Tela de Seleção --------------------------------------------------SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01. SELECT-OPTIONS: s_vbeln FOR wt_saida-vbeln. SELECTION-SCREEN END OF BLOCK b1. *$*$ Inicialização ----------------------------------------------------INITIALIZATION. wv_repid = sy-repid. *$*$ Programa Principal -----------------------------------------------START-OF-SELECTION. PERFORM z_buscar_dados. * Indicar campos para exibição na lista PERFORM z_fieldcat_init USING wt_fieldcat[]. * Ordenar lista PERFORM z_ordenar_lista USING wt_sort[]. Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
57
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
END-OF-SELECTION. * Construção da lista propriamente dita ( Exibição das informações ) PERFORM z_list_display. *$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------* *& Form Z_BUSCAR_DADOS *&---------------------------------------------------------------------* * Obter informações para lista *----------------------------------------------------------------------* FORM z_buscar_dados. PERFORM z_sapgui_progress_indicator USING 'Selecionando dados. Aguarde...'. SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp vkbur INTO TABLE wt_saida FROM vbak WHERE vbeln IN s_vbeln. ENDFORM.
" Z_BUSCAR_DADOS
*&---------------------------------------------------------------------* *& Form Z_LIST_DISPLAY *&---------------------------------------------------------------------* * Lista informações na tela *----------------------------------------------------------------------* FORM z_list_display. PERFORM z_sapgui_progress_indicator USING 'Estruturando a lista. Aguarde...'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = wv_repid * i_structure_name = 'VBAK' it_fieldcat = wt_fieldcat it_sort = wt_sort i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verificar processamento da função IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
*&---------------------------------------------------------------------* *& Form Z_SAPGUI_PROGRESS_INDICATOR *&---------------------------------------------------------------------* * Interagir com o front-end - Enviar mensagens *----------------------------------------------------------------------* * --> PV_TEXT - Mensagem *----------------------------------------------------------------------* FORM z_sapgui_progress_indicator USING value(pv_text). CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING * PERCENTAGE = 0 text = pv_text.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
58
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ENDFORM.
ALV
" Z_SAPGUI_PROGRESS_INDICATOR
*---------------------------------------------------------------------* * FORM Z_FIELDCAT_INIT * *---------------------------------------------------------------------* * Inicializar estrutura das informações da lista * *---------------------------------------------------------------------* * --> PT_FIELDCAT - Tab. com estrutura de linha * *---------------------------------------------------------------------* FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv. * Estruturas DATA: lf_fieldcat TYPE slis_fieldcat_alv. * Limpar tabela CLEAR pt_fieldcat[]. * Cód. doc. venda CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VBELN'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Data de Criação CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERDAT'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Criado por CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERNAM'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Tipo de Ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'AUART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Valor líq. da ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'NETWR'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-do_sum = 'X'. APPEND lf_fieldcat TO pt_fieldcat. * Organização de vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKORG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Canal de distribuição CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VTWEG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Setor de atividade CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'SPART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Grupo de Vendedores CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKGRP'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Escritório de Vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKBUR'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
" Nome do Campo " Tab. de Referência " Gravar na tab. config.
" FORM Z_FIELDCAT_INIT
59
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*&---------------------------------------------------------------------* *& Form Z_ORDENAR_LISTA *&---------------------------------------------------------------------* * Ordenação da lista *----------------------------------------------------------------------* * --> PT_SORT[] - Tabela com informações de ordenação dos campos *----------------------------------------------------------------------* FORM z_ordenar_lista USING pt_sort TYPE slis_t_sortinfo_alv. * Estrutura para gravar na lista DATA: lf_sort TYPE slis_sortinfo_alv. CLEAR lf_sort. * Montar estrutura lf_sort-spos lf_sort-fieldname lf_sort-tabname lf_sort-up lf_sort-expa APPEND lf_sort TO ** * * * * * *
= 1. = 'ERNAM'. = 'WT_SAIDA'. = 'X'. = 'X'. wt_sort.
" " " " "
Sequência de ordenação Nome do campo Nome da tabela de lista Ordenação Crescente Expandir lista
Outras opções possíveis de utilização lf_sort-down = 'X'. " Ordenação decrescente lf_sort-group = '*'. " Mudança de controle: quebra de " página, inserir sublinha lf_sort-subtot = 'X'. " Subtotal lf_sort-comp = 'X'. " Comprimir lista mostrando " apenas os subtotais
ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
" Z_ORDENAR_LISTA
60
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo 5 *$*$******************************************************************** *$*$ * *$*$ PROGRAMA: Especificação de grupos de campos da lista * *$*$ TIPO : Lista ALV * *$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria * *$*$ DATA : 12/12/2001 * *$** OBS. : * *$** * *$*$******************************************************************** *$*$ HISTÓRICO DAS MODIFICAÇÕES * *$*$-------------------------------------------------------------------* *$*$ DATA | AUTOR | DESCRIÇÃO * *$*$-------------------------------------------------------------------* *$** | | * *$*$******************************************************************** REPORT zfra0023_5. *$*$ Type pools -------------------------------------------------------TYPE-POOLS: slis. *$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida, vbeln LIKE vbak-vbeln, " Nro da ordem de venda erdat LIKE vbak-erdat, " Data de criação ernam LIKE vbak-ernam, " Criado por audat LIKE vbak-audat, " Data da ordem auart LIKE vbak-auart, " Tipo de ordem netwr LIKE vbak-netwr, " Valor líq. da ordem vkorg LIKE vbak-vkorg, " Org. de vendas vtweg LIKE vbak-vtweg, " Canal de distribuição spart LIKE vbak-spart, " Setor de atividade vkgrp LIKE vbak-vkgrp, " Grupo de vendedores vkbur LIKE vbak-vkbur, " Escritório de vendas END OF we_saida. *$*$ Tabelas Internas -------------------------------------------------* Tab. com dados para lista DATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE. * Tab. com informações sobre as características dos campos DATA: wt_fieldcat TYPE slis_t_fieldcat_alv. * Tab. com informações sobre a ordenação da lista DATA: wt_sort TYPE slis_t_sortinfo_alv. * Tab. de especificação de grupos DATA: wt_sp_group TYPE slis_t_sp_group_alv. *$*$ Variáveis --------------------------------------------------------* Nome do programa DATA: wv_repid LIKE sy-repid. *$*$ Tela de Seleção --------------------------------------------------SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01. SELECT-OPTIONS: s_vbeln FOR wt_saida-vbeln. SELECTION-SCREEN END OF BLOCK b1. *$*$ Inicialização ----------------------------------------------------INITIALIZATION. wv_repid = sy-repid. *$*$ Programa Principal -----------------------------------------------START-OF-SELECTION. PERFORM z_buscar_dados. * Indicar campos para exibição na lista PERFORM z_fieldcat_init USING wt_fieldcat[]. Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
61
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
* Ordenar lista PERFORM z_ordenar_lista USING wt_sort[]. * Grupos de campos PERFORM z_sp_group_build USING wt_sp_group[]. END-OF-SELECTION. * Construção da lista propriamente dita ( Exibição das informações ) PERFORM z_list_display. *$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------* *& Form Z_BUSCAR_DADOS *&---------------------------------------------------------------------* * Obter informações para lista *----------------------------------------------------------------------* FORM z_buscar_dados. PERFORM z_sapgui_progress_indicator USING 'Selecionando dados. Aguarde...'. SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp vkbur INTO TABLE wt_saida FROM vbak WHERE vbeln IN s_vbeln. ENDFORM.
" Z_BUSCAR_DADOS
*&---------------------------------------------------------------------* *& Form Z_LIST_DISPLAY *&---------------------------------------------------------------------* * Lista informações na tela *----------------------------------------------------------------------* FORM z_list_display. PERFORM z_sapgui_progress_indicator USING 'Estruturando a lista. Aguarde...'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = wv_repid * i_structure_name = 'VBAK' it_fieldcat = wt_fieldcat it_sort = wt_sort it_special_groups = wt_sp_group i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verificar processamento da função IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
*&---------------------------------------------------------------------* *& Form Z_SAPGUI_PROGRESS_INDICATOR *&---------------------------------------------------------------------* * Interagir com o front-end - Enviar mensagens *----------------------------------------------------------------------* * --> PV_TEXT - Mensagem *----------------------------------------------------------------------* FORM z_sapgui_progress_indicator USING value(pv_text).
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
62
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING * PERCENTAGE = 0 text = pv_text. ENDFORM.
" Z_SAPGUI_PROGRESS_INDICATOR
*---------------------------------------------------------------------* * FORM Z_FIELDCAT_INIT * *---------------------------------------------------------------------* * Inicializar estrutura das informações da lista * *---------------------------------------------------------------------* * --> PT_FIELDCAT - Tab. com estrutura de linha * *---------------------------------------------------------------------* FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv. * Estruturas DATA: lf_fieldcat TYPE slis_fieldcat_alv. * Limpar tabela CLEAR pt_fieldcat[]. * Cód. doc. venda CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VBELN'. lf_fieldcat-ref_tabname = 'VBAK'." lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. " * Data de Criação CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERDAT'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. * Criado por CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERNAM'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. * Tipo de Ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'AUART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Valor líq. da ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'NETWR'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'V'. " APPEND lf_fieldcat TO pt_fieldcat. * Organização de vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKORG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Canal de distribuição CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VTWEG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Setor de atividade CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'SPART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Grupo de Vendedores CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKGRP'. lf_fieldcat-ref_tabname = 'VBAK'.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
63
" Nome do Campo Tab. de Referência Grupo de Ordem Vendas Gravar na tab. config.
Grupo de Ordem Vendas
Grupo de Ordem Vendas
Grupo de Valores
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
APPEND lf_fieldcat TO pt_fieldcat. * Escritório de Vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKBUR'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. ENDFORM.
" FORM Z_FIELDCAT_INIT
*&---------------------------------------------------------------------* *& Form Z_ORDENAR_LISTA *&---------------------------------------------------------------------* * Ordenação da lista *----------------------------------------------------------------------* * --> PT_SORT[] - Tabela com informações de ordenação dos campos *----------------------------------------------------------------------* FORM z_ordenar_lista USING pt_sort TYPE slis_t_sortinfo_alv. * Estrutura para gravar na lista DATA: lf_sort TYPE slis_sortinfo_alv. CLEAR lf_sort. * Montar estrutura lf_sort-spos lf_sort-fieldname lf_sort-tabname lf_sort-up lf_sort-expa APPEND lf_sort TO ** * * * * * *
= 1. = 'ERNAM'. = 'WT_SAIDA'. = 'X'. = 'X'. wt_sort.
" " " " "
Sequência de ordenação Nome do campo Nome da tabela de lista Ordenação Crescente Expandir lista
Outras opções possíveis de utilização lf_sort-down = 'X'. " Ordenação decrescente lf_sort-group = '*'. " Mudança de controle: quebra de " página, inserir sublinha lf_sort-subtot = 'X'. " Subtotal lf_sort-comp = 'X'. " Comprimir lista mostrando " apenas os subtotais
ENDFORM.
" Z_ORDENAR_LISTA
*---------------------------------------------------------------------* * FORM Z_SP_GROUP_BUILD * *---------------------------------------------------------------------* * Definir tipos de grupos de campos * *---------------------------------------------------------------------* * --> PT_SP_GROUP - Estrutura do grupo de campos * *---------------------------------------------------------------------* FORM z_sp_group_build USING pt_sp_group TYPE slis_t_sp_group_alv. * Variáveis DATA: lf_sp_group TYPE slis_sp_group_alv. * Atribuir valores * Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'A'. lf_sp_group-text = 'Ordem de Venda'(g01). APPEND lf_sp_group TO pt_sp_group. * Status da Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'V'. lf_sp_group-text = 'Valores'(g02). APPEND lf_sp_group TO pt_sp_group. ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
" FORM Z_SP_GROUP_BUILD
64
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo 6 *$*$******************************************************************** *$*$ * *$*$ PROGRAMA: Variante de exibição * *$*$ TIPO : Lista ALV * *$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria * *$*$ DATA : 12/12/2001 * *$** OBS. : * *$** * *$*$******************************************************************** *$*$ HISTÓRICO DAS MODIFICAÇÕES * *$*$-------------------------------------------------------------------* *$*$ DATA | AUTOR | DESCRIÇÃO * *$*$-------------------------------------------------------------------* *$** | | * *$*$******************************************************************** REPORT zfra0023_6. *$*$ Type pools -------------------------------------------------------TYPE-POOLS: slis. *$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida, vbeln LIKE vbak-vbeln, " Nro da ordem de venda erdat LIKE vbak-erdat, " Data de criação ernam LIKE vbak-ernam, " Criado por audat LIKE vbak-audat, " Data da ordem auart LIKE vbak-auart, " Tipo de ordem netwr LIKE vbak-netwr, " Valor líq. da ordem vkorg LIKE vbak-vkorg, " Org. de vendas vtweg LIKE vbak-vtweg, " Canal de distribuição spart LIKE vbak-spart, " Setor de atividade vkgrp LIKE vbak-vkgrp, " Grupo de vendedores vkbur LIKE vbak-vkbur, " Escritório de vendas END OF we_saida. *$*$ Tabelas Internas -------------------------------------------------* Tab. com dados para lista DATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE. * Tab. com informações sobre as características dos campos DATA: wt_fieldcat TYPE slis_t_fieldcat_alv. * Tab. com informações sobre a ordenação da lista DATA: wt_sort TYPE slis_t_sortinfo_alv. * Tab. de especificação de grupos DATA: wt_sp_group TYPE slis_t_sp_group_alv. *$*$--- Estruturas ----------------------------------------------------DATA: wf_x_variant LIKE disvariant. DATA: wf_variant LIKE disvariant. *$*$ Variáveis --------------------------------------------------------* Nome do programa DATA: wv_repid LIKE sy-repid. *$*$ Tela de Seleção --------------------------------------------------SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01. SELECT-OPTIONS: s_vbeln FOR wt_saida-vbeln. SELECTION-SCREEN END OF BLOCK b1. * Variante SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02. PARAMETERS: p_vari LIKE disvariant-variant. SELECTION-SCREEN END OF BLOCK b2.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
65
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*$*$ Inicialização ----------------------------------------------------INITIALIZATION. wv_repid = sy-repid. * Atribuições para variante CLEAR wf_variant. wf_variant-report = wv_repid. *$*$ Ajudas de tela ---------------------------------------------------* Processo de ajuda para variante AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari. PERFORM z_f4_for_variant. *$*$ Validações de tela ----------------------------------------------- AT SELECTION-SCREEN ON p_vari. PERFORM z_validacao_variante. *$*$ Programa Principal -----------------------------------------------START-OF-SELECTION. PERFORM z_buscar_dados. * Indicar campos para exibição na lista PERFORM z_fieldcat_init USING wt_fieldcat[]. * Ordenar lista PERFORM z_ordenar_lista USING wt_sort[]. * Grupos de campos PERFORM z_sp_group_build USING wt_sp_group[]. END-OF-SELECTION. * Construção da lista propriamente dita ( Exibição das informações ) PERFORM z_list_display. *$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------* *& Form Z_BUSCAR_DADOS *&---------------------------------------------------------------------* * Obter informações para lista *----------------------------------------------------------------------* FORM z_buscar_dados. PERFORM z_sapgui_progress_indicator USING 'Selecionando dados. Aguarde...'. SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp vkbur INTO TABLE wt_saida FROM vbak WHERE vbeln IN s_vbeln. ENDFORM.
" Z_BUSCAR_DADOS
*&---------------------------------------------------------------------* *& Form Z_LIST_DISPLAY *&---------------------------------------------------------------------* * Lista informações na tela *----------------------------------------------------------------------* FORM z_list_display. PERFORM z_sapgui_progress_indicator USING 'Estruturando a lista. Aguarde...'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = wv_repid * i_structure_name = 'VBAK' it_fieldcat = wt_fieldcat it_sort = wt_sort it_special_groups = wt_sp_group i_save = 'A' TABLES
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
66
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verificar processamento da função IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
*&---------------------------------------------------------------------* *& Form Z_SAPGUI_PROGRESS_INDICATOR *&---------------------------------------------------------------------* * Interagir com o front-end - Enviar mensagens *----------------------------------------------------------------------* * --> PV_TEXT - Mensagem *----------------------------------------------------------------------* FORM z_sapgui_progress_indicator USING value(pv_text). CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING * PERCENTAGE = 0 text = pv_text. ENDFORM.
" Z_SAPGUI_PROGRESS_INDICATOR
*---------------------------------------------------------------------* * FORM Z_FIELDCAT_INIT * *---------------------------------------------------------------------* * Inicializar estrutura das informações da lista * *---------------------------------------------------------------------* * --> PT_FIELDCAT - Tab. com estrutura de linha * *---------------------------------------------------------------------* FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv. * Estruturas DATA: lf_fieldcat TYPE slis_fieldcat_alv. * Limpar tabela CLEAR pt_fieldcat[]. * Cód. doc. venda CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VBELN'. lf_fieldcat-ref_tabname = 'VBAK'." lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. " * Data de Criação CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERDAT'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. * Criado por CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERNAM'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. * Tipo de Ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'AUART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Valor líq. da ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'NETWR'. lf_fieldcat-ref_tabname = 'VBAK'.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
67
" Nome do Campo Tab. de Referência Grupo de Ordem Vendas Gravar na tab. config.
Grupo de Ordem Vendas
Grupo de Ordem Vendas
GUIA
*
*
*
*
*
BÁSICO
DE
PROGRAMAÇÃO
ALV
lf_fieldcat-sp_group = 'V'. " Grupo de Valores APPEND lf_fieldcat TO pt_fieldcat. Organização de vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKORG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Canal de distribuição CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VTWEG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Setor de atividade CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'SPART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Grupo de Vendedores CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKGRP'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Escritório de Vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKBUR'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat.
ENDFORM.
" FORM Z_FIELDCAT_INIT
*&---------------------------------------------------------------------* *& Form Z_ORDENAR_LISTA *&---------------------------------------------------------------------* * Ordenação da lista *----------------------------------------------------------------------* * --> PT_SORT[] - Tabela com informações de ordenação dos campos *----------------------------------------------------------------------* FORM z_ordenar_lista USING pt_sort TYPE slis_t_sortinfo_alv. * Estrutura para gravar na lista DATA: lf_sort TYPE slis_sortinfo_alv. CLEAR lf_sort. * Montar estrutura lf_sort-spos lf_sort-fieldname lf_sort-tabname lf_sort-up lf_sort-expa APPEND lf_sort TO ** * * * * * *
= 1. = 'ERNAM'. = 'WT_SAIDA'. = 'X'. = 'X'. wt_sort.
" " " " "
Sequência de ordenação Nome do campo Nome da tabela de lista Ordenação Crescente Expandir lista
Outras opções possíveis de utilização lf_sort-down = 'X'. " Ordenação decrescente lf_sort-group = '*'. " Mudança de controle: quebra de " página, inserir sublinha lf_sort-subtot = 'X'. " Subtotal lf_sort-comp = 'X'. " Comprimir lista mostrando " apenas os subtotais
ENDFORM.
" Z_ORDENAR_LISTA
*---------------------------------------------------------------------* * FORM Z_SP_GROUP_BUILD * *---------------------------------------------------------------------* * Definir tipos de grupos de campos * *---------------------------------------------------------------------* * --> PT_SP_GROUP - Estrutura do grupo de campos * *---------------------------------------------------------------------* FORM z_sp_group_build USING pt_sp_group TYPE slis_t_sp_group_alv.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
68
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
* Variáveis DATA: lf_sp_group TYPE slis_sp_group_alv. * Atribuir valores * Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'A'. lf_sp_group-text = 'Ordem de Venda'(g01). APPEND lf_sp_group TO pt_sp_group. * Status da Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'V'. lf_sp_group-text = 'Valores'(g02). APPEND lf_sp_group TO pt_sp_group. ENDFORM.
" FORM Z_SP_GROUP_BUILD
*&---------------------------------------------------------------------* *& Form Z_F4_FOR_VARIANT *&---------------------------------------------------------------------* * Processo de ajuda pra variante *----------------------------------------------------------------------* FORM z_f4_for_variant. * Variável local DATA: lv_exit. * Encontrar variante CALL FUNCTION 'REUSE_ALV_VARIANT_F4' EXPORTING is_variant = wf_variant i_save = 'A' * it_default_fieldcat = IMPORTING e_exit = lv_exit es_variant = wf_x_variant EXCEPTIONS not_found = 2. * Verificar processamento da função IF sy-subrc = 2. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. * Atribuir valor IF lv_exit = space. p_vari = wf_x_variant-variant. ENDIF. ENDIF. ENDFORM.
" Z_F4_FOR_VARIANT
*&---------------------------------------------------------------------* *& Form Z_VALIDACAO_VARIANTE *&---------------------------------------------------------------------* * Realizar validação da variante de exibição *----------------------------------------------------------------------* FORM z_validacao_variante. * Variante IF NOT p_vari IS INITIAL. MOVE: wf_variant TO wf_x_variant, p_vari TO wf_x_variant-variant. * Verificar existencia CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE' EXPORTING i_save = 'A' CHANGING cs_variant = wf_x_variant. wf_variant = wf_x_variant. ELSE.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
69
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
CLEAR: wf_variant. wf_variant-report = wv_repid. ENDIF. ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
" Z_VALIDACAO_VARIANTE
70
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo 7 *$*$******************************************************************** *$*$ * *$*$ PROGRAMA: Configurações de impressão * *$*$ TIPO : Lista ALV * *$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria * *$*$ DATA : 12/12/2001 * *$** OBS. : * *$** * *$*$******************************************************************** *$*$ HISTÓRICO DAS MODIFICAÇÕES * *$*$-------------------------------------------------------------------* *$*$ DATA | AUTOR | DESCRIÇÃO * *$*$-------------------------------------------------------------------* *$** | | * *$*$******************************************************************** REPORT zfra0023_7. *$*$ Type pools -------------------------------------------------------TYPE-POOLS: slis. *$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida, vbeln LIKE vbak-vbeln, " Nro da ordem de venda erdat LIKE vbak-erdat, " Data de criação ernam LIKE vbak-ernam, " Criado por audat LIKE vbak-audat, " Data da ordem auart LIKE vbak-auart, " Tipo de ordem netwr LIKE vbak-netwr, " Valor líq. da ordem vkorg LIKE vbak-vkorg, " Org. de vendas vtweg LIKE vbak-vtweg, " Canal de distribuição spart LIKE vbak-spart, " Setor de atividade vkgrp LIKE vbak-vkgrp, " Grupo de vendedores vkbur LIKE vbak-vkbur, " Escritório de vendas END OF we_saida. *$*$ Tabelas Internas -------------------------------------------------* Tab. com dados para lista DATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE. * Tab. com informações sobre as características dos campos DATA: wt_fieldcat TYPE slis_t_fieldcat_alv. * Tab. com informações sobre a ordenação da lista DATA: wt_sort TYPE slis_t_sortinfo_alv. * Tab. de especificação de grupos DATA: wt_sp_group TYPE slis_t_sp_group_alv. *$*$--- Estruturas ----------------------------------------------------DATA: wf_x_variant LIKE disvariant. DATA: wf_variant LIKE disvariant. DATA: wf_print
TYPE slis_print_alv.
*$*$ Variáveis --------------------------------------------------------* Nome do programa DATA: wv_repid LIKE sy-repid. *$*$ Tela de Seleção --------------------------------------------------SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01. SELECT-OPTIONS: s_vbeln FOR wt_saida-vbeln. SELECTION-SCREEN END OF BLOCK b1. * Variante SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02. Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
71
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
PARAMETERS: p_vari LIKE disvariant-variant. SELECTION-SCREEN END OF BLOCK b2. *$*$ Inicialização ----------------------------------------------------INITIALIZATION. wv_repid = sy-repid. * Atribuições para variante CLEAR wf_variant. wf_variant-report = wv_repid. *$*$ Ajudas de tela ---------------------------------------------------* Processo de ajuda para variante AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari. PERFORM z_f4_for_variant. *$*$ Validações de tela ----------------------------------------------- AT SELECTION-SCREEN ON p_vari. PERFORM z_validacao_variante. *$*$ Programa Principal -----------------------------------------------START-OF-SELECTION. PERFORM z_buscar_dados. * Indicar campos para exibição na lista PERFORM z_fieldcat_init USING wt_fieldcat[]. * Ordenar lista PERFORM z_ordenar_lista USING wt_sort[]. * Grupos de campos PERFORM z_sp_group_build USING wt_sp_group[]. END-OF-SELECTION. * Parâmetros de impressão PERFORM z_print_build USING wf_print. * Construção da lista propriamente dita ( Exibição das informações ) PERFORM z_list_display. *$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------* *& Form Z_BUSCAR_DADOS *&---------------------------------------------------------------------* * Obter informações para lista *----------------------------------------------------------------------* FORM z_buscar_dados. PERFORM z_sapgui_progress_indicator USING 'Selecionando dados. Aguarde...'. SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp vkbur INTO TABLE wt_saida FROM vbak WHERE vbeln IN s_vbeln. ENDFORM.
" Z_BUSCAR_DADOS
*&---------------------------------------------------------------------* *& Form Z_LIST_DISPLAY *&---------------------------------------------------------------------* * Lista informações na tela *----------------------------------------------------------------------* FORM z_list_display. PERFORM z_sapgui_progress_indicator USING 'Estruturando a lista. Aguarde...'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = wv_repid * i_structure_name = 'VBAK'
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
72
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
it_fieldcat = wt_fieldcat it_sort = wt_sort it_special_groups = wt_sp_group is_print = wf_print i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verificar processamento da função IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
*&---------------------------------------------------------------------* *& Form Z_SAPGUI_PROGRESS_INDICATOR *&---------------------------------------------------------------------* * Interagir com o front-end - Enviar mensagens *----------------------------------------------------------------------* * --> PV_TEXT - Mensagem *----------------------------------------------------------------------* FORM z_sapgui_progress_indicator USING value(pv_text). CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING * PERCENTAGE = 0 text = pv_text. ENDFORM.
" Z_SAPGUI_PROGRESS_INDICATOR
*---------------------------------------------------------------------* * FORM Z_FIELDCAT_INIT * *---------------------------------------------------------------------* * Inicializar estrutura das informações da lista * *---------------------------------------------------------------------* * --> PT_FIELDCAT - Tab. com estrutura de linha * *---------------------------------------------------------------------* FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv. * Estruturas DATA: lf_fieldcat TYPE slis_fieldcat_alv. * Limpar tabela CLEAR pt_fieldcat[]. * Cód. doc. venda CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VBELN'. lf_fieldcat-ref_tabname = 'VBAK'." lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. " * Data de Criação CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERDAT'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. * Criado por CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERNAM'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. * Tipo de Ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'AUART'.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
73
" Nome do Campo Tab. de Referência Grupo de Ordem Vendas Gravar na tab. config.
Grupo de Ordem Vendas
Grupo de Ordem Vendas
GUIA
*
*
*
*
*
*
BÁSICO
DE
PROGRAMAÇÃO
ALV
lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Valor líq. da ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'NETWR'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'V'. " Grupo de Valores APPEND lf_fieldcat TO pt_fieldcat. Organização de vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKORG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Canal de distribuição CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VTWEG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Setor de atividade CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'SPART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Grupo de Vendedores CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKGRP'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Escritório de Vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKBUR'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat.
ENDFORM.
" FORM Z_FIELDCAT_INIT
*&---------------------------------------------------------------------* *& Form Z_ORDENAR_LISTA *&---------------------------------------------------------------------* * Ordenação da lista *----------------------------------------------------------------------* * --> PT_SORT[] - Tabela com informações de ordenação dos campos *----------------------------------------------------------------------* FORM z_ordenar_lista USING pt_sort TYPE slis_t_sortinfo_alv. * Estrutura para gravar na lista DATA: lf_sort TYPE slis_sortinfo_alv. CLEAR lf_sort. * Montar estrutura lf_sort-spos lf_sort-fieldname lf_sort-tabname lf_sort-up lf_sort-expa APPEND lf_sort TO ** * * * * * *
= 1. = 'ERNAM'. = 'WT_SAIDA'. = 'X'. = 'X'. wt_sort.
" " " " "
Sequência de ordenação Nome do campo Nome da tabela de lista Ordenação Crescente Expandir lista
Outras opções possíveis de utilização lf_sort-down = 'X'. " Ordenação decrescente lf_sort-group = '*'. " Mudança de controle: quebra de " página, inserir sublinha lf_sort-subtot = 'X'. " Subtotal lf_sort-comp = 'X'. " Comprimir lista mostrando " apenas os subtotais
ENDFORM.
" Z_ORDENAR_LISTA
*---------------------------------------------------------------------* * FORM Z_SP_GROUP_BUILD *
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
74
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*---------------------------------------------------------------------* * Definir tipos de grupos de campos * *---------------------------------------------------------------------* * --> PT_SP_GROUP - Estrutura do grupo de campos * *---------------------------------------------------------------------* FORM z_sp_group_build USING pt_sp_group TYPE slis_t_sp_group_alv. * Variáveis DATA: lf_sp_group TYPE slis_sp_group_alv. * Atribuir valores * Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'A'. lf_sp_group-text = 'Ordem de Venda'(g01). APPEND lf_sp_group TO pt_sp_group. * Status da Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'V'. lf_sp_group-text = 'Valores'(g02). APPEND lf_sp_group TO pt_sp_group. ENDFORM.
" FORM Z_SP_GROUP_BUILD
*&---------------------------------------------------------------------* *& Form Z_F4_FOR_VARIANT *&---------------------------------------------------------------------* * Processo de ajuda pra variante *----------------------------------------------------------------------* FORM z_f4_for_variant. * Variável local DATA: lv_exit. * Encontrar variante CALL FUNCTION 'REUSE_ALV_VARIANT_F4' EXPORTING is_variant = wf_variant i_save = 'A' * it_default_fieldcat = IMPORTING e_exit = lv_exit es_variant = wf_x_variant EXCEPTIONS not_found = 2. * Verificar processamento da função IF sy-subrc = 2. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. * Atribuir valor IF lv_exit = space. p_vari = wf_x_variant-variant. ENDIF. ENDIF. ENDFORM.
" Z_F4_FOR_VARIANT
*&---------------------------------------------------------------------* *& Form Z_VALIDACAO_VARIANTE *&---------------------------------------------------------------------* * Realizar validação da variante de exibição *----------------------------------------------------------------------* FORM z_validacao_variante. * Variante IF NOT p_vari IS INITIAL. MOVE: wf_variant TO wf_x_variant, p_vari TO wf_x_variant-variant. * Verificar existencia CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
75
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
EXPORTING i_save = 'A' CHANGING cs_variant = wf_x_variant. wf_variant = wf_x_variant. ELSE. CLEAR: wf_variant. wf_variant-report = wv_repid. ENDIF. ENDFORM.
" Z_VALIDACAO_VARIANTE
*---------------------------------------------------------------------* * FORM Z_PRINT_BUILD * *---------------------------------------------------------------------* * Definir atributos de impressão da lista * *---------------------------------------------------------------------* * --> PF_PRINT - Estrutura com atributos da impressão da lista * *---------------------------------------------------------------------* FORM z_print_build USING pf_print TYPE slis_print_alv. * * PF_PRINT-PRINT = 'X'. " Imprimir no SPOOL pf_print-no_print_selinfos = 'X'. " Não listar info. sobre seleção pf_print-no_coverpage = 'X'. " Não listar página de rostp pf_print-no_print_listinfos = 'X'. " Não listar info. sobre a lista * PF_PRINT-RESERVE_LINES = 'X'. " Reservar linhas * PF_PRINT-NO_NEW_PAGE = 'X'. " Sem novas páginas * PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " Não alterar tamanho da linha ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
" Z_PRINT_BUILD
76
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo 8 *$*$******************************************************************** *$*$ * *$*$ PROGRAMA: Layout de linha * *$*$ TIPO : Lista ALV * *$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria * *$*$ DATA : 12/12/2001 * *$** OBS. : * *$** * *$*$******************************************************************** *$*$ HISTÓRICO DAS MODIFICAÇÕES * *$*$-------------------------------------------------------------------* *$*$ DATA | AUTOR | DESCRIÇÃO * *$*$-------------------------------------------------------------------* *$** | | * *$*$******************************************************************** REPORT zfra0023_8. *$*$ Type pools -------------------------------------------------------TYPE-POOLS: slis. *$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida, vbeln LIKE vbak-vbeln, " Nro da ordem de venda erdat LIKE vbak-erdat, " Data de criação ernam LIKE vbak-ernam, " Criado por audat LIKE vbak-audat, " Data da ordem auart LIKE vbak-auart, " Tipo de ordem netwr LIKE vbak-netwr, " Valor líq. da ordem vkorg LIKE vbak-vkorg, " Org. de vendas vtweg LIKE vbak-vtweg, " Canal de distribuição spart LIKE vbak-spart, " Setor de atividade vkgrp LIKE vbak-vkgrp, " Grupo de vendedores vkbur LIKE vbak-vkbur, " Escritório de vendas box , " Checkbox END OF we_saida. *$*$ Tabelas Internas -------------------------------------------------* Tab. com dados para lista DATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE. * Tab. com informações sobre as características dos campos DATA: wt_fieldcat TYPE slis_t_fieldcat_alv. * Tab. com informações sobre a ordenação da lista DATA: wt_sort TYPE slis_t_sortinfo_alv. * Tab. de especificação de grupos DATA: wt_sp_group TYPE slis_t_sp_group_alv. *$*$--- Estruturas ----------------------------------------------------DATA: wf_x_variant LIKE disvariant. DATA: wf_variant LIKE disvariant. DATA: wf_print
TYPE slis_print_alv.
DATA: wf_layout
TYPE slis_layout_alv.
*$*$ Variáveis --------------------------------------------------------* Nome do programa DATA: wv_repid LIKE sy-repid. *$*$ Tela de Seleção --------------------------------------------------SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01. SELECT-OPTIONS: s_vbeln FOR wt_saida-vbeln. SELECTION-SCREEN END OF BLOCK b1.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
77
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
* Variante SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02. PARAMETERS: p_vari LIKE disvariant-variant. SELECTION-SCREEN END OF BLOCK b2. *$*$ Inicialização ----------------------------------------------------INITIALIZATION. wv_repid = sy-repid. * Atribuições para variante CLEAR wf_variant. wf_variant-report = wv_repid. *$*$ Ajudas de tela ---------------------------------------------------* Processo de ajuda para variante AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari. PERFORM z_f4_for_variant. *$*$ Validações de tela ----------------------------------------------- AT SELECTION-SCREEN ON p_vari. PERFORM z_validacao_variante. *$*$ Programa Principal -----------------------------------------------START-OF-SELECTION. PERFORM z_buscar_dados. * Indicar campos para exibição na lista PERFORM z_fieldcat_init USING wt_fieldcat[]. * Ordenar lista PERFORM z_ordenar_lista USING wt_sort[]. * Grupos de campos PERFORM z_sp_group_build USING wt_sp_group[]. END-OF-SELECTION. * Parâmetros de impressão PERFORM z_print_build USING wf_print. * Layout da lista - Referente as definições PERFORM z_layout_build USING wf_layout. * Construção da lista propriamente dita ( Exibição das informações ) PERFORM z_list_display. *$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------* *& Form Z_BUSCAR_DADOS *&---------------------------------------------------------------------* * Obter informações para lista *----------------------------------------------------------------------* FORM z_buscar_dados. PERFORM z_sapgui_progress_indicator USING 'Selecionando dados. Aguarde...'. SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp vkbur INTO TABLE wt_saida FROM vbak WHERE vbeln IN s_vbeln. ENDFORM.
" Z_BUSCAR_DADOS
*&---------------------------------------------------------------------* *& Form Z_LIST_DISPLAY *&---------------------------------------------------------------------* * Lista informações na tela *----------------------------------------------------------------------* FORM z_list_display. PERFORM z_sapgui_progress_indicator USING 'Estruturando a lista. Aguarde...'.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
78
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = wv_repid * i_structure_name = 'VBAK' it_fieldcat = wt_fieldcat it_sort = wt_sort it_special_groups = wt_sp_group is_print = wf_print is_layout = wf_layout i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verificar processamento da função IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
*&---------------------------------------------------------------------* *& Form Z_SAPGUI_PROGRESS_INDICATOR *&---------------------------------------------------------------------* * Interagir com o front-end - Enviar mensagens *----------------------------------------------------------------------* * --> PV_TEXT - Mensagem *----------------------------------------------------------------------* FORM z_sapgui_progress_indicator USING value(pv_text). CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING * PERCENTAGE = 0 text = pv_text. ENDFORM.
" Z_SAPGUI_PROGRESS_INDICATOR
*---------------------------------------------------------------------* * FORM Z_FIELDCAT_INIT * *---------------------------------------------------------------------* * Inicializar estrutura das informações da lista * *---------------------------------------------------------------------* * --> PT_FIELDCAT - Tab. com estrutura de linha * *---------------------------------------------------------------------* FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv. * Estruturas DATA: lf_fieldcat TYPE slis_fieldcat_alv. * Limpar tabela CLEAR pt_fieldcat[]. * Cód. doc. venda CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VBELN'. lf_fieldcat-ref_tabname = 'VBAK'." lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. " * Data de Criação CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERDAT'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. * Criado por CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERNAM'. lf_fieldcat-ref_tabname = 'VBAK'.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
79
" Nome do Campo Tab. de Referência Grupo de Ordem Vendas Gravar na tab. config.
Grupo de Ordem Vendas
GUIA
*
*
*
*
*
*
*
BÁSICO
DE
PROGRAMAÇÃO
ALV
lf_fieldcat-sp_group = 'A'. " Grupo de Ordem Vendas APPEND lf_fieldcat TO pt_fieldcat. Tipo de Ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'AUART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Valor líq. da ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'NETWR'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'V'. " Grupo de Valores APPEND lf_fieldcat TO pt_fieldcat. Organização de vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKORG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Canal de distribuição CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VTWEG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Setor de atividade CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'SPART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Grupo de Vendedores CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKGRP'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Escritório de Vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKBUR'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat.
ENDFORM.
" FORM Z_FIELDCAT_INIT
*&---------------------------------------------------------------------* *& Form Z_ORDENAR_LISTA *&---------------------------------------------------------------------* * Ordenação da lista *----------------------------------------------------------------------* * --> PT_SORT[] - Tabela com informações de ordenação dos campos *----------------------------------------------------------------------* FORM z_ordenar_lista USING pt_sort TYPE slis_t_sortinfo_alv. * Estrutura para gravar na lista DATA: lf_sort TYPE slis_sortinfo_alv. CLEAR lf_sort. * Montar estrutura lf_sort-spos lf_sort-fieldname lf_sort-tabname lf_sort-up lf_sort-expa APPEND lf_sort TO ** * * * * * *
= 1. = 'ERNAM'. = 'WT_SAIDA'. = 'X'. = 'X'. wt_sort.
" " " " "
Sequência de ordenação Nome do campo Nome da tabela de lista Ordenação Crescente Expandir lista
Outras opções possíveis de utilização lf_sort-down = 'X'. " Ordenação decrescente lf_sort-group = '*'. " Mudança de controle: quebra de " página, inserir sublinha lf_sort-subtot = 'X'. " Subtotal lf_sort-comp = 'X'. " Comprimir lista mostrando " apenas os subtotais
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
80
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ENDFORM.
ALV
" Z_ORDENAR_LISTA
*---------------------------------------------------------------------* * FORM Z_SP_GROUP_BUILD * *---------------------------------------------------------------------* * Definir tipos de grupos de campos * *---------------------------------------------------------------------* * --> PT_SP_GROUP - Estrutura do grupo de campos * *---------------------------------------------------------------------* FORM z_sp_group_build USING pt_sp_group TYPE slis_t_sp_group_alv. * Variáveis DATA: lf_sp_group TYPE slis_sp_group_alv. * Atribuir valores * Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'A'. lf_sp_group-text = 'Ordem de Venda'(g01). APPEND lf_sp_group TO pt_sp_group. * Status da Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'V'. lf_sp_group-text = 'Valores'(g02). APPEND lf_sp_group TO pt_sp_group. ENDFORM.
" FORM Z_SP_GROUP_BUILD
*&---------------------------------------------------------------------* *& Form Z_F4_FOR_VARIANT *&---------------------------------------------------------------------* * Processo de ajuda pra variante *----------------------------------------------------------------------* FORM z_f4_for_variant. * Variável local DATA: lv_exit. * Encontrar variante CALL FUNCTION 'REUSE_ALV_VARIANT_F4' EXPORTING is_variant = wf_variant i_save = 'A' * it_default_fieldcat = IMPORTING e_exit = lv_exit es_variant = wf_x_variant EXCEPTIONS not_found = 2. * Verificar processamento da função IF sy-subrc = 2. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. * Atribuir valor IF lv_exit = space. p_vari = wf_x_variant-variant. ENDIF. ENDIF. ENDFORM.
" Z_F4_FOR_VARIANT
*&---------------------------------------------------------------------* *& Form Z_VALIDACAO_VARIANTE *&---------------------------------------------------------------------* * Realizar validação da variante de exibição *----------------------------------------------------------------------* FORM z_validacao_variante. * Variante
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
81
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
IF NOT p_vari IS INITIAL. MOVE: wf_variant TO wf_x_variant, p_vari TO wf_x_variant-variant. * Verificar existencia CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE' EXPORTING i_save = 'A' CHANGING cs_variant = wf_x_variant. wf_variant = wf_x_variant. ELSE. CLEAR: wf_variant. wf_variant-report = wv_repid. ENDIF. ENDFORM.
" Z_VALIDACAO_VARIANTE
*---------------------------------------------------------------------* * FORM Z_PRINT_BUILD * *---------------------------------------------------------------------* * Definir atributos de impressão da lista * *---------------------------------------------------------------------* * --> PF_PRINT - Estrutura com atributos da impressão da lista * *---------------------------------------------------------------------* FORM z_print_build USING pf_print TYPE slis_print_alv. * * PF_PRINT-PRINT = 'X'. " Imprimir no SPOOL pf_print-no_print_selinfos = 'X'. " Não listar info. sobre seleção pf_print-no_coverpage = 'X'. " Não listar página de rostp pf_print-no_print_listinfos = 'X'. " Não listar info. sobre a lista * PF_PRINT-RESERVE_LINES = 'X'. " Reservar linhas * PF_PRINT-NO_NEW_PAGE = 'X'. " Sem novas páginas * PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " Não alterar tamanho da linha ENDFORM.
" Z_PRINT_BUILD
*&---------------------------------------------------------------------* *& Form Z_LAYOUT_BUILD *&---------------------------------------------------------------------* * Layout de saída *----------------------------------------------------------------------* * --> PF_LAYOUT - Estrutura para layout de saída da lista *----------------------------------------------------------------------* FORM z_layout_build USING pf_layout TYPE slis_layout_alv. pf_layout-group_change_edit = 'X'. * Check box na lista pf_layout-box_fieldname = 'BOX'. pf_layout-box_tabname = 'WT_SAIDA'. ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
" Z_LAYOUT_BUILD
82
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo 9 *$*$******************************************************************** *$*$ * *$*$ PROGRAMA: Eventos * *$*$ TIPO : Lista ALV * *$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria * *$*$ DATA : 12/12/2001 * *$** OBS. : * *$** * *$*$******************************************************************** *$*$ HISTÓRICO DAS MODIFICAÇÕES * *$*$-------------------------------------------------------------------* *$*$ DATA | AUTOR | DESCRIÇÃO * *$*$-------------------------------------------------------------------* *$** | | * *$*$******************************************************************** REPORT zfra0023_9. *$*$ Type pools -------------------------------------------------------TYPE-POOLS: slis. *$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida, vbeln LIKE vbak-vbeln, " Nro da ordem de venda erdat LIKE vbak-erdat, " Data de criação ernam LIKE vbak-ernam, " Criado por audat LIKE vbak-audat, " Data da ordem auart LIKE vbak-auart, " Tipo de ordem netwr LIKE vbak-netwr, " Valor líq. da ordem vkorg LIKE vbak-vkorg, " Org. de vendas vtweg LIKE vbak-vtweg, " Canal de distribuição spart LIKE vbak-spart, " Setor de atividade vkgrp LIKE vbak-vkgrp, " Grupo de vendedores vkbur LIKE vbak-vkbur, " Escritório de vendas box , " Checkbox END OF we_saida. *$*$ Tabelas Internas -------------------------------------------------* Tab. com dados para lista DATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE. * Tab. com informações sobre as características dos campos DATA: wt_fieldcat TYPE slis_t_fieldcat_alv. * Tab. com informações sobre a ordenação da lista DATA: wt_sort TYPE slis_t_sortinfo_alv. * Tab. de especificação de grupos DATA: wt_sp_group TYPE slis_t_sp_group_alv. * Tab. de eventos DATA: wt_events TYPE slis_t_event. *$*$--- Estruturas DATA: wf_x_variant DATA: wf_variant DATA: wf_print DATA: wf_layout
----------------------------------------------------LIKE disvariant. LIKE disvariant. TYPE slis_print_alv. TYPE slis_layout_alv.
*$*$ Variáveis --------------------------------------------------------* Nome do programa DATA: wv_repid LIKE sy-repid. *$*$ Tela de Seleção --------------------------------------------------SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01. SELECT-OPTIONS: s_vbeln FOR wt_saida-vbeln. SELECTION-SCREEN END OF BLOCK b1. Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
83
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
* Variante SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02. PARAMETERS: p_vari LIKE disvariant-variant. SELECTION-SCREEN END OF BLOCK b2. *$*$ Inicialização ----------------------------------------------------INITIALIZATION. wv_repid = sy-repid. * Atribuições para variante CLEAR wf_variant. wf_variant-report = wv_repid. *$*$ Ajudas de tela ---------------------------------------------------* Processo de ajuda para variante AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari. PERFORM z_f4_for_variant. *$*$ Validações de tela ----------------------------------------------- AT SELECTION-SCREEN ON p_vari. PERFORM z_validacao_variante. *$*$ Programa Principal -----------------------------------------------START-OF-SELECTION. PERFORM z_buscar_dados. * Indicar campos para exibição na lista PERFORM z_fieldcat_init USING wt_fieldcat[]. * Ordenar lista PERFORM z_ordenar_lista USING wt_sort[]. * Grupos de campos PERFORM z_sp_group_build USING wt_sp_group[]. * Eventos que podem ser acionados na lista PERFORM z_eventtab_build USING wt_events[]. END-OF-SELECTION. * Parâmetros de impressão PERFORM z_print_build USING wf_print. * Layout da lista - Referente as definições PERFORM z_layout_build USING wf_layout. * Construção da lista propriamente dita ( Exibição das informações ) PERFORM z_list_display. *$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------* *& Form Z_BUSCAR_DADOS *&---------------------------------------------------------------------* * Obter informações para lista *----------------------------------------------------------------------* FORM z_buscar_dados. PERFORM z_sapgui_progress_indicator USING 'Selecionando dados. Aguarde...'. SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp vkbur INTO TABLE wt_saida FROM vbak WHERE vbeln IN s_vbeln. ENDFORM.
" Z_BUSCAR_DADOS
*&---------------------------------------------------------------------* *& Form Z_LIST_DISPLAY *&---------------------------------------------------------------------* * Lista informações na tela *----------------------------------------------------------------------* FORM z_list_display.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
84
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
PERFORM z_sapgui_progress_indicator USING 'Estruturando a lista. Aguarde...'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = wv_repid it_fieldcat = wt_fieldcat it_sort = wt_sort it_special_groups = wt_sp_group is_print = wf_print is_layout = wf_layout it_events = wt_events i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verificar processamento da função IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
*&---------------------------------------------------------------------* *& Form Z_SAPGUI_PROGRESS_INDICATOR *&---------------------------------------------------------------------* * Interagir com o front-end - Enviar mensagens *----------------------------------------------------------------------* * --> PV_TEXT - Mensagem *----------------------------------------------------------------------* FORM z_sapgui_progress_indicator USING value(pv_text). CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING * PERCENTAGE = 0 text = pv_text. ENDFORM.
" Z_SAPGUI_PROGRESS_INDICATOR
*---------------------------------------------------------------------* * FORM Z_FIELDCAT_INIT * *---------------------------------------------------------------------* * Inicializar estrutura das informações da lista * *---------------------------------------------------------------------* * --> PT_FIELDCAT - Tab. com estrutura de linha * *---------------------------------------------------------------------* FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv. * Estruturas DATA: lf_fieldcat TYPE slis_fieldcat_alv. * Limpar tabela CLEAR pt_fieldcat[]. * Cód. doc. venda CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VBELN'. lf_fieldcat-ref_tabname = 'VBAK'." lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. " * Data de Criação CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERDAT'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. * Criado por
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
85
" Nome do Campo Tab. de Referência Grupo de Ordem Vendas Gravar na tab. config.
Grupo de Ordem Vendas
GUIA
*
*
*
*
*
*
*
BÁSICO
DE
PROGRAMAÇÃO
ALV
CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERNAM'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " Grupo de Ordem Vendas APPEND lf_fieldcat TO pt_fieldcat. Tipo de Ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'AUART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Valor líq. da ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'NETWR'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'V'. " Grupo de Valores APPEND lf_fieldcat TO pt_fieldcat. Organização de vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKORG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Canal de distribuição CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VTWEG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Setor de atividade CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'SPART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Grupo de Vendedores CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKGRP'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Escritório de Vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKBUR'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat.
ENDFORM.
" FORM Z_FIELDCAT_INIT
*&---------------------------------------------------------------------* *& Form Z_ORDENAR_LISTA *&---------------------------------------------------------------------* * Ordenação da lista *----------------------------------------------------------------------* * --> PT_SORT[] - Tabela com informações de ordenação dos campos *----------------------------------------------------------------------* FORM z_ordenar_lista USING pt_sort TYPE slis_t_sortinfo_alv. * Estrutura para gravar na lista DATA: lf_sort TYPE slis_sortinfo_alv. CLEAR lf_sort. * Montar estrutura lf_sort-spos lf_sort-fieldname lf_sort-tabname lf_sort-up lf_sort-expa APPEND lf_sort TO
= 1. = 'ERNAM'. = 'WT_SAIDA'. = 'X'. = 'X'. wt_sort.
" " " " "
Sequência de ordenação Nome do campo Nome da tabela de lista Ordenação Crescente Expandir lista
** Outras opções possíveis de utilização * lf_sort-down = 'X'. " Ordenação decrescente * lf_sort-group = '*'. " Mudança de controle: quebra de * " página, inserir sublinha
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
86
GUIA
* * *
BÁSICO
lf_sort-subtot lf_sort-comp
DE
PROGRAMAÇÃO
= 'X'. = 'X'.
ALV
" Subtotal " Comprimir lista mostrando " apenas os subtotais
ENDFORM.
" Z_ORDENAR_LISTA
*---------------------------------------------------------------------* * FORM Z_SP_GROUP_BUILD * *---------------------------------------------------------------------* * Definir tipos de grupos de campos * *---------------------------------------------------------------------* * --> PT_SP_GROUP - Estrutura do grupo de campos * *---------------------------------------------------------------------* FORM z_sp_group_build USING pt_sp_group TYPE slis_t_sp_group_alv. * Variáveis DATA: lf_sp_group TYPE slis_sp_group_alv. * Atribuir valores * Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'A'. lf_sp_group-text = 'Ordem de Venda'(g01). APPEND lf_sp_group TO pt_sp_group. * Status da Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'V'. lf_sp_group-text = 'Valores'(g02). APPEND lf_sp_group TO pt_sp_group. ENDFORM.
" FORM Z_SP_GROUP_BUILD
*&---------------------------------------------------------------------* *& Form Z_F4_FOR_VARIANT *&---------------------------------------------------------------------* * Processo de ajuda pra variante *----------------------------------------------------------------------* FORM z_f4_for_variant. * Variável local DATA: lv_exit. * Encontrar variante CALL FUNCTION 'REUSE_ALV_VARIANT_F4' EXPORTING is_variant = wf_variant i_save = 'A' * it_default_fieldcat = IMPORTING e_exit = lv_exit es_variant = wf_x_variant EXCEPTIONS not_found = 2. * Verificar processamento da função IF sy-subrc = 2. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. * Atribuir valor IF lv_exit = space. p_vari = wf_x_variant-variant. ENDIF. ENDIF. ENDFORM.
" Z_F4_FOR_VARIANT
*&---------------------------------------------------------------------* *& Form Z_VALIDACAO_VARIANTE *&---------------------------------------------------------------------* * Realizar validação da variante de exibição
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
87
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*----------------------------------------------------------------------* FORM z_validacao_variante. * Variante IF NOT p_vari IS INITIAL. MOVE: wf_variant TO wf_x_variant, p_vari TO wf_x_variant-variant. * Verificar existencia CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE' EXPORTING i_save = 'A' CHANGING cs_variant = wf_x_variant. wf_variant = wf_x_variant. ELSE. CLEAR: wf_variant. wf_variant-report = wv_repid. ENDIF. ENDFORM.
" Z_VALIDACAO_VARIANTE
*---------------------------------------------------------------------* * FORM Z_PRINT_BUILD * *---------------------------------------------------------------------* * Definir atributos de impressão da lista * *---------------------------------------------------------------------* * --> PF_PRINT - Estrutura com atributos da impressão da lista * *---------------------------------------------------------------------* FORM z_print_build USING pf_print TYPE slis_print_alv. * * PF_PRINT-PRINT = 'X'. " Imprimir no SPOOL pf_print-no_print_selinfos = 'X'. " Não listar info. sobre seleção pf_print-no_coverpage = 'X'. " Não listar página de rostp pf_print-no_print_listinfos = 'X'. " Não listar info. sobre a lista * PF_PRINT-RESERVE_LINES = 'X'. " Reservar linhas * PF_PRINT-NO_NEW_PAGE = 'X'. " Sem novas páginas * PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " Não alterar tamanho da linha ENDFORM.
" Z_PRINT_BUILD
*&---------------------------------------------------------------------* *& Form Z_LAYOUT_BUILD *&---------------------------------------------------------------------* * Layout de saída *----------------------------------------------------------------------* * --> PF_LAYOUT - Estrutura para layout de saída da lista *----------------------------------------------------------------------* FORM z_layout_build USING pf_layout TYPE slis_layout_alv. pf_layout-group_change_edit = 'X'. * Check box na lista pf_layout-box_fieldname = 'BOX'. pf_layout-box_tabname = 'WT_SAIDA'. ENDFORM.
" Z_LAYOUT_BUILD
*---------------------------------------------------------------------* * FORM Z_EVENTTAB_BUILD * *---------------------------------------------------------------------* * Definir eventos associados a lista * *---------------------------------------------------------------------* * --> PT_EVENTS - Eventos associados a lista * *---------------------------------------------------------------------* FORM z_eventtab_build USING pt_events TYPE slis_t_event. * Variáveis DATA: lf_event TYPE slis_alv_event. * Obter eventos permitidos para lista grid CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
88
GUIA
*
* * *
* * * * * *
* * *
BÁSICO
DE
PROGRAMAÇÃO
ALV
EXPORTING i_list_type = 0 IMPORTING et_events = pt_events. Verificar se evento foi encontrado LOOP AT pt_events INTO lf_event. CASE lf_event-name. WHEN slis_ev_user_command. MOVE 'Z_USER_COMMAND' TO lf_event-form. WHEN slis_ev_item_data_expand. move 'Z_ITEM_DATA_EXPAND' to lf_event-form. WHEN slis_ev_reprep_sel_modify. move 'Z_REPREP_SEL_MODIFY' to lf_event-form. WHEN slis_ev_caller_exit_at_start. MOVE 'Z_CALLER_EXIT' TO lf_event-form. WHEN slis_ev_top_of_page. MOVE 'Z_TOP_OF_PAGE' TO lf_event-form. WHEN slis_ev_top_of_coverpage. move 'Z_TOP_OF_COVERPAGE' to lf_event-form. WHEN slis_ev_end_of_coverpage. move 'Z_END_OF_COVERPAGE' to lf_event-form. WHEN slis_ev_foreign_top_of_page. move 'Z_FOREIGN_TOP_OF_PAGE' to lf_event-form. WHEN slis_ev_foreign_end_of_page. move 'Z_FOREIGN_END_OF_PAGE' to lf_event-form. WHEN slis_ev_pf_status_set. MOVE 'Z_PF_STATUS_SET' TO lf_event-form. WHEN slis_ev_list_modify. MOVE 'Z_LIST_MODIFY' TO lf_event-form. WHEN slis_ev_top_of_list. MOVE 'Z_TOP_OF_LIST' TO lf_event-form. WHEN slis_ev_end_of_page. MOVE 'Z_END_OF_PAGE' TO lf_event-form. WHEN slis_ev_end_of_list. MOVE 'Z_END_OF_LIST' TO lf_event-form. WHEN slis_ev_after_line_output. MOVE 'Z_AFTER_LINE_OUTPUT' TO lf_event-form. WHEN slis_ev_before_line_output. MOVE 'Z_BEFORE_LINE_OUTPUT' TO lf_event-form. WHEN slis_ev_subtotal_text. MOVE 'Z_SUBTOTAL_TEXT' TO lf_event-form. ENDCASE. MODIFY pt_events FROM lf_event. ENDLOOP.
* ENDFORM.
" FORM Z_EVENTTAB_BUILD
*----------------------------------------------------------------------* * FORM Z_USER_COMMAND * *----------------------------------------------------------------------* * Ações do usuário * *----------------------------------------------------------------------* FORM z_user_command USING pv_ucomm LIKE sy-ucomm pf_selfield TYPE slis_selfield. "#EC CALLED * CASE pv_ucomm. * Ação de Click duplo '&IC1' WHEN '&IC1'. * Posicionar no registro selecionado READ TABLE wt_saida INDEX pf_selfield-tabindex. * Verificar campo selecionado CASE pf_selfield-sel_tab_field. WHEN 'WT_SAIDA-VBELN'. * Determinar nro da ordem de venda ao parâmetro de memória SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln. * Chamar transação de exibição da ordem de venda CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN. ENDCASE.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
89
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
ENDCASE. ENDFORM. *----------------------------------------------------------------------* * FORM Z_TOP_OF_PAGE * *----------------------------------------------------------------------* * Evento de cabeçalho * *----------------------------------------------------------------------* FORM z_top_of_page. "#EC CALLED WRITE: / 'Evento: top-of-page'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_END_OF_PAGE * *----------------------------------------------------------------------* * Evento para rodapé da lista * *----------------------------------------------------------------------* FORM z_end_of_page. "#EC CALLED WRITE: / 'Evento: end_of_page'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_TOP_OF_LIST * *----------------------------------------------------------------------* * Evento para topo da lista * *----------------------------------------------------------------------* FORM z_top_of_list. "#EC CALLED WRITE: / 'Evento: top-of-list'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_END_OF_LIST * *----------------------------------------------------------------------* * Evento de final de lista * *----------------------------------------------------------------------* FORM z_end_of_list. "#EC CALLED WRITE: / 'Evento: end_of_list'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_PF_STATUS_SET * *----------------------------------------------------------------------* * Especificar barra de status * *----------------------------------------------------------------------* FORM z_pf_status_set USING pt_extab TYPE slis_t_extab. "#EC CALLED * Acionar barra de comandos * set pf-status 'STANDARD' excluding pt_extab. ENDFORM. *----------------------------------------------------------------------* * FORM Z_CALLER_EXIT * *----------------------------------------------------------------------* * Evento * *----------------------------------------------------------------------* form z_caller_exit using pf_data. "#EC CALLED endform.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
90
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*----------------------------------------------------------------------* * FORM Z_BEFORE_LINE_OUTPUT * *----------------------------------------------------------------------* * Evento antes da impressão da linha * *----------------------------------------------------------------------* form z_before_line_output using pf_lineinfo type slis_lineinfo. "#EC CALLED *
break-point.
endform. *----------------------------------------------------------------------* * FORM Z_AFTER_LINE_OUTPUT * *----------------------------------------------------------------------* * Evento depois da impressão da linha * *----------------------------------------------------------------------* form z_after_line_output using pf_lineinfo type slis_lineinfo. "#EC CALLED *
break-point.
endform. *----------------------------------------------------------------------* * FORM Z_LIST_MODIFY * *----------------------------------------------------------------------* * Evento modifica linha da lista * *----------------------------------------------------------------------* form z_list_modify using pv_tabname type slis_tabname pv_index like sy-tabix pv_index_slave like sy-tabix pv_index_sum like sy-tabix. "#EC CALLED *
break-point.
endform.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
91
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo 10 *$*$******************************************************************** *$*$ * *$*$ PROGRAMA: Personalizando a barra de status * *$*$ TIPO : Lista ALV * *$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria * *$*$ DATA : 12/12/2001 * *$** OBS. : * *$** * *$*$******************************************************************** *$*$ HISTÓRICO DAS MODIFICAÇÕES * *$*$-------------------------------------------------------------------* *$*$ DATA | AUTOR | DESCRIÇÃO * *$*$-------------------------------------------------------------------* *$** | | * *$*$******************************************************************** REPORT zfra0023_10. *$*$ Type pools -------------------------------------------------------TYPE-POOLS: slis. *$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida, vbeln LIKE vbak-vbeln, " Nro da ordem de venda erdat LIKE vbak-erdat, " Data de criação ernam LIKE vbak-ernam, " Criado por audat LIKE vbak-audat, " Data da ordem auart LIKE vbak-auart, " Tipo de ordem netwr LIKE vbak-netwr, " Valor líq. da ordem vkorg LIKE vbak-vkorg, " Org. de vendas vtweg LIKE vbak-vtweg, " Canal de distribuição spart LIKE vbak-spart, " Setor de atividade vkgrp LIKE vbak-vkgrp, " Grupo de vendedores vkbur LIKE vbak-vkbur, " Escritório de vendas box , " Checkbox END OF we_saida. *$*$ Tabelas Internas -------------------------------------------------* Tab. com dados para lista DATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE. * Tab. com informações sobre as características dos campos DATA: wt_fieldcat TYPE slis_t_fieldcat_alv. * Tab. com informações sobre a ordenação da lista DATA: wt_sort TYPE slis_t_sortinfo_alv. * Tab. de especificação de grupos DATA: wt_sp_group TYPE slis_t_sp_group_alv. * Tab. de eventos DATA: wt_events TYPE slis_t_event. *$*$--- Estruturas DATA: wf_x_variant DATA: wf_variant DATA: wf_print DATA: wf_layout
----------------------------------------------------LIKE disvariant. LIKE disvariant. TYPE slis_print_alv. TYPE slis_layout_alv.
*$*$ Variáveis --------------------------------------------------------* Nome do programa DATA: wv_repid LIKE sy-repid. *$*$ Tela de Seleção --------------------------------------------------SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01. SELECT-OPTIONS: s_vbeln FOR wt_saida-vbeln. SELECTION-SCREEN END OF BLOCK b1. Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
92
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
* Variante SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02. PARAMETERS: p_vari LIKE disvariant-variant. SELECTION-SCREEN END OF BLOCK b2. *$*$ Inicialização ----------------------------------------------------INITIALIZATION. wv_repid = sy-repid. * Atribuições para variante CLEAR wf_variant. wf_variant-report = wv_repid. *$*$ Ajudas de tela ---------------------------------------------------* Processo de ajuda para variante AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari. PERFORM z_f4_for_variant. *$*$ Validações de tela ----------------------------------------------- AT SELECTION-SCREEN ON p_vari. PERFORM z_validacao_variante. *$*$ Programa Principal -----------------------------------------------START-OF-SELECTION. PERFORM z_buscar_dados. * Indicar campos para exibição na lista PERFORM z_fieldcat_init USING wt_fieldcat[]. * Ordenar lista PERFORM z_ordenar_lista USING wt_sort[]. * Grupos de campos PERFORM z_sp_group_build USING wt_sp_group[]. * Eventos que podem ser acionados na lista PERFORM z_eventtab_build USING wt_events[]. END-OF-SELECTION. * Parâmetros de impressão PERFORM z_print_build USING wf_print. * Layout da lista - Referente as definições PERFORM z_layout_build USING wf_layout. * Construção da lista propriamente dita ( Exibição das informações ) PERFORM z_list_display. *$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------* *& Form Z_BUSCAR_DADOS *&---------------------------------------------------------------------* * Obter informações para lista *----------------------------------------------------------------------* FORM z_buscar_dados. PERFORM z_sapgui_progress_indicator USING 'Selecionando dados. Aguarde...'. SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp vkbur INTO TABLE wt_saida FROM vbak WHERE vbeln IN s_vbeln. ENDFORM.
" Z_BUSCAR_DADOS
*&---------------------------------------------------------------------* *& Form Z_LIST_DISPLAY *&---------------------------------------------------------------------* * Lista informações na tela *----------------------------------------------------------------------* FORM z_list_display.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
93
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
PERFORM z_sapgui_progress_indicator USING 'Estruturando a lista. Aguarde...'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = wv_repid it_fieldcat = wt_fieldcat it_sort = wt_sort it_special_groups = wt_sp_group is_print = wf_print is_layout = wf_layout it_events = wt_events i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verificar processamento da função IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
*&---------------------------------------------------------------------* *& Form Z_SAPGUI_PROGRESS_INDICATOR *&---------------------------------------------------------------------* * Interagir com o front-end - Enviar mensagens *----------------------------------------------------------------------* * --> PV_TEXT - Mensagem *----------------------------------------------------------------------* FORM z_sapgui_progress_indicator USING value(pv_text). CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING * PERCENTAGE = 0 text = pv_text. ENDFORM.
" Z_SAPGUI_PROGRESS_INDICATOR
*---------------------------------------------------------------------* * FORM Z_FIELDCAT_INIT * *---------------------------------------------------------------------* * Inicializar estrutura das informações da lista * *---------------------------------------------------------------------* * --> PT_FIELDCAT - Tab. com estrutura de linha * *---------------------------------------------------------------------* FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv. * Estruturas DATA: lf_fieldcat TYPE slis_fieldcat_alv. * Limpar tabela CLEAR pt_fieldcat[]. * Cód. doc. venda CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VBELN'. lf_fieldcat-ref_tabname = 'VBAK'." lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. " * Data de Criação CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERDAT'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. * Criado por
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
94
" Nome do Campo Tab. de Referência Grupo de Ordem Vendas Gravar na tab. config.
Grupo de Ordem Vendas
GUIA
*
*
*
*
*
*
*
BÁSICO
DE
PROGRAMAÇÃO
ALV
CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERNAM'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " Grupo de Ordem Vendas APPEND lf_fieldcat TO pt_fieldcat. Tipo de Ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'AUART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Valor líq. da ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'NETWR'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'V'. " Grupo de Valores APPEND lf_fieldcat TO pt_fieldcat. Organização de vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKORG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Canal de distribuição CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VTWEG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Setor de atividade CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'SPART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Grupo de Vendedores CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKGRP'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Escritório de Vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKBUR'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat.
ENDFORM.
" FORM Z_FIELDCAT_INIT
*&---------------------------------------------------------------------* *& Form Z_ORDENAR_LISTA *&---------------------------------------------------------------------* * Ordenação da lista *----------------------------------------------------------------------* * --> PT_SORT[] - Tabela com informações de ordenação dos campos *----------------------------------------------------------------------* FORM z_ordenar_lista USING pt_sort TYPE slis_t_sortinfo_alv. * Estrutura para gravar na lista DATA: lf_sort TYPE slis_sortinfo_alv. CLEAR lf_sort. * Montar estrutura lf_sort-spos lf_sort-fieldname lf_sort-tabname lf_sort-up lf_sort-expa APPEND lf_sort TO
= 1. = 'ERNAM'. = 'WT_SAIDA'. = 'X'. = 'X'. wt_sort.
" " " " "
Sequência de ordenação Nome do campo Nome da tabela de lista Ordenação Crescente Expandir lista
** Outras opções possíveis de utilização * lf_sort-down = 'X'. " Ordenação decrescente * lf_sort-group = '*'. " Mudança de controle: quebra de * " página, inserir sublinha
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
95
GUIA
* * *
BÁSICO
lf_sort-subtot lf_sort-comp
DE
PROGRAMAÇÃO
= 'X'. = 'X'.
ALV
" Subtotal " Comprimir lista mostrando " apenas os subtotais
ENDFORM.
" Z_ORDENAR_LISTA
*---------------------------------------------------------------------* * FORM Z_SP_GROUP_BUILD * *---------------------------------------------------------------------* * Definir tipos de grupos de campos * *---------------------------------------------------------------------* * --> PT_SP_GROUP - Estrutura do grupo de campos * *---------------------------------------------------------------------* FORM z_sp_group_build USING pt_sp_group TYPE slis_t_sp_group_alv. * Variáveis DATA: lf_sp_group TYPE slis_sp_group_alv. * Atribuir valores * Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'A'. lf_sp_group-text = 'Ordem de Venda'(g01). APPEND lf_sp_group TO pt_sp_group. * Status da Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'V'. lf_sp_group-text = 'Valores'(g02). APPEND lf_sp_group TO pt_sp_group. ENDFORM.
" FORM Z_SP_GROUP_BUILD
*&---------------------------------------------------------------------* *& Form Z_F4_FOR_VARIANT *&---------------------------------------------------------------------* * Processo de ajuda pra variante *----------------------------------------------------------------------* FORM z_f4_for_variant. * Variável local DATA: lv_exit. * Encontrar variante CALL FUNCTION 'REUSE_ALV_VARIANT_F4' EXPORTING is_variant = wf_variant i_save = 'A' * it_default_fieldcat = IMPORTING e_exit = lv_exit es_variant = wf_x_variant EXCEPTIONS not_found = 2. * Verificar processamento da função IF sy-subrc = 2. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. * Atribuir valor IF lv_exit = space. p_vari = wf_x_variant-variant. ENDIF. ENDIF. ENDFORM.
" Z_F4_FOR_VARIANT
*&---------------------------------------------------------------------* *& Form Z_VALIDACAO_VARIANTE *&---------------------------------------------------------------------* * Realizar validação da variante de exibição
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
96
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*----------------------------------------------------------------------* FORM z_validacao_variante. * Variante IF NOT p_vari IS INITIAL. MOVE: wf_variant TO wf_x_variant, p_vari TO wf_x_variant-variant. * Verificar existencia CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE' EXPORTING i_save = 'A' CHANGING cs_variant = wf_x_variant. wf_variant = wf_x_variant. ELSE. CLEAR: wf_variant. wf_variant-report = wv_repid. ENDIF. ENDFORM.
" Z_VALIDACAO_VARIANTE
*---------------------------------------------------------------------* * FORM Z_PRINT_BUILD * *---------------------------------------------------------------------* * Definir atributos de impressão da lista * *---------------------------------------------------------------------* * --> PF_PRINT - Estrutura com atributos da impressão da lista * *---------------------------------------------------------------------* FORM z_print_build USING pf_print TYPE slis_print_alv. * * PF_PRINT-PRINT = 'X'. " Imprimir no SPOOL pf_print-no_print_selinfos = 'X'. " Não listar info. sobre seleção pf_print-no_coverpage = 'X'. " Não listar página de rostp pf_print-no_print_listinfos = 'X'. " Não listar info. sobre a lista * PF_PRINT-RESERVE_LINES = 'X'. " Reservar linhas * PF_PRINT-NO_NEW_PAGE = 'X'. " Sem novas páginas * PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " Não alterar tamanho da linha ENDFORM.
" Z_PRINT_BUILD
*&---------------------------------------------------------------------* *& Form Z_LAYOUT_BUILD *&---------------------------------------------------------------------* * Layout de saída *----------------------------------------------------------------------* * --> PF_LAYOUT - Estrutura para layout de saída da lista *----------------------------------------------------------------------* FORM z_layout_build USING pf_layout TYPE slis_layout_alv. pf_layout-group_change_edit = 'X'. * Check box na lista pf_layout-box_fieldname = 'BOX'. pf_layout-box_tabname = 'WT_SAIDA'. ENDFORM.
" Z_LAYOUT_BUILD
*---------------------------------------------------------------------* * FORM Z_EVENTTAB_BUILD * *---------------------------------------------------------------------* * Definir eventos associados a lista * *---------------------------------------------------------------------* * --> PT_EVENTS - Eventos associados a lista * *---------------------------------------------------------------------* FORM z_eventtab_build USING pt_events TYPE slis_t_event. * Variáveis DATA: lf_event TYPE slis_alv_event. * Obter eventos permitidos para lista grid CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
97
GUIA
*
* * *
* * * *
*
* * *
BÁSICO
DE
PROGRAMAÇÃO
ALV
EXPORTING i_list_type = 0 IMPORTING et_events = pt_events. Verificar se evento foi encontrado LOOP AT pt_events INTO lf_event. CASE lf_event-name. WHEN slis_ev_user_command. MOVE 'Z_USER_COMMAND' TO lf_event-form. WHEN slis_ev_item_data_expand. move 'Z_ITEM_DATA_EXPAND' to lf_event-form. WHEN slis_ev_reprep_sel_modify. move 'Z_REPREP_SEL_MODIFY' to lf_event-form. WHEN slis_ev_caller_exit_at_start. MOVE 'Z_CALLER_EXIT' TO lf_event-form. WHEN slis_ev_top_of_page. MOVE 'Z_TOP_OF_PAGE' TO lf_event-form. WHEN slis_ev_top_of_coverpage. move 'Z_TOP_OF_COVERPAGE' to lf_event-form. WHEN slis_ev_end_of_coverpage. move 'Z_END_OF_COVERPAGE' to lf_event-form. WHEN slis_ev_foreign_top_of_page. move 'Z_FOREIGN_TOP_OF_PAGE' to lf_event-form. WHEN slis_ev_foreign_end_of_page. move 'Z_FOREIGN_END_OF_PAGE' to lf_event-form. WHEN slis_ev_pf_status_set. MOVE 'Z_PF_STATUS_SET' TO lf_event-form. WHEN slis_ev_list_modify. MOVE 'Z_LIST_MODIFY' TO lf_event-form. WHEN slis_ev_top_of_list. MOVE 'Z_TOP_OF_LIST' TO lf_event-form. WHEN slis_ev_end_of_page. MOVE 'Z_END_OF_PAGE' TO lf_event-form. WHEN slis_ev_end_of_list. MOVE 'Z_END_OF_LIST' TO lf_event-form. WHEN slis_ev_after_line_output. MOVE 'Z_AFTER_LINE_OUTPUT' TO lf_event-form. WHEN slis_ev_before_line_output. MOVE 'Z_BEFORE_LINE_OUTPUT' TO lf_event-form. WHEN slis_ev_subtotal_text. MOVE 'Z_SUBTOTAL_TEXT' TO lf_event-form. ENDCASE. MODIFY pt_events FROM lf_event. ENDLOOP.
* ENDFORM.
" FORM Z_EVENTTAB_BUILD
*----------------------------------------------------------------------* * FORM Z_USER_COMMAND * *----------------------------------------------------------------------* * Ações do usuário * *----------------------------------------------------------------------* FORM z_user_command USING pv_ucomm LIKE sy-ucomm pf_selfield TYPE slis_selfield. "#EC CALLED * CASE pv_ucomm. * Ação de Click duplo '&IC1' WHEN '&IC1'. * Posicionar no registro selecionado READ TABLE wt_saida INDEX pf_selfield-tabindex. * Verificar campo selecionado CASE pf_selfield-sel_tab_field. WHEN 'WT_SAIDA-VBELN'. * Determinar nro da ordem de venda ao parâmetro de memória SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln. * Chamar transação de exibição da ordem de venda CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN. ENDCASE.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
98
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
ENDCASE. ENDFORM. *----------------------------------------------------------------------* * FORM Z_TOP_OF_PAGE * *----------------------------------------------------------------------* * Evento de cabeçalho * *----------------------------------------------------------------------* FORM z_top_of_page. "#EC CALLED WRITE: / 'Evento: top-of-page'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_END_OF_PAGE * *----------------------------------------------------------------------* * Evento para rodapé da lista * *----------------------------------------------------------------------* FORM z_end_of_page. "#EC CALLED WRITE: / 'Evento: end_of_page'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_TOP_OF_LIST * *----------------------------------------------------------------------* * Evento para topo da lista * *----------------------------------------------------------------------* FORM z_top_of_list. "#EC CALLED WRITE: / 'Evento: top-of-list'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_END_OF_LIST * *----------------------------------------------------------------------* * Evento de final de lista * *----------------------------------------------------------------------* FORM z_end_of_list. "#EC CALLED WRITE: / 'Evento: end_of_list'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_PF_STATUS_SET * *----------------------------------------------------------------------* * Especificar barra de status * *----------------------------------------------------------------------* FORM z_pf_status_set USING pt_extab TYPE slis_t_extab. "#EC CALLED * Acionar barra de comandos SET PF-STATUS 'STANDARD' EXCLUDING pt_extab. ENDFORM. *----------------------------------------------------------------------* * FORM Z_CALLER_EXIT * *----------------------------------------------------------------------* * Evento * *----------------------------------------------------------------------* FORM z_caller_exit USING pf_data. "#EC CALLED ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
99
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*----------------------------------------------------------------------* * FORM Z_BEFORE_LINE_OUTPUT * *----------------------------------------------------------------------* * Evento antes da impressão da linha * *----------------------------------------------------------------------* FORM z_before_line_output USING pf_lineinfo TYPE slis_lineinfo. "#EC CALLED *
break-point.
ENDFORM. *----------------------------------------------------------------------* * FORM Z_AFTER_LINE_OUTPUT * *----------------------------------------------------------------------* * Evento depois da impressão da linha * *----------------------------------------------------------------------* FORM z_after_line_output USING pf_lineinfo TYPE slis_lineinfo. "#EC CALLED *
break-point.
ENDFORM. *----------------------------------------------------------------------* * FORM Z_LIST_MODIFY * *----------------------------------------------------------------------* * Evento modifica linha da lista * *----------------------------------------------------------------------* FORM z_list_modify USING pv_tabname TYPE slis_tabname pv_index LIKE sy-tabix pv_index_slave LIKE sy-tabix pv_index_sum LIKE sy-tabix. "#EC CALLED *
break-point.
ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
100
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo 11 *$*$******************************************************************** *$*$ * *$*$ PROGRAMA: Trabalhando com CHECKBOX * *$*$ TIPO : LISTA ALV * *$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria * *$*$ DATA : 12/12/2001 * *$** OBS. : * *$** * *$*$******************************************************************** *$*$ HISTÓRICO DAS MODIFICAÇÕES * *$*$-------------------------------------------------------------------* *$*$ DATA | AUTOR | DESCRIÇÃO * *$*$-------------------------------------------------------------------* *$** | | * *$*$******************************************************************** REPORT zfra0023_11. *$*$ Type pools -------------------------------------------------------TYPE-POOLS: slis. *$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida, vbeln LIKE vbak-vbeln, " Nro da ordem de venda erdat LIKE vbak-erdat, " Data de criação ernam LIKE vbak-ernam, " Criado por audat LIKE vbak-audat, " Data da ordem auart LIKE vbak-auart, " Tipo de ordem netwr LIKE vbak-netwr, " Valor líq. da ordem vkorg LIKE vbak-vkorg, " Org. de vendas vtweg LIKE vbak-vtweg, " Canal de distribuição spart LIKE vbak-spart, " Setor de atividade vkgrp LIKE vbak-vkgrp, " Grupo de vendedores vkbur LIKE vbak-vkbur, " Escritório de vendas box , " Checkbox END OF we_saida. *$*$ Tabelas Internas -------------------------------------------------* Tab. com dados para lista DATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE. * Tab. com informações sobre as características dos campos DATA: wt_fieldcat TYPE slis_t_fieldcat_alv. * Tab. com informações sobre a ordenação da lista DATA: wt_sort TYPE slis_t_sortinfo_alv. * Tab. de especificação de grupos DATA: wt_sp_group TYPE slis_t_sp_group_alv. * Tab. de eventos DATA: wt_events TYPE slis_t_event. *$*$--- Estruturas DATA: wf_x_variant DATA: wf_variant DATA: wf_print DATA: wf_layout
----------------------------------------------------LIKE disvariant. LIKE disvariant. TYPE slis_print_alv. TYPE slis_layout_alv.
*$*$ Variáveis --------------------------------------------------------* Nome do programa DATA: wv_repid LIKE sy-repid. *$*$ Tela de Seleção --------------------------------------------------SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01. SELECT-OPTIONS: s_vbeln FOR wt_saida-vbeln. SELECTION-SCREEN END OF BLOCK b1. Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
101
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
* Variante SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02. PARAMETERS: p_vari LIKE disvariant-variant. SELECTION-SCREEN END OF BLOCK b2. *$*$ Inicialização ----------------------------------------------------INITIALIZATION. wv_repid = sy-repid. * Atribuições para variante CLEAR wf_variant. wf_variant-report = wv_repid. *$*$ Ajudas de tela ---------------------------------------------------* Processo de ajuda para variante AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari. PERFORM z_f4_for_variant. *$*$ Validações de tela ----------------------------------------------- AT SELECTION-SCREEN ON p_vari. PERFORM z_validacao_variante. *$*$ Programa Principal -----------------------------------------------START-OF-SELECTION. PERFORM z_buscar_dados. * Indicar campos para exibição na lista PERFORM z_fieldcat_init USING wt_fieldcat[]. * Ordenar lista PERFORM z_ordenar_lista USING wt_sort[]. * Grupos de campos PERFORM z_sp_group_build USING wt_sp_group[]. * Eventos que podem ser acionados na lista PERFORM z_eventtab_build USING wt_events[]. END-OF-SELECTION. * Parâmetros de impressão PERFORM z_print_build USING wf_print. * Layout da lista - Referente as definições PERFORM z_layout_build USING wf_layout. * Construção da lista propriamente dita ( Exibição das informações ) PERFORM z_list_display. *$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------* *& Form Z_BUSCAR_DADOS *&---------------------------------------------------------------------* * Obter informações para lista *----------------------------------------------------------------------* FORM z_buscar_dados. PERFORM z_sapgui_progress_indicator USING 'Selecionando dados. Aguarde...'. SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp vkbur INTO TABLE wt_saida FROM vbak WHERE vbeln IN s_vbeln. ENDFORM.
" Z_BUSCAR_DADOS
*&---------------------------------------------------------------------* *& Form Z_LIST_DISPLAY *&---------------------------------------------------------------------* * Lista informações na tela *----------------------------------------------------------------------* FORM z_list_display.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
102
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
PERFORM z_sapgui_progress_indicator USING 'Estruturando a lista. Aguarde...'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = wv_repid it_fieldcat = wt_fieldcat it_sort = wt_sort it_special_groups = wt_sp_group is_print = wf_print is_layout = wf_layout it_events = wt_events i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verificar processamento da função IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
*&---------------------------------------------------------------------* *& Form Z_SAPGUI_PROGRESS_INDICATOR *&---------------------------------------------------------------------* * Interagir com o front-end - Enviar mensagens *----------------------------------------------------------------------* * --> PV_TEXT - Mensagem *----------------------------------------------------------------------* FORM z_sapgui_progress_indicator USING value(pv_text). CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING * PERCENTAGE = 0 text = pv_text. ENDFORM.
" Z_SAPGUI_PROGRESS_INDICATOR
*---------------------------------------------------------------------* * FORM Z_FIELDCAT_INIT * *---------------------------------------------------------------------* * Inicializar estrutura das informações da lista * *---------------------------------------------------------------------* * --> PT_FIELDCAT - Tab. com estrutura de linha * *---------------------------------------------------------------------* FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv. * Estruturas DATA: lf_fieldcat TYPE slis_fieldcat_alv. * Limpar tabela CLEAR pt_fieldcat[]. * Cód. doc. venda CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VBELN'. lf_fieldcat-ref_tabname = 'VBAK'." lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. " * Data de Criação CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERDAT'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. * Criado por
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
103
" Nome do Campo Tab. de Referência Grupo de Ordem Vendas Gravar na tab. config.
Grupo de Ordem Vendas
GUIA
*
*
*
*
*
*
*
BÁSICO
DE
PROGRAMAÇÃO
ALV
CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERNAM'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " Grupo de Ordem Vendas APPEND lf_fieldcat TO pt_fieldcat. Tipo de Ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'AUART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Valor líq. da ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'NETWR'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'V'. " Grupo de Valores APPEND lf_fieldcat TO pt_fieldcat. Organização de vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKORG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Canal de distribuição CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VTWEG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Setor de atividade CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'SPART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Grupo de Vendedores CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKGRP'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. Escritório de Vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKBUR'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat.
ENDFORM.
" FORM Z_FIELDCAT_INIT
*&---------------------------------------------------------------------* *& Form Z_ORDENAR_LISTA *&---------------------------------------------------------------------* * Ordenação da lista *----------------------------------------------------------------------* * --> PT_SORT[] - Tabela com informações de ordenação dos campos *----------------------------------------------------------------------* FORM z_ordenar_lista USING pt_sort TYPE slis_t_sortinfo_alv. * Estrutura para gravar na lista DATA: lf_sort TYPE slis_sortinfo_alv. CLEAR lf_sort. * Montar estrutura lf_sort-spos lf_sort-fieldname lf_sort-tabname lf_sort-up lf_sort-expa APPEND lf_sort TO
= 1. = 'ERNAM'. = 'WT_SAIDA'. = 'X'. = 'X'. wt_sort.
" " " " "
Sequência de ordenação Nome do campo Nome da tabela de lista Ordenação Crescente Expandir lista
** Outras opções possíveis de utilização * lf_sort-down = 'X'. " Ordenação decrescente * lf_sort-group = '*'. " Mudança de controle: quebra de * " página, inserir sublinha
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
104
GUIA
* * *
BÁSICO
lf_sort-subtot lf_sort-comp
DE
PROGRAMAÇÃO
= 'X'. = 'X'.
ALV
" Subtotal " Comprimir lista mostrando " apenas os subtotais
ENDFORM.
" Z_ORDENAR_LISTA
*---------------------------------------------------------------------* * FORM Z_SP_GROUP_BUILD * *---------------------------------------------------------------------* * Definir tipos de grupos de campos * *---------------------------------------------------------------------* * --> PT_SP_GROUP - Estrutura do grupo de campos * *---------------------------------------------------------------------* FORM z_sp_group_build USING pt_sp_group TYPE slis_t_sp_group_alv. * Variáveis DATA: lf_sp_group TYPE slis_sp_group_alv. * Atribuir valores * Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'A'. lf_sp_group-text = 'Ordem de Venda'(g01). APPEND lf_sp_group TO pt_sp_group. * Status da Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'V'. lf_sp_group-text = 'Valores'(g02). APPEND lf_sp_group TO pt_sp_group. ENDFORM.
" FORM Z_SP_GROUP_BUILD
*&---------------------------------------------------------------------* *& Form Z_F4_FOR_VARIANT *&---------------------------------------------------------------------* * Processo de ajuda pra variante *----------------------------------------------------------------------* FORM z_f4_for_variant. * Variável local DATA: lv_exit. * Encontrar variante CALL FUNCTION 'REUSE_ALV_VARIANT_F4' EXPORTING is_variant = wf_variant i_save = 'A' * it_default_fieldcat = IMPORTING e_exit = lv_exit es_variant = wf_x_variant EXCEPTIONS not_found = 2. * Verificar processamento da função IF sy-subrc = 2. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. * Atribuir valor IF lv_exit = space. p_vari = wf_x_variant-variant. ENDIF. ENDIF. ENDFORM.
" Z_F4_FOR_VARIANT
*&---------------------------------------------------------------------* *& Form Z_VALIDACAO_VARIANTE *&---------------------------------------------------------------------* * Realizar validação da variante de exibição
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
105
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*----------------------------------------------------------------------* FORM z_validacao_variante. * Variante IF NOT p_vari IS INITIAL. MOVE: wf_variant TO wf_x_variant, p_vari TO wf_x_variant-variant. * Verificar existencia CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE' EXPORTING i_save = 'A' CHANGING cs_variant = wf_x_variant. wf_variant = wf_x_variant. ELSE. CLEAR: wf_variant. wf_variant-report = wv_repid. ENDIF. ENDFORM.
" Z_VALIDACAO_VARIANTE
*---------------------------------------------------------------------* * FORM Z_PRINT_BUILD * *---------------------------------------------------------------------* * Definir atributos de impressão da lista * *---------------------------------------------------------------------* * --> PF_PRINT - Estrutura com atributos da impressão da lista * *---------------------------------------------------------------------* FORM z_print_build USING pf_print TYPE slis_print_alv. * * PF_PRINT-PRINT = 'X'. " Imprimir no SPOOL pf_print-no_print_selinfos = 'X'. " Não listar info. sobre seleção pf_print-no_coverpage = 'X'. " Não listar página de rostp pf_print-no_print_listinfos = 'X'. " Não listar info. sobre a lista * PF_PRINT-RESERVE_LINES = 'X'. " Reservar linhas * PF_PRINT-NO_NEW_PAGE = 'X'. " Sem novas páginas * PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " Não alterar tamanho da linha ENDFORM.
" Z_PRINT_BUILD
*&---------------------------------------------------------------------* *& Form Z_LAYOUT_BUILD *&---------------------------------------------------------------------* * Layout de saída *----------------------------------------------------------------------* * --> PF_LAYOUT - Estrutura para layout de saída da lista *----------------------------------------------------------------------* FORM z_layout_build USING pf_layout TYPE slis_layout_alv. pf_layout-group_change_edit = 'X'. * Check box na lista pf_layout-box_fieldname = 'BOX'. pf_layout-box_tabname = 'WT_SAIDA'. ENDFORM.
" Z_LAYOUT_BUILD
*---------------------------------------------------------------------* * FORM Z_EVENTTAB_BUILD * *---------------------------------------------------------------------* * Definir eventos associados a lista * *---------------------------------------------------------------------* * --> PT_EVENTS - Eventos associados a lista * *---------------------------------------------------------------------* FORM z_eventtab_build USING pt_events TYPE slis_t_event. * Variáveis DATA: lf_event TYPE slis_alv_event. * Obter eventos permitidos para lista grid CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
106
GUIA
*
* * *
* * * *
*
* * *
BÁSICO
DE
PROGRAMAÇÃO
ALV
EXPORTING i_list_type = 0 IMPORTING et_events = pt_events. Verificar se evento foi encontrado LOOP AT pt_events INTO lf_event. CASE lf_event-name. WHEN slis_ev_user_command. MOVE 'Z_USER_COMMAND' TO lf_event-form. WHEN slis_ev_item_data_expand. move 'Z_ITEM_DATA_EXPAND' to lf_event-form. WHEN slis_ev_reprep_sel_modify. move 'Z_REPREP_SEL_MODIFY' to lf_event-form. WHEN slis_ev_caller_exit_at_start. MOVE 'Z_CALLER_EXIT' TO lf_event-form. WHEN slis_ev_top_of_page. MOVE 'Z_TOP_OF_PAGE' TO lf_event-form. WHEN slis_ev_top_of_coverpage. move 'Z_TOP_OF_COVERPAGE' to lf_event-form. WHEN slis_ev_end_of_coverpage. move 'Z_END_OF_COVERPAGE' to lf_event-form. WHEN slis_ev_foreign_top_of_page. move 'Z_FOREIGN_TOP_OF_PAGE' to lf_event-form. WHEN slis_ev_foreign_end_of_page. move 'Z_FOREIGN_END_OF_PAGE' to lf_event-form. WHEN slis_ev_pf_status_set. MOVE 'Z_PF_STATUS_SET' TO lf_event-form. WHEN slis_ev_list_modify. MOVE 'Z_LIST_MODIFY' TO lf_event-form. WHEN slis_ev_top_of_list. MOVE 'Z_TOP_OF_LIST' TO lf_event-form. WHEN slis_ev_end_of_page. MOVE 'Z_END_OF_PAGE' TO lf_event-form. WHEN slis_ev_end_of_list. MOVE 'Z_END_OF_LIST' TO lf_event-form. WHEN slis_ev_after_line_output. MOVE 'Z_AFTER_LINE_OUTPUT' TO lf_event-form. WHEN slis_ev_before_line_output. MOVE 'Z_BEFORE_LINE_OUTPUT' TO lf_event-form. WHEN slis_ev_subtotal_text. MOVE 'Z_SUBTOTAL_TEXT' TO lf_event-form. ENDCASE. MODIFY pt_events FROM lf_event. ENDLOOP.
* ENDFORM.
" FORM Z_EVENTTAB_BUILD
*----------------------------------------------------------------------* * FORM Z_USER_COMMAND * *----------------------------------------------------------------------* * Ações do usuário * *----------------------------------------------------------------------* FORM z_user_command USING pv_ucomm LIKE sy-ucomm pf_selfield TYPE slis_selfield. "#EC CALLED * CASE pv_ucomm. * Ação de Click duplo '&IC1' WHEN '&IC1'. * Posicionar no registro selecionado READ TABLE wt_saida INDEX pf_selfield-tabindex. * Verificar campo selecionado CASE pf_selfield-sel_tab_field. WHEN 'WT_SAIDA-VBELN'. * Determinar nro da ordem de venda ao parâmetro de memória SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln. * Chamar transação de exibição da ordem de venda CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN. ENDCASE.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
107
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
WHEN 'TESTE'. PERFORM z_rotina_teste. ENDCASE. ENDFORM. *----------------------------------------------------------------------* * FORM Z_TOP_OF_PAGE * *----------------------------------------------------------------------* * Evento de cabeçalho * *----------------------------------------------------------------------* FORM z_top_of_page. "#EC CALLED WRITE: / 'Evento: top-of-page'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_END_OF_PAGE * *----------------------------------------------------------------------* * Evento para rodapé da lista * *----------------------------------------------------------------------* FORM z_end_of_page. "#EC CALLED WRITE: / 'Evento: end_of_page'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_TOP_OF_LIST * *----------------------------------------------------------------------* * Evento para topo da lista * *----------------------------------------------------------------------* FORM z_top_of_list. "#EC CALLED WRITE: / 'Evento: top-of-list'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_END_OF_LIST * *----------------------------------------------------------------------* * Evento de final de lista * *----------------------------------------------------------------------* FORM z_end_of_list. "#EC CALLED WRITE: / 'Evento: end_of_list'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_PF_STATUS_SET * *----------------------------------------------------------------------* * Especificar barra de status * *----------------------------------------------------------------------* FORM z_pf_status_set USING pt_extab TYPE slis_t_extab. "#EC CALLED * Acionar barra de comandos SET PF-STATUS 'STANDARD' EXCLUDING pt_extab. ENDFORM. *----------------------------------------------------------------------* * FORM Z_CALLER_EXIT * *----------------------------------------------------------------------* * Evento * *----------------------------------------------------------------------* FORM z_caller_exit USING pf_data. "#EC CALLED
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
108
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
ENDFORM. *----------------------------------------------------------------------* * FORM Z_BEFORE_LINE_OUTPUT * *----------------------------------------------------------------------* * Evento antes da impressão da linha * *----------------------------------------------------------------------* FORM z_before_line_output USING pf_lineinfo TYPE slis_lineinfo. "#EC CALLED *
break-point.
ENDFORM. *----------------------------------------------------------------------* * FORM Z_AFTER_LINE_OUTPUT * *----------------------------------------------------------------------* * Evento depois da impressão da linha * *----------------------------------------------------------------------* FORM z_after_line_output USING pf_lineinfo TYPE slis_lineinfo. "#EC CALLED *
break-point.
ENDFORM. *----------------------------------------------------------------------* * FORM Z_LIST_MODIFY * *----------------------------------------------------------------------* * Evento modifica linha da lista * *----------------------------------------------------------------------* FORM z_list_modify USING pv_tabname TYPE slis_tabname pv_index LIKE sy-tabix pv_index_slave LIKE sy-tabix pv_index_sum LIKE sy-tabix. "#EC CALLED *
break-point.
ENDFORM. *&---------------------------------------------------------------------* *& Form Z_ROTINA_TESTE *&---------------------------------------------------------------------* * Rotina para o evento TESTE ( Botão ) *----------------------------------------------------------------------* FORM z_rotina_teste. LOOP AT wt_saida. Verificar se linha foi selecionada CHECK wt_saida-box EQ 'X'. * Enviar mensagem para informar linha selecionada MESSAGE i899(bd) WITH 'Foi escolhida a ordem:' wt_saida-vbeln. ENDLOOP. *
ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
" Z_ROTINA_TESTE
109
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo 12 *$*$******************************************************************** *$*$ * *$*$ PROGRAMA: Mudando cores de campos * *$*$ TIPO : Lista ALV * *$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria * *$*$ DATA : 12/12/2001 * *$** OBS. : * *$** * *$*$******************************************************************** *$*$ HISTÓRICO DAS MODIFICAÇÕES * *$*$-------------------------------------------------------------------* *$*$ DATA | AUTOR | DESCRIÇÃO * *$*$-------------------------------------------------------------------* *$** | | * *$*$******************************************************************** REPORT zfra0023_12. *$*$ Type pools -------------------------------------------------------TYPE-POOLS: slis. *$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida, vbeln LIKE vbak-vbeln, " Nro da ordem de venda erdat LIKE vbak-erdat, " Data de criação ernam LIKE vbak-ernam, " Criado por audat LIKE vbak-audat, " Data da ordem auart LIKE vbak-auart, " Tipo de ordem netwr LIKE vbak-netwr, " Valor líq. da ordem vkorg LIKE vbak-vkorg, " Org. de vendas vtweg LIKE vbak-vtweg, " Canal de distribuição spart LIKE vbak-spart, " Setor de atividade vkgrp LIKE vbak-vkgrp, " Grupo de vendedores vkbur LIKE vbak-vkbur, " Escritório de vendas box , " Checkbox color TYPE slis_t_specialcol_alv, END OF we_saida. *$*$ Tabelas Internas -------------------------------------------------* Tab. com dados para lista DATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE. * Tab. com informações sobre as características dos campos DATA: wt_fieldcat TYPE slis_t_fieldcat_alv. * Tab. com informações sobre a ordenação da lista DATA: wt_sort TYPE slis_t_sortinfo_alv. * Tab. de especificação de grupos DATA: wt_sp_group TYPE slis_t_sp_group_alv. * Tab. de eventos DATA: wt_events TYPE slis_t_event. * Tabs. de cores DATA: wt_color_normal TYPE slis_t_specialcol_alv WITH HEADER LINE, wt_color_selecao TYPE slis_t_specialcol_alv WITH HEADER LINE. *$*$--- Estruturas DATA: wf_x_variant DATA: wf_variant DATA: wf_print DATA: wf_layout
----------------------------------------------------LIKE disvariant. LIKE disvariant. TYPE slis_print_alv. TYPE slis_layout_alv.
*$*$ Variáveis --------------------------------------------------------* Nome do programa DATA: wv_repid LIKE sy-repid. Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
110
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*$*$ Tela de Seleção --------------------------------------------------SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01. SELECT-OPTIONS: s_vbeln FOR wt_saida-vbeln. SELECTION-SCREEN END OF BLOCK b1. * Variante SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02. PARAMETERS: p_vari LIKE disvariant-variant. SELECTION-SCREEN END OF BLOCK b2. *$*$ Inicialização ----------------------------------------------------INITIALIZATION. wv_repid = sy-repid. * Atribuições para variante CLEAR wf_variant. wf_variant-report = wv_repid. *$*$ Ajudas de tela ---------------------------------------------------* Processo de ajuda para variante AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari. PERFORM z_f4_for_variant. *$*$ Validações de tela ----------------------------------------------- AT SELECTION-SCREEN ON p_vari. PERFORM z_validacao_variante. *$*$ Programa Principal -----------------------------------------------START-OF-SELECTION. * Obter informações da base de dados PERFORM z_buscar_dados. * Indicar campos para exibição na lista PERFORM z_fieldcat_init USING wt_fieldcat[]. * Ordenar lista PERFORM z_ordenar_lista USING wt_sort[]. * Grupos de campos PERFORM z_sp_group_build USING wt_sp_group[]. * Eventos que podem ser acionados na lista PERFORM z_eventtab_build USING wt_events[]. * Determinar cores PERFORM z_field_color: TABLES wt_color_normal USING 2 0 0, TABLES wt_color_selecao USING 5 0 0. END-OF-SELECTION. * Parâmetros de impressão PERFORM z_print_build USING wf_print. * Layout da lista - Referente as definições PERFORM z_layout_build USING wf_layout. * Construção da lista propriamente dita ( Exibição das informações ) PERFORM z_list_display. *$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------* *& Form Z_BUSCAR_DADOS *&---------------------------------------------------------------------* * Obter informações para lista *----------------------------------------------------------------------* FORM z_buscar_dados. * Variáveis DATA: BEGIN OF lt_saida OCCURS 0, vbeln LIKE vbak-vbeln, " Nro da ordem de venda erdat LIKE vbak-erdat, " Data de criação ernam LIKE vbak-ernam, " Criado por audat LIKE vbak-audat, " Data da ordem auart LIKE vbak-auart, " Tipo de ordem netwr LIKE vbak-netwr, " Valor líq. da ordem vkorg LIKE vbak-vkorg, " Org. de vendas vtweg LIKE vbak-vtweg, " Canal de distribuição
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
111
GUIA
BÁSICO
DE
PROGRAMAÇÃO
spart LIKE vbak-spart, vkgrp LIKE vbak-vkgrp, vkbur LIKE vbak-vkbur, END OF lt_saida.
ALV
" Setor de atividade " Grupo de vendedores " Escritório de vendas
* Exibir aviso PERFORM z_sapgui_progress_indicator USING 'Selecionando dados. Aguarde...'. * Seleção das informações SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp vkbur * INTO TABLE wt_saida INTO TABLE lt_saida FROM vbak WHERE vbeln IN s_vbeln. * Atribuir valores a tabela de saída LOOP AT lt_saida. MOVE-CORRESPONDING lt_saida TO wt_saida. APPEND wt_saida. ENDLOOP. ENDFORM.
" Z_BUSCAR_DADOS
*&---------------------------------------------------------------------* *& Form Z_LIST_DISPLAY *&---------------------------------------------------------------------* * Lista informações na tela *----------------------------------------------------------------------* FORM z_list_display. PERFORM z_sapgui_progress_indicator USING 'Estruturando a lista. Aguarde...'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = wv_repid it_fieldcat = wt_fieldcat it_sort = wt_sort it_special_groups = wt_sp_group is_print = wf_print is_layout = wf_layout it_events = wt_events i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verificar processamento da função IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
*&---------------------------------------------------------------------* *& Form Z_SAPGUI_PROGRESS_INDICATOR *&---------------------------------------------------------------------* * Interagir com o front-end - Enviar mensagens *----------------------------------------------------------------------* * --> PV_TEXT - Mensagem *----------------------------------------------------------------------* FORM z_sapgui_progress_indicator USING value(pv_text). CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING * PERCENTAGE = 0
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
112
GUIA
BÁSICO
text
DE
PROGRAMAÇÃO
ALV
= pv_text.
ENDFORM.
" Z_SAPGUI_PROGRESS_INDICATOR
*---------------------------------------------------------------------* * FORM Z_FIELDCAT_INIT * *---------------------------------------------------------------------* * Inicializar estrutura das informações da lista * *---------------------------------------------------------------------* * --> PT_FIELDCAT - Tab. com estrutura de linha * *---------------------------------------------------------------------* FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv. * Estruturas DATA: lf_fieldcat TYPE slis_fieldcat_alv. * Limpar tabela CLEAR pt_fieldcat[]. * Cód. doc. venda CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VBELN'. lf_fieldcat-ref_tabname = 'VBAK'." lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. " * Data de Criação CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERDAT'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. * Criado por CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERNAM'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. * Tipo de Ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'AUART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Valor líq. da ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'NETWR'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'V'. " APPEND lf_fieldcat TO pt_fieldcat. * Organização de vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKORG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Canal de distribuição CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VTWEG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Setor de atividade CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'SPART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Grupo de Vendedores CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKGRP'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Escritório de Vendas CLEAR lf_fieldcat.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
113
" Nome do Campo Tab. de Referência Grupo de Ordem Vendas Gravar na tab. config.
Grupo de Ordem Vendas
Grupo de Ordem Vendas
Grupo de Valores
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
lf_fieldcat-fieldname = 'VKBUR'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. ENDFORM.
" FORM Z_FIELDCAT_INIT
*&---------------------------------------------------------------------* *& Form Z_ORDENAR_LISTA *&---------------------------------------------------------------------* * Ordenação da lista *----------------------------------------------------------------------* * --> PT_SORT[] - Tabela com informações de ordenação dos campos *----------------------------------------------------------------------* FORM z_ordenar_lista USING pt_sort TYPE slis_t_sortinfo_alv. * Estrutura para gravar na lista DATA: lf_sort TYPE slis_sortinfo_alv. CLEAR lf_sort. * Montar estrutura lf_sort-spos lf_sort-fieldname lf_sort-tabname lf_sort-up lf_sort-expa APPEND lf_sort TO ** * * * * * *
= 1. = 'ERNAM'. = 'WT_SAIDA'. = 'X'. = 'X'. wt_sort.
" " " " "
Sequência de ordenação Nome do campo Nome da tabela de lista Ordenação Crescente Expandir lista
Outras opções possíveis de utilização lf_sort-down = 'X'. " Ordenação decrescente lf_sort-group = '*'. " Mudança de controle: quebra de " página, inserir sublinha lf_sort-subtot = 'X'. " Subtotal lf_sort-comp = 'X'. " Comprimir lista mostrando " apenas os subtotais
ENDFORM.
" Z_ORDENAR_LISTA
*---------------------------------------------------------------------* * FORM Z_SP_GROUP_BUILD * *---------------------------------------------------------------------* * Definir tipos de grupos de campos * *---------------------------------------------------------------------* * --> PT_SP_GROUP - Estrutura do grupo de campos * *---------------------------------------------------------------------* FORM z_sp_group_build USING pt_sp_group TYPE slis_t_sp_group_alv. * Variáveis DATA: lf_sp_group TYPE slis_sp_group_alv. * Atribuir valores * Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'A'. lf_sp_group-text = 'Ordem de Venda'(g01). APPEND lf_sp_group TO pt_sp_group. * Status da Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'V'. lf_sp_group-text = 'Valores'(g02). APPEND lf_sp_group TO pt_sp_group. ENDFORM.
" FORM Z_SP_GROUP_BUILD
*&---------------------------------------------------------------------* *& Form Z_F4_FOR_VARIANT *&---------------------------------------------------------------------* * Processo de ajuda pra variante *----------------------------------------------------------------------* FORM z_f4_for_variant. * Variável local
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
114
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
DATA: lv_exit. * Encontrar variante CALL FUNCTION 'REUSE_ALV_VARIANT_F4' EXPORTING is_variant = wf_variant i_save = 'A' * it_default_fieldcat = IMPORTING e_exit = lv_exit es_variant = wf_x_variant EXCEPTIONS not_found = 2. * Verificar processamento da função IF sy-subrc = 2. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. * Atribuir valor IF lv_exit = space. p_vari = wf_x_variant-variant. ENDIF. ENDIF. ENDFORM.
" Z_F4_FOR_VARIANT
*&---------------------------------------------------------------------* *& Form Z_VALIDACAO_VARIANTE *&---------------------------------------------------------------------* * Realizar validação da variante de exibição *----------------------------------------------------------------------* FORM z_validacao_variante. * Variante IF NOT p_vari IS INITIAL. MOVE: wf_variant TO wf_x_variant, p_vari TO wf_x_variant-variant. * Verificar existencia CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE' EXPORTING i_save = 'A' CHANGING cs_variant = wf_x_variant. wf_variant = wf_x_variant. ELSE. CLEAR: wf_variant. wf_variant-report = wv_repid. ENDIF. ENDFORM.
" Z_VALIDACAO_VARIANTE
*---------------------------------------------------------------------* * FORM Z_PRINT_BUILD * *---------------------------------------------------------------------* * Definir atributos de impressão da lista * *---------------------------------------------------------------------* * --> PF_PRINT - Estrutura com atributos da impressão da lista * *---------------------------------------------------------------------* FORM z_print_build USING pf_print TYPE slis_print_alv. * * PF_PRINT-PRINT = 'X'. " Imprimir no SPOOL pf_print-no_print_selinfos = 'X'. " Não listar info. sobre seleção pf_print-no_coverpage = 'X'. " Não listar página de rostp pf_print-no_print_listinfos = 'X'. " Não listar info. sobre a lista * PF_PRINT-RESERVE_LINES = 'X'. " Reservar linhas * PF_PRINT-NO_NEW_PAGE = 'X'. " Sem novas páginas * PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " Não alterar tamanho da linha ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
" Z_PRINT_BUILD
115
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*&---------------------------------------------------------------------* *& Form Z_LAYOUT_BUILD *&---------------------------------------------------------------------* * Layout de saída *----------------------------------------------------------------------* * --> PF_LAYOUT - Estrutura para layout de saída da lista *----------------------------------------------------------------------* FORM z_layout_build USING pf_layout TYPE slis_layout_alv. pf_layout-group_change_edit = * Check box na lista pf_layout-box_fieldname = pf_layout-box_tabname = * Determinar a tabela de cores pf_layout-coltab_fieldname =
'X'. 'BOX'. 'WT_SAIDA'. 'COLOR'.
ENDFORM.
" Z_LAYOUT_BUILD
*---------------------------------------------------------------------* * FORM Z_EVENTTAB_BUILD * *---------------------------------------------------------------------* * Definir eventos associados a lista * *---------------------------------------------------------------------* * --> PT_EVENTS - Eventos associados a lista * *---------------------------------------------------------------------* FORM z_eventtab_build USING pt_events TYPE slis_t_event. * Variáveis DATA: lf_event TYPE slis_alv_event. * Obter eventos permitidos para lista grid CALL FUNCTION 'REUSE_ALV_EVENTS_GET' EXPORTING i_list_type = 0 IMPORTING et_events = pt_events. * Verificar se evento foi encontrado LOOP AT pt_events INTO lf_event. CASE lf_event-name. WHEN slis_ev_user_command. MOVE 'Z_USER_COMMAND' TO lf_event-form. WHEN slis_ev_item_data_expand. * move 'Z_ITEM_DATA_EXPAND' to lf_event-form. WHEN slis_ev_reprep_sel_modify. * move 'Z_REPREP_SEL_MODIFY' to lf_event-form. WHEN slis_ev_caller_exit_at_start. * MOVE 'Z_CALLER_EXIT' TO lf_event-form. WHEN slis_ev_top_of_page. MOVE 'Z_TOP_OF_PAGE' TO lf_event-form. WHEN slis_ev_top_of_coverpage. * move 'Z_TOP_OF_COVERPAGE' to lf_event-form. WHEN slis_ev_end_of_coverpage. * move 'Z_END_OF_COVERPAGE' to lf_event-form. WHEN slis_ev_foreign_top_of_page. * move 'Z_FOREIGN_TOP_OF_PAGE' to lf_event-form. WHEN slis_ev_foreign_end_of_page. * move 'Z_FOREIGN_END_OF_PAGE' to lf_event-form. WHEN slis_ev_pf_status_set. MOVE 'Z_PF_STATUS_SET' TO lf_event-form. WHEN slis_ev_list_modify. * MOVE 'Z_LIST_MODIFY' TO lf_event-form. WHEN slis_ev_top_of_list. MOVE 'Z_TOP_OF_LIST' TO lf_event-form. WHEN slis_ev_end_of_page. MOVE 'Z_END_OF_PAGE' TO lf_event-form. WHEN slis_ev_end_of_list. MOVE 'Z_END_OF_LIST' TO lf_event-form. WHEN slis_ev_after_line_output.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
116
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*
MOVE 'Z_AFTER_LINE_OUTPUT' TO lf_event-form. WHEN slis_ev_before_line_output. * MOVE 'Z_BEFORE_LINE_OUTPUT' TO lf_event-form. WHEN slis_ev_subtotal_text. * MOVE 'Z_SUBTOTAL_TEXT' TO lf_event-form. ENDCASE. MODIFY pt_events FROM lf_event. ENDLOOP. * ENDFORM. " FORM Z_EVENTTAB_BUILD *----------------------------------------------------------------------* * FORM Z_USER_COMMAND * *----------------------------------------------------------------------* * Ações do usuário * *----------------------------------------------------------------------* FORM z_user_command USING pv_ucomm LIKE sy-ucomm pf_selfield TYPE slis_selfield. "#EC CALLED * CASE pv_ucomm. * Ação de Click duplo '&IC1' WHEN '&IC1'. * Posicionar no registro selecionado READ TABLE wt_saida INDEX pf_selfield-tabindex. * Verificar campo selecionado CASE pf_selfield-sel_tab_field. WHEN 'WT_SAIDA-VBELN'. * Determinar nro da ordem de venda ao parâmetro de memória SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln. * Chamar transação de exibição da ordem de venda CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN. ENDCASE. WHEN 'TESTE'. PERFORM z_rotina_teste. * Realizar um REFRESH da lista pf_selfield-refresh = 'X'. ENDCASE. ENDFORM. *----------------------------------------------------------------------* * FORM Z_TOP_OF_PAGE * *----------------------------------------------------------------------* * Evento de cabeçalho * *----------------------------------------------------------------------* FORM z_top_of_page. "#EC CALLED WRITE: / 'Evento: top-of-page'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_END_OF_PAGE * *----------------------------------------------------------------------* * Evento para rodapé da lista * *----------------------------------------------------------------------* FORM z_end_of_page. "#EC CALLED WRITE: / 'Evento: end_of_page'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_TOP_OF_LIST * *----------------------------------------------------------------------* * Evento para topo da lista * *----------------------------------------------------------------------* FORM z_top_of_list. "#EC CALLED
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
117
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
WRITE: / 'Evento: top-of-list'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_END_OF_LIST * *----------------------------------------------------------------------* * Evento de final de lista * *----------------------------------------------------------------------* FORM z_end_of_list. "#EC CALLED WRITE: / 'Evento: end_of_list'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_PF_STATUS_SET * *----------------------------------------------------------------------* * Especificar barra de status * *----------------------------------------------------------------------* FORM z_pf_status_set USING pt_extab TYPE slis_t_extab. "#EC CALLED * Acionar barra de comandos SET PF-STATUS 'STANDARD' EXCLUDING pt_extab. ENDFORM. *----------------------------------------------------------------------* * FORM Z_CALLER_EXIT * *----------------------------------------------------------------------* * Evento * *----------------------------------------------------------------------* FORM z_caller_exit USING pf_data. "#EC CALLED ENDFORM. *----------------------------------------------------------------------* * FORM Z_BEFORE_LINE_OUTPUT * *----------------------------------------------------------------------* * Evento antes da impressão da linha * *----------------------------------------------------------------------* FORM z_before_line_output USING pf_lineinfo TYPE slis_lineinfo. "#EC CALLED *
break-point.
ENDFORM. *----------------------------------------------------------------------* * FORM Z_AFTER_LINE_OUTPUT * *----------------------------------------------------------------------* * Evento depois da impressão da linha * *----------------------------------------------------------------------* FORM z_after_line_output USING pf_lineinfo TYPE slis_lineinfo. "#EC CALLED *
break-point.
ENDFORM. *----------------------------------------------------------------------* * FORM Z_LIST_MODIFY * *----------------------------------------------------------------------* * Evento modifica linha da lista * *----------------------------------------------------------------------* FORM z_list_modify USING pv_tabname TYPE slis_tabname pv_index LIKE sy-tabix pv_index_slave LIKE sy-tabix
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
118
GUIA
BÁSICO
DE
PROGRAMAÇÃO
pv_index_sum *
ALV
LIKE sy-tabix.
"#EC CALLED
break-point.
ENDFORM. *&---------------------------------------------------------------------* *& Form Z_ROTINA_TESTE *&---------------------------------------------------------------------* * Rotina para o evento TESTE ( Botão ) *----------------------------------------------------------------------* FORM z_rotina_teste. LOOP AT wt_saida. Verificar se linha foi selecionada CHECK wt_saida-box EQ 'X' IF wt_saida-box EQ 'X'. * Enviar mensagem para informar linha selecionada MESSAGE i899(bd) WITH 'Foi escolhida a ordem:' wt_saida-vbeln. * Mudar cor da linha selecionada wt_saida-color[] = wt_color_selecao[]. ELSE. * Mudar cor da linha selecionada wt_saida-color[] = wt_color_normal[]. ENDIF. MODIFY wt_saida TRANSPORTING color. ENDLOOP. * *
ENDFORM.
" Z_ROTINA_TESTE
*&---------------------------------------------------------------------* *& Form Z_FIELD_COLOR *&---------------------------------------------------------------------* * <-- PT_COLOR - Tab. com configuração das cores * --> PV_COLOR - Cor * --> PV_INTENSIFIED - Intensificado * --> PV_INVERSE - Inversão de cores *----------------------------------------------------------------------* FORM z_field_color TABLES pt_color TYPE slis_t_specialcol_alv USING value(pv_color) TYPE i value(pv_intensified) TYPE i value(pv_inverse) TYPE i. DEFINE z_field_color. pt_color-color-col = pv_color. pt_color-color-int = pv_intensified. pt_color-color-inv = pv_inverse. pt_color-fieldname = &1. append pt_color. END-OF-DEFINITION. * Inicializar tabela CLEAR: pt_color[], pt_color. * Definir campos z_field_color: 'VBELN', 'ERDAT', 'ERNAM', 'AUDAT', 'AUART', 'NETWR', 'VKORG', 'VTWEG', 'SPART', 'VKGRP', 'VKBUR'. ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
" Z_FIELD_COLOR
119
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
Capítulo 13 *$*$************************************************* *$*$******************************* ************************************ ******************* * *$*$ * *$*$ PROGRAMA: Inserindo Ícones * *$*$ TIPO : Lista ALV * *$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria * *$*$ DATA : 12/12/2001 * *$** OBS. : * *$** * *$*$******************************* *$*$*************** ********************************** ************************************ ******************* * *$*$ HISTÓRICO DAS MODIFICAÇÕES * *$*$------------------------------*$*$----------------------------------------------------------------------------------------------------* * *$*$ DATA | AUTOR | DESCRIÇÃO * *$*$------------------------------*$*$----------------------------------------------------------------------------------------------------* * *$** | | * *$*$******************************* *$*$*************** ********************************** ************************************ ******************* * REPORT zfra0023_13. *$*$ Type pools -----------------------------------------------------------------------------------------------------------TYPE-POOL TYPE-POOLS: S: slis. slis. *$*$ Includes ---------------------------------------------------------------------------------------------------------------INCLUDE INCLUDE . . *$*$ Tipos ---------------------------------------------------------------------------------------------------------------------TYPES: TYPES: BEGIN OF we_saida, we_saida, vbeln LIKE vbak-vbe vbeln, " Nro da ord ordem de venda erdat LIKE vbak-erd erdat, " Data de criação ernam LIKE vbak-ernam, " Criado por audat LIKE vbak-aud audat, " Data da ordem auart LIKE vbak-aua auart, " Tipo de ordem netwr LIKE vbak-net netwr, " Valor líq. íq. da ord ordem vkorg LIKE vbak-vko vkorg, " Org. de vendas vtwe vtweg g LIKE LIKE vba vbak-vt k-vtwe weg, g, " Cana Canal l de distr istrib ibui uiçã ção o spart LIKE vbak-spa spart, " Setor de atividad dade vkgr vkgrp p LIKE LIKE vba vbak-vk k-vkgr grp, p, " Grup Grupo o de vende endedo dore res s vkbu vkbur r LIKE LIKE vba vbak-vk k-vkbu bur, r, " Escr Escrit itó ório rio de vend vendas as box TYPE c , " Checkbox icone(30) TYPE c , " Ícone END END OF we_ we_said saida. a. *$*$ Tabelas Internas ------------------------------------------------------------------------------------------------* Ta Tab. b. co com m da dado dos s pa para ra li list sta a DATA: DATA: wt_sai wt_saida da TYPE TYPE STANDA STANDARD RD TABLE TABLE OF we_sai we_saida da WITH WITH HEADER HEADER LINE. LINE. * Tab Tab. . com inf inform ormaçõ ações es sob sobre re as car caract acterí erísti sticas cas dos cam campos pos DATA: wt_fieldc wt_fieldcat at TYPE slis_t_fie slis_t_fieldcat ldcat_alv _alv. . * Tab Tab. . com inf inform ormaçõ ações es sobre sobre a ord ordena enação ção da lis lista ta DATA DATA: : wt_s wt_sor ort t TYPE TYPE slis slis_t _t_s _sor orti tinf nfo_ o_al alv. v. * Tab Tab. . de esp especi ecific ficaçã ação o de gru grupos pos DATA: wt_sp_gro wt_sp_group up TYPE slis_t_sp_ slis_t_sp_group group_alv _alv. . * Ta Tab. b. de ev even ento tos s DATA: DATA: wt_eve wt_events nts TYPE TYPE slis slis_t_ _t_eve event. nt. *$*$--- Estruturas DATA: wf_x_vari wf_x_variant ant DATA: DATA: wf_var wf_varian iant t DATA DATA: : wf_p wf_pri rint nt DATA DATA: : wf_ wf_la layo yout ut
-----------------------------------------------------------------------------------------------------LIKE disvariant disvariant. . LIKE LIKE disvar disvarian iant. t. TYPE TYPE slis slis_p _pri rint nt_a _alv lv. . TYPE TYPE slis slis_l _lay ayou out_ t_al alv. v.
*$*$ Variáveis -------------------------------------------------------------------------------------------------------------* Nom Nome e do pro progra grama ma DATA: wv_repid wv_repid LIKE sy-repid. sy-repid.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
120 120
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*$*$ Tela de Seleção --------------------------------------------------------------------------------------------------SELECT SELECTION ION-SC -SCREE REEN N BEGIN BEGIN OF BLOCK BLOCK b1 WITH WITH FRAME FRAME TITLE TITLE text-s text-s01. 01. SELECT-OP SELECT-OPTIONS TIONS: : s_vbeln s_vbeln FOR wt_saida-v wt_saida-vbeln beln. . SELE SELECT CTIO IONN-SC SCRE REEN EN END END OF BLOC BLOCK K b1. * Varia Variante nte SELECT SELECTION ION-SC -SCREE REEN N BEGIN BEGIN OF BLOCK BLOCK b2 WITH WITH FRAME FRAME TITLE TITLE text-s text-s02. 02. PARAMETER PARAMETERS: S: p_vari p_vari LIKE disvariant disvariant-vari -variant. ant. SELE SELECT CTIO IONN-SC SCRE REEN EN END END OF BLOC BLOCK K b2. *$*$ Inicialização -----------------------------------------------------------------------------------------------------INITIALIZATION. wv_re v_repi pid d = sysy-repi repid. d. * Atrib Atribuiçõe uições s para variante CLEAR wf_variant wf_variant. . wf_variant wf_variant-rep -report ort = wv_repid. wv_repid. *$*$ Ajudas de tela ---------------------------------------------------------------------------------------------------* Pro Proces cesso so de aju ajuda da par para a var varian iante te AT SELECTIONSELECTION-SCREE SCREEN N ON VALUE-REQU VALUE-REQUEST EST FOR p_vari. p_vari. PERFORM z_f4_for_variant. *$*$ Validações de tela -------------------------------------------------------------------------------------------- AT SELECTIONSELECTION-SCREE SCREEN N ON p_vari. p_vari. PERFORM z_validacao_variante. z_validacao_variante. *$*$ Programa Principal --------------------------------------------------------------------------------------------START-OF-SELECTION. * Obter informações informações PERFORM z_buscar_dados. * Ind Indica icar r cam campos pos par para a exi exibiç bição ão na lis lista ta PERFORM PERFORM z_fieldcat z_fieldcat_ini _init t USING USING wt_fieldc wt_fieldcat[]. at[]. * Ord Ordena enar r lis lista ta PERFORM PERFORM z_ordenar_ z_ordenar_list lista a USING wt_sort[] wt_sort[]. . * Gru Grupos pos de cam campos pos PERFORM PERFORM z_sp_group z_sp_group_bui _build ld USING wt_sp_gro wt_sp_group[]. up[]. * Eve Evento ntos s que podem ser aci aciona onados dos na lis lista ta PERFORM PERFORM z_eventtab z_eventtab_bui _build ld USING wt_events wt_events[]. []. END-OF-SELECTION. * Parâm Parâmetros etros de impre impressão ssão PERFORM PERFORM z_print_bu z_print_build ild USING wf_print. wf_print. * Lay Layout out da lis lista ta - Ref Refere erente nte as def defini iniçõe ções s PERFORM PERFORM z_layout_b z_layout_build uild USING USING wf_layout wf_layout. . * Con Constr struçã ução o da lis lista ta pro propri priame amente nte dit dita a ( Exi Exibiç bição ão das inf inform ormaçõ ações es ) PERFORM z_list_display. *$*$ Subrotinas -----------------------------------------------------------------------------------------------------------*&--------------------------------*&------------------------------------------------------------------------------------------------------* * *& Form Z_BUSCAR_DADOS *&--------------------------------*&------------------------------------------------------------------------------------------------------* * * Obter informações para lista *---------------------------------*-------------------------------------------------------------------------------------------------------* * FORM z_buscar_dados. * Exi Exibir bir men mensag sagem em PERFORM z_sapgui_progress_indicator z_sapgui_progress_indicator USING 'Seleciona 'Selecionando ndo dados. dados. Aguarde.. Aguarde...'. .'. * Ob Obte ter r da dado dos s da ba base se SELECT SELECT vbeln vbeln erdat erdat ernam ernam audat audat auart auart netwr netwr vkorg vkorg vtweg vtweg spart spart vkgrp vkgrp vkbur INTO TABLE wt_saida wt_saida FROM FROM vbak vbak WHERE WHERE vbeln vbeln IN s_vbel s_vbeln. n. * Atrib Atribuir uir ícon ícones es LOOP LOOP AT wt_sai wt_saida. da. * Veri Ve rifi fica car r va valo lor r lí líqu quid ido o IF wt_saidawt_saida-netwr netwr GT '1000'. '1000'. wt_saidawt_saida-icone icone = icon_red_l icon_red_light. ight.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
121
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
ELSEIF ELSEIF wt_saidawt_saida-netw netwr r GT '500'. '500'. wt_saida-icone = icon_yellow_light. ELSE. wt_saida-icone = icon_green_light. ENDIF. MODIFY MODIFY wt_saida wt_saida TRANSPORT TRANSPORTING ING icone. icone. ENDLOOP. ENDFORM.
" Z_BUSCAR_DADOS
*&--------------------------------------------------*&-------------------------------------------------------------------------------------* * *& Form Z_LIST_DISPLAY *&--------------------------------*&------------------------------------------------------------------------------------------------------* * * Lista informações na tela *---------------------------------*-------------------------------------------------------------------------------------------------------* * FORM z_list_display. PERFORM z_sapgui_progress_indicator z_sapgui_progress_indicator USING 'Estrutura 'Estruturando ndo a lista. lista. Aguarde.. Aguarde...'. .'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callbac i_callback_pro k_program gram = wv_repid wv_repid it_fieldcat = wt_fieldcat it_sort = wt_sort it_specia it_special_gro l_groups ups = wt_sp_gr wt_sp_group oup is_print = wf_print is_layout = wf_layout it_events = wt_events i_save = 'A' TABLES t_outtab = wt_saida EXCEPTIONS program_error = 1 OTHERS = 2. * Verif Verificar icar proc processam essamento ento da funçã função o IF sy-s sy-sub ubrc rc NE 0. MESSAGE MESSAGE ID sy-msgid sy-msgid TYPE sy-msgty sy-msgty NUMBER NUMBER sy-msgno sy-msgno WITH sy-msgv1 sy-msgv1 sy-msgv2 sy-msgv2 sy-msgv3 sy-msgv3 sy-msgv4. sy-msgv4. ENDIF. ENDFORM.
" Z_LIST_DISPLAY
*&--------------------------------------------------*&-------------------------------------------------------------------------------------* * *& Form Fo rm Z_ Z_SA SAPG PGUI UI_P _PRO ROGR GRES ESS_ S_IN INDI DICA CATO TOR R *&--------------------------------*&------------------------------------------------------------------------------------------------------* * * Int nter erag agir ir com o fr fro ont nt-e -end nd - En Env via iar r me mens nsa age gen ns *---------------------------------*-------------------------------------------------------------------------------------------------------* * * ---> > PV_ V_TE TEXT XT - Me Mens nsag agem em *---------------------------------*-------------------------------------------------------------------------------------------------------* * FORM z_sapgui_progress_indicator USING value(pv_text). CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' 'SAPGUI_PROGRESS_INDICATOR' EXPORTING * PERCENTAGE = 0 text = pv_text. ENDFORM.
" Z_SAPGUI_PROGRESS_INDICATOR
*---------------------------------------------------*--------------------------------------------------------------------* -----------------* * FORM Z_FIELDCAT_INIT * *---------------------------------*-------------------------------------------------------------------------------------* -----------------* * Inicializar estrutura das informações da lista * *---------------------------------*-------------------------------------------------------------------------------------* -----------------* * --> PT_FIELDCAT - Tab. com estrutura de linha * *---------------------------------*-------------------------------------------------------------------------------------* -----------------* FORM z_fieldca z_fieldcat_ini t_init t USING pt_fieldc pt_fieldcat at TYPE slis_t_fi slis_t_fieldca eldcat_alv t_alv. . * Estru Estruturas turas
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
122
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
DATA: lf_fieldcat TYPE slis_fieldcat_alv. * Limpar tabela CLEAR pt_fieldcat[]. * Ícone clear lf_fieldcat. lf_fieldcat-fieldname = 'ICONE'. lf_fieldcat-icon = 'X'. lf_fieldcat-datatype = 'CHAR'. lf_fieldcat-outputlen = '4'. append lf_fieldcat to pt_fieldcat. * Cód. doc. venda CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VBELN'. lf_fieldcat-ref_tabname = 'VBAK'." lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. " * Data de Criação CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERDAT'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. * Criado por CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'ERNAM'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'A'. " APPEND lf_fieldcat TO pt_fieldcat. * Tipo de Ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'AUART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Valor líq. da ordem CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'NETWR'. lf_fieldcat-ref_tabname = 'VBAK'. lf_fieldcat-sp_group = 'V'. " APPEND lf_fieldcat TO pt_fieldcat. * Organização de vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKORG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Canal de distribuição CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VTWEG'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Setor de atividade CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'SPART'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Grupo de Vendedores CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKGRP'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. * Escritório de Vendas CLEAR lf_fieldcat. lf_fieldcat-fieldname = 'VKBUR'. lf_fieldcat-ref_tabname = 'VBAK'. APPEND lf_fieldcat TO pt_fieldcat. ENDFORM.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
" Nome do Campo Tab. de Referência Grupo de Ordem Vendas Gravar na tab. config.
Grupo de Ordem Vendas
Grupo de Ordem Vendas
Grupo de Valores
" FORM Z_FIELDCAT_INIT
123
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
*&---------------------------------------------------------------------* *& Form Z_ORDENAR_LISTA *&---------------------------------------------------------------------* * Ordenação da lista *----------------------------------------------------------------------* * --> PT_SORT[] - Tabela com informações de ordenação dos campos *----------------------------------------------------------------------* FORM z_ordenar_lista USING pt_sort TYPE slis_t_sortinfo_alv. * Estrutura para gravar na lista DATA: lf_sort TYPE slis_sortinfo_alv. CLEAR lf_sort. * Montar estrutura lf_sort-spos lf_sort-fieldname lf_sort-tabname lf_sort-up lf_sort-expa APPEND lf_sort TO ** * * * * * *
= 1. = 'ERNAM'. = 'WT_SAIDA'. = 'X'. = 'X'. wt_sort.
" " " " "
Sequência de ordenação Nome do campo Nome da tabela de lista Ordenação Crescente Expandir lista
Outras opções possíveis de utilização lf_sort-down = 'X'. " Ordenação decrescente lf_sort-group = '*'. " Mudança de controle: quebra de " página, inserir sublinha lf_sort-subtot = 'X'. " Subtotal lf_sort-comp = 'X'. " Comprimir lista mostrando " apenas os subtotais
ENDFORM.
" Z_ORDENAR_LISTA
*---------------------------------------------------------------------* * FORM Z_SP_GROUP_BUILD * *---------------------------------------------------------------------* * Definir tipos de grupos de campos * *---------------------------------------------------------------------* * --> PT_SP_GROUP - Estrutura do grupo de campos * *---------------------------------------------------------------------* FORM z_sp_group_build USING pt_sp_group TYPE slis_t_sp_group_alv. * Variáveis DATA: lf_sp_group TYPE slis_sp_group_alv. * Atribuir valores * Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'A'. lf_sp_group-text = 'Ordem de Venda'(g01). APPEND lf_sp_group TO pt_sp_group. * Status da Ordem de Venda CLEAR lf_sp_group. lf_sp_group-sp_group = 'V'. lf_sp_group-text = 'Valores'(g02). APPEND lf_sp_group TO pt_sp_group. ENDFORM.
" FORM Z_SP_GROUP_BUILD
*&---------------------------------------------------------------------* *& Form Z_F4_FOR_VARIANT *&---------------------------------------------------------------------* * Processo de ajuda pra variante *----------------------------------------------------------------------* FORM z_f4_for_variant. * Variável local DATA: lv_exit. * Encontrar variante CALL FUNCTION 'REUSE_ALV_VARIANT_F4' EXPORTING is_variant = wf_variant
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
124
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
i_save = 'A' it_default_fieldcat = IMPORTING e_exit = lv_exit es_variant = wf_x_variant EXCEPTIONS not_found = 2. * Verificar processamento da função IF sy-subrc = 2. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. * Atribuir valor IF lv_exit = space. p_vari = wf_x_variant-variant. ENDIF. ENDIF. *
ENDFORM.
" Z_F4_FOR_VARIANT
*&---------------------------------------------------------------------* *& Form Z_VALIDACAO_VARIANTE *&---------------------------------------------------------------------* * Realizar validação da variante de exibição *----------------------------------------------------------------------* FORM z_validacao_variante. * Variante IF NOT p_vari IS INITIAL. MOVE: wf_variant TO wf_x_variant, p_vari TO wf_x_variant-variant. * Verificar existencia CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE' EXPORTING i_save = 'A' CHANGING cs_variant = wf_x_variant. wf_variant = wf_x_variant. ELSE. CLEAR: wf_variant. wf_variant-report = wv_repid. ENDIF. ENDFORM.
" Z_VALIDACAO_VARIANTE
*---------------------------------------------------------------------* * FORM Z_PRINT_BUILD * *---------------------------------------------------------------------* * Definir atributos de impressão da lista * *---------------------------------------------------------------------* * --> PF_PRINT - Estrutura com atributos da impressão da lista * *---------------------------------------------------------------------* FORM z_print_build USING pf_print TYPE slis_print_alv. * * PF_PRINT-PRINT = 'X'. " Imprimir no SPOOL pf_print-no_print_selinfos = 'X'. " Não listar info. sobre seleção pf_print-no_coverpage = 'X'. " Não listar página de rostp pf_print-no_print_listinfos = 'X'. " Não listar info. sobre a lista * PF_PRINT-RESERVE_LINES = 'X'. " Reservar linhas * PF_PRINT-NO_NEW_PAGE = 'X'. " Sem novas páginas * PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " Não alterar tamanho da linha ENDFORM.
" Z_PRINT_BUILD
*&---------------------------------------------------------------------* *& Form Z_LAYOUT_BUILD *&---------------------------------------------------------------------* * Layout de saída *----------------------------------------------------------------------*
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
125
GUIA
BÁSICO
DE
PROGRAMAÇÃO
ALV
* --> PF_LAYOUT - Estrutura para layout de saída da lista *----------------------------------------------------------------------* FORM z_layout_build USING pf_layout TYPE slis_layout_alv. pf_layout-group_change_edit = 'X'. * Check box na lista pf_layout-box_fieldname = 'BOX'. pf_layout-box_tabname = 'WT_SAIDA'. ENDFORM.
" Z_LAYOUT_BUILD
*---------------------------------------------------------------------* * FORM Z_EVENTTAB_BUILD * *---------------------------------------------------------------------* * Definir eventos associados a lista * *---------------------------------------------------------------------* * --> PT_EVENTS - Eventos associados a lista * *---------------------------------------------------------------------* FORM z_eventtab_build USING pt_events TYPE slis_t_event. * Variáveis DATA: lf_event TYPE slis_alv_event. * Obter eventos permitidos para lista grid CALL FUNCTION 'REUSE_ALV_EVENTS_GET' EXPORTING i_list_type = 0 IMPORTING et_events = pt_events. * Verificar se evento foi encontrado LOOP AT pt_events INTO lf_event. CASE lf_event-name. WHEN slis_ev_user_command. MOVE 'Z_USER_COMMAND' TO lf_event-form. WHEN slis_ev_item_data_expand. * move 'Z_ITEM_DATA_EXPAND' to lf_event-form. WHEN slis_ev_reprep_sel_modify. * move 'Z_REPREP_SEL_MODIFY' to lf_event-form. WHEN slis_ev_caller_exit_at_start. * MOVE 'Z_CALLER_EXIT' TO lf_event-form. WHEN slis_ev_top_of_page. MOVE 'Z_TOP_OF_PAGE' TO lf_event-form. WHEN slis_ev_top_of_coverpage. * move 'Z_TOP_OF_COVERPAGE' to lf_event-form. WHEN slis_ev_end_of_coverpage. * move 'Z_END_OF_COVERPAGE' to lf_event-form. WHEN slis_ev_foreign_top_of_page. * move 'Z_FOREIGN_TOP_OF_PAGE' to lf_event-form. WHEN slis_ev_foreign_end_of_page. * move 'Z_FOREIGN_END_OF_PAGE' to lf_event-form. WHEN slis_ev_pf_status_set. MOVE 'Z_PF_STATUS_SET' TO lf_event-form. WHEN slis_ev_list_modify. * MOVE 'Z_LIST_MODIFY' TO lf_event-form. WHEN slis_ev_top_of_list. MOVE 'Z_TOP_OF_LIST' TO lf_event-form. WHEN slis_ev_end_of_page. MOVE 'Z_END_OF_PAGE' TO lf_event-form. WHEN slis_ev_end_of_list. MOVE 'Z_END_OF_LIST' TO lf_event-form. WHEN slis_ev_after_line_output. * MOVE 'Z_AFTER_LINE_OUTPUT' TO lf_event-form. WHEN slis_ev_before_line_output. * MOVE 'Z_BEFORE_LINE_OUTPUT' TO lf_event-form. WHEN slis_ev_subtotal_text. * MOVE 'Z_SUBTOTAL_TEXT' TO lf_event-form. ENDCASE. MODIFY pt_events FROM lf_event. ENDLOOP.
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
126
GUIA
BÁSICO
DE
PROGRAMAÇÃO
* ENDFORM.
ALV
" FORM Z_EVENTTAB_BUILD
*----------------------------------------------------------------------* * FORM Z_USER_COMMAND * *----------------------------------------------------------------------* * Ações do usuário * *----------------------------------------------------------------------* FORM z_user_command USING pv_ucomm LIKE sy-ucomm pf_selfield TYPE slis_selfield. "#EC CALLED * CASE pv_ucomm. * Ação de Click duplo '&IC1' WHEN '&IC1'. * Posicionar no registro selecionado READ TABLE wt_saida INDEX pf_selfield-tabindex. * Verificar campo selecionado CASE pf_selfield-sel_tab_field. WHEN 'WT_SAIDA-VBELN'. * Determinar nro da ordem de venda ao parâmetro de memória SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln. * Chamar transação de exibição da ordem de venda CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN. ENDCASE. WHEN 'TESTE'. PERFORM z_rotina_teste. ENDCASE. ENDFORM. *----------------------------------------------------------------------* * FORM Z_TOP_OF_PAGE * *----------------------------------------------------------------------* * Evento de cabeçalho * *----------------------------------------------------------------------* FORM z_top_of_page. "#EC CALLED WRITE: / 'Evento: top-of-page'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_END_OF_PAGE * *----------------------------------------------------------------------* * Evento para rodapé da lista * *----------------------------------------------------------------------* FORM z_end_of_page. "#EC CALLED WRITE: / 'Evento: end_of_page'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_TOP_OF_LIST * *----------------------------------------------------------------------* * Evento para topo da lista * *----------------------------------------------------------------------* FORM z_top_of_list. "#EC CALLED WRITE: / 'Evento: top-of-list'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_END_OF_LIST * *----------------------------------------------------------------------* * Evento de final de lista * *----------------------------------------------------------------------*
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
127
GUIA
BÁSICO
DE
PROGRAMAÇÃO
FORM z_end_of_list.
ALV
"#EC CALLED
WRITE: / 'Evento: end_of_list'. ENDFORM. *----------------------------------------------------------------------* * FORM Z_PF_STATUS_SET * *----------------------------------------------------------------------* * Especificar barra de status * *----------------------------------------------------------------------* FORM z_pf_status_set USING pt_extab TYPE slis_t_extab. "#EC CALLED * Acionar barra de comandos SET PF-STATUS 'STANDARD' EXCLUDING pt_extab. ENDFORM. *----------------------------------------------------------------------* * FORM Z_CALLER_EXIT * *----------------------------------------------------------------------* * Evento * *----------------------------------------------------------------------* FORM z_caller_exit USING pf_data. "#EC CALLED ENDFORM. *----------------------------------------------------------------------* * FORM Z_BEFORE_LINE_OUTPUT * *----------------------------------------------------------------------* * Evento antes da impressão da linha * *----------------------------------------------------------------------* FORM z_before_line_output USING pf_lineinfo TYPE slis_lineinfo. "#EC CALLED *
break-point.
ENDFORM. *----------------------------------------------------------------------* * FORM Z_AFTER_LINE_OUTPUT * *----------------------------------------------------------------------* * Evento depois da impressão da linha * *----------------------------------------------------------------------* FORM z_after_line_output USING pf_lineinfo TYPE slis_lineinfo. "#EC CALLED *
break-point.
ENDFORM. *----------------------------------------------------------------------* * FORM Z_LIST_MODIFY * *----------------------------------------------------------------------* * Evento modifica linha da lista * *----------------------------------------------------------------------* FORM z_list_modify USING pv_tabname TYPE slis_tabname pv_index LIKE sy-tabix pv_index_slave LIKE sy-tabix pv_index_sum LIKE sy-tabix. "#EC CALLED *
break-point.
ENDFORM. *&---------------------------------------------------------------------* *& Form Z_ROTINA_TESTE *&---------------------------------------------------------------------* * Rotina para o evento TESTE ( Botão )
Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]
128