Documente Academic
Documente Profesional
Documente Cultură
ABAP
ALV
ABAP LIST VIEW
SAP R3
MDULO ABAP
Data: 26-10-05
ndice:
VISO GERAL: ...................................................................................................................3
CRIAO DO REPORT ALV:.............................................................................................6
1) Em forma de LISTA.............................................................................................................................6
2) Em forma de GRID ..............................................................................................................................7
Data: 26-10-05
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.
Exemplos de ALV.
Menu stander de
funes
Menu Z de funes
Fig. 01
Data: 26-10-05
Exemplo Excel ALV: clicando no boto que chama o Excel, monta-se dentro do ALV
uma planilha Excel.
Fig. 02
Data: 26-10-05
Opo de grfico:
Fig. 03
** Esta opo no foi utilizada no exemplo
Data: 26-10-05
Fig. 04
Data: 26-10-05
2) Em forma de GRID
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
Fig. 05
Data: 26-10-05
Data: 26-10-05
VALUE 'S'.
Data: 26-10-05
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
Data: 26-10-05
" ALV_F4
Data: 26-10-05
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.
* set callback program
* DEFINIO DE: CALLBACK DO PROGRAMA
* sy-repid guarda o nome do programa em execuo...
l_repid = sy-repid.
* display ALV grid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
* display ALV list.
*
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_background_id
= ' '
i_callback_program
= l_repid
i_callback_top_of_page
= 'ALV_TOP_OF_LIST'
i_callback_user_command = 'ALV_USER_COMMAND'
* QND. TEM OUTRO STATUS A SER GERADO...
i_callback_pf_status_set = 'SET_PF_STATUS'
is_layout
= s_alv_layout
i_save
= 'A'
it_fieldcat
= t_alv_fieldcat
it_events
= t_alv_events
it_sort
= t_sort_alv
TABLES
t_outtab
= t_final
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Data: 26-10-05
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
ls_listheader-key
ls_listheader-info
APPEND ls_listheader
= c_listheader_typ_headline.
= 'Usurio
: '.
= sy-uname.
TO t_alv_listheader.
ENDFORM.
" ALV_BUILD_HEADER
. . .
ENDFORM.
" ALV_BUILD_FIELDCAT
Data: 26-10-05
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_fieldcat-col_pos
l_fieldcat-fieldname
l_fieldcat-ref_tabname
l_fieldcat-ddictxt
l_fieldcat-outputlen
l_fieldcat-datatype
=
=
=
=
=
=
=
l_count + 1.
l_count.
'BELNR'.
'BSEG'.
'L'.
'10'.
'CHAR'.
l_fieldcat-hotspot
= 'X'.
l_fieldcat-seltext_l
= 'Nm. Doc.'.
APPEND l_fieldcat TO et_fieldcat.
=
=
=
=
=
=
=
=
l_count + 1.
l_count.
'SGTXT'.
'BSEG'.
'L'.
'50'.
'CHAR'.
''.
= 'X'.
= '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_fieldcat-col_pos
l_fieldcat-fieldname
l_fieldcat-tabname
l_fieldcat-ddictxt
l_fieldcat-outputlen
l_fieldcat-datatype
l_fieldcat-hotspot
l_fieldcat-seltext_l
l_fieldcat-just
l_fieldcat-reptext_ddic
l_fieldcat-no_zero
l_fieldcat-do_sum
=
=
=
=
=
=
=
=
=
=
=
=
l_count + 1.
l_count.
'WRBTR'.
'T_FINAL'.
'L'.
15.
'CURR'.
'X'.
'Valor'.
'R'.
'Valor'.
'X'.
= 'X'.
Data: 26-10-05
Definio de LAYOUT:
* DEFINIO DO LAYOUT
PERFORM alv_set_layout
CHANGING s_alv_layout.
" ALV_SET_LAYOUT
Definio de EVENTOS:
* DEFINIO DE EVENTOS
PERFORM alv_build_eventtab CHANGING t_alv_events.
FORM alv_build_eventtab CHANGING et_alv_events TYPE slis_t_event.
DATA: ls_alv_events
TYPE slis_alv_event,
l_dummy_ucomm
LIKE sy-ucomm,
l_dummy_selfield TYPE slis_selfield.
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.
Data: 26-10-05
" ALV_BUILD_EVENTTAB
...
ENDFORM.
" definir_quebras_alv
Definio do ALV:
Esta a funo principal do ALV que executada aps ter definido Layout, colunas,
etc...
* display ALV grid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_background_id
= ' '
i_callback_program
= l_repid
i_callback_top_of_page
= 'ALV_TOP_OF_LIST'
i_callback_user_command = 'ALV_USER_COMMAND'
* QND. TEM OUTRO STATUS A SER GERADO...
i_callback_pf_status_set = 'SET_PF_STATUS'
is_layout
= s_alv_layout
i_save
= 'A'
it_fieldcat
= t_alv_fieldcat
it_events
= t_alv_events
it_sort
= t_sort_alv
TABLES
t_outtab
= t_final
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Data: 26-10-05
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.
Data: 26-10-05
FORM TOP_OF_PAGE:
*---------------------------------------------------------------------*
*
FORM TOP_OF_PAGE
*
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
FORM top_of_page.
* Serve para imprimir o cabealho do ALV.
Utiliza-se a funo REUSE_ALV_COMMENTARY_WRITE para imprimir os dados
dentro do ALV. Para isso, temos que preencher a tabela de cabealho definindo o tipo
SLIS_LISTHEADER, que j foi realizado no PERFORM ALV_BUILD_HEADER.
Neste ponto define-se o LOGO tambm.
* DEFINIO DO CABEALHO
PERFORM: alv_build_header,
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = t_alv_listheader
i_logo
= 'ENJOYSAP_LOGO'. " ID da figura
Data: 26-10-05
ICON(30),
END OF t_final,
INCLUDE <ICON>.
Para que o campo ICON exista na tab. de impresso, segue exemplo:
* SELECIONA DADOS PARA IMPRESSO PRINCIPAL
SELECT bukrs belnr gjahr augdt gsber dmbtr
wrbtr pswsl sgtxt lifnr kunnr
FROM bseg
INTO TABLE t_final
WHERE belnr IN s_belnr.
LOOP AT T_FINAL.
T_FINAL-ICON = ICON_POSITIVE.
MODIFY T_FINAL INDEX SY-TABIX.
ENDLOOP.
Data: 26-10-05
cone
Fig. 06
Data: 26-10-05
es_alv_layout-coltab_fieldname
= 'COLINFO'.
Nova
COR de
linha
Fig. 07
Data: 26-10-05
Fig. 08
Data: 26-10-05
ALV Mltiplo:
H a possibilidade de ter uma tela com vrios ALVs. Abaixo mostra-se um exemplo
com 2 (dois) ALVs numa mesma tela.
O processo para tal execuo um pouco diferente do ALV estudado acima:
ALV com
dados de
Clientes
ALV com
dados de
Fornecedores
Fig. 09
Data: 26-10-05
Data: 26-10-05
" ALV_USER_COMMAND
Fig. 10
Data: 26-10-05
Container:
O CONTAINER nada mais do que o CUSTOM CONTROL.
Fig. 11
Data: 26-10-05
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,
* Tab. p/ Impresso em ALV de Fornecedores
BEGIN OF type_lfa1,
lifnr LIKE lfa1-lifnr,
land1 LIKE lfa1-land1,
name1 LIKE lfa1-name1,
ort01 LIKE lfa1-ort01,
END OF type_lfa1.
DATA:
*
Tabelas internas
t_kna1 TYPE type_kna1 OCCURS 0 WITH HEADER LINE,
t_lfa1 TYPE type_lfa1 OCCURS 0 WITH HEADER LINE.
DATA: ok_code LIKE sy-ucomm,
* Declarao de GT_KNA1 e GT_LFA1 para serem exibidas nos
* CONTAINERs atravs da chamada do Mtodo: CALL METHOD grid1
gt_kna1 TYPE TABLE OF type_kna1,
gt_lfa1 TYPE TABLE OF type_lfa1,
* Criar dois CONTAINER's com os respectivos nomes abaixo:
* Os valores, so os mesmos nomes dados ao CONTAINERs na tela 0100
g_container_kna1 TYPE scrfname VALUE 'CONTAINER_KNA1',
g_container_lfa1 TYPE scrfname VALUE 'CONTAINER_LFA1',
*
grid1 TYPE REF TO cl_gui_alv_grid,
g_custom_container_kna1 TYPE REF TO cl_gui_custom_container,
g_custom_container_lfa1 TYPE REF TO cl_gui_custom_container.
*---------------------------------------------------------------------*
*
MAIN
*
*---------------------------------------------------------------------*
CALL SCREEN 100.
*---------------------------------------------------------------------*
*
MODULE PBO OUTPUT
*
*---------------------------------------------------------------------*
MODULE pbo OUTPUT.
SET PF-STATUS 'MAIN100'.
* Importa tabelas exportadas no prog. ZTES1 (ALV) para serem exibidos
* nos CONTAINERs...
IMPORT t_kna1 FROM MEMORY ID 'ZTES1_CLI'.
IMPORT t_lfa1 FROM MEMORY ID 'ZTES1_FOR'.
* 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.
INSERT LINES OF t_lfa1 INTO TABLE gt_lfa1.
Data: 26-10-05
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.
Data: 26-10-05
Fig. 12
Fig. 13
Data: 26-10-05
PF-STATUS:
Fig. 14
Data: 26-10-05