Sei sulla pagina 1di 101

Volume

GUIA DE PROGRAMAÇÃO
Desenvolvimento de aplicações ABAP

Guia de Programação ALV


Outros Tópicos
( ABAP List Viwer )
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

DESENVOLVIMENTO DE APLICAÇÕES ABAP

Guia de Programação ALV


Outros Tópicos

ã Flavio Ricardo de Almeida


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

Autor: Flavio Ricardo de Almeida 1


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Índice
Capítulo 1 Introdução ............................................................................. 3
Capítulo 2 Lista Hierárquica ALV ......................................................... 4
Capítulo 3 Implementando Recursos a Lista Hierárquica .................11
Capítulo 4 Lista de Blocos Simples ........................................................16
Capítulo 5 Lista de Bloco Hierárquico .................................................29
Capítulo 6 Caixa de Diálogo ALV (POPUP) ......................................34
Capítulo 7 Lista ALV GRID ..................................................................39
Capítulo 8 Carregando uma Figura ........................................................48
Capítulo 9 Incluir Logotipo a Lista ALV .............................................54

Considerações Gerais ( Copyright e Trademarks )...........56


Apêndice A ( Listagem de Programas Exemplos )...........57

Autor: Flavio Ricardo de Almeida 2


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
Capítulo
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Introdução
Apresentação de outros tópicos relacionados a ferramenta ABAP
LIST VIEWER conhecida simplesmente por ALV.

C
omo vimos no volume 1 desta obra, a ferramenta ALV ( ABAP LIST
VIEWER ) permite criar listas de uma maneira fácil e prática. Consiste
basicamente em utilizar funções genéricas pertencentes a classe de
desenvolvimento SLIS.

Neste volume veremos como funcionam as listas dos tipos hierárquicas, popup,
blocos e Grid.

Existe a opção de utilizar objetos para a construção das listas mas não serão
abordadas neste manual, para isto consulte a ajuda do sistema no seguinte tópico: SAP
Library " Basis Components " Basis Service / Communications Interfaces (BC-SRV)
"BC - ALV Grid Control.

Nos próximos capítulos vamos apresentar a ferramenta de maneira prática com


exemplos para evitar a leitura pesada regularmente utilizada em manuais, mas para isto
será exigido do leitor prévio conhecimento da linguagem de programação ABAP, e
também conhecimentos básicos sobre ALV, que podem ser obtidos através do
volume 1 desta obra.

Os exemplos deste manual constam no Apêndice A e também podem ser obtidos no


site www.almeidafr.hpg.ig.com.br, na seção Tecnologia -> ABAP -> Manuais, assim
como o volume 1..

Autor: Flavio Ricardo de Almeida 3


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
Capítulo
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Lista Hierárquica ALV


Criar uma lista hierárquica utilizando os recursos do ALV.

N
este capítulo vamos criar uma lista hierárquica, mostrando a dependência
de uma informação em relação a outra. Neste caso utilizaremos como
exemplo informações de ordens de vendas ( Cabeçalho e Itens ).

No R/3, através da transação SE38, ou SE80 àqueles que preferem uma visualização
dos processos separadamente, vamos criar nosso primeiro programa através da
primeira transação mencionada. Iremos chamá-lo de ZFRA0023_14.

1 – Declarar o grupo de tipos SLIS;


*$*$ Type pools --------------------------------------------------------
TYPE-POOLS: slis.

2 – Declarar tipos (estrturura) das tabelas internas que irão conter os dados a serem
listados, (“Cabeçalho da Ordem de Venda” e “Itens da Ordem de Venda”);
*$*$ Tipos -------------------------------------------------------------
TYPES: BEGIN OF we_cabecalho,
vbeln LIKE vbak-vbeln, " Nro da ordem de venda
erdat LIKE vbak-erdat, " Data de criação
ernam LIKE vbak-ernam, " Criado por
audat LIKE vbak-audat, " Data da ordem
auart LIKE vbak-auart, " Tipo de ordem
netwr LIKE vbak-netwr, " Valor líq. da ordem
vkorg LIKE vbak-vkorg, " Org. de vendas
vtweg LIKE vbak-vtweg, " Canal de distribuição
spart LIKE vbak-spart, " Setor de atividade
vkgrp LIKE vbak-vkgrp, " Grupo de vendedores
vkbur LIKE vbak-vkbur, " Escritório de vendas
END OF we_cabecalho.

TYPES: BEGIN OF we_item,


vbeln LIKE vbap-vbeln, " Nro da ordem de venda
posnr LIKE vbap-posnr, " Nro do ítem da ordem de venda
matnr LIKE vbap-matnr, " Código do material
arktx LIKE vbap-arktx, " Desc.material-Entrada na ordem
kwmeng LIKE vbap-kwmeng, " Quantidade da ordem
netwr LIKE vbap-netwr, " Valor líq. do ítem
END OF we_item.

3 – Declarar as tabelas internas que irão receber o conteúdo das ordens;

Autor: Flavio Ricardo de Almeida 4


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

*$*$ Tabelas Internas --------------------------------------------------


DATA: wt_cabecalho TYPE STANDARD TABLE OF we_cabecalho
WITH HEADER LINE,
wt_item TYPE STANDARD TABLE OF we_item
WITH HEADER LINE.

4 – Declarar estruturas que serão utilizadas no programa;


*$*$ Estruturas --------------------------------------------------------
* Informações sobre o link entre as tabelas ( JOIN )
DATA: wf_keyinfo TYPE slis_keyinfo_alv.

5 – Declarar variáveis que serão utilizadas no programa;


*$*$ Variáveis ---------------------------------------------------------
DATA: wv_repid LIKE sy-repid. " Nome do programa principal

DATA: wv_tabname_header TYPE slis_tabname, " Nome da tabela de Cabec.


wv_tabname_item TYPE slis_tabname. " Nome da tabela de Ítems

6 – Criar uma tela de parâmetros simples apenas para melhorar a performance da


busca de informações:
*$*$ Tela de Seleção ---------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-902.
SELECT-OPTIONS: s_vbeln FOR wt_saida-vbeln.
SELECTION-SCREEN END OF BLOCK b1.

7 – Criar o evento INITIALIZATION para inicializar algumas variáveis:


*$*$ Inicialização -----------------------------------------------------
INITIALIZATION.
PERFORM z_inicializacao.

7.1 – Codificação da subrotina Z_INICIALIZACAO;


*$*$ Sub-rotinas -------------------------------------------------------
*&---------------------------------------------------------------------*
*& Form Z_INICIALIZACAO
*&---------------------------------------------------------------------*
* Inicialização de variáveis
*----------------------------------------------------------------------*
FORM z_inicializacao.

* Nome do programa
wv_repid = sy-repid.
* Definição das tabelas - Header e Item
wv_tabname_header = 'WT_CABECALHO'.
wv_tabname_item = 'WT_ITEM'.
* Define informações da chave
CLEAR wf_keyinfo.
wf_keyinfo-header01 = 'VBELN'.
wf_keyinfo-item01 = 'VBELN'.

ENDFORM. " Z_INICIALIZACAO

Autor: Flavio Ricardo de Almeida 5


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

8 – Implementar a rotina principal, e criar uma subrotina para obter as informações da


base de dados, aqui a chamaremos de Z_OBTER_DADOS. Criaremos também uma
outra subrotina chamada Z_SAPGUI_PROGRESS_INDICATOR para interagir
com a interface do R/3 informando ao usuário os processos que o programa está
executando:
*$*$ Rotina Principal --------------------------------------------------
START-OF-SELECTION.
PERFORM z_obter_dados.

END-OF-SELECTION.

...

*&---------------------------------------------------------------------*
*& Form Z_OBTER_DADOS
*&---------------------------------------------------------------------*
* Obter informações para lista
*----------------------------------------------------------------------*
FORM z_obter_dados.
* Mensagem
PERFORM z_sapgui_progress_indicator
USING 'Selecionando dados. Aguarde...'.
* Obter informações dos cabeçalho
SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp
vkbur
INTO TABLE wt_cabecalho
FROM vbak
WHERE vbeln IN s_vbeln.
* Verificar se alguma informação foi encontrada
IF sy-subrc EQ 0.
* Obter informações dos ítens
SELECT vbeln posnr matnr arktx kwmeng netwr
INTO TABLE wt_item
FROM vbap
FOR ALL ENTRIES IN wt_cabecalho
WHERE vbeln EQ wt_cabecalho-vbeln.
ENDIF.
* Ordenar tabelas
SORT: wt_cabecalho, wt_item.

ENDFORM. " Z_OBTER_DADOS

*&---------------------------------------------------------------------*
*& Form Z_SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* Interagir com o front-end - Enviar mensagens
*----------------------------------------------------------------------*
* --> PV_TEXT - Mensagem
*----------------------------------------------------------------------*
FORM z_sapgui_progress_indicator USING value(pv_text).

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'


EXPORTING
* PERCENTAGE = 0
text = pv_text.

ENDFORM. " Z_SAPGUI_PROGRESS_INDICATOR

9 – Criar tabela interna que conterá as informações das características dos campos da
lista;
* Tab. com informações sobre as características dos campos

Autor: Flavio Ricardo de Almeida 6


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

10 – Criar chamada da rotina de composição dos campos;


* Indicar campos para exibição na lista
PERFORM z_fieldcat_init USING wt_fieldcat[].

10.1 – Implementação do código da rotina de características de campos;


*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_INIT *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
CLEAR pt_fieldcat[].
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.
* Data de Criação
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERDAT'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERNAM'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Tipo de Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'AUART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Organização de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKORG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VTWEG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.

Autor: Flavio Ricardo de Almeida 7


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* Setor de atividade
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'SPART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Grupo de Vendedores
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKGRP'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Escritório de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKBUR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Ítem da ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'POSNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do material
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'MATNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição do material na Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ARKTX'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Quantidade do ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KWMENG'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líquido ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.

ENDFORM. " FORM Z_FIELDCAT_INIT

11 – Agora vamos criar a rotina de impressão da lista, e a chamaremos de


Z_LIST_DISPLAY:
*&---------------------------------------------------------------------*
*& Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
* Listar imformações
*----------------------------------------------------------------------*
FORM z_list_display.
* Mensagem
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
*

Autor: Flavio Ricardo de Almeida 8


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'


EXPORTING
i_callback_program = wv_repid
it_fieldcat = wt_fieldcat[]
i_save = 'A'
i_tabname_header = wv_tabname_header
i_tabname_item = wv_tabname_item
is_keyinfo = wf_keyinfo
TABLES
t_outtab_header = wt_cabecalho
t_outtab_item = wt_item
EXCEPTIONS
program_error = 1
OTHERS = 2.
* Verificar processamento da função
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDFORM. " Z_LIST_DISPLAY

Veja que passamos como parâmteros:

i_callback_program = wv_repid = Nome do programa para o qual a função deve


retornar o controle após a execução;

it_fieldcat = wt_fieldcat[ ] = Nome da tabela que conterá as informações das


características dos campos da lista;

i_save = ‘A’ = Permitir salvar variante de exibição;

i_tabname_header = wv_tabname_header = Nome da tabela que contem o


conteúdo das informações de header;

i_tabname_item = wv_tabname_item = Nome da tabela que contem o conteúdo das


informações de ítens;

is_keyinfo = wf_keyinfo = Estrutura com informações para o relacionamento entre


as tabelas de cabeçalho e ítens;

t_outtab_header = wt_cabecalho = Tabela com conteúdo das informações de


cabeçalho;

t_outtab_item = wt_item = Tabela com conteúdo das informações de ítens;

12 – Resultado

Autor: Flavio Ricardo de Almeida 9


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

FIGURA 2.1 Lista ALV Hierárquica

Agora com a lista pronta é possível mudar o layout do mesmo ocultando colunas,
sumarizando colunas de valor, ordenando outras, etc... e gravar os layouts para
visualizações futuras, assim como para a lista simples vista no volume 1, para isto utilize
a barra de status que contem os botões para acionar estas funcionalidades.

FIGURA 2.2 Barra de status com funcionalidades para lista.

Estes recursos foram detalhados no volume 1, portanto não faremos grandes


explicações.

Autor: Flavio Ricardo de Almeida 10


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
Capítulo
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Implementando recursos
a lista hierárquica
Implementar recusros à lista hierárquica para deixá-la mais
apresentável.

N
o capítulo anterior aprendemos a criar uma lista hierárquica básica, porém
todos os recursos demonstrados no volume 1 podem ser implementados
nesta lista.

Neste capítulo vamos implementar algumas delas que tenham uma mudança
significativa com relação a que foram implementadas para a lista simples.

Vamos copiar o programa ZFRA0023_14 e chamá-lo de ZFRA0023_15 faremos


algumas mudanças a seguir descritas.

1 – Vamos criar eventos e trabalhar com os mesmos;

1.1 – Declarar tabela interna que conterá os eventos;


* Tab. de eventos
DATA: wt_events TYPE slis_t_event.

1.2 – Chamar rotina para obter os eventos para lista hierárquica;


* Eventos que podem ser acionados na lista
PERFORM z_eventtab_build USING wt_events[].

1.3 – Codificação para rotina de obtenção de eventos;


*&---------------------------------------------------------------------*
*& Form Z_EVENTTAB_BUILD
*&---------------------------------------------------------------------*
* Definir eventos associados a lista *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventtab_build USING pt_events TYPE slis_t_event.

* Variáveis
DATA: lf_event TYPE slis_alv_event.

Autor: Flavio Ricardo de Almeida 11


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* Obter todos os eventos


CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 1 " 1 = Lista Hierárquica
IMPORTING
et_events = pt_events.
* Verificar se evento foi encontrado
LOOP AT pt_events INTO lf_event.
CASE lf_event-name.
WHEN slis_ev_user_command.
MOVE 'Z_USER_COMMAND' TO lf_event-form.
WHEN slis_ev_item_data_expand.
* move 'Z_ITEM_DATA_EXPAND' to lf_event-form.
WHEN slis_ev_reprep_sel_modify.
* move 'Z_REPREP_SEL_MODIFY' to lf_event-form.
WHEN slis_ev_caller_exit_at_start.
* MOVE 'Z_CALLER_EXIT' TO lf_event-form.
WHEN slis_ev_top_of_page.
MOVE 'Z_TOP_OF_PAGE' TO lf_event-form.
WHEN slis_ev_foreign_top_of_page.
* move 'Z_FOREIGN_TOP_OF_PAGE' to lf_event-form.
WHEN slis_ev_foreign_end_of_page.
* move 'Z_FOREIGN_END_OF_PAGE' to lf_event-form.
WHEN slis_ev_pf_status_set.
* MOVE 'Z_PF_STATUS_SET' TO lf_event-form.
WHEN slis_ev_list_modify.
* MOVE 'Z_LIST_MODIFY' TO lf_event-form.
WHEN slis_ev_top_of_list.
* MOVE 'Z_TOP_OF_LIST' TO lf_event-form.
WHEN slis_ev_end_of_page.
* MOVE 'Z_END_OF_PAGE' TO lf_event-form.
WHEN slis_ev_end_of_list.
* MOVE 'Z_END_OF_LIST' TO lf_event-form.
ENDCASE.
MODIFY pt_events FROM lf_event.
ENDLOOP.

ENDFORM. " Z_EVENTTAB_BUILD

Veja que neste exemplo houve uma mudança em relação a lista simples no conteúdo
do parâmetro i_list_type.

i_list_type = 1 = Tipo de lista para qual eventos devem ser obtidos;

Nem todos os eventos disponibilizados para a lista simples estão disponíveis para a
lista hierárquica porém podemos trabalhar com os principais.

Vamos utilizar apenas os eventos de cabeçalho de página (TOP_OF_PAGE), ações


do usuário (USER_COMMAND).

1.4 – Implementando o evento de cabeçalho, para isto vamos implementar a rotina


Z_TOP_OF_PAGE;
*----------------------------------------------------------------------*
* FORM Z_TOP_OF_PAGE *
*----------------------------------------------------------------------*
* Evento de cabeçalho *
*----------------------------------------------------------------------*
FORM z_top_of_page. "#EC CALLED

WRITE: / 'Relatório:', sy-repid,

Autor: Flavio Ricardo de Almeida 12


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

/12 sy-title.

ENDFORM.

Cabeçalho apenas ilustrativo, é claro que você pode melhorá-lo colocando o nome da
empresa, data e hora de execução, número de páginas, etc...

1.5 – Implementando o evento de ações do usuário, para isto vamos implementar a


rotina Z_USER_COMMAND;
*----------------------------------------------------------------------*
* FORM Z_USER_COMMAND *
*----------------------------------------------------------------------*
* Ações do usuário *
*----------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm LIKE sy-ucomm
pf_selfield TYPE slis_selfield. "#EC CALLED
*
CASE pv_ucomm.
* Ação de Click duplo '&IC1'
WHEN '&IC1'.
* Verificar campo selecionado
CASE pf_selfield-sel_tab_field.
WHEN 'WT_CABECALHO-VBELN'.
* Posicionar no registro selecionado
READ TABLE wt_cabecalho INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'AUN' FIELD wt_cabecalho-vbeln.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.

ENDFORM.

1.6 – Para dar um toque especial vamos fazer com que o campo do número da
ordem (VBELN) da tabela de cabeçalho (WT_CABECALHO), fique com um
indicador de nagevação (hotspot), para isto adicione a linha abaixo para o campo
na rotina z_fieldcat_init;
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
lf_fieldcat-hotspot = 'X'.
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

Veja que as implementações são semelhantes a da lista simples.

2 – Alterações nos parâmetros da função;


*&---------------------------------------------------------------------*
*& Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
* Listar imformações
*----------------------------------------------------------------------*
form z_list_display.
* Mensagem

Autor: Flavio Ricardo de Almeida 13


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

perform z_sapgui_progress_indicator
using 'Estruturando a lista. Aguarde...'.
*
call function 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
exporting
i_callback_program = wv_repid
it_fieldcat = wt_fieldcat[]
i_save = 'A'
i_tabname_header = wv_tabname_header
i_tabname_item = wv_tabname_item
is_keyinfo = wf_keyinfo
it_events = wt_events[]
tables
t_outtab_header = wt_cabecalho
t_outtab_item = wt_item
exceptions
program_error = 1
others = 2.
* Verificar processamento da função
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.

endform. " Z_LIST_DISPLAY

3 – Resultado;

FIGURA 3.1 Lista ALV Hierárquica – Com recursos implementados por eventos

Este capítulo teve a intenssão de mostrar ao leitor que tudo que criamos para lista
simples, como CHECKBOX, ÍCONES, mudança de cores, etc, podem ser
implementadas para a lista hierárquica.

Autor: Flavio Ricardo de Almeida 14


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Caso tenha dúvidas na implementação destes processos consulte o volume 1.

Autor: Flavio Ricardo de Almeida 15


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
Capítulo
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Lista de Blocos Simples


Lista de blocos simples separados em blocos independentes podendo
ter layouts diferentes.

N
este capítulo veremos como criar várias listas simples ALVs com layouts
variados em um mesmo programa. Este tipo de lista pode ser útil quando
necessário mostrar informações diferentes.

Vamos criar o programa ZFRA0023_16 e implementaremos as funcionalidades.

1 – Como nas demais vamos declarar a o grupo de tipo SLIS;


