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.
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.
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.
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.
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.
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.
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.
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. 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.
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.
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.
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.
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.
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.
O boto Destinatrio de correio eletrnico
Atravs do SAP Office possvel enviar o relatrio via e-mail. A tela para o preenchimento a seguinte:
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.
O boto Modificar layout
Na guia ordenao, informamos quais campos queremos classificar, em qual ordem e ainda, se desejamos um subtotal por esse campo.
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.
O boto Modificar layout
Na guia de Representao voc pode alterar algumas opes no formato de seu relatrio. Marque ou desmarque os checkboxes.
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.
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.
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.
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.
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.
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
*-----------------------------------------------------------------------
* 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.
*-----------------------------------------------------------------------
* 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.
*-----------------------------------------------------------------------
* 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.
*----------------------------------------------------------------------*
* 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.
*-----------------------------------------------------------------------
* 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.
* 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.
*-----------------------------------------------------------------------
* 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 criadosendform.
*-----------------------------------------------------------------------
* 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.
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.
*----------------------------------------------------------------------
* 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.
Estruturas SLIS
SLIS_FIELDCAT_ALV Tabela que o catlogo de campos. Vai conter toda informao necessria sobre cada campo do relatrio. formada por um grupo de tipos, aqui descrevemos os mais utilizados. Obrigatrio (Ou no mnimo) preencha os campos que esto sublinhados.
FIELDNAMETam. 30, tipo caracterNome do campo, que vai ser uma coluna do seu relatrio.
TABNAMETam. 30, tipo caracterNome da tabela que possui o campo definido acima. Essa tabela deve os registros (linhas) do seu relatrio.
ICONTam. 1, tipo caracterPreencha com X, caso o campo represente um cone.
SYMBOLTam. 1, tipo caracterPreencha com X, caso o campo represente um smbolo.
CHECKBOXTam. 1, tipo caracterPreencha com X, caso deseje apresentar um checkbox na coluna. Utilizado para campos do tipo flag.
JUSTTam. 1, tipo caracterJustificar a texto do campo. Use R, C ou L (Direita, Esquerda ou Centro).
LZEROTam. 1, tipo caracterPreencher com X, para eliminar zeros esquerda.
NO_SIGNTam. 1, tipo caracterPreencher com X, para no apresentar sinal em valores.
NO_ZEROTam. 1, tipo caracterPreencher com X, para no exibir valores zerados.
DO_SUMTam. 1, tipo caracterSe a coluna um valor, preencha com X, caso queira a sumarizao j na apresentao do relatrio.
NO_OUTTam. 1, tipo caracterPreencher com X, se deseja que a coluna no aparea.
OUTPUTLENTam. 6, tipo numricoAqui voc indica o tamanho do seu campo.
INTTYPETam. 1, tipo caracterTipo do campo, veja os tipos principais:
C-Cadeia de caracteres
N-Cadeia de caracteres (S nmero)
D-Data (data: AAAAMMDD)
T-Momento (hora:HHMMSS)
X-Seqncia de byte (hexadecimal)
I-N inteiro (4 byte c/sinal)
P-Compactado
F-Ponto flutuante
REPTEXT_DDICTam. 30, tipo caracterLabel da coluna do relatrio.
HOTSPOTTam. 1, tipo caracterPreencher 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 clicar sobre esse campo.
Estruturas SLIS
SLIS_T_LISTHEADER Tabela para criao do cabealho de seu relatrio. O preenchimento de todos os campos, inclusive a prpria utilizao dessa tabela no obrigatria.
TYPH = Header, S = Selection, A = ActionDependendo do tipo (H,S ou A) o tipo de letra modifica.
KEYTam. 20, tipo caracterNo precisa preencher.
INFOTam. 60, tipo caracter o texto que voc quer que aparea no cabealho. Voc pode utilizar n linhas. Veja no programa exemplo.
SLIS_SORTINFO_ALV Tabela que vai indicar para funo como a classificao dos campos do relatrio. O preenchimento de todos os campos, inclusive a prpria utilizao dessa tabela no obrigatria.
FIELDNAMETam. 30, tipo caracterNome do campo, que vai ser uma coluna do seu relatrio
TABNAMETam. 30, tipo caracterNome da tabela que possui o campo definido acima.
UPTam. 1, tipo caracterMarque esse campo com X para classificar em ordem crescente.
DOWNTam. 1, tipo caracterMarque esse campo com X para classificar em ordem decrescente.
SUBTOTTam. 1, tipo caracterMarque com X para que no relatrio aparea um subtotal por esse campo.
SPOSTam. 2, tipo numricoSeqncia de ordenao dos campos
DISVARIANT - Variant.Exibio (Layouts salvos)
REPORTNome do programa ABAPPreencher com o nome do programa. Utilize a varivel do sistema SY-REPID
HANDLEID controle p/chamadas mltiplas a partir do mesmo programaUso interno
LOG_GROUPConceito lgico de grupoUso interno
USERNAMENome do usurio para gravao especfica do usurioUso interno
VARIANTLayoutUso interno. Aqui vai retornar o nome do layout que voc salvou
TEXTDenominao layoutUso interno. Aqui retorna a descrio que voc deu para o seu layout
DEPENDVARSVetor para entradas de variante dependentesUso interno
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_COLHEADTam. 1, tipo caracterPreencha com X para que o seu relatrio no tenha label das colunas.
ZEBRATam. 1, tipo caracterPreencher com X para que sua listagem aparea zebrada.
NO_VLINETam. 1, tipo caracterPreencher com X para que as colunas do relatrio no tenham divises.
NUMC_SUMTam. 1, tipo caracterPreencher com X, para que o relatrio permita totalizao de campos to tipo N (Caracteres numricos).
EDITTam. 1, tipo caracterPreencher com X para que o usurio possa editar o valor do campo no relatrio.
NO_INPUTTam. 1, tipo caracterPreencher com X se o campo for apenas de sada.
COLWIDTH_OPTIMIZETam. 1, tipo caracterMarcar com X para que a largura da coluna fique de acordo com o maior tamanho: Label ou Detalhe
NO_TOTALLINETam. 1, tipo caracterPreenchendo esse campo com X, em seu relatrio no ir aparecer linha de total.
TOTALS_BEFORE_ITEMSTam. 1, tipo caracterPreencher com X para que os totais apaream antes das linhas de detalhe.
TOTALS_ONLYTam. 1, tipo caracterPreencher com X para que em seu relatrio apaream apenas os totais.
TOTALS_TEXTTam. 60, tipo caracterTexto para as linhas de total
SUBTOTALS_TEXTTam. 60, tipo caracterTexto para as linhas de subtotal
SLIS_PRINT_ALV Informao para a impresso. O preenchimento de todos os campos, inclusive a prpria utilizao dessa estrutura no obrigatria.
PRINTTam. 1, tipo caracterPreencher com X para permitir a impresso.
PRNT_TITLETam. 1, tipo caracterPreencher com X para permitir a impresso do ttulo do relatrio.
NO_PRINT_LISTINFOSTam. 1, tipo caracterPreencher com X para que na impresso no apaream as informaes da listagem.
Estruturas SLIS
SLIS_SELFIELD Informao sobre o registro selecionado. As informaes so retiradas do catlogo.
TABNAME Tam. 30, tipo caracterNome da tabela que d origem aos dados.
TABINDEXSy-tabixVai 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_STABLETam. 1, tipo caracterMarque com X, para manter o relatrio na coluna em que estava antes do drill down.
ROW_STABLETam. 1, tipo caracterMarque com X, para manter o relatrio na linha selecionada antes do drill down.
REFRESHTam. 1, tipo caracterPara atualizar o relatrio, preencher com X.
Problemas e correes por favor enviar para: [email protected]
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
EMBED PBrush
PAGE 39ABAP List Viewer