Você está na página 1de 10

Programao ALV

A ferramenta ALV ( ABAP LIST VIEW ) permite criar listas de uma maneira
fcil e prtica. Consiste basicamente em utilizar funes genricas
pertencentes basicamente a classe de desenvolvimento SLIS. Em ALV
existem listas referentes aos tipos (Hierrquica, Popup, Grid entre
outros)..

Lista utilizando estrutura do dicionrio de dados.

EX: ZALV_01

Montando a Estrutura da Lista


Montar a estrutura de campos da lista sem utilizar estrutura do dicionrio
de dados do R/3.
1. Declarar o tipo de pool SLIS que contm as definies necessrias
para interagir com as funes ALV:
*$*$ Type pools -------------------------------------------------------TYPE-POOLS: slis.

2. Redefinir o tipo TY_SAIDA

3. Declarar a tabela que conter as configuraes dos campos da lista;


DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

4. Configurao dos campos da estrutura.


EX: ZALV_02
Veja que este tipo de construo de exige mais esforos que quando
referenciamos uma estrutura do dicionrio, devido a isto muitos
desenvolvedores preferem criar suas prprias estruturas no dicionrio e
referenciar as mesmas.

Ordenando a Lista
Apesar da possibilidade de ordenar a tabela interna antes da apresentao
da lista, ou mesmo a lista depois da execuo do programa atravs das
variantes de exibio, as vezes necessrio que a lista j apresente uma
ordenao padro logo que a mesma aparea na tela. Para isto vamos
implementar uma rotina para fazer atravs do ALV.
* Tab. com informaes sobre a ordenao da lista
wt_sort
TYPE slis_t_sortinfo_alv.
* Ordenar lista
PERFORM z_ordenar_lista USING wt_sort[].
CLEAR lf_sort.
* Montar estrutura
lf_sort-spos
= 1.
lf_sort-fieldname
= 'ERNAM'.
lf_sort-tabname
= 'IT_SAIDA'.
lf_sort-up
= 'X'.
APPEND lf_sort TO WT_SORT.
Outras opes possveis de utilizao
lf_sort-down= 'X'." Ordenao decrescente
lf_sort-subtot= 'X'." Subtotal
lf_sort-comp= 'X'." Comprimir lista mostrando apenas os subtotais
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
Incluir parmetro:
it_sort
= wt_sort

Chamando uma variante de exibio


Podemos chamar uma variante de exibio j na tela de seleo, desde
que ela j tenha sido criada previamente, sem a necessidade de executar
o programa para depois escolher a mesma, melhorando assim a
performance pois a seleo pode conter vrios registros, e o mais
importante, agilizando o processo para o usurio.
1. Estrutura para trabalhar com variantes de exibio:
*$*$--- Estruturas ----------------------------------------------------data: wf_variant like disvariant.

2. Tela de Seleo
* Variante
selection-screen begin of block b2 with frame title text-002.
parameters: p_vari like disvariant-variant.
selection-screen end of block b2.

3. No evento de inicializao incluiremos instrues para identificar


para qual programa deve-se procurar variantes de exibio j
gravadas:
* Atribuies para variante
Clear WT_VARIANT.
wt_variant-report = sy-repid.

4. Para que seja possvel procurar a variante atravs 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:
* Processo de ajuda para variante
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
PERFORM z_f4_for_variant.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
Incluir parmetro:
es_variant = wt_x_variant

5. Criar o evento AT SELECTION-SCREEN ON... para validao do


contedo do campo de variante, e depois criar a rotina
Z_VALIDACAO_VARIANTE:
EX: ZALV_03

Parmetros para impresso


possvel configurar no relatrio parmetros para impresso do relatrio.
1. Declarar a estrutura que conter os campos de configurao
DATA: wt_print TYPE slis_print_alv.

2. Criar uma rotina que definir os parmetros a serem utilizados, o


qual chamaremos de Z_PRINT_BUILD, que receber como
parmetro a estrutura declarada no item 1.
* Parmetros de impresso
PERFORM z_print_build USING wt_print.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
Incluir parmetro:
is_print
= wt_print

EX: ZALV_03

Variaes de Layout
possvel mudar algumas caractersticas da linha da lista, como criar
Checkbox, nveis de quebra
diferentes nas totalizaes, entre outros.
1. Declarar estrutura de layout:
DATA: wt_layout TYPE slis_layout_alv.

2. Criar um novo tipo


TYPES: BEGIN OF ty_saida,
vbeln LIKE vbak-vbeln,
erdat LIKE vbak-erdat,
ernam LIKE vbak-ernam,
audat LIKE vbak-audat,
auart LIKE vbak-auart,
netwr LIKE vbak-netwr,
vkgrp LIKE vbak-vkgrp,
vkbur LIKE vbak-vkbur,
box,
" Checkbox
END OF ty_saida.

" Nro da ordem de venda

3. Criar uma rotina para definir os parmetros a serem utilizados, o


qual chamaremos de Z_LAYOUT_BUILD, que receber como
parmetro a estrutura declarada no item 1.
* Layout da lista - Referente as definies
PERFORM z_layout_build USING wt_layout.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'


