Você está na página 1de 39

Introduo

Desenvolver relatrios em ABAP (Advanced Business Application Programing) com um


bom visual e recursos avanados no nada trivial.
Imagine desenvolver um relatrio com cores, cabealho, linha de totais, label de colunas e
separadores de colunas. Para piorar um pouco, que permita classificar por qualquer campo,
aumentar ou diminuir o tamanho de colunas, gostaria tambm de poder trocar a posio das
colunas, omitir ou exibir campos, totalizar, agrupar, exportar para Excel, etc.
Totalmente possvel e igualmente invivel sem o uso de funes ALV.
O ALV padroniza e simplifica a exibio e operao de listas e relatrios no sistema R/3.
Fornece interfaces e formatos padronizados para todas as listas e relatrios.
Na apostila vamos ver como criar programas utilizando uma funo ALV. Parece pouco,
mas todas trabalham de maneira similar.

ABAP List Viewer


1

Relatrios tradicionais
Um relatrio tradicional em ABAP no tem nenhum recurso ou formatao padro. Tudo
deve ser programado via cdigo.

Um programa para listar um relatrio como no exemplo acima, j exige muita codificao.
Veja que no tem nada de complexo.
Depois de pronto, uma simples alterao no posicionamento dos campos ou no tamanho
do papel, j demanda um novo processo de modificao. O usurio no tem os recursos
necessrios para resolver o problema.
Qualquer ao no relatrio apresentado, diferente das opes do menu standard do R/3
para esse tipo de listagem,

dever ser programado.

Uma tarefa nada simples, visto que o

programador dever fazer o processo de da e volta, ou seja, o relatrio deve ficar dinmico ao
ponto do usurio voltar na situao inicial, aps alguma modificao.

ABAP List Viewer


2

Relatrios ALV
Listagens ALV so dinmicas por definio. O programador vai escolher qual ou quais
recursos ir disponibilizar em seu relatrio.

Muito similar a uma planilha do Microsoft Excel, cada coluna perfeitamente ajustvel,
podem ser trocadas entre si, as linhas da grade e cores so automticas. Recursos simples que j
eliminam um grande esforo de programao, principalmente em alteraes.

ABAP List Viewer


3

Barra de ferramentas
Todos os demais recursos esto concentrados em uma barra de ferramentas que a funo
disponiliza junto a barra standard do R/3 (Na parte superior do relatrio). Alguns cones so bem
comuns e com funes simples, mas est tudo pronto para o uso, sem digitao de uma linha de
cdigo a mais no programa.

Primeiramente, vamos apenas ver uma breve descrio de suas funes:

Selecione uma linha e clique nesse boto. A linha ser


destacada em forma de coluna.
Reapresenta do relatrio.
Marca todas as linhas.
Desmarca todas as linhas.
Selecionando uma coluna e clicando nesse boto, todo o
relatrio ficar classificado na ordem crescente por essa
coluna.
Idem ao anterior, mas a classificao na ordem
decrescente.
Voc poder filtrar o seu relatrio baseando-se em
valores de campos.
Totaliza a coluna selecionada. A coluna deve conter um
valor. Colunas de caracteres no podem ser totalizadas.
Apresenta subtotais de um total geral, para a coluna
selecionada. Alguma coluna j deve estar totalizada,
seno no haver mudana.
Mostra como ir ficar a impresso do relatrio.
Exporta o relatrio para o Microsoft Excel.
Exporta o relatrio para o Microsoft Word.
Grava o relatrio em arquivo.

ABAP List Viewer


4

Barra de ferramentas
Envia o relatrio via e-mail atravs do SAP Office.
Ranking em curva ABC. obrigatrio selecionar uma
coluna de valores. O R/3 solicita algumas informaes e
j apresenta o resultado
Mostra o resultado em um grfico.
Permite alterar o modo de apresentao do relatrio.
Recupera algum layout alterado e o aplica no relatrio.
Permite gravar um layout alterado.
Informaes como nmero de registros retornados, filtros
sendo utilizados, campos sumarizados, etc.
apresentado por esse boto.

ABAP List Viewer


5

Opes standard
Essa barra de ferramentas pode ser configurada, para que o programador tenha
possibilidade de criar ou retirar botes. Para tanto basta copiar, por exemplo, o Status-GUI (Que
a barra de ferramentas) STANDARD_FULLSCREEN do grupo de funo SLVC_FULLSCREEN
para o seu programa e alterar a vontade.
No altere os cdigos de retorno (ok-code) dos botes que voc no ir modificar, deixe
como est, pois atravs desses cdigos que a funo ALV sabe o que o usurio escolheu.
Utilize para cpia a transao SE80, veja na figura abaixo os cdigos de retorno standard:

Nem todas as funes utilizam o mesmo Status-GUI. A figura est bem completa. Voc
pode at criar sua prpria barra de ferramentas, mas qualquer cdigo diferente dos apresentados
acima devero ser tratados no programa. Veremos como tratar uma opo criada/alterada no
exemplo de programa em anexo.
O funcionamento para alguns dos recursos da barra de ferramentas o que veremos a
seguir. Telas, procedimentos e sadas para alguns dos botes.

ABAP List Viewer


6

O boto de Detalhes
Primeiro selecione a linha desejada atravs do seletor de campos, e depois clique no
cone.

Veja na figura abaixo que a linha foi destacada em coluna. Isso muito utilizado quando
permitido a edio dos campos no relatrio.

ABAP List Viewer


7

Os botes de Total e Subtotal


Selecione a coluna com valor numrico, e escolha Total. Para subtotal, escolha uma
coluna qualquer.
Sempre primeiro necessrio totalizar uma coluna com o boto de somatria e s ento
definir os subtotais.

No exemplo, o relatrio possui os totais dos campos Valor Lquido e Montante do


Imposto. Foi escolhido o campo Grupo de cliente para que o relatrio apresentasse os subtotais.
Por default, o relatrio fica na ordem crescente do campo que foi escolhido como subtotal.
possvel totalizar e subtotallizar vrios campos.
Clicando nos cones em destaque, voc pode apresentar apenas as linhas de totais, as
linhas de subtotais, apenas o total geral ou ainda mostrar as linhas de detalhe de algum Grupo de
cliente e de outro no.

ABAP List Viewer


8

O boto Pr-visualz.impresso
O Relatrio ALV no impresso como se v na tela do computador. Clique nesse boto
para visualizar a impresso no modo que ir ser a sada realmente.

No exemplo acima no temos os totais ou subtotais. Mas essas linhas so mantidas. O


que perdemos apenas o formato de grid (Microsoft Excel). Passamos a ver um relatrio
tradicional.

ABAP List Viewer


9

O boto Microsoft Excel


Ao exportarmos para o Excel, algumas particularidades no sero enviadas:

Assim, se a intenso e gerar o relatrio para envia-lo ao Excel, no perca tempo com
formataes. Apenas o bsico transferido.
Temos trs opes para exportar a listagem para o Microsoft Excel, vamos ver a sada de
cada uma delas.

ABAP List Viewer


10

O boto Microsoft Excel Opo Excel Macros SAP


Com essa opo, o R/3 envia o relatrio para o Excel e j apresenta vrias barras de
ferramentas prprias para que voc tenha as mesmas facilidades. Repare na figura, que as
opes de ferramentas do prprio Excel no aparecem. Para voltar utilize a opo do menu Report
e depois Exit.

ABAP List Viewer


11

O boto Microsoft Excel Opo Tabela


a forma mais simples de exportao. Veja que o R/3 mantem as barras de ferramentas
do Excel e apenas inclui o relatrio na planilha.

ABAP List Viewer


12

O boto Microsoft Excel Opo Tabela Pivot


Nessa opo o R/3 abre o Excel e monta o relatrio que permanece com algumas
funes.
Mesmo que o seu Excel no esteja exibindo a barra de ferramentas Tabela Dinmica, a
comunicao R/3 Excel vai passar a exibi-la, para o acesso aos recursos do relatrio.

ABAP List Viewer


13

O boto Processamento de Texto


Na exportao do relatrio para o Microsoft Word no temos tantas opes, bastante
simples. Voc pode utilizar um modelo do Word ou criar um documento novo.

O boto File Local


Ao salvar o relatrio em arquivo local, temos algumas opes. Escolha e logo em seguida
o sistema ir solicitar o caminho e nome do arquivo.

ABAP List Viewer


14

O boto Destinatrio de correio eletrnico


Atravs do SAP Office possvel enviar o relatrio via e-mail. A tela para o preenchimento
a seguinte:

ABAP List Viewer


15

O boto Modificar layout


Essa opo engloba as funes do Filtro, Totalizar, Subtotalizar, Ordenar, Selecionar
colunas, Ocultar colunas, etc. Vejamos cada guia de opo.
Na figura abaixo, na parte da esquerda, temos as colunas que esto visveis no relatrio.
Na parte direita, temos todas as disponveis. Veja que j temos aqui, a possibilidade de informar
quais campos pretendemos totalizar.

ABAP List Viewer


16

O boto Modificar layout


Na guia ordenao, informamos quais campos queremos classificar, em qual ordem e
ainda, se desejamos um subtotal por esse campo.

ABAP List Viewer


17

O boto Modificar layout


Na guia filtro definimos por qual campo (ou quais) gostaramos de delimitar o resultado. No
caso abaixo, foi escolhido o nmero do documento de faturamento e sua categoria. A funo
solicita essa range de valores para gerar o relatrio.