*$*$ Type pools --------------------------------------------------------
TYPE-POOLS: slis.

2 – Declarar tipos das tabelas que receberão o conteúdo das informações;


*$*$ Tipos -------------------------------------------------------------
TYPES: BEGIN OF we_cliente,
kunnr LIKE kna1-kunnr, " Código do cliente
name1 LIKE kna1-name1, " Descrição
stras LIKE kna1-stras, " Endereço
regio LIKE kna1-regio, " Estado
land1 LIKE kna1-land1, " País
END OF we_cliente.

TYPES: BEGIN OF we_cabecalho,


vbeln LIKE vbak-vbeln, " Nro da ordem de venda
erdat LIKE vbak-erdat, " Data de criação
ernam LIKE vbak-ernam, " Criado por
audat LIKE vbak-audat, " Data da ordem
auart LIKE vbak-auart, " Tipo de ordem
netwr LIKE vbak-netwr, " Valor líq. da ordem
vkorg LIKE vbak-vkorg, " Org. de vendas
vtweg LIKE vbak-vtweg, " Canal de distribuição
spart LIKE vbak-spart, " Setor de atividade
vkgrp LIKE vbak-vkgrp, " Grupo de vendedores
vkbur LIKE vbak-vkbur, " Escritório de vendas
kunnr LIKE vbak-kunnr, " Código do cliente
END OF we_cabecalho.

TYPES: BEGIN OF we_item,


vbeln LIKE vbap-vbeln, " Nro da ordem de venda
posnr LIKE vbap-posnr, " Nro do ítem da ordem de venda
matnr LIKE vbap-matnr, " Código do material
arktx LIKE vbap-arktx, " Desc.material-Entrada na ordem
kwmeng LIKE vbap-kwmeng, " Quantidade da ordem

Autor: Flavio Ricardo de Almeida 16


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

netwr LIKE vbap-netwr, " Valor líq. do ítem


END OF we_item.

3 – Declarar tabelas internas;


*$*$ Tabelas Internas --------------------------------------------------
DATA: wt_cliente TYPE STANDARD TABLE OF we_cliente
WITH HEADER LINE,
wt_cabecalho TYPE STANDARD TABLE OF we_cabecalho
WITH HEADER LINE,
wt_item TYPE STANDARD TABLE OF we_item
WITH HEADER LINE.

4 – Tela de seleção;
*$*$ Tela de Seleção ---------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
SELECT-OPTIONS: s_vbeln FOR wt_cabecalho-vbeln.
SELECTION-SCREEN END OF BLOCK b1.

5 – Implementar rotina principal;


*$*$ Rotina Principal --------------------------------------------------
START-OF-SELECTION.
PERFORM z_obter_dados.

5.1 – Codificação da rotina de obtenção de informações;


*&---------------------------------------------------------------------*
*& Form Z_OBTER_DADOS
*&---------------------------------------------------------------------*
* Obter informações para lista
*----------------------------------------------------------------------*
FORM z_obter_dados.
* Mensagem
PERFORM z_sapgui_progress_indicator
USING 'Selecionando dados. Aguarde...'.
* Obter informações dos cabeçalho
SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp
vkbur kunnr
INTO TABLE wt_cabecalho
FROM vbak
WHERE vbeln IN s_vbeln.
* Verificar se alguma informação foi encontrada
IF sy-subrc EQ 0.
* Obter informações dos ítens
SELECT vbeln posnr matnr arktx kwmeng netwr
INTO TABLE wt_item
FROM vbap
FOR ALL ENTRIES IN wt_cabecalho
WHERE vbeln EQ wt_cabecalho-vbeln.
* Obter clientes
SELECT DISTINCT kunnr name1 stras regio land1
INTO TABLE wt_cliente
FROM kna1
FOR ALL ENTRIES IN wt_cabecalho
WHERE kunnr EQ wt_cabecalho-kunnr.
ENDIF.
* Ordenar tabelas

Autor: Flavio Ricardo de Almeida 17


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

SORT: wt_cliente, wt_cabecalho, wt_item.

ENDFORM. " Z_OBTER_DADOS

5.2 – Codificação da rotina de mensagem;


*&---------------------------------------------------------------------*
*& Form Z_SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* Interagir com o front-end - Enviar mensagens
*----------------------------------------------------------------------*
* --> PV_TEXT - Mensagem
*----------------------------------------------------------------------*
FORM z_sapgui_progress_indicator USING value(pv_text).

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'


EXPORTING
* PERCENTAGE = 0
text = pv_text.

ENDFORM. " Z_SAPGUI_PROGRESS_INDICATOR

Até aqui temos uma implementação normal para qualquer programa ABAP. A partir
deste ponto começaremos a implementar as funcionalidades ALV.

6 – Determinar eventos para os blocos;

Vamos criar apenas três blocos os quais chamaremos de clientes, cabeçalho e item;

6.1 – Declarar tabelas internas de eventos para cada um dos blocos;


* Tab. de eventos
DATA: wt_eventos_cliente TYPE slis_t_event,
wt_eventos_cabecalho TYPE slis_t_event,
wt_eventos_item TYPE slis_t_event.

6.2 – Chamar rotinas para atribuir eventos aos blocos;


* Determinar eventos para cada bloco
PERFORM z_eventos_clientes USING wt_eventos_cliente[].
PERFORM z_eventos_cabecalho USING wt_eventos_cabecalho[].
PERFORM z_eventos_item USING wt_eventos_item[].

6.2.1 – Implementar cada uma das rotinas citadas no item anterior;


*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_CLIENTES
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de clientes *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_clientes USING pt_events TYPE slis_t_event.

* Variáveis
DATA: lf_event TYPE slis_alv_event.

Autor: Flavio Ricardo de Almeida 18


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* Obter todos os eventos


CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 2 " 2 = Lista Bloco Simples
IMPORTING
et_events = pt_events.
* Verificar se evento foi encontrado
LOOP AT pt_events INTO lf_event.
CASE lf_event-name.
WHEN slis_ev_top_of_page.
* move 'Z_TOP_OF_PAGE_CLI' to lf_event-form.
WHEN slis_ev_top_of_coverpage.
* move 'Z_TOP_OF_COVERPAGE_CLI' to lf_event-form.
WHEN slis_ev_end_of_coverpage.
* move 'Z_END_OF_COVERPAGE_CLI' to lf_event-form.
WHEN slis_ev_foreign_top_of_page.
* move 'Z_FOREIGN_TOP_OF_PAGE_CLI' to lf_event-form.
WHEN slis_ev_foreign_end_of_page.
* move 'Z_FOREIGN_END_OF_PAGE_CLI' to lf_event-form.
WHEN slis_ev_list_modify.
* MOVE 'Z_LIST_MODIFY_CLI' TO lf_event-form.
WHEN slis_ev_top_of_list.
MOVE 'Z_TOP_OF_LIST_CLI' TO lf_event-form.
WHEN slis_ev_end_of_page.
* move 'Z_END_OF_PAGE_CLI' to lf_event-form.
WHEN slis_ev_end_of_list.
* move 'Z_END_OF_LIST_CLI' to lf_event-form.
WHEN slis_ev_after_line_output.
* MOVE 'Z_AFTER_LINE_OUTPUT_CLI' TO lf_event-form.
WHEN slis_ev_before_line_output.
* MOVE 'Z_BEFORE_LINE_OUTPUT_CLI' TO lf_event-form.
ENDCASE.
MODIFY pt_events FROM lf_event.
ENDLOOP.

ENDFORM. " Z_EVENTOS_CLIENTES

*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_CABECALHO
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de cabeçalho das ordens *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_cabecalho USING pt_events TYPE slis_t_event.

* Variáveis
DATA: lf_event TYPE slis_alv_event.

* Obter todos os eventos


CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 2 " 2 = Lista Bloco Simples
IMPORTING
et_events = pt_events.
* Verificar se evento foi encontrado
LOOP AT pt_events INTO lf_event.
CASE lf_event-name.
WHEN slis_ev_top_of_page.
* move 'Z_TOP_OF_PAGE_CABEC' to lf_event-form.
WHEN slis_ev_top_of_coverpage.
* move 'Z_TOP_OF_COVERPAGE_CABEC' to lf_event-form.
WHEN slis_ev_end_of_coverpage.
* move 'Z_END_OF_COVERPAGE_CABEC' to lf_event-form.
WHEN slis_ev_foreign_top_of_page.
* move 'Z_FOREIGN_TOP_OF_PAGE_CABEC' to lf_event-form.
WHEN slis_ev_foreign_end_of_page.
* move 'Z_FOREIGN_END_OF_PAGE_CABEC' to lf_event-form.

Autor: Flavio Ricardo de Almeida 19


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

WHEN slis_ev_list_modify.
MOVE 'Z_TOP_OF_LIST_CABEC' TO lf_event-form.
WHEN slis_ev_top_of_list.
* move 'Z_TOP_OF_LIST_CABEC' to lf_event-form.
WHEN slis_ev_end_of_page.
* move 'Z_END_OF_PAGE_CABEC' to lf_event-form.
WHEN slis_ev_end_of_list.
* move 'Z_END_OF_LIST_CABEC' to lf_event-form.
WHEN slis_ev_after_line_output.
* MOVE 'Z_AFTER_LINE_OUTPUT_CABEC' TO lf_event-form.
WHEN slis_ev_before_line_output.
* MOVE 'Z_BEFORE_LINE_OUTPUT_CABEC' TO lf_event-form.
ENDCASE.
MODIFY pt_events FROM lf_event.
ENDLOOP.

ENDFORM. " Z_EVENTOS_CABECALHO

*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_ITEM
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de ítens das ordens *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_ITEM USING pt_events TYPE slis_t_event.

* Variáveis
DATA: lf_event TYPE slis_alv_event.

* Obter todos os eventos


CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 2 " 2 = Lista Bloco Simples
IMPORTING
et_events = pt_events.
* Verificar se evento foi encontrado
LOOP AT pt_events INTO lf_event.
CASE lf_event-name.
WHEN slis_ev_top_of_page.
* move 'Z_TOP_OF_PAGE_ITEM' to lf_event-form.
WHEN slis_ev_top_of_coverpage.
* move 'Z_TOP_OF_COVERPAGE_ITEM' to lf_event-form.
WHEN slis_ev_end_of_coverpage.
* move 'Z_END_OF_COVERPAGE_ITEM' to lf_event-form.
WHEN slis_ev_foreign_top_of_page.
* move 'Z_FOREIGN_TOP_OF_PAGE_ITEM' to lf_event-form.
WHEN slis_ev_foreign_end_of_page.
* move 'Z_FOREIGN_END_OF_PAGE_ITEM' to lf_event-form.
WHEN slis_ev_list_modify.
* MOVE 'Z_LIST_MODIFY_ITEM' TO lf_event-form.
WHEN slis_ev_top_of_list.
MOVE 'Z_TOP_OF_LIST_ITEM' TO lf_event-form.
WHEN slis_ev_end_of_page.
* move 'Z_END_OF_PAGE_ITEM' to lf_event-form.
WHEN slis_ev_end_of_list.
* move 'Z_END_OF_LIST_ITEM' to lf_event-form.
WHEN slis_ev_after_line_output.
* MOVE 'Z_AFTER_LINE_OUTPUT_ITEM' TO lf_event-form.
WHEN slis_ev_before_line_output.
* MOVE 'Z_BEFORE_LINE_OUTPUT_ITEM' TO lf_event-form.
ENDCASE.
MODIFY pt_events FROM lf_event.
ENDLOOP.

ENDFORM. " Z_EVENTOS_ITEM

Autor: Flavio Ricardo de Almeida 20


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Veja que neste exemplo houve uma mudança em relação a lista simples no conteúdo
do parâmetro i_list_type.

i_list_type = 2 = Tipo de lista para qual eventos devem ser obtidos;

6.3 – Iremos impementar apenas os eventos de TOP_OF_LIST de cada um dos


blocos para verificar a delimitação dos mesmos;
*&---------------------------------------------------------------------*
*& Form Z_TOP_OF_LIST_CLI
*&---------------------------------------------------------------------*
* Cabeçalho de cliente
*----------------------------------------------------------------------*
FORM z_top_of_list_cli.

WRITE: / 'Lista de CLIENTE'.

ENDFORM. " Z_TOP_OF_LIST_CLI

*&---------------------------------------------------------------------*
*& Form Z_TOP_OF_LIST_CABEC
*&---------------------------------------------------------------------*
* Cabeçalho de cabeçalho
*----------------------------------------------------------------------*
FORM z_top_of_list_cabec.

WRITE: / 'Lista de CABECALHO'.

ENDFORM. " Z_TOP_OF_LIST_CABEC

*&---------------------------------------------------------------------*
*& Form Z_TOP_OF_LIST_ITEM
*&---------------------------------------------------------------------*
* Cabeçalho de ítem
*----------------------------------------------------------------------*
FORM z_top_of_list_item.

WRITE: / 'Lista de ITEM'.

ENDFORM. " Z_TOP_OF_LIST_ITEM

7 – Determinar estrutura de linha para blocos;

7.1 – Declarar tabela interna para cada um dos blocos;


* Tab. com informações sobre as características dos campos
DATA: wt_fieldcat_cliente TYPE slis_t_fieldcat_alv,
wt_fieldcat_cabecalho TYPE slis_t_fieldcat_alv,
wt_fieldcat_item TYPE slis_t_fieldcat_alv.

7.2 – Chamar rotina para atribuir campos as tabelas de estruturas de linhas;


* Montar estrutura de campos das listas
PERFORM z_fieldcat_cliente USING wt_fieldcat_cliente[].
PERFORM z_fieldcat_cabecalho USING wt_fieldcat_cabecalho[].
PERFORM z_fieldcat_item USING wt_fieldcat_item[].

7.2.1 – Implementar cada uma das rotinas acima descritas;

Autor: Flavio Ricardo de Almeida 21


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_CLIENTE *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de cliente *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_cliente USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
CLEAR pt_fieldcat[].
* Campos para lista de cliente
* Código do cliente
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KUNNR'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NAME1'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Endereço
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'STRAS'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Estados
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'REGIO'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* País
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'LAND1'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
*
ENDFORM. " Z_FIELDCAT_CLIENTE

*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_CABECALHO *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de cabeçalho *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_cabecalho USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
CLEAR pt_fieldcat[].
* Campos para lista de cabeçalho
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
lf_fieldcat-hotspot = 'X'.
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

Autor: Flavio Ricardo de Almeida 22


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* Data de Criação
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERDAT'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERNAM'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Tipo de Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'AUART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Organização de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKORG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VTWEG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Setor de atividade
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'SPART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Grupo de Vendedores
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKGRP'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Escritório de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKBUR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do cliente
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KUNNR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
*
ENDFORM. " Z_FIELDCAT_CABECALHO

*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_ITEM *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de item *
*---------------------------------------------------------------------*

Autor: Flavio Ricardo de Almeida 23


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* --> PT_FIELDCAT - Tab. com estrutura de linha *


*---------------------------------------------------------------------*
FORM z_fieldcat_item USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
CLEAR pt_fieldcat[].
* Campos para lista de item
* Nro ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Ítem da ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'POSNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do material
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'MATNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição do material na Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ARKTX'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Quantidade do ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KWMENG'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líquido ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.

ENDFORM. " Z_FIELDCAT_ITEM

8 – Inicializar blocos;

8.1 – chamar rotian de inicialização de lista;


* Inicializar blocos
PERFORM z_list_init.

8.1.1 – Codificação da rotina de inicialização da lista;


*&---------------------------------------------------------------------*
*& Form Z_LIST_INIT
*&---------------------------------------------------------------------*
* Inicialização da lista
*----------------------------------------------------------------------*
FORM z_list_init.
*

Autor: Flavio Ricardo de Almeida 24


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

DATA: lv_program TYPE repid.


*
* Atribuir nome do programa
lv_program = sy-repid.
* Inicializar lista
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
i_callback_program = lv_program
i_callback_user_command = 'Z_USER_COMMAND'.
* i_callback_pf_status_set = 'STANDARD'
* it_excluding = wt_extab.
*
ENDFORM. " Z_LIST_INIT

É na função REUSE_ALV_BLOCK_LIST_INIT que o evento de ações do usuário


deve ser informado caso o mesmo exista, assim como a barra de ferramentas (gui
status) personalizada.

8.2 – Implementar a rotina de ações do usuário a qual denominaremos


Z_USER_COMMAND;
*---------------------------------------------------------------------*
* FORM Z_USER_COMMAND *
*---------------------------------------------------------------------*
* Ações do usuário *
*---------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm LIKE sy-ucomm "#EC CALLED
pf_selfield TYPE slis_selfield.
*
CASE pv_ucomm.
WHEN '&IC1'.
* Verificar qual bloco foi acionado
CASE pf_selfield-tabname.
WHEN 'WT_CLIENTE'.
* Exibir CLIENTE
* Informações do registro
READ TABLE wt_cliente INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'KUN' FIELD wt_cliente-kunnr.
SET PARAMETER ID 'BUK' FIELD ''.
SET PARAMETER ID 'VKO' FIELD ''.
SET PARAMETER ID 'VTW' FIELD ''.
SET PARAMETER ID 'SPA' FIELD ''.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'XD03' AND SKIP FIRST SCREEN.
WHEN 'WT_CABECALHO'.
* Exibir ORDEM
* Informações do registro
READ TABLE wt_cabecalho INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'AUN' FIELD wt_cabecalho-vbeln.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
WHEN 'WT_ITEM'.
* Exibir ORDEM
* Informações do registro
READ TABLE wt_item INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'AUN' FIELD wt_item-vbeln.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
*

Autor: Flavio Ricardo de Almeida 25


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

ENDFORM. " Z_USER_COMMAND

9 – Declarar estruturas de layout das listas;


*$*$ Estruturas --------------------------------------------------------
* Layout das listas
DATA: wf_layout_cliente TYPE slis_layout_alv,
wf_layout_cabecalho TYPE slis_layout_alv,
wf_layout_item TYPE slis_layout_alv.

Estras estruturas são exigidas nas funções de criação dos blocos. As mesmas podem
ser configuradas de acordo com as necessidades dos blocos, assim como vimos no
volume 1.

10 – Criar cada um dos blocos de lista;

10.1 – Chamar rotina de criação dos blocos;


* Criar blocos de lista
PERFORM z_list_append.

10.1.1 – Codificação da rotina de criação de blocos;


*&---------------------------------------------------------------------*
*& Form Z_LIST_APPEND
*&---------------------------------------------------------------------*
* Criar os blocos de listas
*----------------------------------------------------------------------*
FORM z_list_append.

* Criar bloco de Cliente


CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
it_fieldcat = wt_fieldcat_cliente
is_layout = wf_layout_cliente
i_tabname = 'WT_CLIENTE'
it_events = wt_eventos_cliente
i_text = 'CLIENTE'
TABLES
t_outtab = wt_cliente.
* Criar bloco de Cabeçalho
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
it_fieldcat = wt_fieldcat_cabecalho
is_layout = wf_layout_cabecalho
i_tabname = 'WT_CABECALHO'
it_events = wt_eventos_cabecalho
i_text = 'CABEÇALHO'
TABLES
t_outtab = wt_cabecalho.
* Criar bloco de Ítem
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
it_fieldcat = wt_fieldcat_item
is_layout = wf_layout_item
i_tabname = 'WT_ITEM'
it_events = wt_eventos_item
i_text = 'ITEM'
TABLES

