manual alv

130
GUIA DE PROGRAMAÇÃO Desenvolvimento de aplicações ABAP Guia Básico de Programação ALV ( ABAP List Viwer ) Volum e

Upload: darthclayton

Post on 28-Nov-2014

371 views

Category:

Documents


53 download

TRANSCRIPT

Page 1: Manual ALV

GUIA DE PROGRAMAÇÃO Desenvolvimento de aplicações ABAP

Guia Básico de Programação ALV

( ABAP List Viwer )

Volume

Page 2: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

1111

D E S E N V O L V I M E N T O D E A P L I C A Ç Õ E S A B A P

Guia Básico de Programação ALV

� Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br

[email protected]

Page 3: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

2222

Í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

Page 4: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

3333

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 volume 2 desta obra.

Capítulo

A

Page 5: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

4444

Meu primeiro ALV Criar uma lista utilizando os recursos do ALV.

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 programaDATA: 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.

Capítulo

N

Page 6: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

5555

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_indicatorUSING 'Selecionando dados. Aguarde...'.

SELECT * INTO TABLE wt_saidaFROM vbakWHERE 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 = 0TEXT = 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_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

Page 7: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

6666

i_callback_program = wv_repidi_structure_name = 'VBAK'i_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1others = 2.

* Verificar processamento da funçãoIF 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’ � Nome da ma para o qual a função deve ser referenciada no dicionário;

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

Page 8: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

7777

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.

Page 9: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

8888

Montando a estrutura da lista Montar a estrutura de campos da lista sem utilizar estrutura do dicionário de dados do R/3.

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, " Nro da ordem de vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuiçãospart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur LIKE vbak-vkbur, " Escritório de vendas

END OF we_saida.

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;

Capítulo

N

Page 10: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

9999

SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrpvkburINTO TABLE wt_saidaFROM vbakWHERE 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 tabelaCLEAR pt_fieldcat[].

* Cód. doc. vendaCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VBELN'. " Nome do Campolf_fieldcat-ref_tabname = 'VBAK'. " Tab. de ReferênciaAPPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

* Data de CriaçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERDAT'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Criado porCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERNAM'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Tipo de OrdemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'AUART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Valor líq. da ordemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'NETWR'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Organização de vendasCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKORG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Canal de distribuiçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VTWEG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Setor de atividadeCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'SPART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Grupo de VendedoresCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKGRP'.lf_fieldcat-ref_tabname = 'VBAK'.

Page 11: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

10101010

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_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repid* i_structure_name = 'VBAK'

it_fieldcat = wt_fieldcati_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF sy-subrc NE 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.

Page 12: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

11111111

ENDFORM. " 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.

Page 13: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

12121212

Ordenando a lista Utilizando recursos para ordenação da lista antes da apresentação.

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 listaDATA: 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.

Capítulo

N

Page 14: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

13131313

CLEAR lf_sort.* Montar estrutura

lf_sort-spos = 1. " Sequência de ordenaçãolf_sort-fieldname = 'ERNAM'. " Nome do campolf_sort-tabname = 'WT_SAIDA'. " Nome da tabela de listalf_sort-up = 'X'. " Ordenação Crescentelf_sort-expa = 'X'. " Expandir listaAPPEND lf_sort TO wt_sort.

** 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 sub-rotina Z_LIST_DISPLAY:

*&---------------------------------------------------------------------**& Form Z_LIST_DISPLAY*&---------------------------------------------------------------------** Lista informações na tela*----------------------------------------------------------------------*form z_list_display.

perform z_sapgui_progress_indicatorusing 'Estruturando a lista. Aguarde...'.

call function 'REUSE_ALV_LIST_DISPLAY'exporting

i_callback_program = wv_repid* i_structure_name = 'VBAK'

it_fieldcat = wt_fieldcatit_sort = wt_sorti_save = 'A'

tablest_outtab = wt_saida

exceptionsprogram_error = 1

Page 15: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

14141414

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.

Page 16: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

15151515

Criando grupos de campos Especificação de grupo de campos para variantes de exibiçã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 gruposDATA: 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 Vendaclear lf_sp_group.lf_sp_group-sp_group = 'V'.lf_sp_group-text = 'Valores'(g02).append lf_sp_group to pt_sp_group.

Capítulo

O

Page 17: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

16161616

endform. " 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 tabelaCLEAR pt_fieldcat[].

* Cód. doc. vendaCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VBELN'. " Nome do Campolf_fieldcat-ref_tabname = 'VBAK'. " Tab. de Referêncialf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

* Data de CriaçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERDAT'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Criado porCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERNAM'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Tipo de OrdemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'AUART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Valor líq. da ordemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'NETWR'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'V'. " Grupo de ValoresAPPEND lf_fieldcat TO pt_fieldcat....

ENDFORM. " FORM Z_FIELDCAT_INIT

Page 18: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

17171717

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_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repid* i_structure_name = 'VBAK'

it_fieldcat = wt_fieldcatit_sort = wt_sortit_special_groups = wt_sp_groupi_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF 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 � Nome da tabela interna com as configurações para especificação de grupos;

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 ” ou “ CRTL + F8 ”, e a tela abaixo aparecerá;

Page 19: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

18181818

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.

Page 20: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

19191919

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.

Page 21: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

20202020

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.

Page 22: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

21212121

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 ---------------------------------------------------* Varianteselection-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 varianteclear 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 SELECTION-SCREEN ON VALUE REQUEST...”, e depois criaremos uma rotina a qual chamaremos de Z_F4_FOR_VARIANT:

Capítulo

A

Page 23: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

22222222

*$*$ Ajudas de tela ----------------------------------------------------* Processo de ajuda para varianteat 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 variantecall function 'REUSE_ALV_VARIANT_F4'

exportingis_variant = wf_varianti_save = 'A'

* it_default_fieldcat =importing

e_exit = lv_exites_variant = wf_x_variant

exceptionsnot_found = 2.

* Verificar processamento da funçãoif sy-subrc = 2.message id sy-msgid type 'S' number sy-msgno