A opo Viso raramente utilizada. No se cria vises do relatrio. muito mais utilizado
e simples as opes de layout. Na guia Viso voc pode utilizar templates do Excel ou do Crystal
Reports. Tambm h pouca documentao sobre o assunto.
Os layouts que voc cria, no deixam de ser vises diferentes de um mesmo relatrio.

ABAP List Viewer


18

O boto Modificar layout


Na guia de Representao voc pode alterar algumas opes no formato de seu relatrio.
Marque ou desmarque os checkboxes.

ABAP List Viewer


19

O boto Gravar Layout


O formato que seu relatrio estiver no momento (Que foi configurado) pode ser salvo.
Vrios layouts diferentes para um mesmo relatrio. O flag Config.prelim vai indicar qual o layout
default, ou seja, ao executar o programa novamente, de que forma o relatrio ser apresentado de
incio.

ABAP List Viewer


20

O boto Selecionar Layout


Da mesma forma possvel mudar o formato de seu relatrio a qualquer momento. Basta
selecionar outro layout salvo. Na figura abaixo, temos apenas um.

No cdigo em anexo, voc ver que possvel, na tela de seleo do programa permitir
ao usurio selecionar um layout, antes do relatrio ser apresentado com o layout default (Caso
exista algum).
Sem nenhum layout, o relatrio apresentado conforme foi codificado no programa.

ABAP List Viewer


21

Inserindo uma figura no cabealho


Que tal o cabealho do seu relatrio no formato da figura abiaixo (por exemplo), e logo
depois as linhas de detalhe:

Isso melhora bem a aparncia dos relatrios. Veja que temos at a possibilidade de inserir
figura em background, como na Web. O texto tambm configurvel, voc pode inserir vrias
linhas e alterar o tamanho da fonte.
No exemplo acima foi utilizado como background a imagem ALV_BACKGROUND e o
nome do logotipo ENJOYSAP_LOGO.
A tabela com todas as figuras disponveis a BDS_CONN05, CLASS = PICTURE.

ABAP List Viewer


22

Importando uma imagem para o R/3


O R/3 permite que voc importe figuras, assim no ficamos limitados apenas, as que so
standard. Por exemplo importar o logotipo da empresa e inserir no cabealho do relatrio ALV.
Vejamos como se faz.
Aps criar a imagem (.GIF, .BMP, .JPG, etc) em algum aplicativo (MS Paint, Photoshop,
Paint Shop Pro, etc) o que precisamos, utilizar a transao 0FPM002 (Import Logo for Reporting)
e importar a imagem para o R/3. Nem todas as verses do R/3 possuem essa transao.
Preencha as informaes necessrias e digite F8 para executar.

ABAP List Viewer


23

Importando uma imagem para o R/3


Na prxima tela voc ir informar onde est a figura, clicando em TELA. Veja a imagem
abaixo:

Com duplo clique no item TELA, a transao apresenta a tela padro para abrir um
arquivo. Localize a figura e pronto.

ABAP List Viewer


24

Exemplo de programa
*----------------------------------------------------------------------* ProcWork Informtica - ASPEN - Unidade de Negcios SAP
* Descrio : Programa de exemplo para criao de relatrio ALV
* Dezembro, 2002
*----------------------------------------------------------------------report zexemplo_alv.
*----------------------------------------------------------------------* Tabelas transparentes
*----------------------------------------------------------------------tables:
vbrk.
"Documentos de faturamento
*----------------------------------------------------------------------* Tipos standard
*
* O conjunto de tipos VRM e SLIS so utilizados por funes ALV. Defina
* sempre no incio. O mais importante mesmo o SLIS.
*----------------------------------------------------------------------type-pools:
vrm,
"Necessrio para uso de ALV
slis.
"Tipos globais para ALV
*----------------------------------------------------------------------* Tipos do usurio
*----------------------------------------------------------------------types:
begin of y_vbrk,
vbeln
like vbrk-vbeln,
"Nmero documento
kdgrp
like vbrk-kdgrp,
"Grupo de clientes
netwr
like vbrk-netwr,
"Valor lquido
mwsbk
like vbrk-mwsbk,
"Montante do imposto
fkart
like vbrk-fkart,
"Tipo documento faturamento
vtweg
like vbrk-vtweg,
"Canal de distribuio
kunag
like vbrk-kunrg,
"Emissor da ordem
xblnr
like vbrk-xblnr,
"Nota fiscal
mark
type c,
"Marcar alteraes
end of y_vbrk.
*----------------------------------------------------------------------* Tabelas internas ALV
*
* As estruturas aqui utilizadas (SLIS) esto explicadas com as opes
* mais importantes no final da apostila
*----------------------------------------------------------------------data:
t_linecolor type slis_specialcol_alv occurs 0 with header line,
t_listheader type slis_t_listheader,
t_fieldcat
type slis_t_fieldcat_alv
with header line,
t_sort
type slis_sortinfo_alv
occurs 0 with header line.
data:
v_listheader type slis_listheader, "Cabealho
v_layout
type slis_layout_alv, "layout para sada
v_print
type slis_print_alv,
"Ctrl de impresso
v_variante
like disvariant.
"Variante de exibio