Autor: Flavio Ricardo de Almeida 26


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

t_outtab = wt_item.

ENDFORM. " Z_LIST_APPEND

11 – Declarar estrutura de configuração de impressão ( listagem );


* Configurações de impressão
DATA: wf_print TYPE slis_print_alv.

Não é obrigatório o uso desta estrutura porem iremos utilizá-la na função de listagem
das informações.

11.1 – Chamar rotina de configuração de atributos de impressão;


* Configurações de impressão
PERFORM z_print_build USING wf_print.

11.1.1 – Codificação da rotina de configuração de atributos de impressão;


*---------------------------------------------------------------------*
* FORM Z_PRINT_BUILD *
*---------------------------------------------------------------------*
* Definir atributos de impressão da lista *
*---------------------------------------------------------------------*
* --> PF_PRINT - Estrutura com atributos da impressão da lista *
*---------------------------------------------------------------------*
FORM z_print_build USING pf_print TYPE slis_print_alv.
*
* PF_PRINT-PRINT = 'X'. " Imprimir no SPOOL
pf_print-no_print_selinfos = 'X'. " Não listar info. sobre seleção
pf_print-no_coverpage = 'X'. " Não listar página de rostp
pf_print-no_print_listinfos = 'X'. " Não listar info. sobre a lista
* PF_PRINT-RESERVE_LINES = 'X'. " Reservar linhas
* PF_PRINT-NO_NEW_PAGE = 'X'. " Sem novas páginas
* PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " Não alterar tamanho da linha

ENDFORM. " Z_PRINT_BUILD

12 – Listar informações na tela;

12.1 – Chamada da rotina de listagem;


...
END-OF-SELECTION.
* Impressão do relatório
PERFORM z_list_display.
...

12.1.1 – Codificação da rotina de listagem ds informações;


*&---------------------------------------------------------------------*
*& Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
* Impressão da lista
*----------------------------------------------------------------------*

Autor: Flavio Ricardo de Almeida 27


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

FORM z_list_display.

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'


EXPORTING
is_print = wf_print.

ENDFORM. " Z_LIST_DISPLAY

Passamos como parâmetro à função de listagem:

is_print = wf_print = Estrutura de configuração da lista;

Veja que não existe segredo para composição da lista, pois apenas devemos ter
atenção na seqüência de utilização das funções e aos parâmetros obrigatórios.

13 – Resultado;

FIGURA 13.1 Lista de blocos simples;

Autor: Flavio Ricardo de Almeida 28


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
Capítulo
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Lista de Bloco
Hierárquico
Lista com bloco onde as informações mantêm uma relação
hierárquica.

N
o capítulo anterior vimos como criar uma lista de blocos simples. Agora
iremos implementar uma lista onde um dos blocos é hierárquico, ou seja,
existe um relacionamento de hierarquia entre as informações do bloco.

Vamos aproveitar o programa ZFRA0023_16 para demonstrar este tipo de bloco, já


que nele as tabelas WT_CABECALHO e WT_ITEM, possuem um relacionamento
hierárquico. Para isto vamos copiar o programa ZFRA0023_16 e chamá-lo de
ZFRA0023_17.

Faremos pequenas alterações porem significativas descritas abaixo:

1 – Declarar estrutura que conterá as informações sobre a ligação entre as tabelas de


CABEÇALHO e ITEM ;
* Informações sobre o link entre as tabelas ( JOIN )
DATA: wf_keyinfo TYPE slis_keyinfo_alv.

2 – Modificar a rotina de eventos;

2.1 – Para isto, antes vamos eliminar as tabelas:


wt_eventos_cabecalho TYPE slis_t_event,
wt_eventos_item TYPE slis_t_event.

2.2 - Criar a tabela de eventos para o bloco hierárquico que chamaremos de ORDEM;
* Tab. de eventos
DATA: wt_eventos_cliente TYPE slis_t_event,
wt_eventos_ordem TYPE slis_t_event.

Autor: Flavio Ricardo de Almeida 29


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

2.3 – Mudar chamada da rotina de eventos para blocos e eliminar chamada cabeçalho
e item;
* Determinar eventos para cada bloco
PERFORM z_eventos_clientes USING wt_eventos_cliente[].
PERFORM z_eventos_ordem USING wt_eventos_ordem[].

2.4 – Para criar a rotina de eventos para o bloco de ordem, vamos aproveitar a rotina
Z_EVENTOS_CABECALHO renomeando para Z_ENVENTOS_ORDEM que
terá acodificação abaixo;
*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_ORDEM
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de ordens *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_ordem USING pt_events TYPE slis_t_event.

* Variáveis
DATA: lf_event TYPE slis_alv_event.

* Obter todos os eventos


CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 3 " 3 = Lista Bloco Hierárquico
IMPORTING
et_events = pt_events.
* Verificar se evento foi encontrado
LOOP AT pt_events INTO lf_event.
CASE lf_event-name.
WHEN slis_ev_top_of_page.
* MOVE 'Z_TOP_OF_PAGE_ORDEM' TO lf_event-form.
WHEN slis_ev_top_of_coverpage.
* move 'Z_TOP_OF_COVERPAGE_ORDEM' to lf_event-form.
WHEN slis_ev_end_of_coverpage.
* move 'Z_END_OF_COVERPAGE_ORDEM' to lf_event-form.
WHEN slis_ev_foreign_top_of_page.
* move 'Z_FOREIGN_TOP_OF_PAGE_ORDEM' to lf_event-form.
WHEN slis_ev_foreign_end_of_page.
* move 'Z_FOREIGN_END_OF_PAGE_ORDEM' to lf_event-form.
WHEN slis_ev_list_modify.
* MOVE 'Z_LIST_MODIFY_ORDEM' TO lf_event-form.
WHEN slis_ev_top_of_list.
MOVE 'Z_TOP_OF_LIST_ORDEM' TO lf_event-form.
WHEN slis_ev_end_of_list.
* move 'Z_END_OF_LIST_ORDEM' to lf_event-form.
WHEN slis_ev_after_line_output.
* MOVE 'Z_AFTER_LINE_OUTPUT_ORDEM' TO lf_event-form.
WHEN slis_ev_before_line_output.
* MOVE 'Z_BEFORE_LINE_OUTPUT_ORDEM' TO lf_event-form.
ENDCASE.
MODIFY pt_events FROM lf_event.
ENDLOOP.

ENDFORM. " Z_EVENTOS_ORDEM

Veja que neste exemplo houve uma mudança em relação ao bloco simples no
conteúdo do parâmetro i_list_type.

Autor: Flavio Ricardo de Almeida 30


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

i_list_type = 3 = Tipo de lista para qual eventos devem ser obtidos, neste caso bloco
herárquico

3 – Teremos que fazer modificações para as tabelas FIELDCAT;

3.1 – Para isto, antes vamos eliminar as tabelas:


wt_fieldcat_cabecalho TYPE slis_t_fieldcat_alv,
wt_fieldcat_item TYPE slis_t_fieldcat_alv.

3.2 - Criar a tabela de configuração de campos para o bloco hierárquico que


chamaremos de ORDEM;
* Tab. com informações sobre as características dos campos
DATA: wt_fieldcat_cliente TYPE slis_t_fieldcat_alv,
wt_fieldcat_ordem TYPE slis_t_fieldcat_alv.

3.3 – Para configuração da tabela vamos aprovitar as rotinas de FIELDCAT de


cabeçalho e item, apenas com uma modificação na de item;

3.3.1 – Modificar a chamada da rotina;


* Montar estrutura de campos das listas
PERFORM z_fieldcat_cliente USING wt_fieldcat_cliente[].
PERFORM z_fieldcat_cabecalho USING wt_fieldcat_ordem[].
PERFORM z_fieldcat_item USING wt_fieldcat_ordem[].

3.3.2 – Modificação na rotina Z_FIELDCAT_ITEM;


*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_ITEM *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de item *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_item USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
* CLEAR pt_fieldcat[].
* Campos para lista de item
* Nro ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
...

Vamos comentar a instrução para limpar o conteúdo da tabela de parâmetros já que


não podemos perder o que foi incluso na rotina Z_FIELDCAT_CABECALHO.

Autor: Flavio Ricardo de Almeida 31


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

4 – Criar uma estrutura de layout para o bloco Ordem e eliminar as dos blocos
Cabecalho e Item;
*$*$ Estruturas --------------------------------------------------------
* Layout das listas
DATA: wf_layout_cliente TYPE slis_layout_alv,
wf_layout_ordem TYPE slis_layout_alv.

5 – Agora faremos modificações signicifativas na rotina Z_LIST_APPEND, para que


fique como descrito abaixo;
*&---------------------------------------------------------------------*
*& Form Z_LIST_APPEND
*&---------------------------------------------------------------------*
* Criar os blocos de listas
*----------------------------------------------------------------------*
FORM z_list_append.

* Criar bloco de Cliente


CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
it_fieldcat = wt_fieldcat_cliente
is_layout = wf_layout_cliente
i_tabname = 'WT_CLIENTE'
it_events = wt_eventos_cliente
i_text = text-0b1
TABLES
t_outtab = wt_cliente.
* Indicar relacionamento
wf_keyinfo-header01 = 'VBELN'.
wf_keyinfo-item01 = 'VBELN'.
* Criar bloco hierárquico
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_HS_APPEND'
EXPORTING
is_layout = wf_layout_ordem
it_fieldcat = wt_fieldcat_ordem
is_keyinfo = wf_keyinfo
i_header_tabname = 'WT_CABECALHO'
i_item_tabname = 'WT_ITEM'
it_events = wt_eventos_ordem
i_text = 'ORDEM'
TABLES
t_outtab_header = wt_cabecalho
t_outtab_item = wt_item.

ENDFORM. " Z_LIST_APPEND

Verifique que foi informado o relacionamento entre as tabelas Cabecalho e Item na


estrutura de informações de relacionamento (wf_keyinfo).

8 – Vamos criar uma rotina de TOP_OF_LIST para o bloco de Ordem e eliminar as


de Cabecalho e Item, como feito abaixo;
*&---------------------------------------------------------------------*
*& Form Z_TOP_OF_LIST_ORDEM
*&---------------------------------------------------------------------*
* Cabeçalho de lista para bloco de ordem
*----------------------------------------------------------------------*
FORM z_top_of_list_ordem.

Autor: Flavio Ricardo de Almeida 32


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

WRITE: / 'Lista de ORDEM'.

ENDFORM. " Z_TOP_OF_LIST_ORDEM

9 - Resultado;

FIGURA 5.1 Tela com bloco hierárquico.

Autor: Flavio Ricardo de Almeida 33


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
Capítulo
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Caixa de Diálogo ALV


(POPUP ALV)
Caixa de diálogo ALV permite.

A
qui vamos aprender como criar uma caixa de diálogo (popup) utilizando
recursos ALV, que nada mais é um programa que permite que seja escolhido
o tamanho da tela, e que seus botões (gui status) ficam no rodapé.

Vamos criar um programa que irá acionar a janela popup e mostrará os registros que
foram selecionados.

1 – Declarar a tipo de grupos SLIS;


*$*$ Type-Pools --------------------------------------------------------
TYPE-POOLS: slis.

2 – Declarar o tipo de estrutura da tabela de dados;


*$*$ Tipos -------------------------------------------------------------
TYPES: BEGIN OF we_cliente,
kunnr LIKE kna1-kunnr, " Código do cliente
name1 LIKE kna1-name1, " Descrição
box,
END OF we_cliente.

3 – Declarar a tabela interna que irá conter as informações de clientes;


*$*$ Tabelas internas --------------------------------------------------
* Dados de clientes
DATA: wt_cliente TYPE STANDARD TABLE OF we_cliente WITH HEADER LINE.

4 – Declarar algumas varriáveis que necessitaremos no decorrer da implementação;


*$*$ Variáveis ---------------------------------------------------------
* Nome do programa chamador
DATA: wv_repid LIKE sy-repid.

5 – Inicializar algumas variáveis utilizando o evento de inicialização;

Autor: Flavio Ricardo de Almeida 34


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

*$*$ Inicialização -----------------------------------------------------


INITIALIZATION.
wv_repid = sy-repid.

6 – Criar uma tela de seleção para trazer um pequeno número de registros;


*$*$ Tela de Seleção ---------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
SELECT-OPTIONS: s_kunnr FOR wt_cliente-kunnr.
SELECTION-SCREEN END OF BLOCK b1.

7 – Vamos implementar a rotina principal juntamente com a rotina para obter dados
para lista;
*$*$ Rotina Principal --------------------------------------------------
START-OF-SELECTION.
*
PERFORM z_obter_dados.

7.1 – Codificação da rotina de obtenção de dados;


*&---------------------------------------------------------------------*
*& Form Z_OBTER_DADOS
*&---------------------------------------------------------------------*
* Obter informações para lista
*----------------------------------------------------------------------*
FORM z_obter_dados.

SELECT kunnr name1 INTO TABLE wt_cliente


FROM kna1
WHERE kunnr IN s_kunnr.

ENDFORM. " Z_OBTER_DADOS

8 – Implementar rotina de configuração de campos para lista;

8.1 – Declarar tabela de configuração;


* Configurações de campos
DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

8.2 – Chamar rotina de atribuição de configurações;


* Indicar campos para exibição na lista
PERFORM z_fieldcat_init USING wt_fieldcat[].

8.3 – Implementar rotina de atribuição de configurações;


*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_INIT *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista *
*---------------------------------------------------------------------*

Autor: Flavio Ricardo de Almeida 35


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* --> PT_FIELDCAT - Tab. com estrutura de linha *


*---------------------------------------------------------------------*
FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
CLEAR pt_fieldcat[].
* Montar estrutura
CLEAR lf_fieldcat.
* Código do cliente
* lf_field-col_pos = 1.
lf_fieldcat-fieldname = 'KUNNR'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição do cliente
* lf_afield-col_pos = 2.
lf_fieldcat-fieldname = 'NAME1'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.

ENDFORM. " FORM Z_FIELDCAT_INIT

9 – Implementar rotina para chamada da tela POPUP;

9.1 – Declarar variáveis, estruturas e tabelas internas necessárias à implementação da


rotina de popup;
*$*$ Estruturas --------------------------------------------------------
DATA: wf_sel TYPE slis_selfield.

9.2 – Chamada da rotina de popup;


*
END-OF-SELECTION.
* Listar informações POPUP
PERFORM z_popup.

9.3 – Implementar rotina de popup;


*&---------------------------------------------------------------------*
*& Form Z_POPUP
*&---------------------------------------------------------------------*
* Acionar caixa de diálogo (POPUP)
*----------------------------------------------------------------------*
FORM z_popup.
* Função POPUP
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
i_title = 'POPUP - ALV'
* I_SELECTION = 'X'
i_zebra = 'X'
i_screen_start_column = 5
i_screen_start_line = 5
i_screen_end_column = 55
i_screen_end_line = 15
i_checkbox_fieldname = 'BOX'
* I_LINEMARK_FIELDNAME =

Autor: Flavio Ricardo de Almeida 36


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* I_SCROLL_TO_SEL_LINE = 'X'
i_tabname = 'WT_CLIENTE'
* I_STRUCTURE_NAME =
it_fieldcat = wt_fieldcat
* IT_EXCLUDING =
i_callback_program = wv_repid
* I_CALLBACK_USER_COMMAND =
* IS_PRIVATE =
IMPORTING
es_selfield = wf_sel
* E_EXIT =
TABLES
t_outtab = wt_cliente
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.

ENDFORM. " Z_POPUP

9.4 – Janela popup;

FIGURA 6.1 Tela de POPUP.

10 – Implementar rotina para listar registros selecionados;

10.1 – Chamada da rotina de listagem de registros selecionados;


* Listar registros selecionados
PERFORM z_display_list.

Autor: Flavio Ricardo de Almeida 37


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

10.2 – Codificar rotina de listagem de registros selecionados;


*&---------------------------------------------------------------------*
*& Form Z_DISPLAY_LIST
*&---------------------------------------------------------------------*
* Exibir registros selecionados
*----------------------------------------------------------------------*
FORM z_display_list.

LOOP AT wt_cliente.
* Verificar se o registro foi selecionado
CHECK NOT wt_cliente-box IS INITIAL.
* Listar registro
WRITE: / 'CLIENTE:', wt_cliente-kunnr,
'-', wt_cliente-name1.
ENDLOOP.

ENDFORM. " Z_DISPLAY_LIST

10.3 – Selecionando registros;

FIGURA 6.2 Tela POPUP com registros selecionados..

10.4 – Agora na próxima tela veremos uma listagem dos registros selecionados;

A função REUSE_ALV_POPUP_TO_SELECTION automaticamente atualiza o


campos BOX da lista WT_CLIENTES dos registros selecionados.

Autor: Flavio Ricardo de Almeida 38


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

FIGURA 6.3 Tela com lista dos registros selecionados no POPUP.

A documentação detalhada de cada parâmtetro pode ser encontrada na própria


função.

Autor: Flavio Ricardo de Almeida 39


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
Capítulo
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Lista ALV GRID


Lista ALV no formato GRID

V
eremos neste capítulo um outro formato de lista ALV, a ALV GRID List.
Este tipo de lista é muito mais elegante que as listas ALV vistas no volume 1,
apesar de não possuir algumas funcionalidades.

Vamos aproveitar um programa que implementamos no volume 1, assim


economizaremos a paciência do leitor, pois als alterações serão bem simples para este
novo tipo de lista.

Para isto vamos copiar o programa ZFRA0023_9 e chamá-lo de ZFRA0023_19.


Caso não possua o volume 1, os programas utilizados neste manual encontram-se no
Apêndice A.

1 – Teremos que fazer alguns ajustes em algumas rotinas de eventos, por isto faremos
uma pequena alteração na rotina Z_EVENTTAB_BUILD, basicamente comentar as
linhas de eventos ativas as quais trataremos em outro tópico;
*---------------------------------------------------------------------*
* FORM Z_EVENTTAB_BUILD *
*---------------------------------------------------------------------*
* Definir eventos associados a lista *
*---------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*---------------------------------------------------------------------*
FORM z_eventtab_build USING pt_events TYPE slis_t_event.
* Variáveis
DATA: lf_event TYPE slis_alv_event.

* Obter eventos permitidos para lista grid


CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = pt_events.
* Verificar se evento foi encontrado
LOOP AT pt_events INTO lf_event.
CASE lf_event-name.
WHEN slis_ev_user_command.
* MOVE 'Z_USER_COMMAND' TO lf_event-form.
WHEN slis_ev_item_data_expand.
* move 'Z_ITEM_DATA_EXPAND' to lf_event-form.
WHEN slis_ev_reprep_sel_modify.
* move 'Z_REPREP_SEL_MODIFY' to lf_event-form.
WHEN slis_ev_caller_exit_at_start.
* MOVE 'Z_CALLER_EXIT' TO lf_event-form.

Autor: Flavio Ricardo de Almeida 40


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