with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.else.

* Atribuir valorif 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.

Page 24: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

23232323

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

Page 25: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

24242424

FIGURA 6.2 Janela POPUP com variantes de exibição.

Page 26: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

25252525

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ãoPERFORM 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.

Capítulo

A

Page 27: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

26262626

** PF_PRINT-PRINT = 'X'. " Imprimir no SPOOL

pf_print-no_print_selinfos = 'X'. " Não listar info. sobre seleçãopf_print-no_coverpage = 'X'. " Não listar página de rostppf_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_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repid* i_structure_name = 'VBAK'

it_fieldcat = wt_fieldcatit_sort = wt_sortit_special_groups = wt_sp_groupis_print = wf_printi_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF 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;

Page 28: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

27272727

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 vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuiçãospart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur LIKE vbak-vkbur, " Escritório de vendasbox , " 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;

Capítulo

V

Page 29: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

28282828

...

* Layout da lista - Referente as definiçõesPERFORM z_layout_build USING wf_layout.

...

4 – Código para o form 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.

* Permitir mudança de níves de quebra para subtotaispf_layout-group_change_edit = 'X'.

* Check box na listapf_layout-box_fieldname = 'BOX'.pf_layout-box_tabname = 'WT_SAIDA'.

ENDFORM. " Z_LAYOUT_BUILD

5 – 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_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repid* i_structure_name = 'VBAK'

it_fieldcat = wt_fieldcatit_sort = wt_sortit_special_groups = wt_sp_groupis_print = wf_printis_layout = wf_layouti_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF 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:

Page 30: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

29292929

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 interessante é 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 )

Page 31: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

30303030

FIGURA 8.2 Tela com a opção de tipos de quebra diferentes para os níveis de totais

Page 32: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

31313131

Criando Eventos Criando eventos para ações específicas para o relatório.

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 eventosDATA: 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 gridCALL FUNCTION 'REUSE_ALV_EVENTS_GET'

Capítulo

E

Page 33: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

32323232

EXPORTINGi_list_type = 0

IMPORTINGet_events = pt_events.

* Verificar se evento foi encontrado* 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

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_HIERSEQ_LIST_DISPLAY ) 2 = Lista em blocos simples ( REUSE_ALV_BLOCK_LIST_APPEND ) 3 = Lista em blocos hierárquica ( REUSE_ALV_BLOCK_LIST_HS_APPEND )

As demais serão vistas em outra oportunidade.

4 – Agora vamos passar mais um parâmetro para a função REUSE que está na rotina Z_LIST_DISPLAY:

Page 34: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

33333333

*&---------------------------------------------------------------------**& Form Z_LIST_DISPLAY*&---------------------------------------------------------------------** Lista informações na tela*----------------------------------------------------------------------*FORM z_list_display.

PERFORM z_sapgui_progress_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repidit_fieldcat = wt_fieldcatit_sort = wt_sortit_special_groups = wt_sp_groupis_print = wf_printis_layout = wf_layoutit_events = wt_eventsi_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF 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_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 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

Page 35: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

34343434

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.

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: / 'Evento: top-of-page'.

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: / 'Evento: end_of_page'.

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: / 'Evento: top-of-list'.

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

Page 36: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

35353535

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.

Page 37: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

36363636

*----------------------------------------------------------------------** FORM Z_LIST_MODIFY **----------------------------------------------------------------------** Evento modifica linha da lista **----------------------------------------------------------------------*form z_list_modify using pv_tabname type slis_tabname

pv_index like sy-tabixpv_index_slave like sy-tabixpv_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

Page 38: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

37373737

Barra de Status Personalizada Atribuindo uma barra de status específica para o programa.

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.

Capítulo

P

Page 39: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

38383838

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.

Page 40: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

39393939

*---------------------------------------------------------------------** 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.

Page 41: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

40404040

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.

Page 42: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

41414141

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óriaSET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.

* Chamar transação de exibição da ordem de vendaCALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

ENDCASE.WHEN 'TESTE'.PERFORM z_rotina_teste.

ENDCASE.

ENDFORM.

Capítulo

A

Page 43: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

42424242

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.

Page 44: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

43434343

Mudando cores dos campos Mudando os atributos de cores de campos.

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 vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuiçãospart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur LIKE vbak-vkbur, " Escritório de vendasbox , " Checkboxcolor 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 coresDATA: wt_color_normal TYPE slis_t_specialcol_alv WITH HEADER LINE,

Capítulo

N

Page 45: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

