bc415 - alv

39
SAP R/3 MÓDULO ABAP REPORT ALV

Upload: fjaimesilva

Post on 20-Dec-2015

109 views

Category:

Documents


6 download

DESCRIPTION

BC415 - ALV

TRANSCRIPT

Page 1: BC415 - ALV

SAP R/3

MÓDULO ABAP

REPORT ALV

Page 2: BC415 - ALV

Treinamento

Índice:

VISÃO GERAL:...................................................................................................................3

CRIAÇÃO DO REPORT ALV:.............................................................................................61) Em forma de LISTA..............................................................................................................................62) Em forma de GRID................................................................................................................................7

DECLARAÇÃO DE DADOS PARA ALV:...........................................................................8

VARIANTES.......................................................................................................................10Busca de Variantes previamente geradas:................................................................................................10Escolha de Variantes para execução do ALV:.........................................................................................10

INÍCIO LÓGICO DO PROGRAMA:...................................................................................11

PROCESSAMENTO DO ALV:..........................................................................................12Definição de CABEÇALHO:..................................................................................................................13Definição das COLUNAS A SEREM IMPRESSAS:.............................................................................13Definição de LAYOUT:..........................................................................................................................15Definição de EVENTOS:.........................................................................................................................15Definição de QUEBRA / SORT:.............................................................................................................16Definição de CALLBACK do programa.................................................................................................17Definição do ALV:..................................................................................................................................17

CRIAÇÃO DE FORMS:.....................................................................................................18FORM USER_COMMAND:...................................................................................................................18FORM TOP_OF_PAGE:.........................................................................................................................19FORM XEND_OF_LIST:.......................................................................................................................19

OPÇÕES GERAIS DO ALV:.............................................................................................20Ícones:......................................................................................................................................................20Alterando cor de linha:.............................................................................................................................22

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

ALV MÚLTIPLO:................................................................................................................24

LÓGICA DE ALV MÚLTIPLO:...........................................................................................25Chamada do ALV Múltiplo dentro do ALV Simples:.............................................................................25

CONSTRUÇÃO DO ALV MÚLTIPLO................................................................................26Module-Pool............................................................................................................................................26Container:.................................................................................................................................................27Codificação / Explicação:........................................................................................................................28Estruturas ZKNA1 / ZLFA1:...................................................................................................................30PF-STATUS:............................................................................................................................................31

2

Page 3: BC415 - ALV

Treinamento

Visão Geral:

ALV – Abap List View - Basicamente uma função Standard que pega a sua tabela interna de dados e transforma em um relatório. Existem algumas funcionalidades como gerar um arquivo Excel, gráficos, somatórias de campos, "links" para chamar uma outra transação, etc.. etc.. O ALV trabalha com as tabelas do type-pools slis.

Exemplos de ALV.

Relatório ALV (Fig 01).

Fig. 01

3

Menu stander de funções

Menu Z de funções

Page 4: BC415 - ALV

Treinamento

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

Fig. 02

4

Page 5: BC415 - ALV

Treinamento

Opção de gráfico:

Fig. 03

** Esta opção não foi utilizada no exemplo

5

Page 6: BC415 - ALV

Treinamento

Criação 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

6

Page 7: BC415 - ALV

Treinamento

2) Em forma de GRID CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

Fig. 05

7

Page 8: BC415 - ALV

Treinamento

Declaração de dados para ALV:

*Primeiramente, definiremos algumas constantes, variáveis, etc no nosso programa. Não esquecer de definir o type-pools SLIS!!

*Definição das tabelas. Essa são tabelas que carregamos as informações necessárias para passar pra função. São tabelas que armazenam o layout do seu relatório, a classificação, os campos, e o cabeçalho .

Exemplo:

*----------------------------------------------------------------------** DECLARAÇÃO DE VARIÁVEIS, CONSTANTES, TABELAS PARA ALV*----------------------------------------------------------------------** Variáveis/Tabelas para ALVTYPE-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 Ordenação ou Quebra h_sort_alv TYPE slis_sortinfo_alv, " header t_sort_alv TYPE slis_t_sortinfo_alv, " sem header* Definição da Variante gerada pelos usuários variante LIKE disvariant.

* Constantes p/ ALVCONSTANTS: c_display LIKE sy-ucomm VALUE 'DISPLAY', c_listheader_typ_headline TYPE slis_listheader-typ VALUE 'S'.

8

Page 9: BC415 - ALV

Treinamento