ABAP List Viewer


25

*----------------------------------------------------------------------* Tabelas internas


*----------------------------------------------------------------------data:
t_vbrk
type y_vbrk
occurs 0 with header line.
* A prxima tabela necessrio porque no possvel um select em
* tabelas que possuem campos como outras tabelas.
* No caso foi necessrio incluir a SLIS_T_SPECIALCOL_ALV
data: begin of t_alv occurs 0.
include structure t_vbrk.
data:
color type slis_t_specialcol_alv. "Definir a cor
data: end of t_alv.
*----------------------------------------------------------------------* Variveis de uso geral
*----------------------------------------------------------------------data:
v_tabix
like sy-tabix,
v_repid
like sy-repid,
v_flag.
*----------------------------------------------------------------------* Tela de seleo
*----------------------------------------------------------------------selection-screen begin of block one.
select-options:
s_vbeln for vbrk-vbeln.

"Documento de faturamento

selection-screen skip.
parameters:
p_varia like disvariant-variant.

"Variante de exibio

*----------------------------------------------------------------------* O usurio ter a opo de iniciar a apresentao do relatrio com


* algum layout salvo anteriormente.
* Essa escolha ser armazenada em P_VARIA. Utilizamos uma funo que
* retorna todos os layout possveis.
*----------------------------------------------------------------------selection-screen end of block one.

ABAP List Viewer


26

*----------------------------------------------------------------------* Eventos
*----------------------------------------------------------------------initialization.
perform zf_init_alv.
at selection-screen on value-request for p_varia.
perform zf_recupera_layouts_salvos.
*----------------------------------------------------------------------* Principal
*----------------------------------------------------------------------start-of-selection.
perform:
zf_selecao_dados,
"Seleciona a VBRK
zf_altera_cores,
"Alterando as cores dos campos
zf_monta_tabela_alv, "Preenche o catlogo
zf_sort_subtotal,
"Ordenao dos campos e subtotais
zf_executa_funcao_alv. "Gera o relatrio
end-of-selection.
*----------------------------------------------------------------------* Rotinas
*----------------------------------------------------------------------*----------------------------------------------------------------------*
Form zf_init_alv
*----------------------------------------------------------------------*
Busca layout de exibio default para o relatrio. Se houver
*
algum formato padro para o relatrio, essa funo busca e j
*
apresenta o relatrio nesse formato.
*
Um layout fica como default quando marcamos "Config.Prelim." Um
*
flag que pode ser marcado na opo "Gravar layout" na barra de
*
ferramentas do ALV
*----------------------------------------------------------------------form zf_init_alv.
v_repid = sy-repid.
clear v_variante.
v_variante-report = v_repid.
call function 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save
= 'A'
CHANGING
cs_variant = v_variante
EXCEPTIONS
not_found = 2.
if sy-subrc = 0.
p_varia = v_variante.
endif.
endform.

ABAP List Viewer


27

*----------------------------------------------------------------------*
Form zf_recupera_layouts_salvos
*----------------------------------------------------------------------*
Abre um search help com os layouts j gravados. Se o usurio
*
escolher algum aqui, o programa vai iniciar a apresentao do
*
relatrio com esse layout, e no o que default, retornado na
*
funo REUSE_ALV_VARIANT_DEFAULT_GET em ZF_INIT_ALV (Acima)
*----------------------------------------------------------------------form zf_recupera_layouts_salvos.
v_variante-report = v_repid.
call function 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = v_variante
i_save
= 'A'
IMPORTING
es_variant = v_variante
EXCEPTIONS
not_found = 2.
if sy-subrc = 2.
message id sy-msgid type 'S' number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
else.
p_varia = v_variante-variant.
endif.
endform.
*----------------------------------------------------------------------*
Form zf_selecao_dados
*----------------------------------------------------------------------*
Seleo dos dados
*----------------------------------------------------------------------form zf_selecao_dados.
select vbeln kdgrp netwr mwsbk
fkart vtweg kunag xblnr
from vbrk
into table t_vbrk
where vbeln in s_vbeln.
loop at t_vbrk.
move-corresponding t_vbrk to t_alv.
append t_alv.
endloop.
endform.

ABAP List Viewer


28

*----------------------------------------------------------------------*
*
Form zf_altera_cores
*----------------------------------------------------------------------*
*
Permite informar a cor que vc deseja para a coluna, inclusive
*
pelo valor da varivel
*----------------------------------------------------------------------*
FORM zf_altera_cores.
*
*
*
*
*

Veja algumas cores


Azul
=1
Verde = 5
Normal = 2
Vermelha = 6