44444444

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 ivalue(pv_intensified) TYPE ivalue(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 tabelaCLEAR: pt_color[], pt_color.

* Definir camposz_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 = 'X'.* Check box na lista

pf_layout-box_fieldname = 'BOX'.pf_layout-box_tabname = 'WT_SAIDA'.

* Determinar a tabela de corespf_layout-coltab_fieldname = 'COLOR'.

ENDFORM. " Z_LAYOUT_BUILD

Page 46: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

45454545

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 selecionadawt_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óriaSET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.

* Chamar transação de exibição da ordem de vendaCALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

ENDCASE.WHEN 'TESTE'.

Page 47: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

46464646

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 vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuiçãospart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur LIKE vbak-vkbur, " Escritório de vendas

END OF lt_saida.

* Exibir avisoPERFORM z_sapgui_progress_indicator

USING 'Selecionando dados. Aguarde...'.* Seleção das informações

SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrpvkbur

* INTO TABLE wt_saidaINTO TABLE lt_saidaFROM vbakWHERE vbeln IN s_vbeln.

* Atribuir valores a tabela de saídaLOOP 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;

Page 48: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

47474747

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.

Page 49: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

48484848

Inserindo Ícones Agregando ícones a linhas da lista.

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 <icon>.

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 vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuiçãospart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur LIKE vbak-vkbur, " Escritório de vendasbox TYPE c , " Checkboxicone(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.

Capítulo

U

Page 50: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

49494949

* Exibir mensagemPERFORM z_sapgui_progress_indicator

USING 'Selecionando dados. Aguarde...'.* Obter dados da base

SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrpvkburINTO TABLE wt_saidaFROM vbakWHERE vbeln IN s_vbeln.

* Atribuir íconesLOOP AT wt_saida.

* Verificar valor líquidoIF 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 tabelaCLEAR pt_fieldcat[].

* Íconeclear 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. vendaCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VBELN'. " Nome do Campolf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referêncialf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

...

Page 51: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

50505050

5 – Tela da lista;

FIGURA 13.1 Tela de lista com ícones.

Page 52: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

51515151

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.

Page 53: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

52525252

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 programaDATA: 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

Page 54: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

53535353

*&---------------------------------------------------------------------** Obter informações para lista*----------------------------------------------------------------------*FORM z_buscar_dados.

PERFORM z_sapgui_progress_indicatorUSING 'Selecionando dados. Aguarde...'.

SELECT * INTO TABLE wt_saidaFROM vbakWHERE 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_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repidi_structure_name = 'VBAK'i_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF 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 = 0text = pv_text.

ENDFORM. " Z_SAPGUI_PROGRESS_INDICATOR

Page 55: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

54545454

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 vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuiçãospart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur 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 programaDATA: 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

Page 56: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

55555555

*&---------------------------------------------------------------------** Obter informações para lista*----------------------------------------------------------------------*FORM z_buscar_dados.

PERFORM z_sapgui_progress_indicatorUSING 'Selecionando dados. Aguarde...'.

SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrpvkburINTO TABLE wt_saidaFROM vbakWHERE 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_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repid* i_structure_name = 'VBAK'

it_fieldcat = wt_fieldcati_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF 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 = 0text = 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 **---------------------------------------------------------------------*

Page 57: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

56565656

FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv.* Estruturas

DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabelaCLEAR pt_fieldcat[].

* Cód. doc. vendaCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VBELN'. " Nome do Campolf_fieldcat-ref_tabname = 'VBAK'. " Tab. de ReferênciaAPPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

* Data de CriaçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERDAT'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Criado porCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERNAM'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Tipo de OrdemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'AUART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Valor líq. da ordemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'NETWR'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Organização de vendasCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKORG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Canal de distribuiçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VTWEG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Setor de atividadeCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'SPART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Grupo de VendedoresCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKGRP'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Escritório de VendasCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKBUR'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

ENDFORM. " FORM Z_FIELDCAT_INIT

Page 58: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

57575757

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 vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuiçãospart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur LIKE vbak-vkbur, " Escritório de vendas

END OF we_saida.

*$*$ Tabelas Internas --------------------------------------------------* Tab. com dados para listaDATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE.

* Tab. com informações sobre as características dos camposDATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

* Tab. com informações sobre a ordenação da listaDATA: wt_sort TYPE slis_t_sortinfo_alv.

*$*$ Variáveis ---------------------------------------------------------* Nome do programaDATA: 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[].

Page 59: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

58585858

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_indicatorUSING 'Selecionando dados. Aguarde...'.

SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrpvkburINTO TABLE wt_saidaFROM vbakWHERE 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_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repid* i_structure_name = 'VBAK'

it_fieldcat = wt_fieldcatit_sort = wt_sorti_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF 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 = 0text = pv_text.

Page 60: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

59595959

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 tabelaCLEAR pt_fieldcat[].

* Cód. doc. vendaCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VBELN'. " Nome do Campolf_fieldcat-ref_tabname = 'VBAK'. " Tab. de ReferênciaAPPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

* Data de CriaçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERDAT'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Criado porCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERNAM'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Tipo de OrdemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'AUART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Valor líq. da ordemCLEAR 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 vendasCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKORG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Canal de distribuiçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VTWEG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Setor de atividadeCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'SPART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Grupo de VendedoresCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKGRP'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Escritório de VendasCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKBUR'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

ENDFORM. " FORM Z_FIELDCAT_INIT

Page 61: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

60606060

*&---------------------------------------------------------------------**& 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 = 1. " Sequência de ordenaçãolf_sort-fieldname = 'ERNAM'. " Nome do campolf_sort-tabname = 'WT_SAIDA'. " Nome da tabela de listalf_sort-up = 'X'. " Ordenação Crescentelf_sort-expa = 'X'. " Expandir listaAPPEND lf_sort TO wt_sort.

** 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

Page 62: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

61616161

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 vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuiçãospart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur LIKE vbak-vkbur, " Escritório de vendas

END OF we_saida.

*$*$ Tabelas Internas --------------------------------------------------* Tab. com dados para listaDATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE.

* Tab. com informações sobre as características dos camposDATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

* Tab. com informações sobre a ordenação da listaDATA: wt_sort TYPE slis_t_sortinfo_alv.

* Tab. de especificação de gruposDATA: wt_sp_group TYPE slis_t_sp_group_alv.

*$*$ Variáveis ---------------------------------------------------------* Nome do programaDATA: 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[].

Page 63: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

62626262

* Ordenar listaPERFORM z_ordenar_lista USING wt_sort[].

* Grupos de camposPERFORM 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_indicatorUSING 'Selecionando dados. Aguarde...'.

SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrpvkburINTO TABLE wt_saidaFROM vbakWHERE 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_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repid* i_structure_name = 'VBAK'

it_fieldcat = wt_fieldcatit_sort = wt_sortit_special_groups = wt_sp_groupi_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF 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).

Page 64: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

63636363

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'EXPORTING

* PERCENTAGE = 0text = 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 tabelaCLEAR pt_fieldcat[].

* Cód. doc. vendaCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VBELN'. " Nome do Campolf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referêncialf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

* Data de CriaçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERDAT'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Criado porCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERNAM'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Tipo de OrdemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'AUART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Valor líq. da ordemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'NETWR'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'V'. " Grupo de ValoresAPPEND lf_fieldcat TO pt_fieldcat.

* Organização de vendasCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKORG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Canal de distribuiçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VTWEG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Setor de atividadeCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'SPART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Grupo de VendedoresCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKGRP'.lf_fieldcat-ref_tabname = 'VBAK'.

Page 65: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

64646464

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 = 1. " Sequência de ordenaçãolf_sort-fieldname = 'ERNAM'. " Nome do campolf_sort-tabname = 'WT_SAIDA'. " Nome da tabela de listalf_sort-up = 'X'. " Ordenação Crescentelf_sort-expa = 'X'. " Expandir listaAPPEND lf_sort TO wt_sort.

** 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 VendaCLEAR 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

Page 66: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

65656565

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 vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuiçãospart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur LIKE vbak-vkbur, " Escritório de vendas

END OF we_saida.

*$*$ Tabelas Internas --------------------------------------------------* Tab. com dados para listaDATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE.

* Tab. com informações sobre as características dos camposDATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

* Tab. com informações sobre a ordenação da listaDATA: wt_sort TYPE slis_t_sortinfo_alv.

* Tab. de especificação de gruposDATA: 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 programaDATA: 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.

* VarianteSELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02.PARAMETERS: p_vari LIKE disvariant-variant.SELECTION-SCREEN END OF BLOCK b2.

Page 67: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

66666666

*$*$ 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 varianteAT 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_indicatorUSING 'Selecionando dados. Aguarde...'.

SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrpvkburINTO TABLE wt_saidaFROM vbakWHERE 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_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repid* i_structure_name = 'VBAK'

it_fieldcat = wt_fieldcatit_sort = wt_sortit_special_groups = wt_sp_groupi_save = 'A'

TABLES

Page 68: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

67676767

t_outtab = wt_saidaEXCEPTIONS

program_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF 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 = 0text = 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 tabelaCLEAR pt_fieldcat[].

* Cód. doc. vendaCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VBELN'. " Nome do Campolf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referêncialf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

* Data de CriaçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERDAT'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Criado porCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERNAM'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Tipo de OrdemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'AUART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Valor líq. da ordemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'NETWR'.lf_fieldcat-ref_tabname = 'VBAK'.

Page 69: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

68686868

lf_fieldcat-sp_group = 'V'. " Grupo de ValoresAPPEND lf_fieldcat TO pt_fieldcat.

* Organização de vendasCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKORG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Canal de distribuiçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VTWEG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Setor de atividadeCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'SPART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Grupo de VendedoresCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKGRP'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Escritório de VendasCLEAR 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 = 1. " Sequência de ordenaçãolf_sort-fieldname = 'ERNAM'. " Nome do campolf_sort-tabname = 'WT_SAIDA'. " Nome da tabela de listalf_sort-up = 'X'. " Ordenação Crescentelf_sort-expa = 'X'. " Expandir listaAPPEND lf_sort TO wt_sort.

** 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.

Page 70: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

69696969

* VariáveisDATA: 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 VendaCLEAR 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 varianteCALL FUNCTION 'REUSE_ALV_VARIANT_F4'

EXPORTINGis_variant = wf_varianti_save = 'A'

* it_default_fieldcat =IMPORTING

e_exit = lv_exites_variant = wf_x_variant

EXCEPTIONSnot_found = 2.

* Verificar processamento da funçãoIF sy-subrc = 2.MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ELSE.

* Atribuir valorIF 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.

Page 71: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

70707070

CLEAR: wf_variant.wf_variant-report = wv_repid.

ENDIF.

ENDFORM. " Z_VALIDACAO_VARIANTE

Page 72: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

71717171

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 vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuiçãospart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur LIKE vbak-vkbur, " Escritório de vendas

END OF we_saida.

*$*$ Tabelas Internas --------------------------------------------------* Tab. com dados para listaDATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE.

* Tab. com informações sobre as características dos camposDATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

* Tab. com informações sobre a ordenação da listaDATA: wt_sort TYPE slis_t_sortinfo_alv.

* Tab. de especificação de gruposDATA: 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 programaDATA: 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.

* VarianteSELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02.

Page 73: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

72727272

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 varianteAT 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_indicatorUSING 'Selecionando dados. Aguarde...'.

SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrpvkburINTO TABLE wt_saidaFROM vbakWHERE 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_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repid* i_structure_name = 'VBAK'

Page 74: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

73737373

it_fieldcat = wt_fieldcatit_sort = wt_sortit_special_groups = wt_sp_groupis_print = wf_printi_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF 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 = 0text = 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 tabelaCLEAR pt_fieldcat[].

* Cód. doc. vendaCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VBELN'. " Nome do Campolf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referêncialf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

* Data de CriaçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERDAT'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Criado porCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERNAM'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Tipo de OrdemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'AUART'.

Page 75: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

74747474

lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Valor líq. da ordemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'NETWR'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'V'. " Grupo de ValoresAPPEND lf_fieldcat TO pt_fieldcat.

* Organização de vendasCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKORG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Canal de distribuiçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VTWEG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Setor de atividadeCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'SPART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Grupo de VendedoresCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKGRP'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Escritório de VendasCLEAR 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 = 1. " Sequência de ordenaçãolf_sort-fieldname = 'ERNAM'. " Nome do campolf_sort-tabname = 'WT_SAIDA'. " Nome da tabela de listalf_sort-up = 'X'. " Ordenação Crescentelf_sort-expa = 'X'. " Expandir listaAPPEND lf_sort TO wt_sort.

** 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 *

Page 76: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

75757575

*---------------------------------------------------------------------** 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 VendaCLEAR 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 varianteCALL FUNCTION 'REUSE_ALV_VARIANT_F4'

EXPORTINGis_variant = wf_varianti_save = 'A'

* it_default_fieldcat =IMPORTING

e_exit = lv_exites_variant = wf_x_variant

EXCEPTIONSnot_found = 2.

* Verificar processamento da funçãoIF sy-subrc = 2.MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ELSE.

* Atribuir valorIF 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'

Page 77: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

76767676

EXPORTINGi_save = 'A'

CHANGINGcs_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çãopf_print-no_coverpage = 'X'. " Não listar página de rostppf_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

Page 78: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

77777777

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 vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuiçãospart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur LIKE vbak-vkbur, " Escritório de vendasbox , " Checkbox

END OF we_saida.

*$*$ Tabelas Internas --------------------------------------------------* Tab. com dados para listaDATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE.

* Tab. com informações sobre as características dos camposDATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

* Tab. com informações sobre a ordenação da listaDATA: wt_sort TYPE slis_t_sortinfo_alv.

* Tab. de especificação de gruposDATA: 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 programaDATA: 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.

Page 79: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

78787878

* VarianteSELECTION-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 varianteAT 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_indicatorUSING 'Selecionando dados. Aguarde...'.

SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrpvkburINTO TABLE wt_saidaFROM vbakWHERE 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_indicatorUSING 'Estruturando a lista. Aguarde...'.

Page 80: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

79797979

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repid* i_structure_name = 'VBAK'

it_fieldcat = wt_fieldcatit_sort = wt_sortit_special_groups = wt_sp_groupis_print = wf_printis_layout = wf_layouti_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF 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 = 0text = 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 tabelaCLEAR pt_fieldcat[].

* Cód. doc. vendaCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VBELN'. " Nome do Campolf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referêncialf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

* Data de CriaçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERDAT'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Criado porCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERNAM'.lf_fieldcat-ref_tabname = 'VBAK'.

Page 81: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

80808080

lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Tipo de OrdemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'AUART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Valor líq. da ordemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'NETWR'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'V'. " Grupo de ValoresAPPEND lf_fieldcat TO pt_fieldcat.

* Organização de vendasCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKORG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Canal de distribuiçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VTWEG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Setor de atividadeCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'SPART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Grupo de VendedoresCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKGRP'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Escritório de VendasCLEAR 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 = 1. " Sequência de ordenaçãolf_sort-fieldname = 'ERNAM'. " Nome do campolf_sort-tabname = 'WT_SAIDA'. " Nome da tabela de listalf_sort-up = 'X'. " Ordenação Crescentelf_sort-expa = 'X'. " Expandir listaAPPEND lf_sort TO wt_sort.

** 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

Page 82: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

81818181

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 VendaCLEAR 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 varianteCALL FUNCTION 'REUSE_ALV_VARIANT_F4'

EXPORTINGis_variant = wf_varianti_save = 'A'

* it_default_fieldcat =IMPORTING

e_exit = lv_exites_variant = wf_x_variant

EXCEPTIONSnot_found = 2.

* Verificar processamento da funçãoIF sy-subrc = 2.MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ELSE.

* Atribuir valorIF 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

Page 83: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

82828282

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çãopf_print-no_coverpage = 'X'. " Não listar página de rostppf_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

Page 84: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

83838383

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 vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuiçãospart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur LIKE vbak-vkbur, " Escritório de vendasbox , " Checkbox

END OF we_saida.

*$*$ Tabelas Internas --------------------------------------------------* Tab. com dados para listaDATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE.

* Tab. com informações sobre as características dos camposDATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

* Tab. com informações sobre a ordenação da listaDATA: wt_sort TYPE slis_t_sortinfo_alv.

* Tab. de especificação de gruposDATA: wt_sp_group TYPE slis_t_sp_group_alv.

* Tab. de eventosDATA: wt_events TYPE slis_t_event.

*$*$--- 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 programaDATA: 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.

Page 85: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

84848484

* VarianteSELECTION-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 varianteAT 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_indicatorUSING 'Selecionando dados. Aguarde...'.

SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrpvkburINTO TABLE wt_saidaFROM vbakWHERE vbeln IN s_vbeln.

ENDFORM. " Z_BUSCAR_DADOS

*&---------------------------------------------------------------------**& Form Z_LIST_DISPLAY*&---------------------------------------------------------------------** Lista informações na tela*----------------------------------------------------------------------*FORM z_list_display.

Page 86: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

85858585

PERFORM z_sapgui_progress_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repidit_fieldcat = wt_fieldcatit_sort = wt_sortit_special_groups = wt_sp_groupis_print = wf_printis_layout = wf_layoutit_events = wt_eventsi_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF 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 = 0text = 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 tabelaCLEAR pt_fieldcat[].

* Cód. doc. vendaCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VBELN'. " Nome do Campolf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referêncialf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

* Data de CriaçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERDAT'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Criado por

Page 87: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

86868686

CLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERNAM'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Tipo de OrdemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'AUART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Valor líq. da ordemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'NETWR'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'V'. " Grupo de ValoresAPPEND lf_fieldcat TO pt_fieldcat.

* Organização de vendasCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKORG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Canal de distribuiçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VTWEG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Setor de atividadeCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'SPART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Grupo de VendedoresCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKGRP'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Escritório de VendasCLEAR 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 = 1. " Sequência de ordenaçãolf_sort-fieldname = 'ERNAM'. " Nome do campolf_sort-tabname = 'WT_SAIDA'. " Nome da tabela de listalf_sort-up = 'X'. " Ordenação Crescentelf_sort-expa = 'X'. " Expandir listaAPPEND lf_sort TO wt_sort.

** 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

Page 88: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

87878787

* 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 VendaCLEAR 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 varianteCALL FUNCTION 'REUSE_ALV_VARIANT_F4'

EXPORTINGis_variant = wf_varianti_save = 'A'

* it_default_fieldcat =IMPORTING

e_exit = lv_exites_variant = wf_x_variant

EXCEPTIONSnot_found = 2.

* Verificar processamento da funçãoIF sy-subrc = 2.MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ELSE.

* Atribuir valorIF 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

Page 89: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

88888888

*----------------------------------------------------------------------*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çãopf_print-no_coverpage = 'X'. " Não listar página de rostppf_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 gridCALL FUNCTION 'REUSE_ALV_EVENTS_GET'

Page 90: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

89898989

EXPORTINGi_list_type = 0

IMPORTINGet_events = pt_events.

* Verificar se evento foi encontradoLOOP 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óriaSET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.

* Chamar transação de exibição da ordem de vendaCALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

ENDCASE.

Page 91: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

90909090

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.

Page 92: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

91919191

*----------------------------------------------------------------------** 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-tabixpv_index_slave like sy-tabixpv_index_sum like sy-tabix. "#EC CALLED

* break-point.

endform.

Page 93: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

92929292

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 vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuiçãospart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur LIKE vbak-vkbur, " Escritório de vendasbox , " Checkbox

END OF we_saida.

*$*$ Tabelas Internas --------------------------------------------------* Tab. com dados para listaDATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE.

* Tab. com informações sobre as características dos camposDATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

* Tab. com informações sobre a ordenação da listaDATA: wt_sort TYPE slis_t_sortinfo_alv.

* Tab. de especificação de gruposDATA: wt_sp_group TYPE slis_t_sp_group_alv.

* Tab. de eventosDATA: wt_events TYPE slis_t_event.

*$*$--- 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 programaDATA: 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.

Page 94: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

93939393

* VarianteSELECTION-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 varianteAT 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_indicatorUSING 'Selecionando dados. Aguarde...'.

SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrpvkburINTO TABLE wt_saidaFROM vbakWHERE vbeln IN s_vbeln.

ENDFORM. " Z_BUSCAR_DADOS

*&---------------------------------------------------------------------**& Form Z_LIST_DISPLAY*&---------------------------------------------------------------------** Lista informações na tela*----------------------------------------------------------------------*FORM z_list_display.

Page 95: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

94949494

PERFORM z_sapgui_progress_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repidit_fieldcat = wt_fieldcatit_sort = wt_sortit_special_groups = wt_sp_groupis_print = wf_printis_layout = wf_layoutit_events = wt_eventsi_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF 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 = 0text = 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 tabelaCLEAR pt_fieldcat[].

* Cód. doc. vendaCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VBELN'. " Nome do Campolf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referêncialf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

* Data de CriaçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERDAT'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Criado por

Page 96: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

95959595

CLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERNAM'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Tipo de OrdemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'AUART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Valor líq. da ordemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'NETWR'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'V'. " Grupo de ValoresAPPEND lf_fieldcat TO pt_fieldcat.

* Organização de vendasCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKORG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Canal de distribuiçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VTWEG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Setor de atividadeCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'SPART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Grupo de VendedoresCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKGRP'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Escritório de VendasCLEAR 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 = 1. " Sequência de ordenaçãolf_sort-fieldname = 'ERNAM'. " Nome do campolf_sort-tabname = 'WT_SAIDA'. " Nome da tabela de listalf_sort-up = 'X'. " Ordenação Crescentelf_sort-expa = 'X'. " Expandir listaAPPEND lf_sort TO wt_sort.

** 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

Page 97: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

96969696

* 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 VendaCLEAR 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 varianteCALL FUNCTION 'REUSE_ALV_VARIANT_F4'

EXPORTINGis_variant = wf_varianti_save = 'A'

* it_default_fieldcat =IMPORTING

e_exit = lv_exites_variant = wf_x_variant

EXCEPTIONSnot_found = 2.

* Verificar processamento da funçãoIF sy-subrc = 2.MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ELSE.

* Atribuir valorIF 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

Page 98: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

97979797

*----------------------------------------------------------------------*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çãopf_print-no_coverpage = 'X'. " Não listar página de rostppf_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 gridCALL FUNCTION 'REUSE_ALV_EVENTS_GET'

Page 99: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

98989898

EXPORTINGi_list_type = 0

IMPORTINGet_events = pt_events.

* Verificar se evento foi encontradoLOOP 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óriaSET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.

* Chamar transação de exibição da ordem de vendaCALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

ENDCASE.

Page 100: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

99999999

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.

Page 101: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

100100100100

*----------------------------------------------------------------------** 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-tabixpv_index_slave LIKE sy-tabixpv_index_sum LIKE sy-tabix. "#EC CALLED

* break-point.

ENDFORM.

Page 102: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

101101101101

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 vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuiçãospart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur LIKE vbak-vkbur, " Escritório de vendasbox , " Checkbox

END OF we_saida.

*$*$ Tabelas Internas --------------------------------------------------* Tab. com dados para listaDATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE.

* Tab. com informações sobre as características dos camposDATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

* Tab. com informações sobre a ordenação da listaDATA: wt_sort TYPE slis_t_sortinfo_alv.

* Tab. de especificação de gruposDATA: wt_sp_group TYPE slis_t_sp_group_alv.

* Tab. de eventosDATA: wt_events TYPE slis_t_event.

*$*$--- 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 programaDATA: 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.

Page 103: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

102102102102

* VarianteSELECTION-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 varianteAT 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_indicatorUSING 'Selecionando dados. Aguarde...'.

SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrpvkburINTO TABLE wt_saidaFROM vbakWHERE vbeln IN s_vbeln.

ENDFORM. " Z_BUSCAR_DADOS

*&---------------------------------------------------------------------**& Form Z_LIST_DISPLAY*&---------------------------------------------------------------------** Lista informações na tela*----------------------------------------------------------------------*FORM z_list_display.

Page 104: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

103103103103

PERFORM z_sapgui_progress_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repidit_fieldcat = wt_fieldcatit_sort = wt_sortit_special_groups = wt_sp_groupis_print = wf_printis_layout = wf_layoutit_events = wt_eventsi_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF 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 = 0text = 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 tabelaCLEAR pt_fieldcat[].

* Cód. doc. vendaCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VBELN'. " Nome do Campolf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referêncialf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

* Data de CriaçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERDAT'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Criado por

Page 105: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

104104104104

CLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERNAM'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Tipo de OrdemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'AUART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Valor líq. da ordemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'NETWR'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'V'. " Grupo de ValoresAPPEND lf_fieldcat TO pt_fieldcat.

* Organização de vendasCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKORG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Canal de distribuiçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VTWEG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Setor de atividadeCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'SPART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Grupo de VendedoresCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKGRP'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Escritório de VendasCLEAR 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 = 1. " Sequência de ordenaçãolf_sort-fieldname = 'ERNAM'. " Nome do campolf_sort-tabname = 'WT_SAIDA'. " Nome da tabela de listalf_sort-up = 'X'. " Ordenação Crescentelf_sort-expa = 'X'. " Expandir listaAPPEND lf_sort TO wt_sort.

** 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

Page 106: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

105105105105

* 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 VendaCLEAR 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 varianteCALL FUNCTION 'REUSE_ALV_VARIANT_F4'

EXPORTINGis_variant = wf_varianti_save = 'A'

* it_default_fieldcat =IMPORTING

e_exit = lv_exites_variant = wf_x_variant

EXCEPTIONSnot_found = 2.

* Verificar processamento da funçãoIF sy-subrc = 2.MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ELSE.

* Atribuir valorIF 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

Page 107: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

106106106106

*----------------------------------------------------------------------*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çãopf_print-no_coverpage = 'X'. " Não listar página de rostppf_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 gridCALL FUNCTION 'REUSE_ALV_EVENTS_GET'

Page 108: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

107107107107

EXPORTINGi_list_type = 0

IMPORTINGet_events = pt_events.

* Verificar se evento foi encontradoLOOP 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óriaSET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.

* Chamar transação de exibição da ordem de vendaCALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

ENDCASE.

Page 109: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

108108108108

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

Page 110: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

109109109109

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-tabixpv_index_slave LIKE sy-tabixpv_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. " Z_ROTINA_TESTE

Page 111: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

110110110110

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 vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuiçãospart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur LIKE vbak-vkbur, " Escritório de vendasbox , " Checkboxcolor TYPE slis_t_specialcol_alv,

END OF we_saida.

*$*$ Tabelas Internas --------------------------------------------------* Tab. com dados para listaDATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE.

* Tab. com informações sobre as características dos camposDATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

* Tab. com informações sobre a ordenação da listaDATA: wt_sort TYPE slis_t_sortinfo_alv.

* Tab. de especificação de gruposDATA: wt_sp_group TYPE slis_t_sp_group_alv.

* Tab. de eventosDATA: wt_events TYPE slis_t_event.

* Tabs. de coresDATA: 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 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 programaDATA: wv_repid LIKE sy-repid.

Page 112: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

111111111111

*$*$ 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.

* VarianteSELECTION-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 varianteAT 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 vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuição

Page 113: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

112112112112

spart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur LIKE vbak-vkbur, " Escritório de vendas

END OF lt_saida.

* Exibir avisoPERFORM z_sapgui_progress_indicator

USING 'Selecionando dados. Aguarde...'.* Seleção das informações

SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrpvkbur

* INTO TABLE wt_saidaINTO TABLE lt_saidaFROM vbakWHERE vbeln IN s_vbeln.

* Atribuir valores a tabela de saídaLOOP 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_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repidit_fieldcat = wt_fieldcatit_sort = wt_sortit_special_groups = wt_sp_groupis_print = wf_printis_layout = wf_layoutit_events = wt_eventsi_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF 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

Page 114: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

113113113113

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 tabelaCLEAR pt_fieldcat[].

* Cód. doc. vendaCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VBELN'. " Nome do Campolf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referêncialf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

* Data de CriaçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERDAT'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Criado porCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERNAM'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Tipo de OrdemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'AUART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Valor líq. da ordemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'NETWR'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'V'. " Grupo de ValoresAPPEND lf_fieldcat TO pt_fieldcat.

* Organização de vendasCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKORG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Canal de distribuiçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VTWEG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Setor de atividadeCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'SPART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Grupo de VendedoresCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKGRP'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Escritório de VendasCLEAR lf_fieldcat.

Page 115: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

114114114114

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 = 1. " Sequência de ordenaçãolf_sort-fieldname = 'ERNAM'. " Nome do campolf_sort-tabname = 'WT_SAIDA'. " Nome da tabela de listalf_sort-up = 'X'. " Ordenação Crescentelf_sort-expa = 'X'. " Expandir listaAPPEND lf_sort TO wt_sort.

** 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 VendaCLEAR 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

Page 116: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

115115115115

DATA: lv_exit.

* Encontrar varianteCALL FUNCTION 'REUSE_ALV_VARIANT_F4'

EXPORTINGis_variant = wf_varianti_save = 'A'

* it_default_fieldcat =IMPORTING

e_exit = lv_exites_variant = wf_x_variant

EXCEPTIONSnot_found = 2.

* Verificar processamento da funçãoIF sy-subrc = 2.MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ELSE.

* Atribuir valorIF 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çãopf_print-no_coverpage = 'X'. " Não listar página de rostppf_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

Page 117: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

116116116116

*&---------------------------------------------------------------------**& 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'.

* Determinar a tabela de corespf_layout-coltab_fieldname = '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 gridCALL FUNCTION 'REUSE_ALV_EVENTS_GET'

EXPORTINGi_list_type = 0

IMPORTINGet_events = pt_events.

* Verificar se evento foi encontradoLOOP 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.

Page 118: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

117117117117

* 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óriaSET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.

* Chamar transação de exibição da ordem de vendaCALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

ENDCASE.WHEN 'TESTE'.PERFORM z_rotina_teste.

* Realizar um REFRESH da listapf_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

Page 119: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

118118118118

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-tabixpv_index_slave LIKE sy-tabix

Page 120: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

119119119119

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'

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 selecionadawt_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 ivalue(pv_intensified) TYPE ivalue(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 tabelaCLEAR: pt_color[], pt_color.

* Definir camposz_field_color: 'VBELN', 'ERDAT', 'ERNAM', 'AUDAT', 'AUART', 'NETWR',

'VKORG', 'VTWEG', 'SPART', 'VKGRP', 'VKBUR'.

ENDFORM. " Z_FIELD_COLOR

Page 121: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

111120202020

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-POOLS: slis.

*$*$ Includes ----------------------------------------------------------INCLUDE <icon>.

*$*$ Tipos -------------------------------------------------------------TYPES: BEGIN OF we_saida,

vbeln LIKE vbak-vbeln, " Nro da ordem de vendaerdat LIKE vbak-erdat, " Data de criaçãoernam LIKE vbak-ernam, " Criado poraudat LIKE vbak-audat, " Data da ordemauart LIKE vbak-auart, " Tipo de ordemnetwr LIKE vbak-netwr, " Valor líq. da ordemvkorg LIKE vbak-vkorg, " Org. de vendasvtweg LIKE vbak-vtweg, " Canal de distribuiçãospart LIKE vbak-spart, " Setor de atividadevkgrp LIKE vbak-vkgrp, " Grupo de vendedoresvkbur LIKE vbak-vkbur, " Escritório de vendasbox TYPE c , " Checkboxicone(30) TYPE c , " Ícone

END OF we_saida.

*$*$ Tabelas Internas --------------------------------------------------* Tab. com dados para listaDATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE.

* Tab. com informações sobre as características dos camposDATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

* Tab. com informações sobre a ordenação da listaDATA: wt_sort TYPE slis_t_sortinfo_alv.

* Tab. de especificação de gruposDATA: wt_sp_group TYPE slis_t_sp_group_alv.

* Tab. de eventosDATA: wt_events TYPE slis_t_event.

*$*$--- 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 programaDATA: wv_repid LIKE sy-repid.

Page 122: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

121121121121

*$*$ 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.

* VarianteSELECTION-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 varianteAT 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

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.* Exibir mensagem

PERFORM z_sapgui_progress_indicatorUSING 'Selecionando dados. Aguarde...'.

* Obter dados da baseSELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp

vkburINTO TABLE wt_saidaFROM vbakWHERE vbeln IN s_vbeln.

* Atribuir íconesLOOP AT wt_saida.

* Verificar valor líquidoIF wt_saida-netwr GT '1000'.wt_saida-icone = icon_red_light.

Page 123: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

122122122122

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

*&---------------------------------------------------------------------**& Form Z_LIST_DISPLAY*&---------------------------------------------------------------------** Lista informações na tela*----------------------------------------------------------------------*FORM z_list_display.

PERFORM z_sapgui_progress_indicatorUSING 'Estruturando a lista. Aguarde...'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING

i_callback_program = wv_repidit_fieldcat = wt_fieldcatit_sort = wt_sortit_special_groups = wt_sp_groupis_print = wf_printis_layout = wf_layoutit_events = wt_eventsi_save = 'A'

TABLESt_outtab = wt_saida

EXCEPTIONSprogram_error = 1OTHERS = 2.

* Verificar processamento da funçãoIF 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 = 0text = 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

Page 124: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

123123123123

DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabelaCLEAR pt_fieldcat[].

* Íconeclear 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. vendaCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VBELN'. " Nome do Campolf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referêncialf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

* Data de CriaçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERDAT'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Criado porCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'ERNAM'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'A'. " Grupo de Ordem VendasAPPEND lf_fieldcat TO pt_fieldcat.

* Tipo de OrdemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'AUART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Valor líq. da ordemCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'NETWR'.lf_fieldcat-ref_tabname = 'VBAK'.lf_fieldcat-sp_group = 'V'. " Grupo de ValoresAPPEND lf_fieldcat TO pt_fieldcat.

* Organização de vendasCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKORG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Canal de distribuiçãoCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VTWEG'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Setor de atividadeCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'SPART'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Grupo de VendedoresCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKGRP'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

* Escritório de VendasCLEAR lf_fieldcat.lf_fieldcat-fieldname = 'VKBUR'.lf_fieldcat-ref_tabname = 'VBAK'.APPEND lf_fieldcat TO pt_fieldcat.

ENDFORM. " FORM Z_FIELDCAT_INIT

Page 125: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

124124124124

*&---------------------------------------------------------------------**& 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 = 1. " Sequência de ordenaçãolf_sort-fieldname = 'ERNAM'. " Nome do campolf_sort-tabname = 'WT_SAIDA'. " Nome da tabela de listalf_sort-up = 'X'. " Ordenação Crescentelf_sort-expa = 'X'. " Expandir listaAPPEND lf_sort TO wt_sort.

** 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 VendaCLEAR 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 varianteCALL FUNCTION 'REUSE_ALV_VARIANT_F4'

EXPORTINGis_variant = wf_variant

Page 126: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

125125125125

i_save = 'A'* it_default_fieldcat =

IMPORTINGe_exit = lv_exites_variant = wf_x_variant

EXCEPTIONSnot_found = 2.

* Verificar processamento da funçãoIF sy-subrc = 2.MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ELSE.

* Atribuir valorIF 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çãopf_print-no_coverpage = 'X'. " Não listar página de rostppf_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*----------------------------------------------------------------------*

Page 127: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

126126126126

* --> 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 gridCALL FUNCTION 'REUSE_ALV_EVENTS_GET'

EXPORTINGi_list_type = 0

IMPORTINGet_events = pt_events.

* Verificar se evento foi encontradoLOOP 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.

Page 128: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

127127127127

*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óriaSET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.

* Chamar transação de exibição da ordem de vendaCALL 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 **----------------------------------------------------------------------*

Page 129: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

128128128128

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-tabixpv_index_slave LIKE sy-tabixpv_index_sum LIKE sy-tabix. "#EC CALLED

* break-point.

ENDFORM.

*&---------------------------------------------------------------------**& Form Z_ROTINA_TESTE*&---------------------------------------------------------------------** Rotina para o evento TESTE ( Botão )

Page 130: Manual ALV

G U I A B Á S I C O D E P R O G R A M A Ç Ã O A L V

Autor: Flavio Ricardo de Almeida www.almeidafr.hpg.ig.com.br [email protected]

129129129129

*----------------------------------------------------------------------*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