Incluir parmetro:
is_layout= wt_layout

EX: ZALV_04

Criando Eventos
Existem vrios eventos que podemos acionar para executar diversos
processos no relatrio. Vamos tratar os eventos principais, ou mais
usados, para mostrar que possvel interferir no processamento da lista
ALV.
1. Declarar a tabela de eventos.
DATA: wt_events TYPE slis_t_event.

2. Criar uma rotina que definir os eventos a serem utilizados.


*Eventos que podem ser acionados na lista
PERFORM z_eventtab_build USING wt_events[].
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
Incluir parmetro:
it_events
= wt_events

EX: ZALV_05
3. O evento USER_COMMAND serve para tratar aes do usurio, um
exemplo quando houver um duplo clique vamos enviar uma
mensagem.
4. O evento TOP_OF_PAGE serve para criar um cabealho para cada
pgina do relatrio.

*----------------------------------------------------------------------*
* FORM Z_TOP_OF_PAGE *
*----------------------------------------------------------------------*
* Evento de cabealho *
*----------------------------------------------------------------------*
FORM z_top_of_page.
WRITE: / 'Evento: top-of-page'.
ENDFORM.

5. O evento END_OF_PAGE serve para criar um rodap para cada


pgina do relatrio.
*----------------------------------------------------------------------*
* FORM Z_END_OF_PAGE *
*----------------------------------------------------------------------*
* Evento para rodap da lista *
*----------------------------------------------------------------------*
FORM z_end_of_page.
write: / 'Evento: end_of_page'.
ENDFORM.

6. O evento TOP_OF_LIST, ser impresso apenas uma vez ao incio da


lista.
*----------------------------------------------------------------------*
* FORM Z_TOP_OF_LIST *
*----------------------------------------------------------------------*
* Evento para topo da lista *
*----------------------------------------------------------------------*
FORM z_top_of_list.
write: / 'Evento: top-of-list'.
ENDFORM.

7. 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.
write: / 'Evento: end_of_list'.
ENDFORM.

Barra de Status
Podemos criar barra de status ( Status da Interface ) especficas para os
programas.
Vamos copiar uma barra de status padro para os programas e depois
adicionaremos nossas funes:
1 Copiando uma barra de status padro para ALV;
1.1 Execute a transao SE41 ( Menu Painter ), escolha o
programa SAPLKKBL e a barra de status STANDARD.

Copiar o status acionando o boto .


Salve e ative a barra de status;
Alterar o programa para utilizar a barra de status especfica
WHEN slis_ev_pf_status_set.
MOVE 'Z_PF_STATUS_SET' TO lf_event-form.
FORM z_pf_status_set USING pt_extab TYPE slis_t_extab.
* Acionar barra de comandos
SET PF-STATUS 'STANDARD' EXCLUDING pt_extab.
ENDFORM.

Mudando cores dos campos


1. Incluir estrutura de cores na estrutura ty_saida
TYPES: BEGIN OF ty_saida,
vbeln LIKE vbak-vbeln,
erdat LIKE vbak-erdat,
ernam LIKE vbak-ernam,
audat LIKE vbak-audat,
auart LIKE vbak-auart,
netwr LIKE vbak-netwr,
vkgrp LIKE vbak-vkgrp,
vkbur LIKE vbak-vkbur,
box,
" Checkbox
color TYPE slis_t_specialcol_alv,
END OF ty_saida.

2. Vamos criar duas tabelas internas de configurao especfica de

cores.
DATA: wt_color_normal TYPE slis_t_specialcol_alv WITH HEADER LINE,
wt_color_selecao TYPE slis_t_specialcol_alv WITH HEADER LINE.

3. Criar rotina para atribuio das cores.


PERFORM z_field_color: TABLES wt_color_normal USING 2 0 0,
TABLES wt_color_selecao USING 5 0 0.

4. Indicar a tabela de cores na rotina Z_LAYOUT_BUILD


* Determinar a tabela de cores
pt_layout-coltab_fieldname = 'COLOR'.
* Realizar um REFRESH da lista
pf_selfield-refresh = 'X'.

EX: ZALV_06

Inserindo cones
1. Referenciar o include de definio de cones
*$*$ Includes ---------------------------------------------------------INCLUDE <icon>.

2. Incluir campo na tabela de sada it_saida que receber o cdigo


do cone
TYPES: BEGIN OF ty_saida,
vbeln LIKE vbak-vbeln,
erdat LIKE vbak-erdat,

" Nro da ordem de venda

ernam LIKE vbak-ernam,


audat LIKE vbak-audat,
auart LIKE vbak-auart,
netwr LIKE vbak-netwr,
vkgrp LIKE vbak-vkgrp,
vkbur LIKE vbak-vkbur,
box,
" Checkbox
color TYPE slis_t_specialcol_alv,
icone(30) TYPE c , " cone
END OF ty_saida.

3. Alterao na seleo dos dados, onde vamos considerar o valor


lquido da ordem com referncia para atribuio de cones.

4. Incluir o campo ICONE na tabela it_fieldcat

Você também pode gostar