* Mas vai depender de como esto as cores do seu SAP-Gui


loop at t_alv.
refresh t_linecolor.
refresh t_alv-color.
t_linecolor-fieldname = 'VBELN'.
t_linecolor-color-col = '6'.
t_linecolor-color-inv = '1'.
"Inverso, 1 liga e 0 desliga
append t_linecolor.
*
*

Temos a opo INV, que invertido, mesmo esquema do INT


1 liga e 0 desliga
if t_vbrk-netwr > 10000.
t_linecolor-fieldname = 'NETWR'.
t_linecolor-color-col = '1'.
t_linecolor-color-int = '1'. "Negrito (1-ligado, 0-Desligado)
else.
t_linecolor-fieldname = 'NETWR'.
t_linecolor-color-col = '6'.
t_linecolor-color-int = '1'. "Negrigo (1-ligado, 0-Desligado)
endif.
append t_linecolor.
t_alv-color[] = t_linecolor[].
modify t_alv.
endloop.

ENDFORM.

ABAP List Viewer


29

*----------------------------------------------------------------------*
Form zf_monta_tabela_alv
*----------------------------------------------------------------------*
Monta tabela para apresentao do relatrio. Aqui montamos um
*
catlogo com as informaes dos campos.
*
Veja que no estamos preenchendo todas as opes do catlogo,
*
no necessrio. No anexo voc poder encontrar os principais
*----------------------------------------------------------------------form zf_monta_tabela_alv.
clear t_fieldcat.
t_fieldcat-fieldname
= 'MARK'.
t_fieldcat-tabname
= 'T_ALV'.
t_fieldcat-reptext_ddic = 'S'.
t_fieldcat-inttype
= 'C'.
t_fieldcat-outputlen
= 1.
t_fieldcat-checkbox
= 'X'.
append t_fieldcat.
clear t_fieldcat.
t_fieldcat-fieldname
= 'VBELN'.
t_fieldcat-tabname
= 'T_ALV'.
t_fieldcat-reptext_ddic
= 'Doc. Fatura'.
t_fieldcat-inttype
= 'C'.
t_fieldcat-outputlen
= 10.
append t_fieldcat.
clear t_fieldcat.
t_fieldcat-fieldname
= 'KDGRP'.
t_fieldcat-tabname
= 'T_ALV'.
t_fieldcat-reptext_ddic = 'Grupo de Clientes'.
t_fieldcat-inttype
= 'C'.
t_fieldcat-outputlen
= 2.
append t_fieldcat.
* Para o campo NETWR, o relatrio j vai mostrar linha de total
clear t_fieldcat.
t_fieldcat-fieldname
= 'NETWR'.
t_fieldcat-tabname
= 'T_ALV'.
t_fieldcat-reptext_ddic = 'Valor lquido'.
t_fieldcat-inttype
= 'P'.
t_fieldcat-outputlen
= 15.
t_fieldcat-do_sum
= 'X'.
append t_fieldcat.
clear t_fieldcat.
t_fieldcat-fieldname
= 'MWSBK'.
t_fieldcat-tabname
= 'T_ALV'.
t_fieldcat-reptext_ddic = 'Montante do Imposto'.
t_fieldcat-inttype
= 'P'.
t_fieldcat-outputlen
= 15.
append t_fieldcat.

ABAP List Viewer


30

* Os campos abaixo no iro aparecer no relatrio, apenas quando


* o usurio modificar o layout e inserir esses campos nas colunas
* a serem apresentadas
clear t_fieldcat.
t_fieldcat-fieldname
= 'FKART'.
t_fieldcat-tabname
= 'T_ALV'.
t_fieldcat-reptext_ddic = 'Tipo do documento'.
t_fieldcat-inttype
= 'C'.
t_fieldcat-outputlen
= 4.
t_fieldcat-no_out
= 'X'.
append t_fieldcat.
clear t_fieldcat.
t_fieldcat-fieldname
= 'VTWEG'.
t_fieldcat-tabname
= 'T_ALV'.
t_fieldcat-reptext_ddic = 'Canal de Distribuio'.
t_fieldcat-inttype
= 'C'.
t_fieldcat-outputlen
= 2.
t_fieldcat-no_out
= 'X'.
append t_fieldcat.
clear t_fieldcat.
t_fieldcat-fieldname
= 'KUNAG'.
t_fieldcat-tabname
= 'T_ALV'.
t_fieldcat-reptext_ddic = 'Emissor da Ordem'.
t_fieldcat-inttype
= 'C'.
t_fieldcat-outputlen
= 10.
t_fieldcat-no_out
= 'X'.
append t_fieldcat.
*
*
*
*

Para o campo XBLNR, no vamos preencher nada. Nem disponvel


na modificao do layout ele vai estar.
No necessrio atribuir todos os campos, no ocorre
nenhum erro.