WHEN slis_ev_top_of_page.
* MOVE 'Z_TOP_OF_PAGE' TO lf_event-form.
WHEN slis_ev_top_of_coverpage.
* move 'Z_TOP_OF_COVERPAGE' to lf_event-form.
WHEN slis_ev_end_of_coverpage.
* move 'Z_END_OF_COVERPAGE' to lf_event-form.
WHEN slis_ev_foreign_top_of_page.
* move 'Z_FOREIGN_TOP_OF_PAGE' to lf_event-form.
WHEN slis_ev_foreign_end_of_page.
* move 'Z_FOREIGN_END_OF_PAGE' to lf_event-form.
WHEN slis_ev_pf_status_set.
* MOVE 'Z_PF_STATUS_SET' TO lf_event-form.
WHEN slis_ev_list_modify.
* MOVE 'Z_LIST_MODIFY' TO lf_event-form.
WHEN slis_ev_top_of_list.
* MOVE 'Z_TOP_OF_LIST' TO lf_event-form.
WHEN slis_ev_end_of_page.
* MOVE 'Z_END_OF_PAGE' TO lf_event-form.
WHEN slis_ev_end_of_list.
* MOVE 'Z_END_OF_LIST' TO lf_event-form.
WHEN slis_ev_after_line_output.
* MOVE 'Z_AFTER_LINE_OUTPUT' TO lf_event-form.
WHEN slis_ev_before_line_output.
* MOVE 'Z_BEFORE_LINE_OUTPUT' TO lf_event-form.
WHEN slis_ev_subtotal_text.
* MOVE 'Z_SUBTOTAL_TEXT' TO lf_event-form.
ENDCASE.
MODIFY pt_events FROM lf_event.
ENDLOOP.
*
ENDFORM. " FORM Z_EVENTTAB_BUILD

2 – A alteração mais significativa dar-se-á na rotina Z_LIST_DISPLAY, onde


simplismente trocaremos a função REUSE_ALV_LIST_DISPLAY pela função de
GRID, REUSE_ALV_GRID_DISPLAY.
*&---------------------------------------------------------------------*
*& Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
* Lista informações na tela
*----------------------------------------------------------------------*
FORM z_list_display.

PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.

* CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'


CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = wv_repid
is_layout = wf_layout
it_fieldcat = wt_fieldcat[]
it_special_groups = wt_sp_group
it_sort = wt_sort
i_save = 'A'
it_events = wt_events
is_print = wf_print
TABLES
t_outtab = wt_saida
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.

Autor: Flavio Ricardo de Almeida 41


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

ENDIF.

ENDFORM. " Z_LIST_DISPLAY

2.1 – Apenas com esta alteração temos a lista abaixo;

FIGURA 7.1 Tela com lista GRID ALV.

Veja como é simples alterar a lista simples ALV para uma lista GRID, é possível fazer
esta alteração para todos os programas visto no volume 1.

3 – Agora vamos corrigir algumas rotinas de eventos para adaptá-las ao


funcionalmente da lista GRID:

3.1 – Ajustar o evento de ações do usuário, USER_COMMAND;

3.1.1 - Primeiramente vamos reativar o evento USER_COMMAND na rotina


Z_EVENTTAB_BUILD;
* Verificar se evento foi encontrado
LOOP AT pt_events INTO lf_event.
CASE lf_event-name.
WHEN slis_ev_user_command.
MOVE 'Z_USER_COMMAND' TO lf_event-form.
WHEN slis_ev_item_data_expand.
* move 'Z_ITEM_DATA_EXPAND' to lf_event-form.

Autor: Flavio Ricardo de Almeida 42


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

3.1.2 – Vamos ajustar a rotina Z_USER_COMMAND;


*----------------------------------------------------------------------*
* FORM Z_USER_COMMAND *
*----------------------------------------------------------------------*
* Ações do usuário *
*----------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm LIKE sy-ucomm
pf_selfield TYPE slis_selfield. "#EC CALLED
*
CASE pv_ucomm.
* Ação de Click duplo '&IC1'
WHEN '&IC1'.
* Verificar campo selecionado
CASE pf_selfield-sel_tab_field.
* WHEN 'WT_SAIDA-VBELN'.
WHEN '1-VBELN'.
* Posicionar no registro selecionado
READ TABLE wt_saida INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.

ENDFORM.

Perceba que houve uma alteração quanto a referência ao campo WT_SAIDA-


VBELN para 1-VBELN.

3.1.3 – Vamos configurar o campo do número da ordem (VBELN) para que o


mesmo fique ativo (hotspot).
*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_INIT *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
CLEAR pt_fieldcat[].
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
lf_fieldcat-sp_group = 'A'. " Grupo de Ordem Vendas
lf_fieldcat-hotspot = 'X'. " Indicador de ativo
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.
...

Agora execute o programa e veja que ao clicar no número da ordem, será exibia a
transação VA03 (Exibir Ordem).

Autor: Flavio Ricardo de Almeida 43


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

FIGURA 7.2 Tela com lista GRID ALV com o campo do nº da ordem ativo.

Observe que o número da ordem está sublinhado.

3.2 – Ajustar o evento de cabeçalho, TOP_OF_PAGE;

3.2.1 - Primeiramente vamos reativar o evento TOP_OF_PAGE na rotina


Z_EVENTTAB_BUILD;
WHEN slis_ev_caller_exit_at_start.
* MOVE 'Z_CALLER_EXIT' TO lf_event-form.
WHEN slis_ev_top_of_page.
MOVE 'Z_TOP_OF_PAGE' TO lf_event-form.
WHEN slis_ev_top_of_coverpage.
* move 'Z_TOP_OF_COVERPAGE' to lf_event-form.

3.2.2 – Agora temos que implementar a rotina Z_TOP_OF_PAGE;


*----------------------------------------------------------------------*
* FORM Z_TOP_OF_PAGE *
*----------------------------------------------------------------------*
* Evento de cabeçalho *
*----------------------------------------------------------------------*
FORM z_top_of_page. "#EC CALLED

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'


EXPORTING
it_list_commentary = wt_list_top_of_page.

ENDFORM.

Autor: Flavio Ricardo de Almeida 44


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

A função REUSE_ALV_COMMENTARY_WRITE será responsável por exibir o


conteúdo do cabeçalho na tela. Este conteúdo estará na tabela wt_list_top_page.

3.2.2.1 – Vamos criar a tabela interna wt_list_top_page;


* Tab. de configuração para conteúdo do cabeçalho
DATA: wt_list_top_of_page TYPE slis_t_listheader.

3.2.2.2 – Chamar rotina para preenchimento da tabela wt_list_top_page;


* Comentários do cabeçalho da lista
PERFORM z_comment_build USING wt_list_top_of_page[].

3.2.2.3 – Implementar codificação da rotina Z_COMMENT_BUILD;


*---------------------------------------------------------------------*
* FORM Z_COMMENT_BUILD *
*---------------------------------------------------------------------*
* Montar layout das estruturas de comentários *
*---------------------------------------------------------------------*
* --> PT_TOP_OF_PAGE - Tab. com procedimentos para cabeçalho *
*---------------------------------------------------------------------*
FORM z_comment_build USING pt_top_of_page TYPE slis_t_listheader.
* Variáveis
DATA: lf_line TYPE slis_listheader.

DATA: lv_data_hd(30),
lv_data(10),
lv_hora(08).
*
* Cabeçalho
CLEAR lf_line.
lf_line-key = 'Título:'.
lf_line-typ = 'S'.
lf_line-info = sy-title.
APPEND lf_line TO pt_top_of_page.
* Informações
* Montar data - hora
CLEAR lf_line.
lf_line-typ = 'S'.
lf_line-key = 'Report'.
lf_line-info = sy-repid.
APPEND lf_line TO pt_top_of_page.
** Formatar data - hora
* WRITE sy-datum TO lv_data.
* WRITE sy-uzeit TO lv_hora.
* CONCATENATE lv_data '-' lv_hora INTO lv_data_hd SEPARATED BY space.
** Montar data - hora
* CLEAR lf_line.
* lf_line-typ = 'S'.
* lf_line-key = 'Data - Hora'.
* lf_line-info = lv_data_hd.
* APPEND lf_line TO pt_top_of_page.
* Comentário
CLEAR lf_line.
lf_line-typ = 'A'.
lf_line-info = 'Lista GRID'.
APPEND lf_line TO pt_top_of_page.

ENDFORM. " FORM Z_COMMENT_BUILD

Autor: Flavio Ricardo de Almeida 45


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

FIGURA 7.3 Tela com lista GRID ALV com o cabeçalho.

Outras informações que julguem necessárias podem ser implementadas.

4 – Incluir um LOGOTIPO no cabeçalho da lista;

Vamos alterar a rotnina Z_TOP_OF_PAGE;


*----------------------------------------------------------------------*
* FORM Z_TOP_OF_PAGE *
*----------------------------------------------------------------------*
* Evento de cabeçalho *
*----------------------------------------------------------------------*
FORM z_top_of_page. "#EC CALLED

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'


EXPORTING
i_logo = 'ENJOYSAP_LOGO'
it_list_commentary = wt_list_top_of_page.

ENDFORM.

Veja que passamos como parâmetros:

i_logo = ‘ENJOINSAP_LOGO’ = Recebe o nome de alguma figura cadastrada no


R/3, escolhemos aqui uma Standard que provavelmente deve estar presente em
qualquer instalação;

Caso o logotipo não apareça por não existir em sua aplicação não se preocupe pois no
próximo capítulo aprenderemos a criar nossas próprias figuras.

Autor: Flavio Ricardo de Almeida 46


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

FIGURA 7.4 Tela com lista GRID ALV com LOGOTIPO no cabeçalho.

Vimos neste capítulo como é fácil criar uma lista ALV do tippo GRID.

Na função REUSE_ALV_GRID_DISPLAY existem outros parâmetros a serem


explorados, porem deixaremos isto como tarefa ao leitor já que existe uma boa
documentação na interface da função.

Autor: Flavio Ricardo de Almeida 47


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
Capítulo
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Carregando uma figura


Carregar uma figura no R/3 e utilizá-la como logotipo.

V
eremos neste capítulo que é possível criar no sistemas nossas próprias
figuras para utilizarmos de várias maneiras uma delas é como LOGOTIPO,
na lista ALV do tipo GRID.

Os procedimentos para carregar estão descritos a seguir.

1 – Criar ou escolher uma figura no formato GIF;

Utilize uma ferramenta de criação de figuras ou simplesmente escolha uma que exista
no seu sistema operacional, internet, etc. Utilizaremos a bandeira do Brasil.

2 – Agora no R/3 acesse a transação 0FPM002 para começarmos o processo;

FIGURA 8.1 Tela inicial para carregar figura no R/3.

Autor: Flavio Ricardo de Almeida 48


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

2.1 - Devemos preencher alguns campos da tela descritos a seguir;

Mome da Classe = Recebe “PICTURES”

Categoria da Classe = Recebe “OT” ( outros objetos )

Chave do Objeto = Recebe o nome do objeto

Estes são os campos necessários para carregar a figura, os outros campos são
informativos.

Após preenchimento das informações tecle <F8> para executar o programa.

3 – Configuração da figura;

3.1 – Após execução <F8> a tela abaixo será exibida para carregarmos a figura;

FIGURA 8.2 Tela para carrecar a figura.

Na janela inferior escolha a aba <Criar> e depois abra a pasta “Tipos de doc.s
tandard”.

3.2 - Será exibida a tela da fig. 8.3, onde deve-se dar um duplo clique no ´ítem
“TELA”;

Autor: Flavio Ricardo de Almeida 49


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

FIGURA 8.3 Tela para escolha do tipo de objeto.

3.3 – Após o duplo clique no item “TELA” será aberta uma tela para informar o
caminho da figura;

FIGURA 8.4 Tela para informar caminho da figura.

Após encontrar a figura tecle <OPEN>.

Autor: Flavio Ricardo de Almeida 50


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

3.4 – Agora será exibida a tela do Business Document Navegator;

FIGURA 8.4 Tela do Business Document Navegator.

Pode-se simplemente confirmar a operação teclando no botão Avançar <ENTER>


representado pelo ícone , ou antes disto colocar alguma palavra chave para
identificar a figura na aba <PalavsChave>.

FIGURA 8.5 Tela do Business Document Navegator, aba de Palavras chaves.

Autor: Flavio Ricardo de Almeida 51


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

4 – Após este processo a figura encontra-se carregada no sistema;

FIGURA 8.6 Tela mostrando figura carregada.

5 – Com um duplo clique item “Tela” na janela superior pode-se visualisar a figura;

FIGURA 8.7 Tela mostrando visualização da figura.

Autor: Flavio Ricardo de Almeida 52


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

6 – Transportar para outros ambientes;

Para transportar a figura para outros ambientes, por exemplo: Qualidade e Produção.
Crie uma Change Request teclando <Shift + F12> ou no botão “Transportar
documentos” representado pelo ícone .

Os passos seguintes são os mesmos dos outros objetos R/3.

Autor: Flavio Ricardo de Almeida 53


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
Capítulo
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Incluir logotipo a lista ALV


GRID
Atribuir logotipo ao cabeçalho de lista ALV do tipo GRID.

A
gora que aprendemos a carregar figuras no R/3, vamos mostrar como
utilizá-las como LOGOTIPO, em aplicações ALV GRID. A alteração é
muito simples pois teremos que fazer uma única modificação.

Vamos utilizar o programa ZFRA0023_19 para mostrar o efeito do logotipo.

1 – Alterar a rotnina Z_TOP_OF_PAGE, mais especificadamente, o parâmetros


i_logo, do logotipo atual ‘ENJOYSAP_LOGO’ para ‘Z_BRASIL_BANDEIRA’;
*----------------------------------------------------------------------*
* FORM Z_TOP_OF_PAGE *
*----------------------------------------------------------------------*
* Evento de cabeçalho *
*----------------------------------------------------------------------*
FORM z_top_of_page. "#EC CALLED

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'


EXPORTING
* i_logo = 'ENJOYSAP_LOGO'
i_logo = 'Z_BRASIL_BANDEIRA'
it_list_commentary = wt_list_top_of_page.

ENDFORM.

Veja que apenas comentamos a linha com o logotipo e passamos como parâmetro o
logotipo criado no capítulo anterior.

Autor: Flavio Ricardo de Almeida 54


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

FIGURA 9.1 Tela exibindo lista ALV GRID com logotipo personalizado.

Autor: Flavio Ricardo de Almeida 55


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Considerações Gerais
Referências e ressalvas.

Copyright:

Copyright 2002 Flavio Ricardo de Almeida. Todos os direitos reservados.

O material contido neste manual pode ser reproduzido, alterado e redistribuído sem
autorização prévia, desde que mantido os créditos.

Sem vínculo algum com a SAP AG ou quaisquer de suas subsidiárias.

O volume 1 pode ser obtido no endereço: http://www.almeidafr.hpg.ig.com.br

Na seção Tecnologia = ABAP = Manuais.

Trademakrs:
SAP®, R/3®, ABAP/4®, ABAP® são marcas registradas da SAP AG.

Autor: Flavio Ricardo de Almeida 56


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Apêndice A
Programas utilizados como exemplos.

Os programas podem ser baixados do site “Flavio’s Home Page” no endereço


www.almeidafr.hpg.ig.com.br .

Capítulo 2
*$*$********************************************************************
*$*$ *
*$*$ PROGRAMA: Lista Hierárquica *
*$*$ TIPO : Lista ALV *
*$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria *
*$*$ DATA : 12/01/2002 *
*$** OBS. : *
*$** *
*$*$********************************************************************
*$*$ HISTÓRICO DAS MODIFICAÇÕES *
*$*$-------------------------------------------------------------------*
*$*$ DATA | AUTOR | DESCRIÇÃO *
*$*$-------------------------------------------------------------------*
*$** | | *
*$*$********************************************************************
REPORT zfra0023_14 .

*$*$ Type pools --------------------------------------------------------


TYPE-POOLS: slis.

*$*$ Tipos -------------------------------------------------------------


TYPES: BEGIN OF we_cabecalho,
vbeln LIKE vbak-vbeln, " Nro da ordem de venda
erdat LIKE vbak-erdat, " Data de criação
ernam LIKE vbak-ernam, " Criado por
audat LIKE vbak-audat, " Data da ordem
auart LIKE vbak-auart, " Tipo de ordem
netwr LIKE vbak-netwr, " Valor líq. da ordem
vkorg LIKE vbak-vkorg, " Org. de vendas
vtweg LIKE vbak-vtweg, " Canal de distribuição
spart LIKE vbak-spart, " Setor de atividade
vkgrp LIKE vbak-vkgrp, " Grupo de vendedores
vkbur LIKE vbak-vkbur, " Escritório de vendas
END OF we_cabecalho.

TYPES: BEGIN OF we_item,


vbeln LIKE vbap-vbeln, " Nro da ordem de venda
posnr LIKE vbap-posnr, " Nro do ítem da ordem de venda
matnr LIKE vbap-matnr, " Código do material
arktx LIKE vbap-arktx, " Desc.material-Entrada na ordem
kwmeng LIKE vbap-kwmeng, " Quantidade da ordem
netwr LIKE vbap-netwr, " Valor líq. do ítem
END OF we_item.

*$*$ Tabelas Internas --------------------------------------------------


DATA: wt_cabecalho TYPE STANDARD TABLE OF we_cabecalho
WITH HEADER LINE,
wt_item TYPE STANDARD TABLE OF we_item
WITH HEADER LINE.

Autor: Flavio Ricardo de Almeida 57


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* Tab. com informações sobre as características dos campos


DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

*$*$ Estruturas --------------------------------------------------------


* Informações sobre o link entre as tabelas ( JOIN )
DATA: wf_keyinfo TYPE slis_keyinfo_alv.

*$*$ Variáveis ---------------------------------------------------------


DATA: wv_repid LIKE sy-repid. " Nome do programa principal

DATA: wv_tabname_header TYPE slis_tabname, " Nome da tabela de Cabec.


wv_tabname_item TYPE slis_tabname. " Nome da tabela de Ítems

*$*$ Tela de Seleção ---------------------------------------------------


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
SELECT-OPTIONS: s_vbeln FOR wt_cabecalho-vbeln.
SELECTION-SCREEN END OF BLOCK b1.

*$*$ Inicialização -----------------------------------------------------


INITIALIZATION.
PERFORM z_inicializacao.

*$*$ Rotina Principal --------------------------------------------------


START-OF-SELECTION.
PERFORM z_obter_dados.
* Indicar campos para exibição na lista
PERFORM z_fieldcat_init USING wt_fieldcat[].

END-OF-SELECTION.
* Construção da lista propriamente dita ( Exibição das informações )
PERFORM z_list_display.

*$*$ Sub-rotinas -------------------------------------------------------


*&---------------------------------------------------------------------*
*& Form Z_INICIALIZACAO
*&---------------------------------------------------------------------*
* Inicialização de variáveis
*----------------------------------------------------------------------*
FORM z_inicializacao.

* Nome do programa
wv_repid = sy-repid.
* Definição das tabelas - Header e Item
wv_tabname_header = 'WT_CABECALHO'.
wv_tabname_item = 'WT_ITEM'.
* Define informações da chave
CLEAR wf_keyinfo.
wf_keyinfo-header01 = 'VBELN'.
wf_keyinfo-item01 = 'VBELN'.

ENDFORM. " Z_INICIALIZACAO

