Você está na página 1de 33

SAP R/3

MDULO ABAP
REPORT ALV

Treinamento

ndice:
VISO GERAL:..................................................................................................................3
CRIAO DO REPORT ALV:............................................................................................6
1) Em forma de LISTA..............................................................................................................................6
2) Em forma de GRID................................................................................................................................7

DECLARAO DE DADOS PARA ALV:...........................................................................8


VARIANTES..................................................................................................................... 10
Busca de Variantes previamente geradas:................................................................................................10
Escolha de Variantes para execuo do ALV:..........................................................................................10

INCIO LGICO DO PROGRAMA:..................................................................................11


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

OPES GERAIS DO ALV:............................................................................................20


cones:......................................................................................................................................................20
Alterando cor de linha:.............................................................................................................................22

ALTERANDO O PF-STATUS DE UM ALV:......................................................................23


ALV MLTIPLO:.............................................................................................................. 24
LGICA DE ALV MLTIPLO:..........................................................................................25
Chamada do ALV Mltiplo dentro do ALV Simples:..............................................................................25

CONSTRUO DO ALV MLTIPLO...............................................................................26


Module-Pool............................................................................................................................................26
Container:.................................................................................................................................................27
Codificao / Explicao:........................................................................................................................28
Estruturas ZKNA1 / ZLFA1:...................................................................................................................30
PF-STATUS:............................................................................................................................................31

Treinamento

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.
Relatrio ALV (Fig 01).

Menu stander de
funes

Menu Z de
funes

Fig. 01

Treinamento
Exemplo Excel ALV: clicando no boto que chama o Excel, monta-se dentro do ALV uma
planilha Excel.

Fig. 02

Treinamento
Opo de grfico:

Fig. 03
** Esta opo no foi utilizada no exemplo

Treinamento
Criao do Report ALV:
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

Treinamento
2) Em forma de GRID
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

Fig. 05

Treinamento
Declarao de dados para ALV:
*Primeiramente, definiremos algumas constantes, variveis, etc no nosso programa. No esquecer
de definir o type-pools SLIS!!
*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'.

Treinamento
Definio de tabela(s) interna(s) para utilizao no ALV:
*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,
* Tab. p/ Impresso em ALV de Clientes
BEGIN OF t_kna1 OCCURS 0,
kunnr LIKE kna1-kunnr,
land1 LIKE kna1-land1,
name1 LIKE kna1-name1,
ort01 LIKE kna1-ort01,
END OF t_kna1,
* Tab. p/ Impresso em ALV de Fornecedores
BEGIN OF t_lfa1 OCCURS 0,
lifnr LIKE lfa1-lifnr,
land1 LIKE lfa1-land1,
name1 LIKE lfa1-name1,
ort01 LIKE lfa1-ort01,
END OF t_lfa1.

Treinamento
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

Escolha de Variantes para execuo do ALV:


*----------------------------------------------------------------------*
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.
.
.
.
ENDFORM.

" ALV_F4

10

Treinamento
Incio Lgico do programa:
*----------------------------------------------------------------------*
* INCIO LGICO
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM busca_dados.
IF NOT t_final[] IS INITIAL.
PERFORM alv.
ENDIF.
END-OF-SELECTION.

No PERFORM busca_dados, gera-se as tabelas a serem utilizadas pelo ALV.

11

Treinamento
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.

12

Treinamento
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.
ENDFORM.

" ALV_BUILD_HEADER

Definio das COLUNAS A SEREM IMPRESSAS:


* DEFINIO DAS COLUNAS A SEREM IMPRESSAS
PERFORM alv_build_fieldcat CHANGING t_alv_fieldcat.
FORM alv_build_fieldcat CHANGING et_fieldcat TYPE slis_t_fieldcat_alv.
DATA: l_fieldcat TYPE slis_fieldcat_alv,
l_count TYPE i.
CLEAR: l_fieldcat, l_count, t_alv_fieldcat.
REFRESH: t_alv_fieldcat.
* Add header data
...
*EMPRESA
CLEAR l_fieldcat.
l_count
= l_count + 1.
l_fieldcat-col_pos
= l_count.
l_fieldcat-fieldname
= 'BUKRS'.
l_fieldcat-ref_tabname = 'BSEG'.
l_fieldcat-ddictxt
= 'L'.
l_fieldcat-outputlen
= '4'.
l_fieldcat-datatype
= 'CHAR'.
l_fieldcat-hotspot
= ''.
l_fieldcat-seltext_l
= 'Empresa'.
APPEND l_fieldcat TO et_fieldcat.

. . .
ENDFORM.

" ALV_BUILD_FIELDCAT

Feito isso, a tabela et_fieldcat possui os campos da tabela interna.


Existem alguns campos dentro dessa tabela que tem algumas funcionalidades. Por exemplo:

13

Treinamento

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.

Outra opo utilizarmos a edio de campos:


*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'.

14

Treinamento
l_fieldcat-do_sum

= 'X'.

APPEND l_fieldcat TO et_fieldcat.

15

Treinamento
Definio de LAYOUT:
* DEFINIO DO LAYOUT
PERFORM alv_set_layout

CHANGING s_alv_layout.

FORM alv_set_layout CHANGING es_alv_layout TYPE slis_layout_alv.


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'.
*
*
*
*

ENDFORM.

" ALV_SET_LAYOUT

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.
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.

16

Treinamento
ls_alv_events-form = 'XEND_OF_LIST'.
APPEND ls_alv_events TO et_alv_events.
* event 'TOP_OF_PAGE'. -> TELA DE PALLET / ETIQUETA
CLEAR ls_alv_events.
ls_alv_events-name = slis_ev_top_of_page.
ls_alv_events-form = 'TOP_OF_PAGE'.
APPEND ls_alv_events TO et_alv_events.
ELSE.
* 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.
ENDFORM.