endform.
*----------------------------------------------------------------------*
Form zf_sort_subtotal
*----------------------------------------------------------------------*
Classificao e item de subtotalizao
*----------------------------------------------------------------------form zf_sort_subtotal.
clear t_sort[].
t_sort-spos
= 1.
t_sort-fieldname = 'KDGRP'.
t_sort-tabname = 'T_ALV'.
t_sort-up
= 'X'.
t_sort-subtot = 'X'.
append t_sort.
* Com isso o relatrio vai sair classificado em ordem crescente de Grupo
* de cliente e ainda ir aparecer um subtotal por esse campo.
endform.

ABAP List Viewer


31

*----------------------------------------------------------------------*
Form zf_executa_funcao_alv
*----------------------------------------------------------------------*
Apresenta relatrio
*----------------------------------------------------------------------form zf_executa_funcao_alv.
* Preenchendo algumas opes de impresso (No obrigatrio)
v_layout-expand_all
= 'X'. "Abrir subitens
v_layout-colwidth_optimize = 'X'. "Largura melhor possvel da coluna
v_layout-edit
= 'X'. "Permitir a edio
* Indicando para funo qual o layout que deve ser apresentado
* primeiro
v_variante-variant
= p_varia.
v_print-no_print_listinfos = 'X'.
call function 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program
= v_repid
i_background_id
= 'ALV_BACKGROUND'
i_callback_top_of_page = 'ZF_TOP_OF_PAGE'
*
i_callback_pf_status_set = 'ZF_STATUS'
i_callback_user_command = 'ZF_USER_COMMAND'
it_fieldcat
= t_fieldcat[]
is_layout
= v_layout
it_sort
= t_sort[]
i_default
= 'X'
i_save
= 'A'
is_variant
= v_variante
is_print
= v_print
TABLES
t_outtab
= t_alv
EXCEPTIONS
program_error
=1
others
= 2.
*
*
*
*

As funes que geram relatrios ALV possuem vrios parmetros de


I_CALLBACK. Os que mais so utilizados, so os que esto
na chamada acima. Para ver os demais use a transao SE37. Esses
parmetros so preenchidos com nomes de FORMS do programa

*
*
*
*

i_callback_program
= Qual programa que executou a funo
i_callback_top_of_page = Rotina de cabealho
i_callback_pf_status_set = Qual barra de tarefas a funo vai usar
i_callback_user_command = Tratamento dos botes alterados ou criados

endform.

ABAP List Viewer


32

*----------------------------------------------------------------------*
Form zf_user_command
*----------------------------------------------------------------------*
Tratamento das opes do usurio. Por exemplo um Drill-down ou
*
algum boto que voc inseriu ou alterou. O importante conhecer
*
os parmetros que o form recebe
*----------------------------------------------------------------------form zf_user_command using ucomm like sy-ucomm
selfield type slis_selfield.
* UCOMM: o sy-ucomm (Ok-code)
* SELFIELD: uma estrutura com dados que ns permite identifcar
*
o que foi selecionado. Essa estrutura tambm est
*
explicada no anexo ao final da apostila
*

Salva a posio do relatrio (Linha escolhida)


selfield-row_stable = 'X'.

*
*
*
*
*

Uma das questes foi como alterar o contedo de uma tabela


transparente com as alteraes feitas no relatrio ALV
Segue um exemplo de como pode ser feito:
Em nossa barra de ferramentas criamos o boto com cdigo
ZATU
if ucomm = 'ZATU'.

*
*
*
*

*
*

Vamos ler a tabela T_VBRK onde mark = X. A idia que


o usurio mark com X os registros alterados
loop at t_vbrk where mark = 'X'.
v_tabix = sy-tabix.
Atualiza a tabela transparente
" update ztabela ....
Ento voltamos a T_VBRK sem marcao alguma
clear t_vbrk-mark.
modify t_vbrk index v_tabix.
Veja que esse tipo de esquema pode ser feito para
excluir registros tambm
endloop.
endif.

Para testar o cdigo do boto


if ucomm = 'ZLOG'.
" perform ...
" call transaction...
endif.

Para um drill down a partir de um registro


if not selfield-tabindex = 0.
read table t_vbrk index selfield-tabindex.
"perform ...
"call transaction ...
else.
Clicou em linha invlida, linha de total, cabealho, etc
endif.

ABAP List Viewer


33

endform.

*----------------------------------------------------------------------*
Form zf_top_of_page
*----------------------------------------------------------------------*
Cabealho do relatrio
*----------------------------------------------------------------------form zf_top_of_page.
*
*
*
*

Uma dica, em relatrios ALV com utilizao de drill down, na volta ao


relatrio principal ele vai executar novamente o cabealho. Isso faz
com que ele fique duplicado. Utilize um flag que aps apresentar o
cabealho uma vez, fique marcado com um 'X', por exemplo.