*&---------------------------------------------------------------------*
*& Form Z_OBTER_DADOS
*&---------------------------------------------------------------------*
* Obter informações para lista
*----------------------------------------------------------------------*
FORM z_obter_dados.
* Mensagem
PERFORM z_sapgui_progress_indicator
USING 'Selecionando dados. Aguarde...'.
* Obter informações dos cabeçalho
SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp
vkbur
INTO TABLE wt_cabecalho
FROM vbak
WHERE vbeln IN s_vbeln.

Autor: Flavio Ricardo de Almeida 58


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* Verificar se alguma informação foi encontrada


IF sy-subrc EQ 0.
* Obter informações dos ítens
SELECT vbeln posnr matnr arktx kwmeng netwr
INTO TABLE wt_item
FROM vbap
FOR ALL ENTRIES IN wt_cabecalho
WHERE vbeln EQ wt_cabecalho-vbeln.
ENDIF.
* Ordenar tabelas
SORT: wt_cabecalho, wt_item.

ENDFORM. " Z_OBTER_DADOS

*&---------------------------------------------------------------------*
*& Form Z_SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* Interagir com o front-end - Enviar mensagens
*----------------------------------------------------------------------*
* --> PV_TEXT - Mensagem
*----------------------------------------------------------------------*
FORM z_sapgui_progress_indicator USING value(pv_text).

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'


EXPORTING
* PERCENTAGE = 0
text = pv_text.

ENDFORM. " Z_SAPGUI_PROGRESS_INDICATOR

*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_INIT *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
CLEAR pt_fieldcat[].
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.
* Data de Criação
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERDAT'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERNAM'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Tipo de Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'AUART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líq. da ordem

Autor: Flavio Ricardo de Almeida 59


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Organização de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKORG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VTWEG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Setor de atividade
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'SPART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Grupo de Vendedores
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKGRP'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Escritório de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKBUR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Ítem da ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'POSNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do material
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'MATNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição do material na Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ARKTX'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Quantidade do ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KWMENG'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líquido ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.

ENDFORM. " FORM Z_FIELDCAT_INIT

Autor: Flavio Ricardo de Almeida 60


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

*&---------------------------------------------------------------------*
*& Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
* Listar imformações
*----------------------------------------------------------------------*
FORM z_list_display.
* Mensagem
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
*
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
i_callback_program = wv_repid
it_fieldcat = wt_fieldcat[]
i_save = 'A'
i_tabname_header = wv_tabname_header
i_tabname_item = wv_tabname_item
is_keyinfo = wf_keyinfo
TABLES
t_outtab_header = wt_cabecalho
t_outtab_item = wt_item
EXCEPTIONS
program_error = 1
OTHERS = 2.
* Verificar processamento da função
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDFORM. " Z_LIST_DISPLAY

Autor: Flavio Ricardo de Almeida 61


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Capítulo 3
*$*$********************************************************************
*$*$ *
*$*$ PROGRAMA: Lista Hierárquica - Recursos *
*$*$ TIPO : Lista ALV *
*$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria *
*$*$ DATA : 12/01/2002 *
*$** OBS. : *
*$** *
*$*$********************************************************************
*$*$ HISTÓRICO DAS MODIFICAÇÕES *
*$*$-------------------------------------------------------------------*
*$*$ DATA | AUTOR | DESCRIÇÃO *
*$*$-------------------------------------------------------------------*
*$** | | *
*$*$********************************************************************
REPORT zfra0023_15 .

*$*$ Type pools --------------------------------------------------------


TYPE-POOLS: slis.

*$*$ Tipos -------------------------------------------------------------


TYPES: BEGIN OF we_cabecalho,
vbeln LIKE vbak-vbeln, " Nro da ordem de venda
erdat LIKE vbak-erdat, " Data de criação
ernam LIKE vbak-ernam, " Criado por
audat LIKE vbak-audat, " Data da ordem
auart LIKE vbak-auart, " Tipo de ordem
netwr LIKE vbak-netwr, " Valor líq. da ordem
vkorg LIKE vbak-vkorg, " Org. de vendas
vtweg LIKE vbak-vtweg, " Canal de distribuição
spart LIKE vbak-spart, " Setor de atividade
vkgrp LIKE vbak-vkgrp, " Grupo de vendedores
vkbur LIKE vbak-vkbur, " Escritório de vendas
END OF we_cabecalho.

TYPES: BEGIN OF we_item,


vbeln LIKE vbap-vbeln, " Nro da ordem de venda
posnr LIKE vbap-posnr, " Nro do ítem da ordem de venda
matnr LIKE vbap-matnr, " Código do material
arktx LIKE vbap-arktx, " Desc.material-Entrada na ordem
kwmeng LIKE vbap-kwmeng, " Quantidade da ordem
netwr LIKE vbap-netwr, " Valor líq. do ítem
END OF we_item.

*$*$ Tabelas Internas --------------------------------------------------


DATA: wt_cabecalho TYPE STANDARD TABLE OF we_cabecalho
WITH HEADER LINE,
wt_item TYPE STANDARD TABLE OF we_item
WITH HEADER LINE.

* Tab. com informações sobre as características dos campos


DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

* Tab. de eventos
DATA: wt_events TYPE slis_t_event.

*$*$ Estruturas --------------------------------------------------------


* Informações sobre o link entre as tabelas ( JOIN )
DATA: wf_keyinfo TYPE slis_keyinfo_alv.

*$*$ Variáveis ---------------------------------------------------------


DATA: wv_repid LIKE sy-repid. " Nome do programa principal

DATA: wv_tabname_header TYPE slis_tabname, " Nome da tabela de Cabec.


wv_tabname_item TYPE slis_tabname. " Nome da tabela de Ítems

Autor: Flavio Ricardo de Almeida 62


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

*$*$ Tela de Seleção ---------------------------------------------------


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
SELECT-OPTIONS: s_vbeln FOR wt_cabecalho-vbeln.
SELECTION-SCREEN END OF BLOCK b1.

*$*$ Inicialização -----------------------------------------------------


INITIALIZATION.
PERFORM z_inicializacao.

*$*$ Rotina Principal --------------------------------------------------


START-OF-SELECTION.
PERFORM z_obter_dados.
* Indicar campos para exibição na lista
PERFORM z_fieldcat_init USING wt_fieldcat[].
* Eventos que podem ser acionados na lista
PERFORM z_eventtab_build USING wt_events[].

END-OF-SELECTION.
* Construção da lista propriamente dita ( Exibição das informações )
PERFORM z_list_display.

*$*$ Sub-rotinas -------------------------------------------------------


*&---------------------------------------------------------------------*
*& Form Z_INICIALIZACAO
*&---------------------------------------------------------------------*
* Inicialização de variáveis
*----------------------------------------------------------------------*
FORM z_inicializacao.

* Nome do programa
wv_repid = sy-repid.
* Definição das tabelas - Header e Item
wv_tabname_header = 'WT_CABECALHO'.
wv_tabname_item = 'WT_ITEM'.
* Define informações da chave
CLEAR wf_keyinfo.
wf_keyinfo-header01 = 'VBELN'.
wf_keyinfo-item01 = 'VBELN'.

ENDFORM. " Z_INICIALIZACAO

*&---------------------------------------------------------------------*
*& Form Z_OBTER_DADOS
*&---------------------------------------------------------------------*
* Obter informações para lista
*----------------------------------------------------------------------*
FORM z_obter_dados.
* Mensagem
PERFORM z_sapgui_progress_indicator
USING 'Selecionando dados. Aguarde...'.
* Obter informações dos cabeçalho
SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp
vkbur
INTO TABLE wt_cabecalho
FROM vbak
WHERE vbeln IN s_vbeln.
* Verificar se alguma informação foi encontrada
IF sy-subrc EQ 0.
* Obter informações dos ítens
SELECT vbeln posnr matnr arktx kwmeng netwr
INTO TABLE wt_item
FROM vbap
FOR ALL ENTRIES IN wt_cabecalho
WHERE vbeln EQ wt_cabecalho-vbeln.
ENDIF.
* Ordenar tabelas
SORT: wt_cabecalho, wt_item.

Autor: Flavio Ricardo de Almeida 63


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

ENDFORM. " Z_OBTER_DADOS

*&---------------------------------------------------------------------*
*& Form Z_SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* Interagir com o front-end - Enviar mensagens
*----------------------------------------------------------------------*
* --> PV_TEXT - Mensagem
*----------------------------------------------------------------------*
FORM z_sapgui_progress_indicator USING value(pv_text).

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'


EXPORTING
* PERCENTAGE = 0
text = pv_text.

ENDFORM. " Z_SAPGUI_PROGRESS_INDICATOR

*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_INIT *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
CLEAR pt_fieldcat[].
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
lf_fieldcat-hotspot = 'X'.
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.
* Data de Criação
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERDAT'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERNAM'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Tipo de Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'AUART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Organização de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKORG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.

Autor: Flavio Ricardo de Almeida 64


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* Canal de distribuição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VTWEG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Setor de atividade
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'SPART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Grupo de Vendedores
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKGRP'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Escritório de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKBUR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Ítem da ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'POSNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do material
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'MATNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição do material na Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ARKTX'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Quantidade do ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KWMENG'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líquido ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.

ENDFORM. " FORM Z_FIELDCAT_INIT

*&---------------------------------------------------------------------*
*& Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
* Listar imformações
*----------------------------------------------------------------------*
FORM z_list_display.
* Mensagem
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
*
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'

Autor: Flavio Ricardo de Almeida 65


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

EXPORTING
i_callback_program = wv_repid
it_fieldcat = wt_fieldcat[]
i_save = 'A'
i_tabname_header = wv_tabname_header
i_tabname_item = wv_tabname_item
is_keyinfo = wf_keyinfo
it_events = wt_events[]
TABLES
t_outtab_header = wt_cabecalho
t_outtab_item = wt_item
EXCEPTIONS
program_error = 1
OTHERS = 2.
* Verificar processamento da função
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDFORM. " Z_LIST_DISPLAY

*&---------------------------------------------------------------------*
*& Form Z_EVENTTAB_BUILD
*&---------------------------------------------------------------------*
* Definir eventos associados a lista *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventtab_build USING pt_events TYPE slis_t_event.

* Variáveis
DATA: lf_event TYPE slis_alv_event.

* Obter todos os eventos


CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 1 " 1 = Lista Hierárquica
IMPORTING
et_events = pt_events.
* Verificar se evento foi encontrado
LOOP AT pt_events INTO lf_event.
CASE lf_event-name.
WHEN slis_ev_user_command.
MOVE 'Z_USER_COMMAND' TO lf_event-form.
WHEN slis_ev_item_data_expand.
* move 'Z_ITEM_DATA_EXPAND' to lf_event-form.
WHEN slis_ev_reprep_sel_modify.
* move 'Z_REPREP_SEL_MODIFY' to lf_event-form.
WHEN slis_ev_caller_exit_at_start.
* MOVE 'Z_CALLER_EXIT' TO lf_event-form.
WHEN slis_ev_top_of_page.
MOVE 'Z_TOP_OF_PAGE' TO lf_event-form.
WHEN slis_ev_foreign_top_of_page.
* move 'Z_FOREIGN_TOP_OF_PAGE' to lf_event-form.
WHEN slis_ev_foreign_end_of_page.
* move 'Z_FOREIGN_END_OF_PAGE' to lf_event-form.
WHEN slis_ev_pf_status_set.
* MOVE 'Z_PF_STATUS_SET' TO lf_event-form.
WHEN slis_ev_list_modify.
* MOVE 'Z_LIST_MODIFY' TO lf_event-form.
WHEN slis_ev_top_of_list.
* MOVE 'Z_TOP_OF_LIST' TO lf_event-form.
WHEN slis_ev_end_of_page.
* MOVE 'Z_END_OF_PAGE' TO lf_event-form.
WHEN slis_ev_end_of_list.
* MOVE 'Z_END_OF_LIST' TO lf_event-form.
ENDCASE.

Autor: Flavio Ricardo de Almeida 66


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

MODIFY pt_events FROM lf_event.


ENDLOOP.

ENDFORM. " Z_EVENTTAB_BUILD

*----------------------------------------------------------------------*
* FORM Z_USER_COMMAND *
*----------------------------------------------------------------------*
* Ações do usuário *
*----------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm LIKE sy-ucomm
pf_selfield TYPE slis_selfield. "#EC CALLED
*
CASE pv_ucomm.
* Ação de Click duplo '&IC1'
WHEN '&IC1'.
* Verificar campo selecionado
CASE pf_selfield-sel_tab_field.
WHEN 'WT_CABECALHO-VBELN'.
* Posicionar no registro selecionado
READ TABLE wt_cabecalho INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'AUN' FIELD wt_cabecalho-vbeln.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.

ENDFORM.

*----------------------------------------------------------------------*
* FORM Z_TOP_OF_PAGE *
*----------------------------------------------------------------------*
* Evento de cabeçalho *
*----------------------------------------------------------------------*
FORM z_top_of_page. "#EC CALLED

WRITE: / 'Relatório:', sy-repid,


/12 sy-title.
* / 'Data ....:', sy-datum,
* / 'Hora ....:', sy-uzeit,
* / 'Página ..:', sy-pagno.

ENDFORM.

Autor: Flavio Ricardo de Almeida 67


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Capítulo 4
*$*$********************************************************************
*$*$ *
*$*$ PROGRAMA: Lista de Blocos Simples *
*$*$ TIPO : Lista ALV *
*$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria *
*$*$ DATA : 12/01/2002 *
*$** OBS. : *
*$** *
*$*$********************************************************************
*$*$ HISTÓRICO DAS MODIFICAÇÕES *
*$*$-------------------------------------------------------------------*
*$*$ DATA | AUTOR | DESCRIÇÃO *
*$*$-------------------------------------------------------------------*
*$** | | *
*$*$********************************************************************
REPORT zfra0023_16 .

*$*$ Type pools --------------------------------------------------------


TYPE-POOLS: slis.

*$*$ Tipos -------------------------------------------------------------


TYPES: BEGIN OF we_cliente,
kunnr LIKE kna1-kunnr, " Código do cliente
name1 LIKE kna1-name1, " Descrição
stras LIKE kna1-stras, " Endereço
regio LIKE kna1-regio, " Estado
land1 LIKE kna1-land1, " País
END OF we_cliente.

TYPES: BEGIN OF we_cabecalho,


vbeln LIKE vbak-vbeln, " Nro da ordem de venda
erdat LIKE vbak-erdat, " Data de criação
ernam LIKE vbak-ernam, " Criado por
audat LIKE vbak-audat, " Data da ordem
auart LIKE vbak-auart, " Tipo de ordem
netwr LIKE vbak-netwr, " Valor líq. da ordem
vkorg LIKE vbak-vkorg, " Org. de vendas
vtweg LIKE vbak-vtweg, " Canal de distribuição
spart LIKE vbak-spart, " Setor de atividade
vkgrp LIKE vbak-vkgrp, " Grupo de vendedores
vkbur LIKE vbak-vkbur, " Escritório de vendas
kunnr LIKE vbak-kunnr, " Código do cliente
END OF we_cabecalho.

TYPES: BEGIN OF we_item,


vbeln LIKE vbap-vbeln, " Nro da ordem de venda
posnr LIKE vbap-posnr, " Nro do ítem da ordem de venda
matnr LIKE vbap-matnr, " Código do material
arktx LIKE vbap-arktx, " Desc.material-Entrada na ordem
kwmeng LIKE vbap-kwmeng, " Quantidade da ordem
netwr LIKE vbap-netwr, " Valor líq. do ítem
END OF we_item.

*$*$ Tabelas Internas --------------------------------------------------


DATA: wt_cliente TYPE STANDARD TABLE OF we_cliente
WITH HEADER LINE,
wt_cabecalho TYPE STANDARD TABLE OF we_cabecalho
WITH HEADER LINE,
wt_item TYPE STANDARD TABLE OF we_item
WITH HEADER LINE.

* Tab. de eventos
DATA: wt_eventos_cliente TYPE slis_t_event,
wt_eventos_cabecalho TYPE slis_t_event,
wt_eventos_item TYPE slis_t_event.

Autor: Flavio Ricardo de Almeida 68


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* Tab. com informações sobre as características dos campos


DATA: wt_fieldcat_cliente TYPE slis_t_fieldcat_alv,
wt_fieldcat_cabecalho TYPE slis_t_fieldcat_alv,
wt_fieldcat_item TYPE slis_t_fieldcat_alv.

*$*$ Estruturas --------------------------------------------------------


* Layout das listas
DATA: wf_layout_cliente TYPE slis_layout_alv,
wf_layout_cabecalho TYPE slis_layout_alv,
wf_layout_item TYPE slis_layout_alv.
* Configurações de impressão
DATA: wf_print TYPE slis_print_alv.

*$*$ Tela de Seleção ---------------------------------------------------


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
SELECT-OPTIONS: s_vbeln FOR wt_cabecalho-vbeln.
SELECTION-SCREEN END OF BLOCK b1.

*$*$ Rotina Principal --------------------------------------------------


START-OF-SELECTION.
PERFORM z_obter_dados.
* Determinar eventos para cada bloco
PERFORM z_eventos_clientes USING wt_eventos_cliente[].
PERFORM z_eventos_cabecalho USING wt_eventos_cabecalho[].
PERFORM z_eventos_item USING wt_eventos_item[].
* Montar estrutura de campos das listas
PERFORM z_fieldcat_cliente USING wt_fieldcat_cliente[].
PERFORM z_fieldcat_cabecalho USING wt_fieldcat_cabecalho[].
PERFORM z_fieldcat_item USING wt_fieldcat_item[].
* Inicializar blocos
PERFORM z_list_init.
* Criar blocos de lista
PERFORM z_list_append.
* Configurações de impressão
PERFORM z_print_build USING wf_print.
*
END-OF-SELECTION.
* Impressão do relatório
PERFORM z_list_display.
*
*$*$ Subrotinas --------------------------------------------------------
*&---------------------------------------------------------------------*
*& Form Z_OBTER_DADOS
*&---------------------------------------------------------------------*
* Obter informações para lista
*----------------------------------------------------------------------*
FORM z_obter_dados.
* Mensagem
PERFORM z_sapgui_progress_indicator
USING 'Selecionando dados. Aguarde...'.
* Obter informações dos cabeçalho
SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp
vkbur kunnr
INTO TABLE wt_cabecalho
FROM vbak
WHERE vbeln IN s_vbeln.
* Verificar se alguma informação foi encontrada
IF sy-subrc EQ 0.
* Obter informações dos ítens
SELECT vbeln posnr matnr arktx kwmeng netwr
INTO TABLE wt_item
FROM vbap
FOR ALL ENTRIES IN wt_cabecalho
WHERE vbeln EQ wt_cabecalho-vbeln.
* Obter clientes
SELECT DISTINCT kunnr name1 stras regio land1
INTO TABLE wt_cliente
FROM kna1

Autor: Flavio Ricardo de Almeida 69


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

FOR ALL ENTRIES IN wt_cabecalho


WHERE kunnr EQ wt_cabecalho-kunnr.
ENDIF.
* Ordenar tabelas
SORT: wt_cliente, wt_cabecalho, wt_item.

ENDFORM. " Z_OBTER_DADOS

