Treinamento
SAP R/3
MDULO ABAP
REPORT ALV
TREINAMENTO
ndice:
VISO GERAL:................................................................................................ 3
VARIANTES................................................................................................... 10
Busca de Variantes previamente geradas:................................................................................................10
Escolha de Variantes para execuo do ALV:..........................................................................................10
PROCESSAMENTO DO ALV:.......................................................................... 12
Definio de CABEALHO:..................................................................................................................13
Definio das COLUNAS A SEREM IMPRESSAS:..............................................................................13
Definio de LAYOUT:...........................................................................................................................15
Definio de EVENTOS:.........................................................................................................................15
Definio de QUEBRA / SORT:..............................................................................................................16
Definio de CALLBACK do programa.................................................................................................17
Definio do ALV:...................................................................................................................................17
CRIAO DE FORMS:................................................................................... 18
FORM USER_COMMAND:...................................................................................................................18
FORM TOP_OF_PAGE:.........................................................................................................................19
FORM XEND_OF_LIST:........................................................................................................................19
ALV MLTIPLO:............................................................................................. 24
PF-STATUS:............................................................................................................................................31
Viso Geral:
ALV Abap List View - Basicamente uma funo Standard que pega a sua tabela interna de
dados e transforma em um relatrio. Existem algumas funcionalidades como gerar um arquivo
Excel, grficos, somatrias de campos, "links" para chamar uma outra transao, etc.. etc..
O ALV trabalha com as tabelas do type-pools slis.
Fig. 01
Exemplo Excel ALV: clicando no boto que chama o Excel, monta-se dentro do ALV uma
planilha Excel.
Fig. 02
Opo de grfico:
Fig. 03
O Report ALV (Abap List View) pode ser gerado de 2(duas) maneiras:
1) Em forma de LISTA
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
Fig. 04
2) Em forma de GRID
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
Fig. 05
*Definio das tabelas. Essa so tabelas que carregamos as informaes necessrias para passar
pra funo. So tabelas que armazenam o layout do seu relatrio, a classificao, os campos, e o
cabealho .
Exemplo:
*----------------------------------------------------------------------*
* DECLARAO DE VARIVEIS, CONSTANTES, TABELAS PARA ALV
*----------------------------------------------------------------------*
* Variveis/Tabelas para ALV
TYPE-POOLS: slis.
DATA: t_alv_fieldcat TYPE slis_t_fieldcat_alv, Tab. Com os campos
s_alv_layout TYPE slis_layout_alv, Tab. De Layout do ALV
l_repid LIKE sy-repid,
t_alv_events TYPE slis_t_event,
t_alv_listheader TYPE slis_t_listheader,
* Tab./Estrut. De Ordenao ou Quebra
h_sort_alv TYPE slis_sortinfo_alv, " header
t_sort_alv TYPE slis_t_sortinfo_alv, " sem header
* Definio da Variante gerada pelos usurios
variante LIKE disvariant.
* Constantes p/ ALV
CONSTANTS:
c_display LIKE sy-ucomm VALUE 'DISPLAY',
c_listheader_typ_headline TYPE slis_listheader-typ VALUE 'S'.
*Vamos criar a nossa tabela interna. Essa tabela interna seria a ultima tabela (aquela que temos j
todas as informaes gravadas nela).
*----------------------------------------------------------------------*
* DECLARAO DE TABELAS INTERNAS
*----------------------------------------------------------------------*
* Tab. p/ Impresso em ALV principal
DATA: BEGIN OF t_final OCCURS 0,
bukrs LIKE bseg-bukrs,
belnr LIKE bseg-belnr,
gjahr LIKE bseg-gjahr,
augdt LIKE bseg-augdt,
gsber LIKE bseg-gsber,
dmbtr LIKE bseg-dmbtr,
wrbtr LIKE bseg-wrbtr,
pswsl LIKE bseg-pswsl,
sgtxt LIKE bseg-sgtxt,
lifnr LIKE bseg-lifnr,
kunnr LIKE bseg-kunnr,
ICON(30),
END OF t_final,
Variantes
Busca de Variantes previamente geradas:
INITIALIZATION.
PERFORM alv_init.
FORM alv_init.
.
.
* Esta funo busca as variantes para o programa, se existirem
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = 'A'
CHANGING
cs_variant = variante
EXCEPTIONS
not_found = 2.
.
.
.
ENDFORM. " ALV_INIT
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_varia.
*----------------------------------------------------------------------*
PERFORM alv_f4.
FORM alv_f4.
.
.
* Com esta funo escolhe-se a Variante para executar o ALV, caso
* a funo anterior tenha tido sucesso...
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = variante
i_save = 'A'
IMPORTING
es_variant = variante
EXCEPTIONS
not_found = 2.
.
.
.
*----------------------------------------------------------------------*
* INCIO LGICO
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM busca_dados.
END-OF-SELECTION.
Processamento do ALV:
FORM alv.
* DEFINIO DO CABEALHO
PERFORM: alv_build_header,
* DEFINIO DAS COLUNAS A SEREM IMPRESSAS
alv_build_fieldcat CHANGING t_alv_fieldcat,
* DEFINIO DO LAYOUT
alv_set_layout CHANGING s_alv_layout,
* DEFINIO DE EVENTOS
alv_build_eventtab CHANGING t_alv_events,
* DEFINIO DE QUEBRAS
definir_quebras_alv.
Definio de CABEALHO:
* DEFINIO DO CABEALHO
PERFORM: alv_build_header,
*&---------------------------------------------------------------------*
*& Form ALV_BUILD_HEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM alv_build_header.
...
DATA: ls_listheader LIKE LINE OF t_alv_listheader.
ls_listheader-typ = c_listheader_typ_headline.
ls_listheader-key = 'Usurio : '.
ls_listheader-info = sy-uname.
APPEND ls_listheader TO t_alv_listheader.
Pode-se atribuir determinado campo para chamar uma funo quando o usurio clicar duas vezes
em cima dele. No exemplo, estamos utilizando isso no campo BELNR que executa a transao
FB03. Para isso, ativar o campo hotspot da tabela et_fieldcat.
*NM. DOCUMENTO
CLEAR l_fieldcat.
l_count = l_count + 1.
l_fieldcat-col_pos = l_count.
l_fieldcat-fieldname = 'BELNR'.
l_fieldcat-ref_tabname = 'BSEG'.
l_fieldcat-ddictxt = 'L'.
l_fieldcat-outputlen = '10'.
l_fieldcat-datatype = 'CHAR'.
l_fieldcat-hotspot = 'X'.
l_fieldcat-seltext_l = 'Nm. Doc.'.
APPEND l_fieldcat TO et_fieldcat.
*TXT. TEM
CLEAR l_fieldcat.
l_count = l_count + 1.
l_fieldcat-col_pos = l_count.
l_fieldcat-fieldname = 'SGTXT'.
l_fieldcat-ref_tabname = 'BSEG'.
l_fieldcat-ddictxt = 'L'.
l_fieldcat-outputlen = '50'.
l_fieldcat-datatype = 'CHAR'.
l_fieldcat-hotspot = ''.
* Utilizado para GRID
l_fieldcat-edit = 'X'.
* Utilizado para LIST
l_fieldcat-input = 'X'.
l_fieldcat-seltext_l = 'Txt. tem'.
APPEND l_fieldcat TO et_fieldcat.
Podemos definir um campo que ao ser mostrado na tela, mostre a sua somatria. No exemplo
abaixo, utilizamos o campo WRBTR.
* Valor
CLEAR l_fieldcat.
l_count = l_count + 1.
l_fieldcat-col_pos = l_count.
l_fieldcat-fieldname = 'WRBTR'.
l_fieldcat-tabname = 'T_FINAL'.
l_fieldcat-ddictxt = 'L'.
l_fieldcat-outputlen = 15.
l_fieldcat-datatype = 'CURR'.
l_fieldcat-hotspot = 'X'.
l_fieldcat-seltext_l = 'Valor'.
l_fieldcat-just = 'R'.
l_fieldcat-reptext_ddic = 'Valor'.
l_fieldcat-no_zero = 'X'.
l_fieldcat-do_sum = 'X'.
APPEND l_fieldcat TO et_fieldcat.
Definio de LAYOUT:
* DEFINIO DO LAYOUT
PERFORM alv_set_layout CHANGING s_alv_layout.
CLEAR: es_alv_layout.
* DEFINIO DE TEM COMO DEFAULT (J USEI COM 'X' E VAZIO E NO TIVE
* PROBLEMAS....
* es_alv_layout-default_item = 'X'.
* DEFINIO DE LINHAS DIFERENCIADAS POR CORES
es_alv_layout-zebra = 'X'.
* SY-UCOMM, NESTE PONTO FIXA-SE A VAR C_DISPLAY = 'DISPLAY'
es_alv_layout-f2code = c_display.
* DEFINIO IDEAL DA LARGURA DAS COLUNAS
es_alv_layout-colwidth_optimize = 'X'.
Na determinao do Layout, podemos tambm definir que campos que so numricos devem ser
totalizados
Exemplo:
es_alv_layouttotals_text = 'Total Final'. Exibir a linha do total
es_alv_layout-numc_sum = 'X'.
Definio de EVENTOS:
* DEFINIO DE EVENTOS
PERFORM alv_build_eventtab CHANGING t_alv_events.
REFRESH: et_alv_events.
* event 'BEFORE_LINE_OUTPUT'
CLEAR ls_alv_events.
ls_alv_events-name = slis_ev_before_line_output.
ls_alv_events-form = 'BEFORE_LINE_OUTPUT'.
APPEND ls_alv_events TO et_alv_events.
* event 'USER_COMMAND'.
CLEAR ls_alv_events.
ls_alv_events-name = slis_ev_user_command.
ls_alv_events-form = 'ALV_USER_COMMAND'.
APPEND ls_alv_events TO et_alv_events.
IF wg_tela = 'X'.
* O XEND_OF_LIST, s executado no modo LIST
* event 'XEND_OF_LIST'. -> TELAS COMPLEMENTARES
CLEAR ls_alv_events.
ls_alv_events-name = slis_ev_end_of_list.
ls_alv_events-form = 'XEND_OF_LIST'.
APPEND ls_alv_events TO et_alv_events.
* event 'ALV_TOP_OF_LIST'.
CLEAR ls_alv_events.
ls_alv_events-name = slis_ev_top_of_list.
ls_alv_events-form = 'ALV_TOP_OF_LIST'.
APPEND ls_alv_events TO et_alv_events.
ENDIF.
* callback forms.
* Este teste exite, pois estes PERFORMs somente so executados
* pelo ALV STANDARD..
IF 1 = 0.
PERFORM alv_top_of_list.
PERFORM xend_of_list.
PERFORM top_of_page.
PERFORM alv_user_command USING l_dummy_ucomm
l_dummy_selfield.
ENDIF.
* DEFINIO DE QUEBRAS
PERFORM definir_quebras_alv.
FORM definir_quebras_alv.
* Ordenar lista
* sort t_final by BUKRS BELNR
CLEAR t_sort_alv.
refresh t_sort_alv.
Definio do ALV:
Esta a funo principal do ALV que executada aps ter definido Layout, colunas, etc...
Criao de FORMS:
Aps ter executado a funo, mostrar o relatrio assim como na fig. 01.
Existem alguns forms que sero utilizados. Basta apenas defini-los dentro do seu programa que a
funo ALV o encontra mas tem que definir utilizando a mesma estrutura logo em baixo seno vai
ocorrer Dumping por diferena de campos.
FORM USER_COMMAND:
*---------------------------------------------------------------------*
* FORM USER_COMMAND *
*---------------------------------------------------------------------*
form user_command using f_ucomm like sy-ucomm
i_selfield type slis_selfield.
Utiliza-se este form para chamar a transao do link, caso o usurio clique duas vezes em cima do
campo, ele chamara uma transao que voc definiu.
Este campo i_selfield-tabindex possui o numero da linha que o usurio clicou, assim pode-se dar
um read table index i_selfied-tabindex na nossa tabela interna para pegar todos os dados da linha
da nossa tabela interna. Ou pegar o dado do campo value da tabela i_selfield que seria o registro
corrente.
No exemplo, mostra-se a Sntese do Documento chamando-se a transao FB03.
CASE i_ucomm.
WHEN c_display.
CASE i_selfield-fieldname.
WHEN 'BELNR'.
*Para conseguir o ID do campo s realizar o seguinte:
* 1) SE11 (nome da tabela, no caso BSEG)
* 2) Clique duplo no tipo de campo desejado (no caso BELNR)
* 3) Encontra-se o ID na caixa CARACTERSTICAS (ID parmetro)
READ TABLE t_final INDEX i_selfield-tabindex.
IF sy-subrc = 0.
*Neste ponto, se ao realizar um Clique duplo no campo BELNR, tem-se
* duas(2) opes:
* 1) Se a transao FB03 executasse com um parmetro apenas:
* SET PARAMETER ID 'BLN' FIELD i_selfield-value.
* 2) Se a transao FB03 executasse com dois parmetro (Exemplo):
SET PARAMETER ID 'BLN' FIELD t_final-belnr.
SET PARAMETER ID 'BUK' FIELD t_final-bukrs.
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDIF.
ENDCASE.
WHEN OTHERS.
ENDCASE.
FORM TOP_OF_PAGE:
*---------------------------------------------------------------------*
* FORM TOP_OF_PAGE *
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
FORM top_of_page.
FORM XEND_OF_LIST:
Este form executado no fim, e somente para LIST
*&--------------------------------------------------------------------
*& Form XEND_OF_LIST.
*&--------------------------------------------------------------------
FORM xend_of_list.
IF wg_tela = 'X'.
SKIP 3.
WRITE: /10 '_________________________________________'.
WRITE: /28 'VISTO'.
ENDIF.
ENDFORM.
cones:
INCLUDE <ICON>.
LOOP AT T_FINAL.
T_FINAL-ICON = ICON_POSITIVE.
MODIFY T_FINAL INDEX SY-TABIX.
ENDLOOP.
*CONE
CLEAR l_fieldcat.
l_count = l_count + 1.
l_fieldcat-col_pos = l_count.
l_fieldcat-fieldname = 'ICON'.
l_fieldcat-ref_tabname = 'T_FINAL'.
l_fieldcat-outputlen = '4'.
l_fieldcat-datatype = 'CHAR'.
APPEND l_fieldcat TO et_fieldcat.
cone
Fig. 06
CLEAR: es_alv_layout.
es_alv_layout-zebra = 'X'.
es_alv_layout-f2code = c_display.
es_alv_layout-colwidth_optimize = 'X'.
es_alv_layout-coltab_fieldname = 'COLINFO'.
Nova
COR de
linha
Fig. 07
Fig. 08
ALV Mltiplo:
H a possibilidade de ter uma tela com vrios ALVs. Abaixo mostra-se um exemplo com 2 (dois)
ALVs numa mesma tela.
ALV com
dados de
Clientes
ALV com
dados de
Fornecedores
Fig. 09
i_selfield-before_action = 'X'.
CASE i_ucomm.
WHEN c_display.
...
WHEN '&CLIFOR'.
* Neste ponto exportasse o contedo das tab. int. para serem
* utilizadas no programa de ALV Mltiplo...
EXPORT t_kna1 TO MEMORY ID 'ZTES1_CLI'.
EXPORT t_lfa1 TO MEMORY ID 'ZTES1_FOR'.
WHEN OTHERS.
ENDCASE.
Criar o programa ZTES5, o qual conter 2 (dois) CONTAINERs. Cada CONTAINER conter a
exibio de um ALV.
Fig. 10
Container:
Fig. 11
Codificao / Explicao:
PROGRAM test.
TYPES:
* Tab. p/ Impresso em ALV de Clientes
BEGIN OF type_kna1,
kunnr LIKE kna1-kunnr,
land1 LIKE kna1-land1,
name1 LIKE kna1-name1,
ort01 LIKE kna1-ort01,
END OF type_kna1,
DATA:
* Tabelas internas
t_kna1 TYPE type_kna1 OCCURS 0 WITH HEADER LINE,
t_lfa1 TYPE type_lfa1 OCCURS 0 WITH HEADER LINE.
*---------------------------------------------------------------------*
* MAIN *
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
* MODULE PBO OUTPUT *
*---------------------------------------------------------------------*
MODULE pbo OUTPUT.
SET PF-STATUS 'MAIN100'.
* Transporta os valores das tab. ints. para dentro das estruturas que sero
* utilizadas nos mtodos que exportaro os valores para os CONTAINERs
INSERT LINES OF t_kna1 INTO TABLE gt_kna1.
IF g_custom_container_lfa1 IS INITIAL.
CREATE OBJECT g_custom_container_kna1
EXPORTING container_name = g_container_lfa1.
CREATE OBJECT grid1
EXPORTING i_parent = g_custom_container_kna1.
CALL METHOD grid1->set_table_for_first_display
* EXPORTING i_structure_name = 'LFA1'
* Cria uma ESTRUTURA(ZLFA1) com os campos da tabl GT_LFA1
EXPORTING i_structure_name = 'ZLFA1'
CHANGING it_outtab = gt_lfa1.
ENDIF.
ENDMODULE.
*---------------------------------------------------------------------*
* MODULE PAI INPUT *
*---------------------------------------------------------------------*
MODULE pai INPUT.
* to react on oi_custom_events:
CALL METHOD cl_gui_cfw=>dispatch.
CASE ok_code.
WHEN 'EXIT'.
PERFORM exit_program.
WHEN OTHERS.
* do nothing
ENDCASE.
CLEAR ok_code.
ENDMODULE.
*---------------------------------------------------------------------*
* FORM EXIT_PROGRAM *
*---------------------------------------------------------------------*
FORM exit_program.
* CALL METHOD G_CUSTOM_CONTAINER->FREE.
* CALL METHOD CL_GUI_CFW=>FLUSH.
LEAVE PROGRAM.
ENDFORM.
Fig. 12
Fig. 13
PF-STATUS:
Fig. 14