" ALV_BUILD_EVENTTAB

Definio de QUEBRA / SORT:


* 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.
* A quebra ser executada no campo BUKRS, posio 01
h_sort_alv-spos = '01'.
h_sort_alv-fieldname = 'BUKRS'.
h_sort_alv-tabname = 'T_FINAL'.
h_sort_alv-up = 'X'.
* h_sort_alv-DOWN = 'X'.
h_sort_alv-subtot = 'X'. " inicializar com 'X' para totalizao
h_sort_alv-group = '*'.
" inicializar com '*' para quebra
APPEND h_sort_alv TO t_sort_alv.

...
ENDFORM.

" definir_quebras_alv

A tabela de SORT/QUEBRA, possui os campos onde iremos classificar os campos.


Tem a opo de mostrar o total de uma coluna ou a classificao em ordem ascendente ou
descendente de uma coluna.
17

Treinamento
h_sort_alv-fieldname = 'BUKRS'. Nome do campo da tabela interna
h_sort_alv -spos
= 1.
Posicao da quebra (1,2,3,4....
h_sort_alv -up
= X.
Classificao em ordem ascendente.
h_sort_alv -subtot
= X..
Mostrar Sub-Total
APPEND h_sort_alv TO t_sort_alv.
Definio de CALLBACK do programa.
*
*
*
*

set callback program


DEFINIO DE: CALLBACK DO PROGRAMA
Esta var. determina que quando executado o comando F3, o processamento
volta para o programa SY-REPID => Nome do programa em execuo.
l_repid = sy-repid.

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.

18

Treinamento
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.

Defini-se tambm, o tratamento de algum boto no PF-STATUS:


...
WHEN '&CLIFOR'.
EXPORT t_kna1 TO MEMORY ID 'ZTES1_CLI'.
EXPORT t_lfa1 TO MEMORY ID 'ZTES1_FOR'.
CALL TRANSACTION 'ZTES5'.
WHEN OTHERS.

19

Treinamento
ENDCASE.

20

Treinamento
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

* Para criar um logotipo, deve-se entrar na transao 0FPM002 e


preencher:
- Classe = PICTURES
- Objeto = OT
- Item = Nome do ID da figura
*Serve para imprimir o numero da pagina...usado no LIST
SKIP TO LINE 4.
WRITE: AT 70 'Pgina:', sy-pagno.
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.

21

Treinamento
Opes Gerais do ALV:
cones:
Este exemplo explica como criar um cone dentro do ALV.
* Inserir o include ICON. Ele chama o type-pools icon onde fica todos os tipos de cones que
deseja-se colocar.
* 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,

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.

*O prximo passo, seria definir este campo ICON como cone.:


*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.

22

Treinamento

cone

Fig. 06

23

Treinamento
Alterando cor de linha:
Definir tambm o Type Pools kkblo
*--- Type-pools -------------------------------------------------------TYPE-POOLS: kkblo.
QUANDO CRIAR A TABELA, INSERIR NA TABELA, OUTRO CAMPO COLINFO
DATA: BEGIN OF t_final OCCURS 0.
...
DATA: colinfo TYPE kkblo_t_specialcol,
END OF t_final.
No LAYOUT, inserir tambm a seguinte linha:
FORM alv_set_layout CHANGING es_alv_layout TYPE slis_layout_alv.
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

24

Treinamento
Alterando o PF-STATUS de um ALV:
Copia-se o PF-STATUS STANDARD ou STANDARD_FULLSCREEN do grupo de funes
KKBL para o PF-STATUS a ser utilizado no programa. Da em diante, altera-se de acordo com a
necessidade ...

Fig. 08

25

Treinamento
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

26

Treinamento
Lgica de ALV Mltiplo:
Chamada do ALV Mltiplo dentro do ALV Simples:
FORM alv_user_command USING i_ucomm LIKE sy-ucomm
i_selfield TYPE slis_selfield.
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'.
CALL TRANSACTION 'ZTES5'.
WHEN OTHERS.
ENDCASE.
ENDFORM.

" ALV_USER_COMMAND

27

Treinamento
Construo do ALV Mltiplo
Module-Pool
Criar o programa ZTES5, o qual conter 2 (dois) CONTAINERs. Cada CONTAINER conter a
exibio de um ALV.

Fig. 10

28

Treinamento
Container:
O CONTAINER nada mais do que o CUSTOM CONTROL.

Fig. 11

29

Treinamento
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.

30

Treinamento
INSERT LINES OF t_lfa1 INTO TABLE gt_lfa1.

* Se 1o CONTAINER for vazio


IF g_custom_container_kna1 IS INITIAL.
* Cria o objeto exportando o nome do CONTAINER
CREATE OBJECT g_custom_container_kna1
EXPORTING container_name = g_container_kna1.
* Cria o GRID com o nome do objeto CONTAINER gerado
CREATE OBJECT grid1
EXPORTING i_parent = g_custom_container_kna1.
* Gera o GRID exportando a estrutura ZKNA1 com os dados
* a serem exibidos na tab. GT_KNA1
CALL METHOD grid1->set_table_for_first_display
*
EXPORTING i_structure_name = 'KNA1'

* Criar uma ESTRUTURA(ZKNA1) com os campos da tabl GT_KNA1


EXPORTING i_structure_name = 'ZKNA1'
CHANGING it_outtab
= gt_kna1.
ENDIF.

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.

31

Treinamento
Estruturas ZKNA1 / ZLFA1:

Fig. 12

Fig. 13

32

Treinamento
PF-STATUS:

Fig. 14

33

Você também pode gostar