*&---------------------------------------------------------------------*
*& Form Z_SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* Interagir com o front-end - Enviar mensagens
*----------------------------------------------------------------------*
* --> PV_TEXT - Mensagem
*----------------------------------------------------------------------*
FORM z_sapgui_progress_indicator USING value(pv_text).

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'


EXPORTING
* PERCENTAGE = 0
text = pv_text.

ENDFORM. " Z_SAPGUI_PROGRESS_INDICATOR

*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_CLIENTES
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de clientes *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_clientes USING pt_events TYPE slis_t_event.

* Variáveis
DATA: lf_event TYPE slis_alv_event.

* Obter todos os eventos


CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 2 " 2 = Lista Bloco Simples
IMPORTING
et_events = pt_events.
* Verificar se evento foi encontrado
LOOP AT pt_events INTO lf_event.
CASE lf_event-name.
WHEN slis_ev_top_of_page.
* MOVE 'Z_TOP_OF_PAGE_CLI' TO lf_event-form.
WHEN slis_ev_top_of_coverpage.
* move 'Z_TOP_OF_COVERPAGE_CLI' to lf_event-form.
WHEN slis_ev_end_of_coverpage.
* move 'Z_END_OF_COVERPAGE_CLI' to lf_event-form.
WHEN slis_ev_foreign_top_of_page.
* move 'Z_FOREIGN_TOP_OF_PAGE_CLI' to lf_event-form.
WHEN slis_ev_foreign_end_of_page.
* move 'Z_FOREIGN_END_OF_PAGE_CLI' to lf_event-form.
WHEN slis_ev_list_modify.
* MOVE 'Z_LIST_MODIFY_CLI' TO lf_event-form.
WHEN slis_ev_top_of_list.
MOVE 'Z_TOP_OF_LIST_CLI' TO lf_event-form.
WHEN slis_ev_end_of_page.
* move 'Z_END_OF_PAGE_CLI' to lf_event-form.
WHEN slis_ev_end_of_list.
* move 'Z_END_OF_LIST_CLI' to lf_event-form.
WHEN slis_ev_after_line_output.
* MOVE 'Z_AFTER_LINE_OUTPUT_CLI' TO lf_event-form.
WHEN slis_ev_before_line_output.
* MOVE 'Z_BEFORE_LINE_OUTPUT_CLI' TO lf_event-form.
ENDCASE.

Autor: Flavio Ricardo de Almeida 70


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

MODIFY pt_events FROM lf_event.


ENDLOOP.

ENDFORM. " Z_EVENTOS_CLIENTES

*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_CABECALHO
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de cabeçalho das ordens *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_cabecalho USING pt_events TYPE slis_t_event.

* Variáveis
DATA: lf_event TYPE slis_alv_event.

* Obter todos os eventos


CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 2 " 2 = Lista Bloco Simples
IMPORTING
et_events = pt_events.
* Verificar se evento foi encontrado
LOOP AT pt_events INTO lf_event.
CASE lf_event-name.
WHEN slis_ev_top_of_page.
* MOVE 'Z_TOP_OF_PAGE_CABEC' TO lf_event-form.
WHEN slis_ev_top_of_coverpage.
* move 'Z_TOP_OF_COVERPAGE_CABEC' to lf_event-form.
WHEN slis_ev_end_of_coverpage.
* move 'Z_END_OF_COVERPAGE_CABEC' to lf_event-form.
WHEN slis_ev_foreign_top_of_page.
* move 'Z_FOREIGN_TOP_OF_PAGE_CABEC' to lf_event-form.
WHEN slis_ev_foreign_end_of_page.
* move 'Z_FOREIGN_END_OF_PAGE_CABEC' to lf_event-form.
WHEN slis_ev_list_modify.
* MOVE 'Z_LIST_MODIFY_CABEC' TO lf_event-form.
WHEN slis_ev_top_of_list.
MOVE 'Z_TOP_OF_LIST_CABEC' TO lf_event-form.
WHEN slis_ev_end_of_page.
* move 'Z_END_OF_PAGE_CABEC' to lf_event-form.
WHEN slis_ev_end_of_list.
* move 'Z_END_OF_LIST_CABEC' to lf_event-form.
WHEN slis_ev_after_line_output.
* MOVE 'Z_AFTER_LINE_OUTPUT_CABEC' TO lf_event-form.
WHEN slis_ev_before_line_output.
* MOVE 'Z_BEFORE_LINE_OUTPUT_CABEC' TO lf_event-form.
ENDCASE.
MODIFY pt_events FROM lf_event.
ENDLOOP.

ENDFORM. " Z_EVENTOS_CABECALHO

*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_ITEM
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de ítens das ordens *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_item USING pt_events TYPE slis_t_event.

* Variáveis
DATA: lf_event TYPE slis_alv_event.

* Obter todos os eventos


CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

Autor: Flavio Ricardo de Almeida 71


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

EXPORTING
i_list_type = 2 " 2 = Lista Bloco Simples
IMPORTING
et_events = pt_events.
* Verificar se evento foi encontrado
LOOP AT pt_events INTO lf_event.
CASE lf_event-name.
WHEN slis_ev_top_of_page.
* MOVE 'Z_TOP_OF_PAGE_ITEM' TO lf_event-form.
WHEN slis_ev_top_of_coverpage.
* move 'Z_TOP_OF_COVERPAGE_ITEM' to lf_event-form.
WHEN slis_ev_end_of_coverpage.
* move 'Z_END_OF_COVERPAGE_ITEM' to lf_event-form.
WHEN slis_ev_foreign_top_of_page.
* move 'Z_FOREIGN_TOP_OF_PAGE_ITEM' to lf_event-form.
WHEN slis_ev_foreign_end_of_page.
* move 'Z_FOREIGN_END_OF_PAGE_ITEM' to lf_event-form.
WHEN slis_ev_list_modify.
* MOVE 'Z_LIST_MODIFY_ITEM' TO lf_event-form.
WHEN slis_ev_top_of_list.
MOVE 'Z_TOP_OF_LIST_ITEM' TO lf_event-form.
WHEN slis_ev_end_of_page.
* move 'Z_END_OF_PAGE_ITEM' to lf_event-form.
WHEN slis_ev_end_of_list.
* move 'Z_END_OF_LIST_ITEM' to lf_event-form.
WHEN slis_ev_after_line_output.
* MOVE 'Z_AFTER_LINE_OUTPUT_ITEM' TO lf_event-form.
WHEN slis_ev_before_line_output.
* MOVE 'Z_BEFORE_LINE_OUTPUT_ITEM' TO lf_event-form.
ENDCASE.
MODIFY pt_events FROM lf_event.
ENDLOOP.

ENDFORM. " Z_EVENTOS_ITEM

*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_CLIENTE *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de cliente *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_cliente USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
CLEAR pt_fieldcat[].
* Campos para lista de cliente
* Código do cliente
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KUNNR'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NAME1'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* Endereço
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'STRAS'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* Estados

Autor: Flavio Ricardo de Almeida 72


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'REGIO'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* País
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'LAND1'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
*
ENDFORM. " Z_FIELDCAT_CLIENTE

*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_CABECALHO *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de cabeçalho *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_cabecalho USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
CLEAR pt_fieldcat[].
* Campos para lista de cabeçalho
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
lf_fieldcat-hotspot = 'X'.
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.
* Data de Criação
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERDAT'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERNAM'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Tipo de Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'AUART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Organização de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKORG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VTWEG'.

Autor: Flavio Ricardo de Almeida 73


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Setor de atividade
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'SPART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Grupo de Vendedores
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKGRP'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Escritório de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKBUR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do cliente
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KUNNR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
*
ENDFORM. " Z_FIELDCAT_CABECALHO

*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_ITEM *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de item *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_item USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
CLEAR pt_fieldcat[].
* Campos para lista de item
* Nro ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Ítem da ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'POSNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do material
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'MATNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição do material na Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ARKTX'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.

Autor: Flavio Ricardo de Almeida 74


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* Quantidade do ítem na ordem


CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KWMENG'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líquido ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.

ENDFORM. " Z_FIELDCAT_ITEM

*---------------------------------------------------------------------*
* FORM Z_PRINT_BUILD *
*---------------------------------------------------------------------*
* Definir atributos de impressão da lista *
*---------------------------------------------------------------------*
* --> PF_PRINT - Estrutura com atributos da impressão da lista *
*---------------------------------------------------------------------*
FORM z_print_build USING pf_print TYPE slis_print_alv.
*
* PF_PRINT-PRINT = 'X'. " Imprimir no SPOOL
pf_print-no_print_selinfos = 'X'. " Não listar info. sobre seleção
pf_print-no_coverpage = 'X'. " Não listar página de rostp
pf_print-no_print_listinfos = 'X'. " Não listar info. sobre a lista
* PF_PRINT-RESERVE_LINES = 'X'. " Reservar linhas
* PF_PRINT-NO_NEW_PAGE = 'X'. " Sem novas páginas
* PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " Não alterar tamanho da linha

ENDFORM. " Z_PRINT_BUILD

*&---------------------------------------------------------------------*
*& Form Z_LIST_INIT
*&---------------------------------------------------------------------*
* Inicialização da lista
*----------------------------------------------------------------------*
FORM z_list_init.
*
DATA: lv_program TYPE repid.
*
* Atribuir nome do programa
lv_program = sy-repid.
* Inicializar lista
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
i_callback_program = lv_program
i_callback_user_command = 'Z_USER_COMMAND'.
* i_callback_pf_status_set = 'STANDARD'
* it_excluding = wt_extab.
*
ENDFORM. " Z_LIST_INIT

*&---------------------------------------------------------------------*
*& Form Z_LIST_APPEND
*&---------------------------------------------------------------------*
* Criar os blocos de listas
*----------------------------------------------------------------------*
FORM z_list_append.

* Criar bloco de Cliente


CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
it_fieldcat = wt_fieldcat_cliente
is_layout = wf_layout_cliente
i_tabname = 'WT_CLIENTE'

Autor: Flavio Ricardo de Almeida 75


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

it_events = wt_eventos_cliente
i_text = 'CLIENTE'
TABLES
t_outtab = wt_cliente.
* Criar bloco de Cabeçalho
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
it_fieldcat = wt_fieldcat_cabecalho
is_layout = wf_layout_cabecalho
i_tabname = 'WT_CABECALHO'
it_events = wt_eventos_cabecalho
i_text = 'CABEÇALHO'
TABLES
t_outtab = wt_cabecalho.
* Criar bloco de Ítem
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
it_fieldcat = wt_fieldcat_item
is_layout = wf_layout_item
i_tabname = 'WT_ITEM'
it_events = wt_eventos_item
i_text = 'ITEM'
TABLES
t_outtab = wt_item.

ENDFORM. " Z_LIST_APPEND

*&---------------------------------------------------------------------*
*& Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
* Impressão da lista
*----------------------------------------------------------------------*
FORM z_list_display.

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'


EXPORTING
is_print = wf_print.

ENDFORM. " Z_LIST_DISPLAY

*&---------------------------------------------------------------------*
*& Form Z_TOP_OF_LIST_CLI
*&---------------------------------------------------------------------*
* Cabeçalho de cliente
*----------------------------------------------------------------------*
FORM z_top_of_list_cli.

WRITE: / 'Lista de CLIENTE'.

ENDFORM. " Z_TOP_OF_LIST_CLI

*&---------------------------------------------------------------------*
*& Form Z_TOP_OF_LIST_CABEC
*&---------------------------------------------------------------------*
* Cabeçalho de cabeçalho
*----------------------------------------------------------------------*
FORM z_top_of_list_cabec.

WRITE: / 'Lista de CABECALHO'.

ENDFORM. " Z_TOP_OF_LIST_CABEC

*&---------------------------------------------------------------------*
*& Form Z_TOP_OF_LIST_ITEM
*&---------------------------------------------------------------------*
* Cabeçalho de ítem
*----------------------------------------------------------------------*
FORM z_top_of_list_item.

Autor: Flavio Ricardo de Almeida 76


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

WRITE: / 'Lista de ITEM'.

ENDFORM. " Z_TOP_OF_LIST_ITEM

*---------------------------------------------------------------------*
* FORM Z_USER_COMMAND *
*---------------------------------------------------------------------*
* Ações do usuário *
*---------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm LIKE sy-ucomm "#EC CALLED
pf_selfield TYPE slis_selfield.
*
CASE pv_ucomm.
WHEN '&IC1'.
* Verificar qual bloco foi acionado
CASE pf_selfield-tabname.
WHEN 'WT_CLIENTE'.
* Exibir CLIENTE
* Informações do registro
READ TABLE wt_cliente INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'KUN' FIELD wt_cliente-kunnr.
SET PARAMETER ID 'BUK' FIELD ''.
SET PARAMETER ID 'VKO' FIELD ''.
SET PARAMETER ID 'VTW' FIELD ''.
SET PARAMETER ID 'SPA' FIELD ''.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'XD03' AND SKIP FIRST SCREEN.
WHEN 'WT_CABECALHO'.
* Exibir ORDEM
* Informações do registro
READ TABLE wt_cabecalho INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'AUN' FIELD wt_cabecalho-vbeln.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
WHEN 'WT_ITEM'.
* Exibir ORDEM
* Informações do registro
READ TABLE wt_item INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'AUN' FIELD wt_item-vbeln.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
*
ENDFORM. " Z_USER_COMMAND

Autor: Flavio Ricardo de Almeida 77


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Capítulo 5
*$*$********************************************************************
*$*$ *
*$*$ PROGRAMA: Lista de Bloco Hierárquico *
*$*$ TIPO : Lista ALV *
*$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria *
*$*$ DATA : 12/01/2002 *
*$** OBS. : *
*$** *
*$*$********************************************************************
*$*$ HISTÓRICO DAS MODIFICAÇÕES *
*$*$-------------------------------------------------------------------*
*$*$ DATA | AUTOR | DESCRIÇÃO *
*$*$-------------------------------------------------------------------*
*$** | | *
*$*$********************************************************************
REPORT zfra0023_17 .

*$*$ Type pools --------------------------------------------------------


TYPE-POOLS: slis.

*$*$ Tipos -------------------------------------------------------------


TYPES: BEGIN OF we_cliente,
kunnr LIKE kna1-kunnr, " Código do cliente
name1 LIKE kna1-name1, " Descrição
stras LIKE kna1-stras, " Endereço
regio LIKE kna1-regio, " Estado
land1 LIKE kna1-land1, " País
END OF we_cliente.

TYPES: BEGIN OF we_cabecalho,


vbeln LIKE vbak-vbeln, " Nro da ordem de venda
erdat LIKE vbak-erdat, " Data de criação
ernam LIKE vbak-ernam, " Criado por
audat LIKE vbak-audat, " Data da ordem
auart LIKE vbak-auart, " Tipo de ordem
netwr LIKE vbak-netwr, " Valor líq. da ordem
vkorg LIKE vbak-vkorg, " Org. de vendas
vtweg LIKE vbak-vtweg, " Canal de distribuição
spart LIKE vbak-spart, " Setor de atividade
vkgrp LIKE vbak-vkgrp, " Grupo de vendedores
vkbur LIKE vbak-vkbur, " Escritório de vendas
kunnr LIKE vbak-kunnr, " Código do cliente
END OF we_cabecalho.

TYPES: BEGIN OF we_item,


vbeln LIKE vbap-vbeln, " Nro da ordem de venda
posnr LIKE vbap-posnr, " Nro do ítem da ordem de venda
matnr LIKE vbap-matnr, " Código do material
arktx LIKE vbap-arktx, " Desc.material-Entrada na ordem
kwmeng LIKE vbap-kwmeng, " Quantidade da ordem
netwr LIKE vbap-netwr, " Valor líq. do ítem
END OF we_item.

*$*$ Tabelas Internas --------------------------------------------------


DATA: wt_cliente TYPE STANDARD TABLE OF we_cliente
WITH HEADER LINE,
wt_cabecalho TYPE STANDARD TABLE OF we_cabecalho
WITH HEADER LINE,
wt_item TYPE STANDARD TABLE OF we_item
WITH HEADER LINE.

* Tab. de eventos
DATA: wt_eventos_cliente TYPE slis_t_event,
wt_eventos_ordem TYPE slis_t_event.

* Tab. com informações sobre as características dos campos

Autor: Flavio Ricardo de Almeida 78


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

DATA: wt_fieldcat_cliente TYPE slis_t_fieldcat_alv,


wt_fieldcat_ordem TYPE slis_t_fieldcat_alv.

*$*$ Estruturas --------------------------------------------------------


* Layout das listas
DATA: wf_layout_cliente TYPE slis_layout_alv,
wf_layout_ordem TYPE slis_layout_alv.
* Configurações de impressão
DATA: wf_print TYPE slis_print_alv.
* Informações sobre o link entre as tabelas ( JOIN )
DATA: wf_keyinfo TYPE slis_keyinfo_alv.

*$*$ Tela de Seleção ---------------------------------------------------


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
SELECT-OPTIONS: s_vbeln FOR wt_cabecalho-vbeln.
SELECTION-SCREEN END OF BLOCK b1.

*$*$ Rotina Principal --------------------------------------------------


START-OF-SELECTION.
PERFORM z_obter_dados.
* Determinar eventos para cada bloco
PERFORM z_eventos_clientes USING wt_eventos_cliente[].
PERFORM z_eventos_ordem USING wt_eventos_ordem[].
* Montar estrutura de campos das listas
PERFORM z_fieldcat_cliente USING wt_fieldcat_cliente[].
PERFORM z_fieldcat_cabecalho USING wt_fieldcat_ordem[].
PERFORM z_fieldcat_item USING wt_fieldcat_ordem[].
* Inicializar blocos
PERFORM z_list_init.
* Criar blocos de lista
PERFORM z_list_append.
* Configurações de impressão
PERFORM z_print_build USING wf_print.
*
END-OF-SELECTION.
* Impressão do relatório
PERFORM z_list_display.
*
*$*$ Subrotinas --------------------------------------------------------
*&---------------------------------------------------------------------*
*& Form Z_OBTER_DADOS
*&---------------------------------------------------------------------*
* Obter informações para lista
*----------------------------------------------------------------------*
FORM z_obter_dados.
* Mensagem
PERFORM z_sapgui_progress_indicator
USING 'Selecionando dados. Aguarde...'.
* Obter informações dos cabeçalho
SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp
vkbur kunnr
INTO TABLE wt_cabecalho
FROM vbak
WHERE vbeln IN s_vbeln.
* Verificar se alguma informação foi encontrada
IF sy-subrc EQ 0.
* Obter informações dos ítens
SELECT vbeln posnr matnr arktx kwmeng netwr
INTO TABLE wt_item
FROM vbap
FOR ALL ENTRIES IN wt_cabecalho
WHERE vbeln EQ wt_cabecalho-vbeln.
* Obter clientes
SELECT DISTINCT kunnr name1 stras regio land1
INTO TABLE wt_cliente
FROM kna1
FOR ALL ENTRIES IN wt_cabecalho
WHERE kunnr EQ wt_cabecalho-kunnr.

Autor: Flavio Ricardo de Almeida 79


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

ENDIF.
* Ordenar tabelas
SORT: wt_cliente, wt_cabecalho, wt_item.

ENDFORM. " Z_OBTER_DADOS

