Anda di halaman 1dari 33

ABAP

Treinamento

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

Data : 18/09/17 CURSO DE ABAP/4 Pgina 2 de 33


TREINAMENTO

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.

Exemplos de ALV. Menu stander de


Menu Z de
funes
funes
Relatrio ALV (Fig 01).

Fig. 01

Data : 18/09/17 CURSO DE ABAP/4 Pgina 3 de 33


TREINAMENTO

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

Fig. 02

Data : 18/09/17 CURSO DE ABAP/4 Pgina 4 de 33


TREINAMENTO

Opo de grfico:

Fig. 03

** Esta opo no foi utilizada no exemplo

Data : 18/09/17 CURSO DE ABAP/4 Pgina 5 de 33


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

Data : 18/09/17 CURSO DE ABAP/4 Pgina 6 de 33


TREINAMENTO

2) Em forma de GRID
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

Fig. 05

Data : 18/09/17 CURSO DE ABAP/4 Pgina 7 de 33


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

Data : 18/09/17 CURSO DE ABAP/4 Pgina 8 de 33


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.

Data : 18/09/17 CURSO DE ABAP/4 Pgina 9 de 33


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

Data : 18/09/17 CURSO DE ABAP/4 Pgina 10 de 33


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.

Data : 18/09/17 CURSO DE ABAP/4 Pgina 11 de 33


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.

Data : 18/09/17 CURSO DE ABAP/4 Pgina 12 de 33


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:

Data : 18/09/17 CURSO DE ABAP/4 Pgina 13 de 33


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

Data : 18/09/17 CURSO DE ABAP/4 Pgina 14 de 33


TREINAMENTO

l_fieldcat-do_sum = 'X'.
APPEND l_fieldcat TO et_fieldcat.

Data : 18/09/17 CURSO DE ABAP/4 Pgina 15 de 33


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.

Data : 18/09/17 CURSO DE ABAP/4 Pgina 16 de 33


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.

Data : 18/09/17 CURSO DE ABAP/4 Pgina 17 de 33


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.

Data : 18/09/17 CURSO DE ABAP/4 Pgina 18 de 33


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.

Data : 18/09/17 CURSO DE ABAP/4 Pgina 19 de 33


TREINAMENTO

ENDCASE.

Data : 18/09/17 CURSO DE ABAP/4 Pgina 20 de 33


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.

Data : 18/09/17 CURSO DE ABAP/4 Pgina 21 de 33


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.

Data : 18/09/17 CURSO DE ABAP/4 Pgina 22 de 33


TREINAMENTO

cone

Fig. 06

Data : 18/09/17 CURSO DE ABAP/4 Pgina 23 de 33


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

Data : 18/09/17 CURSO DE ABAP/4 Pgina 24 de 33


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

Data : 18/09/17 CURSO DE ABAP/4 Pgina 25 de 33


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

Data : 18/09/17 CURSO DE ABAP/4 Pgina 26 de 33


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

Data : 18/09/17 CURSO DE ABAP/4 Pgina 27 de 33


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

Data : 18/09/17 CURSO DE ABAP/4 Pgina 28 de 33


TREINAMENTO

Container:

O CONTAINER nada mais do que o CUSTOM CONTROL.

Fig. 11

Data : 18/09/17 CURSO DE ABAP/4 Pgina 29 de 33


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.

Data : 18/09/17 CURSO DE ABAP/4 Pgina 30 de 33


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.

Data : 18/09/17 CURSO DE ABAP/4 Pgina 31 de 33


TREINAMENTO

Estruturas ZKNA1 / ZLFA1:

Fig. 12

Fig. 13

Data : 18/09/17 CURSO DE ABAP/4 Pgina 32 de 33


TREINAMENTO

PF-STATUS:

Fig. 14

Data : 18/09/17 CURSO DE ABAP/4 Pgina 33 de 33

Anda mungkin juga menyukai