Definição de tabela(s) interna(s) para utilização no ALV:

*Vamos criar a nossa tabela interna. Essa tabela interna seria a ultima tabela (aquela que temos já todas as informações gravadas nela). *----------------------------------------------------------------------** DECLARAÇÃO DE TABELAS INTERNAS*----------------------------------------------------------------------** Tab. p/ Impressão em ALV principalDATA: 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/ Impressão 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/ Impressão 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.

9

Page 10: BC415 - ALV

Treinamento

VariantesBusca de Variantes previamente geradas:

INITIALIZATION. PERFORM alv_init.

FORM alv_init...* Esta função 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 execução do ALV:

*----------------------------------------------------------------------*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_varia.*----------------------------------------------------------------------* PERFORM alv_f4.

FORM alv_f4.

.

.* Com esta função escolhe-se a Variante para executar o ALV, caso * a função 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

Page 11: BC415 - ALV

Treinamento

Início Lógico do programa:

*----------------------------------------------------------------------** INÍCIO LÓGICO*----------------------------------------------------------------------*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

Page 12: BC415 - ALV

Treinamento

Processamento do ALV:

FORM alv.

* DEFINIÇÀO DO CABEÇALHO PERFORM: alv_build_header,* DEFINIÇÃO DAS COLUNAS A SEREM IMPRESSAS alv_build_fieldcat CHANGING t_alv_fieldcat,* DEFINIÇÃO DO LAYOUT alv_set_layout CHANGING s_alv_layout,* DEFINIÇÃO DE EVENTOS alv_build_eventtab CHANGING t_alv_events,* DEFINIÇÃO DE QUEBRAS definir_quebras_alv.

* set callback program* DEFINIÇÃO DE: CALLBACK DO PROGRAMA* sy-repid guarda o nome do programa em execução... 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

Page 13: BC415 - ALV

Treinamento

Definição de CABEÇALHO:* DEFINIÇÀO DO CABEÇALHO 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 = 'Usuário : '. ls_listheader-info = sy-uname. APPEND ls_listheader TO t_alv_listheader.

ENDFORM. " ALV_BUILD_HEADER

Definição das COLUNAS A SEREM IMPRESSAS:

* DEFINIÇÃO 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

Page 14: BC415 - ALV

Treinamento

Pode-se atribuir determinado campo para chamar uma função quando o usuário clicar duas vezes em cima dele. No exemplo, estamos utilizando isso no campo BELNR que executa a transação FB03. Para isso, ativar o campo hotspot da tabela et_fieldcat.

*NÚM. 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 = 'Núm. Doc.'. APPEND l_fieldcat TO et_fieldcat.

Outra opção é utilizarmos a edição 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 somatória. 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

Page 15: BC415 - ALV

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

15

Page 16: BC415 - ALV

Treinamento

Definição de LAYOUT:

* DEFINIÇÃO 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.* DEFINIÇÃO DE ÍTEM COMO DEFAULT (JÁ USEI COM 'X' E VAZIO E NÃO TIVE* PROBLEMAS....* es_alv_layout-default_item = 'X'.* DEFINIÇÃO 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.* DEFINIÇÃO IDEAL DA LARGURA DAS COLUNAS es_alv_layout-colwidth_optimize = 'X'.

ENDFORM. " ALV_SET_LAYOUT

Na determinação do Layout, podemos também definir que campos que são numéricos devem ser totalizados Exemplo: es_alv_layout–totals_text = 'Total Final'. “Exibir a linha do total es_alv_layout-numc_sum = 'X'.

Definição de EVENTOS:

* DEFINIÇÃO 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

Page 17: BC415 - ALV

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 PERFORM’s somente são 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

Definição de QUEBRA / SORT:

* DEFINIÇÃO 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, posição 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 totalização 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 opção de mostrar o total de uma coluna ou a classificação em ordem ascendente ou descendente de uma coluna.

17

Page 18: BC415 - ALV

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’. “Classificação em ordem ascendente. h_sort_alv -subtot = ‘X’.. “Mostrar Sub-Total APPEND h_sort_alv TO t_sort_alv.

Definição de CALLBACK do programa.

* set callback program* DEFINIÇÃO 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 execução. l_repid = sy-repid.

Definição do ALV:

Esta é a função principal do ALV que é executada após 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

Page 19: BC415 - ALV

Treinamento

Criação de FORMS:

Após ter executado a função, mostrará o relatório assim como na fig. 01.Existem alguns forms que serão utilizados. Basta apenas defini-los dentro do seu programa que a função ALV o encontra mas tem que definir utilizando a mesma estrutura logo em baixo senão vai ocorrer Dumping por diferença 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 transação do link, caso o usuário clique duas vezes em cima do campo, ele chamara uma transação que você definiu.Este campo i_selfield-tabindex possui o numero da linha que o usuário 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 Síntese do Documento chamando-se a transação 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 CARACTERÍSTICAS (ID parâmetro) 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) opções:* 1) Se a transação FB03 executasse com um parâmetro apenas:* SET PARAMETER ID 'BLN' FIELD i_selfield-value.* 2) Se a transação FB03 executasse com dois parâmetro (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 também, o tratamento de algum botão 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

Page 20: BC415 - ALV

Treinamento ENDCASE.

20

Page 21: BC415 - ALV

Treinamento

FORM TOP_OF_PAGE:

*---------------------------------------------------------------------** FORM TOP_OF_PAGE **---------------------------------------------------------------------**---------------------------------------------------------------------*FORM top_of_page.

* Serve para imprimir o cabeçalho do ALV.Utiliza-se a função REUSE_ALV_COMMENTARY_WRITE para imprimir os dadosdentro do ALV. Para isso, temos que preencher a tabela de cabeçalho definindo o tipo SLIS_LISTHEADER, que já foi realizado no PERFORM ALV_BUILD_HEADER. Neste ponto define-se o LOGO também.

* DEFINIÇÀO DO CABEÇALHO 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 transação 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 'Página:', 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

Page 22: BC415 - ALV

Treinamento

Opções 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/ Impressão em ALV principalDATA: 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 impressão, segue exemplo:

* SELECIONA DADOS PARA IMPRESSÃO 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 próximo 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

Page 23: BC415 - ALV

Treinamento

Fig. 06

23

Ícone

Page 24: BC415 - ALV

Treinamento

Alterando cor de linha:

Definir também 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 também 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'.

Fig. 07

24

Nova COR de linha

Page 25: BC415 - ALV

TreinamentoAlterando o PF-STATUS de um ALV:

Copia-se o PF-STATUS STANDARD ou STANDARD_FULLSCREEN do grupo de funções KKBL para o PF-STATUS a ser utilizado no programa. Daí em diante, altera-se de acordo com a necessidade ...

Fig. 08

25

Page 26: BC415 - ALV

Treinamento

ALV Múltiplo:

Há a possibilidade de ter uma tela com vários ALV’s. Abaixo mostra-se um exemplo com 2 (dois) ALV’s numa mesma tela.

O processo para tal execução é um pouco diferente do ALV estudado acima:

Fig. 09

26

ALV com dados de Fornecedores

ALV com dados de Clientes

Page 27: BC415 - ALV

Treinamento

Lógica de ALV Múltiplo:

Chamada do ALV Múltiplo 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 conteúdo das tab. int. para serem* utilizadas no programa de ALV Múltiplo... 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

Page 28: BC415 - ALV

Treinamento

Construção do ALV MúltiploModule-Pool

Criar o programa ZTES5, o qual conterá 2 (dois) CONTAINER’s. Cada CONTAINER conterá a exibição de um ALV.

Fig. 10

28

Page 29: BC415 - ALV

Treinamento

Container:

O CONTAINER é nada mais do que o ‘CUSTOM CONTROL’.

Fig. 11

29

Page 30: BC415 - ALV

Treinamento

Codificação / Explicação:

PROGRAM test.

TYPES:* Tab. p/ Impressão 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/ Impressão 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,* Declaração de GT_KNA1 e GT_LFA1 para serem exibidas nos * CONTAINER’s através da chamada do Método: 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, são os mesmos nomes dados ao CONTAINER’s 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 CONTAINER’s... IMPORT t_kna1 FROM MEMORY ID 'ZTES1_CLI'. IMPORT t_lfa1 FROM MEMORY ID 'ZTES1_FOR'.

* Transporta os valores das tab. int’s. para dentro das estruturas que serão* utilizadas nos métodos que exportarão os valores para os CONTAINER’s INSERT LINES OF t_kna1 INTO TABLE gt_kna1.

30

Page 31: BC415 - ALV

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

Page 32: BC415 - ALV

Treinamento

Estruturas ZKNA1 / ZLFA1:

Fig. 12

Fig. 13

32

Page 33: BC415 - ALV

Treinamento

PF-STATUS:

Fig. 14

33