*&---------------------------------------------------------------------*
*& Form Z_SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* Interagir com o front-end - Enviar mensagens
*----------------------------------------------------------------------*
* --> PV_TEXT - Mensagem
*----------------------------------------------------------------------*
FORM z_sapgui_progress_indicator USING value(pv_text).

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'


EXPORTING
* PERCENTAGE = 0
text = pv_text.

ENDFORM. " Z_SAPGUI_PROGRESS_INDICATOR

*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_CLIENTES
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de clientes *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_clientes USING pt_events TYPE slis_t_event.

* Variáveis
DATA: lf_event TYPE slis_alv_event.

* Obter todos os eventos


CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 2 " 2 = Lista Bloco Simples
IMPORTING
et_events = pt_events.
* Verificar se evento foi encontrado
LOOP AT pt_events INTO lf_event.
CASE lf_event-name.
WHEN slis_ev_top_of_page.
* MOVE 'Z_TOP_OF_PAGE_CLI' TO lf_event-form.
WHEN slis_ev_top_of_coverpage.
* move 'Z_TOP_OF_COVERPAGE_CLI' to lf_event-form.
WHEN slis_ev_end_of_coverpage.
* move 'Z_END_OF_COVERPAGE_CLI' to lf_event-form.
WHEN slis_ev_foreign_top_of_page.
* move 'Z_FOREIGN_TOP_OF_PAGE_CLI' to lf_event-form.
WHEN slis_ev_foreign_end_of_page.
* move 'Z_FOREIGN_END_OF_PAGE_CLI' to lf_event-form.
WHEN slis_ev_list_modify.
* MOVE 'Z_LIST_MODIFY_CLI' TO lf_event-form.
WHEN slis_ev_top_of_list.
MOVE 'Z_TOP_OF_LIST_CLI' TO lf_event-form.
WHEN slis_ev_end_of_page.
* move 'Z_END_OF_PAGE_CLI' to lf_event-form.
WHEN slis_ev_end_of_list.
* move 'Z_END_OF_LIST_CLI' to lf_event-form.
WHEN slis_ev_after_line_output.
* MOVE 'Z_AFTER_LINE_OUTPUT_CLI' TO lf_event-form.
WHEN slis_ev_before_line_output.
* MOVE 'Z_BEFORE_LINE_OUTPUT_CLI' TO lf_event-form.
ENDCASE.
MODIFY pt_events FROM lf_event.
ENDLOOP.

Autor: Flavio Ricardo de Almeida 80


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

ENDFORM. " Z_EVENTOS_CLIENTES

*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_ORDEM
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de ordens *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_ordem USING pt_events TYPE slis_t_event.

* Variáveis
DATA: lf_event TYPE slis_alv_event.

* Obter todos os eventos


CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 3 " 3 = Lista Bloco Hierárquico
IMPORTING
et_events = pt_events.
* Verificar se evento foi encontrado
LOOP AT pt_events INTO lf_event.
CASE lf_event-name.
WHEN slis_ev_top_of_page.
* MOVE 'Z_TOP_OF_PAGE_ORDEM' TO lf_event-form.
WHEN slis_ev_top_of_coverpage.
* move 'Z_TOP_OF_COVERPAGE_ORDEM' to lf_event-form.
WHEN slis_ev_end_of_coverpage.
* move 'Z_END_OF_COVERPAGE_ORDEM' to lf_event-form.
WHEN slis_ev_foreign_top_of_page.
* move 'Z_FOREIGN_TOP_OF_PAGE_ORDEM' to lf_event-form.
WHEN slis_ev_foreign_end_of_page.
* move 'Z_FOREIGN_END_OF_PAGE_ORDEM' to lf_event-form.
WHEN slis_ev_list_modify.
* MOVE 'Z_LIST_MODIFY_ORDEM' TO lf_event-form.
WHEN slis_ev_top_of_list.
MOVE 'Z_TOP_OF_LIST_ORDEM' TO lf_event-form.
WHEN slis_ev_end_of_list.
* move 'Z_END_OF_LIST_ORDEM' to lf_event-form.
WHEN slis_ev_after_line_output.
* MOVE 'Z_AFTER_LINE_OUTPUT_ORDEM' TO lf_event-form.
WHEN slis_ev_before_line_output.
* MOVE 'Z_BEFORE_LINE_OUTPUT_ORDEM' TO lf_event-form.
ENDCASE.
MODIFY pt_events FROM lf_event.
ENDLOOP.

ENDFORM. " Z_EVENTOS_ORDEM

*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_ITEM
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de ítens das ordens *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_item USING pt_events TYPE slis_t_event.

* Variáveis
DATA: lf_event TYPE slis_alv_event.

* Obter todos os eventos


CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 2 " 2 = Lista Bloco Simples
IMPORTING
et_events = pt_events.

Autor: Flavio Ricardo de Almeida 81


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* Verificar se evento foi encontrado


LOOP AT pt_events INTO lf_event.
CASE lf_event-name.
WHEN slis_ev_top_of_page.
* MOVE 'Z_TOP_OF_PAGE_ITEM' TO lf_event-form.
WHEN slis_ev_top_of_coverpage.
* move 'Z_TOP_OF_COVERPAGE_ITEM' to lf_event-form.
WHEN slis_ev_end_of_coverpage.
* move 'Z_END_OF_COVERPAGE_ITEM' to lf_event-form.
WHEN slis_ev_foreign_top_of_page.
* move 'Z_FOREIGN_TOP_OF_PAGE_ITEM' to lf_event-form.
WHEN slis_ev_foreign_end_of_page.
* move 'Z_FOREIGN_END_OF_PAGE_ITEM' to lf_event-form.
WHEN slis_ev_list_modify.
* MOVE 'Z_LIST_MODIFY_ITEM' TO lf_event-form.
WHEN slis_ev_top_of_list.
MOVE 'Z_TOP_OF_LIST_ITEM' TO lf_event-form.
WHEN slis_ev_end_of_page.
* move 'Z_END_OF_PAGE_ITEM' to lf_event-form.
WHEN slis_ev_end_of_list.
* move 'Z_END_OF_LIST_ITEM' to lf_event-form.
WHEN slis_ev_after_line_output.
* MOVE 'Z_AFTER_LINE_OUTPUT_ITEM' TO lf_event-form.
WHEN slis_ev_before_line_output.
* MOVE 'Z_BEFORE_LINE_OUTPUT_ITEM' TO lf_event-form.
ENDCASE.
MODIFY pt_events FROM lf_event.
ENDLOOP.

ENDFORM. " Z_EVENTOS_ITEM

*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_CLIENTE *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de cliente *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_cliente USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
CLEAR pt_fieldcat[].
* Campos para lista de cliente
* Código do cliente
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KUNNR'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NAME1'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* Endereço
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'STRAS'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* Estados
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'REGIO'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.

Autor: Flavio Ricardo de Almeida 82


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

APPEND lf_fieldcat TO pt_fieldcat.


* País
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'LAND1'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
*
ENDFORM. " Z_FIELDCAT_CLIENTE

*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_CABECALHO *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de cabeçalho *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_cabecalho USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
CLEAR pt_fieldcat[].
* Campos para lista de cabeçalho
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
lf_fieldcat-hotspot = 'X'.
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.
* Data de Criação
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERDAT'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERNAM'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Tipo de Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'AUART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Organização de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKORG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VTWEG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Setor de atividade

Autor: Flavio Ricardo de Almeida 83


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'SPART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Grupo de Vendedores
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKGRP'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Escritório de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKBUR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do cliente
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KUNNR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
*
ENDFORM. " Z_FIELDCAT_CABECALHO

*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_ITEM *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de item *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_item USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
* CLEAR pt_fieldcat[].
* Campos para lista de item
* Nro ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Ítem da ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'POSNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do material
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'MATNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição do material na Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ARKTX'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Quantidade do ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KWMENG'.
lf_fieldcat-tabname = 'WT_ITEM'.

Autor: Flavio Ricardo de Almeida 84


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líquido ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.

ENDFORM. " Z_FIELDCAT_ITEM

*---------------------------------------------------------------------*
* FORM Z_PRINT_BUILD *
*---------------------------------------------------------------------*
* Definir atributos de impressão da lista *
*---------------------------------------------------------------------*
* --> PF_PRINT - Estrutura com atributos da impressão da lista *
*---------------------------------------------------------------------*
FORM z_print_build USING pf_print TYPE slis_print_alv.
*
* PF_PRINT-PRINT = 'X'. " Imprimir no SPOOL
pf_print-no_print_selinfos = 'X'. " Não listar info. sobre seleção
pf_print-no_coverpage = 'X'. " Não listar página de rostp
pf_print-no_print_listinfos = 'X'. " Não listar info. sobre a lista
* PF_PRINT-RESERVE_LINES = 'X'. " Reservar linhas
* PF_PRINT-NO_NEW_PAGE = 'X'. " Sem novas páginas
* PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " Não alterar tamanho da linha

ENDFORM. " Z_PRINT_BUILD

*&---------------------------------------------------------------------*
*& Form Z_LIST_INIT
*&---------------------------------------------------------------------*
* Inicialização da lista
*----------------------------------------------------------------------*
FORM z_list_init.
*
DATA: lv_program TYPE repid.
*
* Atribuir nome do programa
lv_program = sy-repid.
* Inicializar lista
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
i_callback_program = lv_program
i_callback_user_command = 'Z_USER_COMMAND'.
* i_callback_pf_status_set = 'STANDARD'
* it_excluding = wt_extab.
*
ENDFORM. " Z_LIST_INIT

*&---------------------------------------------------------------------*
*& Form Z_LIST_APPEND
*&---------------------------------------------------------------------*
* Criar os blocos de listas
*----------------------------------------------------------------------*
FORM z_list_append.

* Criar bloco de Cliente


CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
it_fieldcat = wt_fieldcat_cliente
is_layout = wf_layout_cliente
i_tabname = 'WT_CLIENTE'
it_events = wt_eventos_cliente
i_text = 'CLIENTE'
TABLES
t_outtab = wt_cliente.

Autor: Flavio Ricardo de Almeida 85


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* Indicar relacionamento
wf_keyinfo-header01 = 'VBELN'.
wf_keyinfo-item01 = 'VBELN'.
* Criar bloco hierárquico
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_HS_APPEND'
EXPORTING
is_layout = wf_layout_ordem
it_fieldcat = wt_fieldcat_ordem
is_keyinfo = wf_keyinfo
i_header_tabname = 'WT_CABECALHO'
i_item_tabname = 'WT_ITEM'
it_events = wt_eventos_ordem
i_text = 'ORDEM'
TABLES
t_outtab_header = wt_cabecalho
t_outtab_item = wt_item.

ENDFORM. " Z_LIST_APPEND

*&---------------------------------------------------------------------*
*& Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
* Impressão da lista
*----------------------------------------------------------------------*
FORM z_list_display.

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'


EXPORTING
is_print = wf_print.

ENDFORM. " Z_LIST_DISPLAY

*&---------------------------------------------------------------------*
*& Form Z_TOP_OF_LIST_CLI
*&---------------------------------------------------------------------*
* Cabeçalho de cliente
*----------------------------------------------------------------------*
FORM z_top_of_list_cli.

WRITE: / 'Lista de CLIENTE'.

ENDFORM. " Z_TOP_OF_LIST_CLI

*&---------------------------------------------------------------------*
*& Form Z_TOP_OF_LIST_ORDEM
*&---------------------------------------------------------------------*
* Cabeçalho de lista para bloco de ordem
*----------------------------------------------------------------------*
FORM z_top_of_list_ordem.

WRITE: / 'Lista de ORDEM'.

ENDFORM. " Z_TOP_OF_LIST_ORDEM

*---------------------------------------------------------------------*
* FORM Z_USER_COMMAND *
*---------------------------------------------------------------------*
* Ações do usuário *
*---------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm LIKE sy-ucomm "#EC CALLED
pf_selfield TYPE slis_selfield.
*
CASE pv_ucomm.
WHEN '&IC1'.
* Verificar qual bloco foi acionado
CASE pf_selfield-tabname.
WHEN 'WT_CLIENTE'.
* Exibir CLIENTE

Autor: Flavio Ricardo de Almeida 86


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* Informações do registro
READ TABLE wt_cliente INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'KUN' FIELD wt_cliente-kunnr.
SET PARAMETER ID 'BUK' FIELD ''.
SET PARAMETER ID 'VKO' FIELD ''.
SET PARAMETER ID 'VTW' FIELD ''.
SET PARAMETER ID 'SPA' FIELD ''.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'XD03' AND SKIP FIRST SCREEN.
WHEN 'WT_CABECALHO'.
* Exibir ORDEM
* Informações do registro
READ TABLE wt_cabecalho INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'AUN' FIELD wt_cabecalho-vbeln.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
WHEN 'WT_ITEM'.
* Exibir ORDEM
* Informações do registro
READ TABLE wt_item INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'AUN' FIELD wt_item-vbeln.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
*
ENDFORM. " Z_USER_COMMAND

Autor: Flavio Ricardo de Almeida 87


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Capítulo 6
*$*$********************************************************************
*$*$ Projeto *
*$*$ *
*$*$ PROGRAMA: POPUP para seleção de valores via ALV *
*$*$ TIPO : Lista ALV *
*$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria *
*$*$ DATA : 14/01/2002 *
*$** OBS. : *
*$** *
*$*$********************************************************************
*$*$ HISTÓRICO DAS MODIFICAÇÕES *
*$*$-------------------------------------------------------------------*
*$*$ DATA | AUTOR | DESCRIÇÃO *
*$*$-------------------------------------------------------------------*
*$** | | *
*$*$********************************************************************
REPORT zfra0023_18 .

*$*$ Type-Pools --------------------------------------------------------


TYPE-POOLS: slis.

*$*$ Tipos -------------------------------------------------------------


TYPES: BEGIN OF we_cliente,
kunnr LIKE kna1-kunnr, " Código do cliente
name1 LIKE kna1-name1, " Descrição
box,
END OF we_cliente.

*$*$ Tabelas internas --------------------------------------------------


* Dados de clientes
DATA: wt_cliente TYPE STANDARD TABLE OF we_cliente WITH HEADER LINE.

* Configurações de campos
DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

*$*$ Variáveis ---------------------------------------------------------


* Nome do programa chamador
DATA: wv_repid LIKE sy-repid.

*$*$ Estruturas --------------------------------------------------------


DATA: wf_sel TYPE slis_selfield.

*$*$ Inicialização -----------------------------------------------------


INITIALIZATION.
wv_repid = sy-repid.

*$*$ Tela de Seleção ---------------------------------------------------


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
SELECT-OPTIONS: s_kunnr FOR wt_cliente-kunnr.
SELECTION-SCREEN END OF BLOCK b1.

*$*$ Rotina Principal --------------------------------------------------


START-OF-SELECTION.
*
PERFORM z_obter_dados.
* Indicar campos para exibição na lista
PERFORM z_fieldcat_init USING wt_fieldcat[].
*
END-OF-SELECTION.
* Listar informações POPUP
PERFORM z_popup.
* Listar registros selecionados
PERFORM z_display_list.

*$*$ Subrotinas --------------------------------------------------------

Autor: Flavio Ricardo de Almeida 88


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

*&---------------------------------------------------------------------*
*& Form Z_OBTER_DADOS
*&---------------------------------------------------------------------*
* Obter informações para lista
*----------------------------------------------------------------------*
FORM z_obter_dados.

SELECT kunnr name1 INTO TABLE wt_cliente


FROM kna1
WHERE kunnr IN s_kunnr.

ENDFORM. " Z_OBTER_DADOS

*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_INIT *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
CLEAR pt_fieldcat[].
* Montar estrutura
CLEAR lf_fieldcat.
* Código do cliente
* lf_field-col_pos = 1.
lf_fieldcat-fieldname = 'KUNNR'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição do cliente
* lf_afield-col_pos = 2.
lf_fieldcat-fieldname = 'NAME1'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.

ENDFORM. " FORM Z_FIELDCAT_INIT

*&---------------------------------------------------------------------*
*& Form Z_POPUP
*&---------------------------------------------------------------------*
* Acionar caixa de diálogo (POPUP)
*----------------------------------------------------------------------*
FORM z_popup.
* Função POPUP
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
i_title = 'POPUP - ALV'
* I_SELECTION = 'X'
i_zebra = 'X'
i_screen_start_column = 5
i_screen_start_line = 5
i_screen_end_column = 55
i_screen_end_line = 15
i_checkbox_fieldname = 'BOX'
* I_LINEMARK_FIELDNAME =
* I_SCROLL_TO_SEL_LINE = 'X'
i_tabname = 'WT_CLIENTE'
* I_STRUCTURE_NAME =
it_fieldcat = wt_fieldcat
* IT_EXCLUDING =
i_callback_program = wv_repid
* I_CALLBACK_USER_COMMAND =

Autor: Flavio Ricardo de Almeida 89


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* IS_PRIVATE =
IMPORTING
es_selfield = wf_sel
* E_EXIT =
TABLES
t_outtab = wt_cliente
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.

ENDFORM. " Z_POPUP

*&---------------------------------------------------------------------*
*& Form Z_DISPLAY_LIST
*&---------------------------------------------------------------------*
* Exibir registros selecionados
*----------------------------------------------------------------------*
FORM z_display_list.

LOOP AT wt_cliente.
* Verificar se o registro foi selecionado
CHECK NOT wt_cliente-box IS INITIAL.
* Listar registro
WRITE: / 'CLIENTE:', wt_cliente-kunnr,
'-', wt_cliente-name1.
ENDLOOP.

ENDFORM. " Z_DISPLAY_LIST

Autor: Flavio Ricardo de Almeida 90


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

Capítulo 7
*$*$********************************************************************
*$*$ *
*$*$ PROGRAMA: Lista ALV GRID *
*$*$ TIPO : Lista ALV *
*$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria *
*$*$ DATA : 18/01/2002 *
*$** OBS. : *
*$** *
*$*$********************************************************************
*$*$ HISTÓRICO DAS MODIFICAÇÕES *
*$*$-------------------------------------------------------------------*
*$*$ DATA | AUTOR | DESCRIÇÃO *
*$*$-------------------------------------------------------------------*
*$** | | *
*$*$********************************************************************
REPORT zfra0023_19.

*$*$ Type pools --------------------------------------------------------


TYPE-POOLS: slis.

*$*$ Tipos -------------------------------------------------------------


TYPES: BEGIN OF we_saida,
vbeln LIKE vbak-vbeln, " Nro da ordem de venda
erdat LIKE vbak-erdat, " Data de criação
ernam LIKE vbak-ernam, " Criado por
audat LIKE vbak-audat, " Data da ordem
auart LIKE vbak-auart, " Tipo de ordem
netwr LIKE vbak-netwr, " Valor líq. da ordem
vkorg LIKE vbak-vkorg, " Org. de vendas
vtweg LIKE vbak-vtweg, " Canal de distribuição
spart LIKE vbak-spart, " Setor de atividade
vkgrp LIKE vbak-vkgrp, " Grupo de vendedores
vkbur LIKE vbak-vkbur, " Escritório de vendas
box , " Checkbox
END OF we_saida.

*$*$ Tabelas Internas --------------------------------------------------


* Tab. com dados para lista
DATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE.