* V_FLAG na primeira vez branco.


check v_flag is initial.
* Monta as linhas de cabealho
clear t_listheader[].
clear v_listheader.
v_listheader-typ = 'H'.
* TYP = H, faz com que a fonte fique maior
v_listheader-info = 'Apenas um Exemplo em ALV'.
append v_listheader to t_listheader.
* Definio do Projeto
clear v_listheader.
v_listheader-typ = 'A'.
* TYP = S, outro tipo de fonte
v_listheader-info = 'Segunda linha do cabealho'.
append v_listheader to t_listheader.
* O campo INFO, pode ter no mximo 60 caracteres
*
*
*
*
*

Apresenta o cabealho.
Veja que j uma outra funo, essa apresenta a figura, j
a funo REUSE_ALV_GRID_DISPLAY (Principal) tem o parmetro
que voc indica a imagem que ser apresentada em background,
como na WEB.
call function 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
i_logo
= 'ENJOYSAP_LOGO'
it_list_commentary = t_listheader.

* Para no apresentar mais o cabealho no refresh


v_flag = 'X'.
endform.

ABAP List Viewer


34

*---------------------------------------------------------------------*
Form zf_status
*---------------------------------------------------------------------*
Status com boto de log (Item a mais na barra ALV)
*---------------------------------------------------------------------form zf_status using rt_extab type slis_t_extab.
* Aqui estamos informando a funo que ela dever utilizar a barra de
* ferramentas ZALV_BOTOES.
"set pf-status 'ZALV_BOTOES'.
* Tambm possvel excluir funes
"if sy-uname = ...
"EXCLUDING ...
"endif.
endform.

ABAP List Viewer


35

Estruturas SLIS
SLIS_FIELDCAT_ALVTabelaqueocatlogodecampos.Vaicontertodainformao
necessriasobrecadacampodorelatrio.formadaporumgrupodetipos,aqui
descrevemososmaisutilizados.Obrigatrio(Ounomnimo)preenchaoscamposque
estosublinhados.
FIELDNAME

Tam.30,tipo
caracter

TABNAME

Tam. 30,
caracter

ICON

Tam.1,tipocaracter

Preencha com X, caso o campo


representeumcone.

SYMBOL

Tam.1,tipocaracter

Preencha com X, caso o campo


representeumsmbolo.

CHECKBOX

Tam.1,tipocaracter

Preencha com X, caso deseje


apresentar um checkbox na coluna.
Utilizadoparacamposdotipoflag.

JUST

Tam.1,tipocaracter

Justificaratextodocampo.UseR,C
ouL(Direita,EsquerdaouCentro).

LZERO

Tam.1,tipocaracter

PreenchercomX,paraeliminarzeros
esquerda.

NO_SIGN

Tam.1,tipocaracter

PreenchercomX,paranoapresentar
sinalemvalores.

NO_ZERO

Tam.1,tipocaracter

Preencher com X, para no exibir


valoreszerados.

DO_SUM

Tam.1,tipocaracter

Seacolunaumvalor,preenchacom
X, caso queira a sumarizao j na
apresentaodorelatrio.

NO_OUT

Tam.1,tipocaracter

Preencher com X, se deseja que a


colunanoaparea.

Nomedocampo,quevaiserumacoluna
doseurelatrio.

tipo Nome da tabela que possui o campo


definido acima. Essa tabela deve os
registros(linhas)doseurelatrio.

ABAP List Viewer


36

OUTPUTLEN

Tam.6,tiponumrico

Aqui voc indica o tamanho do seu


campo.

INTTYPE

Tam.1,tipocaracter

Tipo do campo, veja os tipos


principais:
CCadeiadecaracteres
NCadeiadecaracteres(Snmero)
DData(data:AAAAMMDD)
TMomento(hora:HHMMSS)
XSeqnciadebyte(hexadecimal)
INinteiro(4bytec/sinal)
PCompactado
FPontoflutuante

REPTEXT_DDIC

Tam. 30,
caracter

HOTSPOT

Tam.1,tipocaracter

tipo Labeldacolunadorelatrio.
Preencher com X, caso deseje que ao
passar o mouse por cima do campo,
aparea o cone de uma mo.
Indicando que existe alguma ao ao
clicarsobreessecampo.

Estruturas SLIS
SLIS_T_LISTHEADER Tabela para criao do cabealho de seu relatrio. O
preenchimentodetodososcampos,inclusiveaprpriautilizaodessatabelano
obrigatria.
TYP

H = Header, S =
Selection, A = Action

KEY

Tam. 20,
caracter

INFO

Tam. 60, tipo caracter

Dependendodotipo(H,SouA)otipo
deletramodifica.
tipo Noprecisapreencher.
o texto que voc quer que aparea no
cabealho. Voc pode utilizar n linhas. Veja
no programa exemplo.