* Tab. com informações sobre as características dos campos


DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

* Tab. com informações sobre a ordenação da lista


DATA: wt_sort TYPE slis_t_sortinfo_alv.

* Tab. de especificação de grupos


DATA: wt_sp_group TYPE slis_t_sp_group_alv.

* Tab. de eventos
DATA: wt_events TYPE slis_t_event.

* Tab. de configuração para conteúdo do cabeçalho


DATA: wt_list_top_of_page TYPE slis_t_listheader.

*$*$--- Estruturas -----------------------------------------------------


DATA: wf_x_variant LIKE disvariant.
DATA: wf_variant LIKE disvariant.
DATA: wf_print TYPE slis_print_alv.
DATA: wf_layout TYPE slis_layout_alv.

*$*$ Variáveis ---------------------------------------------------------


* Nome do programa
DATA: wv_repid LIKE sy-repid.

*$*$ Tela de Seleção ---------------------------------------------------

Autor: Flavio Ricardo de Almeida 91


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.


SELECT-OPTIONS: s_vbeln FOR wt_saida-vbeln.
SELECTION-SCREEN END OF BLOCK b1.

* Variante
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02.
PARAMETERS: p_vari LIKE disvariant-variant.
SELECTION-SCREEN END OF BLOCK b2.

*$*$ Inicialização -----------------------------------------------------


INITIALIZATION.
wv_repid = sy-repid.
* Atribuições para variante
CLEAR wf_variant.
wf_variant-report = wv_repid.

*$*$ Ajudas de tela ----------------------------------------------------


* Processo de ajuda para variante
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
PERFORM z_f4_for_variant.

*$*$ Validações de tela ------------------------------------------------


AT SELECTION-SCREEN ON p_vari.
PERFORM z_validacao_variante.

*$*$ Programa Principal ------------------------------------------------


START-OF-SELECTION.
PERFORM z_buscar_dados.
* Indicar campos para exibição na lista
PERFORM z_fieldcat_init USING wt_fieldcat[].
* Ordenar lista
PERFORM z_ordenar_lista USING wt_sort[].
* Grupos de campos
PERFORM z_sp_group_build USING wt_sp_group[].
* Eventos que podem ser acionados na lista
PERFORM z_eventtab_build USING wt_events[].
* Comentários do cabeçalho da lista
PERFORM z_comment_build USING wt_list_top_of_page[].

END-OF-SELECTION.
* Parâmetros de impressão
PERFORM z_print_build USING wf_print.
* Layout da lista - Referente as definições
PERFORM z_layout_build USING wf_layout.
* Construção da lista propriamente dita ( Exibição das informações )
PERFORM z_list_display.

*$*$ Subrotinas --------------------------------------------------------


*&---------------------------------------------------------------------*
*& Form Z_BUSCAR_DADOS
*&---------------------------------------------------------------------*
* Obter informações para lista
*----------------------------------------------------------------------*
FORM z_buscar_dados.

PERFORM z_sapgui_progress_indicator
USING 'Selecionando dados. Aguarde...'.

SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp
vkbur
INTO TABLE wt_saida
FROM vbak
WHERE vbeln IN s_vbeln.

ENDFORM. " Z_BUSCAR_DADOS

*&---------------------------------------------------------------------*
*& Form Z_LIST_DISPLAY

Autor: Flavio Ricardo de Almeida 92


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

*&---------------------------------------------------------------------*
* Lista informações na tela
*----------------------------------------------------------------------*
FORM z_list_display.

PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.

* CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'


CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = wv_repid
it_fieldcat = wt_fieldcat
it_sort = wt_sort
it_special_groups = wt_sp_group
is_print = wf_print
is_layout = wf_layout
it_events = wt_events
i_save = 'A'
TABLES
t_outtab = wt_saida
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.

ENDFORM. " Z_LIST_DISPLAY

*&---------------------------------------------------------------------*
*& Form Z_SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* Interagir com o front-end - Enviar mensagens
*----------------------------------------------------------------------*
* --> PV_TEXT - Mensagem
*----------------------------------------------------------------------*
FORM z_sapgui_progress_indicator USING value(pv_text).

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'


EXPORTING
* PERCENTAGE = 0
text = pv_text.

ENDFORM. " Z_SAPGUI_PROGRESS_INDICATOR

*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_INIT *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.

* Limpar tabela
CLEAR pt_fieldcat[].
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
lf_fieldcat-sp_group = 'A'. " Grupo de Ordem Vendas
lf_fieldcat-hotspot = 'X'. " Indicador de ativo
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.

Autor: Flavio Ricardo de Almeida 93


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

* Data de Criação
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERDAT'.
lf_fieldcat-ref_tabname = 'VBAK'.
lf_fieldcat-sp_group = 'A'. " Grupo de Ordem Vendas
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERNAM'.
lf_fieldcat-ref_tabname = 'VBAK'.
lf_fieldcat-sp_group = 'A'. " Grupo de Ordem Vendas
APPEND lf_fieldcat TO pt_fieldcat.
* Tipo de Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'AUART'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-ref_tabname = 'VBAK'.
lf_fieldcat-sp_group = 'V'. " Grupo de Valores
APPEND lf_fieldcat TO pt_fieldcat.
* Organização de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKORG'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VTWEG'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Setor de atividade
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'SPART'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Grupo de Vendedores
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKGRP'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Escritório de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKBUR'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.

ENDFORM. " FORM Z_FIELDCAT_INIT

*&---------------------------------------------------------------------*
*& Form Z_ORDENAR_LISTA
*&---------------------------------------------------------------------*
* Ordenação da lista
*----------------------------------------------------------------------*
* --> PT_SORT[] - Tabela com informações de ordenação dos campos
*----------------------------------------------------------------------*
FORM z_ordenar_lista USING pt_sort TYPE slis_t_sortinfo_alv.
* Estrutura para gravar na lista
DATA: lf_sort TYPE slis_sortinfo_alv.

CLEAR lf_sort.
* Montar estrutura
lf_sort-spos = 1. " Sequência de ordenação
lf_sort-fieldname = 'ERNAM'. " Nome do campo
lf_sort-tabname = 'WT_SAIDA'. " Nome da tabela de lista
lf_sort-up = 'X'. " Ordenação Crescente

Autor: Flavio Ricardo de Almeida 94


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

lf_sort-expa = 'X'. " Expandir lista


APPEND lf_sort TO wt_sort.

** Outras opções possíveis de utilização


* lf_sort-down = 'X'. " Ordenação decrescente
* lf_sort-group = '*'. " Mudança de controle: quebra de
* " página, inserir sublinha
* lf_sort-subtot = 'X'. " Subtotal
* lf_sort-comp = 'X'. " Comprimir lista mostrando
* " apenas os subtotais

ENDFORM. " Z_ORDENAR_LISTA

*---------------------------------------------------------------------*
* FORM Z_SP_GROUP_BUILD *
*---------------------------------------------------------------------*
* Definir tipos de grupos de campos *
*---------------------------------------------------------------------*
* --> PT_SP_GROUP - Estrutura do grupo de campos *
*---------------------------------------------------------------------*
FORM z_sp_group_build USING pt_sp_group TYPE slis_t_sp_group_alv.
* Variáveis
DATA: lf_sp_group TYPE slis_sp_group_alv.

* Atribuir valores
* Ordem de Venda
CLEAR lf_sp_group.
lf_sp_group-sp_group = 'A'.
lf_sp_group-text = 'Ordem de Venda'(g01).
APPEND lf_sp_group TO pt_sp_group.
* Status da Ordem de Venda
CLEAR lf_sp_group.
lf_sp_group-sp_group = 'V'.
lf_sp_group-text = 'Valores'(g02).
APPEND lf_sp_group TO pt_sp_group.

ENDFORM. " FORM Z_SP_GROUP_BUILD

*&---------------------------------------------------------------------*
*& Form Z_F4_FOR_VARIANT
*&---------------------------------------------------------------------*
* Processo de ajuda pra variante
*----------------------------------------------------------------------*
FORM z_f4_for_variant.
* Variável local
DATA: lv_exit.

* Encontrar variante
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = wf_variant
i_save = 'A'
* it_default_fieldcat =
IMPORTING
e_exit = lv_exit
es_variant = wf_x_variant
EXCEPTIONS
not_found = 2.
* Verificar processamento da função
IF sy-subrc = 2.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
* Atribuir valor
IF lv_exit = space.
p_vari = wf_x_variant-variant.
ENDIF.
ENDIF.

Autor: Flavio Ricardo de Almeida 95


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

ENDFORM. " Z_F4_FOR_VARIANT

*&---------------------------------------------------------------------*
*& Form Z_VALIDACAO_VARIANTE
*&---------------------------------------------------------------------*
* Realizar validação da variante de exibição
*----------------------------------------------------------------------*
FORM z_validacao_variante.
* Variante
IF NOT p_vari IS INITIAL.
MOVE: wf_variant TO wf_x_variant,
p_vari TO wf_x_variant-variant.
* Verificar existencia
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
i_save = 'A'
CHANGING
cs_variant = wf_x_variant.
wf_variant = wf_x_variant.
ELSE.
CLEAR: wf_variant.
wf_variant-report = wv_repid.
ENDIF.

ENDFORM. " Z_VALIDACAO_VARIANTE

*---------------------------------------------------------------------*
* FORM Z_PRINT_BUILD *
*---------------------------------------------------------------------*
* Definir atributos de impressão da lista *
*---------------------------------------------------------------------*
* --> PF_PRINT - Estrutura com atributos da impressão da lista *
*---------------------------------------------------------------------*
FORM z_print_build USING pf_print TYPE slis_print_alv.
*
* PF_PRINT-PRINT = 'X'. " Imprimir no SPOOL
pf_print-no_print_selinfos = 'X'. " Não listar info. sobre seleção
pf_print-no_coverpage = 'X'. " Não listar página de rostp
pf_print-no_print_listinfos = 'X'. " Não listar info. sobre a lista
* PF_PRINT-RESERVE_LINES = 'X'. " Reservar linhas
* PF_PRINT-NO_NEW_PAGE = 'X'. " Sem novas páginas
* PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " Não alterar tamanho da linha

ENDFORM. " Z_PRINT_BUILD

*&---------------------------------------------------------------------*
*& Form Z_LAYOUT_BUILD
*&---------------------------------------------------------------------*
* Layout de saída
*----------------------------------------------------------------------*
* --> PF_LAYOUT - Estrutura para layout de saída da lista
*----------------------------------------------------------------------*
FORM z_layout_build USING pf_layout TYPE slis_layout_alv.

pf_layout-group_change_edit = 'X'.
* Check box na lista
pf_layout-box_fieldname = 'BOX'.
pf_layout-box_tabname = 'WT_SAIDA'.

ENDFORM. " Z_LAYOUT_BUILD

*---------------------------------------------------------------------*
* FORM Z_EVENTTAB_BUILD *
*---------------------------------------------------------------------*
* Definir eventos associados a lista *
*---------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *

Autor: Flavio Ricardo de Almeida 96


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

*---------------------------------------------------------------------*
FORM z_eventtab_build USING pt_events TYPE slis_t_event.
* Variáveis
DATA: lf_event TYPE slis_alv_event.

* Obter eventos permitidos para lista grid


CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = pt_events.
* Verificar se evento foi encontrado
LOOP AT pt_events INTO lf_event.
CASE lf_event-name.
WHEN slis_ev_user_command.
MOVE 'Z_USER_COMMAND' TO lf_event-form.
WHEN slis_ev_item_data_expand.
* move 'Z_ITEM_DATA_EXPAND' to lf_event-form.
WHEN slis_ev_reprep_sel_modify.
* move 'Z_REPREP_SEL_MODIFY' to lf_event-form.
WHEN slis_ev_caller_exit_at_start.
* MOVE 'Z_CALLER_EXIT' TO lf_event-form.
WHEN slis_ev_top_of_page.
MOVE 'Z_TOP_OF_PAGE' TO lf_event-form.
WHEN slis_ev_top_of_coverpage.
* move 'Z_TOP_OF_COVERPAGE' to lf_event-form.
WHEN slis_ev_end_of_coverpage.
* move 'Z_END_OF_COVERPAGE' to lf_event-form.
WHEN slis_ev_foreign_top_of_page.
* move 'Z_FOREIGN_TOP_OF_PAGE' to lf_event-form.
WHEN slis_ev_foreign_end_of_page.
* move 'Z_FOREIGN_END_OF_PAGE' to lf_event-form.
WHEN slis_ev_pf_status_set.
* MOVE 'Z_PF_STATUS_SET' TO lf_event-form.
WHEN slis_ev_list_modify.
* MOVE 'Z_LIST_MODIFY' TO lf_event-form.
WHEN slis_ev_top_of_list.
* MOVE 'Z_TOP_OF_LIST' TO lf_event-form.
WHEN slis_ev_end_of_page.
* MOVE 'Z_END_OF_PAGE' TO lf_event-form.
WHEN slis_ev_end_of_list.
* MOVE 'Z_END_OF_LIST' TO lf_event-form.
WHEN slis_ev_after_line_output.
* MOVE 'Z_AFTER_LINE_OUTPUT' TO lf_event-form.
WHEN slis_ev_before_line_output.
* MOVE 'Z_BEFORE_LINE_OUTPUT' TO lf_event-form.
WHEN slis_ev_subtotal_text.
* MOVE 'Z_SUBTOTAL_TEXT' TO lf_event-form.
ENDCASE.
MODIFY pt_events FROM lf_event.
ENDLOOP.
*
ENDFORM. " FORM Z_EVENTTAB_BUILD

*----------------------------------------------------------------------*
* FORM Z_USER_COMMAND *
*----------------------------------------------------------------------*
* Ações do usuário *
*----------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm LIKE sy-ucomm
pf_selfield TYPE slis_selfield. "#EC CALLED
*
CASE pv_ucomm.
* Ação de Click duplo '&IC1'
WHEN '&IC1'.
* Verificar campo selecionado
CASE pf_selfield-sel_tab_field.
* WHEN 'WT_SAIDA-VBELN'.

Autor: Flavio Ricardo de Almeida 97


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

WHEN '1-VBELN'.
* Posicionar no registro selecionado
READ TABLE wt_saida INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.

ENDFORM.

*----------------------------------------------------------------------*
* FORM Z_TOP_OF_PAGE *
*----------------------------------------------------------------------*
* Evento de cabeçalho *
*----------------------------------------------------------------------*
FORM z_top_of_page. "#EC CALLED

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'


EXPORTING
i_logo = 'ENJOYSAP_LOGO'
* i_logo = 'Z_BRASIL_BANDEIRA'
it_list_commentary = wt_list_top_of_page.

ENDFORM.

*----------------------------------------------------------------------*
* FORM Z_END_OF_PAGE *
*----------------------------------------------------------------------*
* Evento para rodapé da lista *
*----------------------------------------------------------------------*
FORM z_end_of_page. "#EC CALLED

WRITE: / 'Evento: end_of_page'.

ENDFORM.

*----------------------------------------------------------------------*
* FORM Z_TOP_OF_LIST *
*----------------------------------------------------------------------*
* Evento para topo da lista *
*----------------------------------------------------------------------*
FORM z_top_of_list. "#EC CALLED

WRITE: / 'Evento: top-of-list'.

ENDFORM.

*----------------------------------------------------------------------*
* FORM Z_END_OF_LIST *
*----------------------------------------------------------------------*
* Evento de final de lista *
*----------------------------------------------------------------------*
FORM z_end_of_list. "#EC CALLED

WRITE: / 'Evento: end_of_list'.

ENDFORM.

*----------------------------------------------------------------------*
* FORM Z_PF_STATUS_SET *
*----------------------------------------------------------------------*
* Especificar barra de status *
*----------------------------------------------------------------------*
FORM z_pf_status_set USING pt_extab TYPE slis_t_extab. "#EC CALLED
* Acionar barra de comandos
* set pf-status 'STANDARD' excluding pt_extab.

Autor: Flavio Ricardo de Almeida 98


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

ENDFORM.

*----------------------------------------------------------------------*
* FORM Z_CALLER_EXIT *
*----------------------------------------------------------------------*
* Evento *
*----------------------------------------------------------------------*
FORM z_caller_exit USING pf_data. "#EC CALLED

ENDFORM.

*----------------------------------------------------------------------*
* FORM Z_BEFORE_LINE_OUTPUT *
*----------------------------------------------------------------------*
* Evento antes da impressão da linha *
*----------------------------------------------------------------------*
FORM z_before_line_output
USING pf_lineinfo TYPE slis_lineinfo. "#EC CALLED

* break-point.

ENDFORM.

*----------------------------------------------------------------------*
* FORM Z_AFTER_LINE_OUTPUT *
*----------------------------------------------------------------------*
* Evento depois da impressão da linha *
*----------------------------------------------------------------------*
FORM z_after_line_output
USING pf_lineinfo TYPE slis_lineinfo. "#EC CALLED

* break-point.

ENDFORM.

*----------------------------------------------------------------------*
* FORM Z_LIST_MODIFY *
*----------------------------------------------------------------------*
* Evento modifica linha da lista *
*----------------------------------------------------------------------*
FORM z_list_modify USING pv_tabname TYPE slis_tabname
pv_index LIKE sy-tabix
pv_index_slave LIKE sy-tabix
pv_index_sum LIKE sy-tabix. "#EC CALLED

* break-point.

ENDFORM.

*---------------------------------------------------------------------*
* FORM Z_COMMENT_BUILD *
*---------------------------------------------------------------------*
* Montar layout das estruturas de comentários *
*---------------------------------------------------------------------*
* --> PT_TOP_OF_PAGE - Tab. com procedimentos para cabeçalho *
*---------------------------------------------------------------------*
FORM z_comment_build USING pt_top_of_page TYPE slis_t_listheader.
* Variáveis
DATA: lf_line TYPE slis_listheader.

DATA: lv_data_hd(30),
lv_data(10),
lv_hora(08).
*
* Cabeçalho
CLEAR lf_line.
lf_line-key = 'Título:'.

Autor: Flavio Ricardo de Almeida 99


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com
G U I A D E P R O G R A M A Ç Ã O A L V
O U T R O S T Ó P I C O S

lf_line-typ = 'S'.
lf_line-info = sy-title.
APPEND lf_line TO pt_top_of_page.
* Informações
* Montar data - hora
CLEAR lf_line.
lf_line-typ = 'S'.
lf_line-key = 'Report'.
lf_line-info = sy-repid.
APPEND lf_line TO pt_top_of_page.
** Formatar data - hora
* WRITE sy-datum TO lv_data.
* WRITE sy-uzeit TO lv_hora.
* CONCATENATE lv_data '-' lv_hora INTO lv_data_hd SEPARATED BY space.
** Montar data - hora
* CLEAR lf_line.
* lf_line-typ = 'S'.
* lf_line-key = 'Data - Hora'.
* lf_line-info = lv_data_hd.
* APPEND lf_line TO pt_top_of_page.
* Comentário
CLEAR lf_line.
lf_line-typ = 'A'.
lf_line-info = 'Lista GRID'.
APPEND lf_line TO pt_top_of_page.

ENDFORM. " FORM Z_COMMENT_BUILD

Autor: Flavio Ricardo de Almeida 100


www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

Potrebbero piacerti anche