SLIS_SORTINFO_ALVTabelaquevaiindicarparafunocomoaclassificaodos
campos do relatrio. O preenchimento de todos os campos, inclusive a prpria
utilizaodessatabelanoobrigatria.
FIELDNAME

Tam.30,tipo
caracter

Nomedocampo,quevaiserumacoluna
doseurelatrio

TABNAME

Tam. 30,
caracter

UP

Tam.1,tipocaracter

Marque esse campo com X para


classificaremordemcrescente.

DOWN

Tam.1,tipocaracter

Marque esse campo com X para


classificaremordemdecrescente.

SUBTOT

Tam.1,tipocaracter

Marque com X para que no relatrio


apareaumsubtotalporessecampo.

SPOS

Tam.2,tiponumrico

Seqnciadeordenaodoscampos

tipo Nome da tabela que possui o campo


definidoacima.

ABAP List Viewer


37

DISVARIANTVariant.Exibio(Layoutssalvos)
REPORT

NomedoprogramaABAP

Preencher com o nome do programa.


Utilize a varivel do sistema SY
REPID

HANDLE

ID controle p/chamadas Usointerno


mltiplas a partir do
mesmoprograma

LOG_GROUP

Conceito lgico de Usointerno


grupo

USERNAME

Nome do usurio para Usointerno


gravao especfica do
usurio

VARIANT

Layout

Uso interno. Aqui vai retornar o


nomedolayoutquevocsalvou

TEXT

Denominaolayout

Uso interno. Aqui retorna a


descrio que voc deu para o seu
layout

DEPENDVARS

Vetorparaentradasde Usointerno
variantedependentes

Estruturas SLIS
SLIS_LAYOUT_ALV Define o formato de sada do relatrio. O preenchimento de
todos os campos, inclusive a prpria utilizao dessa estrutura no
obrigatria.
NO_COLHEAD

Tam.1,tipocaracter

Preencha com X para que o seu


relatrio no tenha label das
colunas.

ZEBRA

Tam.1,tipocaracter

PreenchercomXparaquesualistagem
apareazebrada.

NO_VLINE

Tam. 1, tipo caracter

Preencher com X para que as colunas do


relatrio no tenham divises.

NUMC_SUM

Tam. 1, tipo caracter

Preencher com X, para que o relatrio


permita totalizao de campos to tipo N
(Caracteres numricos).

EDIT

Tam. 1, tipo caracter

Preencher com X para que o usurio possa


editar o valor do campo no relatrio.

NO_INPUT

Tam. 1, tipo caracter

Preencher com X se o campo for apenas de


sada.

COLWIDTH_OPTIMIZE

Tam. 1, tipo caracter

Marcar com X para que a largura da coluna


fique de acordo com o maior tamanho:
Label ou Detalhe

NO_TOTALLINE

Tam. 1, tipo caracter

Preenchendo esse campo com X, em seu


relatrio no ir aparecer linha de total.

TOTALS_BEFORE_ITEM

Tam. 1, tipo caracter

Preencher

ABAP List Viewer


38

com

para

que

os

totais

apaream antes das linhas de detalhe.

TOTALS_ONLY

Tam. 1, tipo caracter

Preencher com X para que em seu relatrio


apaream apenas os totais.

TOTALS_TEXT

Tam. 60, tipo caracter

Texto para as linhas de total

SUBTOTALS_TEXT

Tam. 60, tipo caracter

Texto para as linhas de subtotal

SLIS_PRINT_ALVInformaoparaaimpresso.Opreenchimentodetodososcampos,
inclusiveaprpriautilizaodessaestruturanoobrigatria.
PRINT

Tam.1,tipocaracter

Preencher com X para permitir a


impresso.

PRNT_TITLE

Tam.1,tipocaracter

Preencher com X para permitir a


impressodottulodorelatrio.

NO_PRINT_LISTINFOS

Tam. 1, tipo caracter

Preencher com X para que na impresso


no apaream as informaes da listagem.

Estruturas SLIS
SLIS_SELFIELD Informao sobre o registro selecionado. As informaes so
retiradasdocatlogo.
TABNAME

Tam. 30, tipo caracter

Nome da tabela que d origem aos dados.

TABINDEX

Sy-tabix

Vai indicar a posio do registro dentro da


tabela. Se precisar recuperar os valores
utilize esse ndice em um comando read
table ... index slis_selfield-tabindex.

COL_STABLE

Tam. 1, tipo caracter

Marque com X, para manter o relatrio na


coluna em que estava antes do drill down.

ROW_STABLE

Tam. 1, tipo caracter

Marque com X, para manter o relatrio na


linha selecionada antes do drill down.

REFRESH

Tam. 1, tipo caracter

Para atualizar o relatrio, preencher com X.

Problemas e correes por favor enviar para: marcelo.bueno@procwork.com.br

ABAP List Viewer


39

Você também pode gostar