Você está na página 1de 130

Volume

GUIA DE PROGRAMAO

Desenvolvimento de aplicaes ABAP

Guia Bsico de
Programao ALV
( ABAP List Viwer )

G U I A

B S I C O

D E

P R O G R A M A O

A L V

DESENVOLVIMENTO DE APLICAES ABAP

Guia Bsico de Programao


ALV

Flavio Ricardo de Almeida


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

Autor: Flavio Ricardo de Almeida


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

G U I A

B S I C O

D E

P R O G R A M A O

A L V

ndice
Captulo 1

Introduo ............................................................................. 3

Captulo 2

Meu Primeiro ALV .............................................................. 4

Captulo 3

Montando a estrutura da lista ............................................. 8

Captulo 4

Ordenando a lista...................................................................12

Captulo 5

Criando grupos de campos .................................................15

Captulo 6

Chamando uma variante de exibio .................................21

Captulo 7

Parmetros de Impresso ....................................................25

Captulo 8

Variaes de Layout ..............................................................27

Captulo 9

Criando Evntos .....................................................................31

Captulo 10

Barra de Status Personalizada .............................................37

Captulo 11

Trabalhando com checkbox ...............................................41

Captulo 12

Mudando cores dos campos ...............................................43

Captulo 13

Inserindo cone .....................................................................48


Consideraes Gerais ( Copyright e Trademarks )...........51
Apndice A ( Listagem de Programas Exemplos )...........52

Autor: Flavio Ricardo de Almeida


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

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo

Introduo
Apresentao da ferramenta ABAP LIST VIEWER
conhecida simplesmente por ALV.

ferramenta ALV ( ABAP LIST VIEWER ) permite criar listas de uma


maneira fcil e prtica. Consiste basicamente em utilizar funes genricas
pertencentes basicamente a classe de desenvolvimento SLIS. Para nossos
estudos ser utilizado basicamente o grupo de funes, o SALV, para o
formato de lista simples. Este mesmo grupo tambm contempla as listas dos tipos
hierrquica e popup, e o grupo SLVC_FULLSCREEN para a lista no formato de
GRID CONTROL.
Existe a opo de utilizar objetos para a construo das listas mas no sero
abordadas neste manual, para isto consulte a ajuda do sistema no seguinte tpico: SAP
Library " Basis Components " Basis Service / Communications Interfaces (BC-SRV)
"BC - ALV Grid Control.
Nos prximos captulos vamos apresentar a ferramenta de maneira prtica com
exemplos para evitar a leitura pesada regularmente utilizada em manuais, mas para isto
ser exigido do leitor prvio conhecimento da linguagem de programao ABAP.
As listas dos tipos hierrquica, popup e grid no sero tratadas neste volume, ficando
seu estudo para o volume 2 desta obra.

Autor: Flavio Ricardo de Almeida


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

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo

Meu primeiro ALV


Criar uma lista utilizando os recursos do ALV.

este captulo vamos criar uma lista bastante simples, porm muito til e
verstil para apresentao de informaes.

O layout da lista ser baseado em uma estrutura definida no dicionrio de


dados do ABAP. No prximo captulo mostraremos que possvel determinar os
campos da lista sem utilizar uma estrutura do dicionrio, utilizando outros recursos do
ALV.
No R/3, atravs da transao SE38, ou SE80 queles que preferem uma visualizao
dos processos separadamente, vamos criar nosso primeiro programa atravs da
primeira transao mencionada. Iremos cham-lo de ZFRA0023_2 e
implementaremos novas funcionalidades de acordo com o assunto tratado em cada
captulo.
1 Declarar a tabela interna que ir conter os dados a serem listados, que ter a
mesma estrutura da tabela VBAK ( Cabealho da ordem de venda ), e algumas outras
variveis que iremos precisar futuramente:
*$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida.
INCLUDE STRUCTURE vbak.
TYPES: END
OF we_saida.
*$*$ Tabelas Internas -------------------------------------------------DATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE.
*$*$ Variveis --------------------------------------------------------* Nome do programa
DATA: wv_repid LIKE sy-repid.

2 Criar uma tela de parmetros simples apenas para melhorar a performance da


busca de informaes:
*$*$ Tela de Seleo --------------------------------------------------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.

Autor: Flavio Ricardo de Almeida


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

G U I A

B S I C O

D E

P R O G R A M A O

A L V

3 Criar o evento INITIALIZATION para inicializar algumas variveis:


*$*$ Inicializao ----------------------------------------------------INITIALIZATION.
wv_repid
= sy-repid.

4 Criar uma sub-rotina para obter as informaes da base de dados, aqui a


chamaremos de Z_OBTER_DADOS. Criaremos tambm uma outra sub-rotina
chamada Z_SAPGUI_PROGRESS_INDICATOR para interagir com a interface do
R/3 informando ao usurio os processos que o programa est executando:
*&---------------------------------------------------------------------*
*&
Form Z_BUSCAR_DADOS
*&---------------------------------------------------------------------*
*
Obter informaes para lista
*----------------------------------------------------------------------*
FORM z_buscar_dados.
PERFORM z_sapgui_progress_indicator
USING 'Selecionando dados. Aguarde...'.
SELECT * INTO TABLE wt_saida
FROM vbak
WHERE vbeln IN s_vbeln.
ENDFORM.

" Z_BUSCAR_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

5 At aqui os processos so basicamente o que qualquer outro programa de lista


precisaria, agora vamos utilizar efetivamente recursos do ALV. Para isto vamos criar
uma sub-rotina para impresso da lista que se chamar Z_LIST_DISPLAY:
*&---------------------------------------------------------------------*
*&
Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING

Autor: Flavio Ricardo de Almeida


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

G U I A

B S I C O

D E

P R O G R A M A O

A L V

i_callback_program = wv_repid
i_structure_name
= 'VBAK'
i_save
= 'A'
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
others
= 2.
* Verificar processamento da funo
IF sy-subrc NE 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 parmteros:


i_callback_program = wv_repid = Nome do programa para o qual a funo deve
retornar o controle aps a execuo;
i_structure_name = VBAK = Nome da ma para o qual a funo deve ser
referenciada no dicionrio;
i_save = A = Permitir salvar variante de exibio;
t_outtab = wt_saida = Tabela com os dados a serem impressos;
6 Resultado

FIGURA 2.1 Lista ALV simples utilizando a estrutura da tabela VBAK


Autor: Flavio Ricardo de Almeida
www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Agora com a lista pronta possvel mudar o layout do mesmo ocultando colunas,
sumarizando colunas de valor, ordenando outras, etc... e gravar os layouts para
visualizaes futuras. Para isto utilize a barra de status que contem os botes para
acionar estas funcionalidades.

FIGURA 2.2 Barra de status com funcionalidades para lista.

Autor: Flavio Ricardo de Almeida


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

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo

Montando a estrutura da
lista
Montar a estrutura de campos da lista sem utilizar estrutura do
dicionrio de dados do R/3.

o captulo anterior aprendemos a criar uma lista referenciando uma


estrutura do banco de dados. Agora vamos gerar uma lista onde os campos
da lista sero determinados no prprio programa.

Vamos copiar o programa ZFRA0023_2 e cham-lo de ZFRA0023_3 faremos


algumas mudanas a seguir descritas.
1 Declarar o tipo de pool SLIS que contm as definies necessrias para interagir
com as funes ALV:
*$*$ Type pools -------------------------------------------------------TYPE-POOLS: slis.

2 Redefinir o tipo WE_SAIDA, como descrito abaixo;


TYPES: BEGIN OF we_saida,
vbeln LIKE vbak-vbeln,
erdat LIKE vbak-erdat,
ernam LIKE vbak-ernam,
audat LIKE vbak-audat,
auart LIKE vbak-auart,
netwr LIKE vbak-netwr,
vkorg LIKE vbak-vkorg,
vtweg LIKE vbak-vtweg,
spart LIKE vbak-spart,
vkgrp LIKE vbak-vkgrp,
vkbur LIKE vbak-vkbur,
END
OF we_saida.

"
"
"
"
"
"
"
"
"
"
"

Nro da ordem de venda


Data de criao
Criado por
Data da ordem
Tipo de ordem
Valor lq. da ordem
Org. de vendas
Canal de distribuio
Setor de atividade
Grupo de vendedores
Escritrio de vendas

3 Declarar a tabela que conter as configuraes dos campos da lista;


DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.

4 Modificar a busca das informaes na rotina Z_OBTER_DADOS;


Autor: Flavio Ricardo de Almeida
www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

G U I A

B S I C O

D E

P R O G R A M A O

A L V

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

5 Agora vamos criar a sub-rotina de configurao de campos da estrutura de lista a


qual chamaremos de Z_FIELDCAT_INIT;
*---------------------------------------------------------------------*
*
FORM Z_FIELDCAT_INIT
*
*---------------------------------------------------------------------*
*
Inicializar estrutura das informaes 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[].
* Cd. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VBELN'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Data de Criao
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERDAT'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERNAM'.
lf_fieldcat-ref_tabname
= 'VBAK'.
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 lq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'NETWR'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Organizao de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VKORG'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuio
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'.
Autor: Flavio Ricardo de Almeida
www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

" Nome do Campo


" Tab. de Referncia
" Gravar na tab. config.

G U I A

B S I C O

D E

P R O G R A M A O

A L V

APPEND lf_fieldcat TO pt_fieldcat.


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

Veja que este tipo de construo de exige mais esforos que quando referenciamos
uma estrutura do dicionrio, devido a isto muitos desenvolvedores preferem criar suas
prprias estruturas no dicionrio e referenciar as mesmas.
Estamos utilizando os atributos bsicos da estrutura SLIS_T_FIELDCAT_ALV,
referenciada aqui pela tabela wt_fieldcat. Fica a cargo do leitor estudar os outros
atributos desta estrutura, pois os mesmo tratam formatao, layout, etc... tais como
indicar que o campo tem a caracterstica hotspot, definir tamanho, mudar desto de
cabealho, etc...
6 Inserir chamada a subrotina Z_FIELDCAT_INIT;
*$*$ Programa Principal -----------------------------------------------START-OF-SELECTION.
PERFORM z_buscar_dados.
* Indicar campos para exibio na lista
PERFORM z_fieldcat_init USING wt_fieldcat[].
END-OF-SELECTION.
* Construo da lista propriamente dita ( Exibio das informaes )
PERFORM z_list_display.

7 Modificar o processo de listar informaes, Z_LIST_DISPLAY;


*&---------------------------------------------------------------------*
*&
Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = wv_repid
*
i_structure_name
= 'VBAK'
it_fieldcat
= wt_fieldcat
i_save
= 'A'
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

Autor: Flavio Ricardo de Almeida


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

10

G U I A

B S I C O

D E

P R O G R A M A O

ENDFORM.

A L V

" Z_LIST_DISPLAY

Veja que comentamos a linha de parmetro i_structure_name e inserimos o


parmetro it_fieldcat que recebe a tabela wt_fieldcat.
it_fieldcat = wt_fieldcat = Nome da tabela interna com as configuraes dos campos
da lista;
8 Vejamos a lista resultante do programa;

FIGURA 3.1 Lista com campos determinados na tabela wt_fieldcat.

Autor: Flavio Ricardo de Almeida


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

11

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo

Ordenando a lista
Utilizando recursos para ordenao da lista antes da
apresentao.

o captulo anterior aprendemos uma outra forma de criar uma lista simples,
agora vamos a cada captulo implementar novos recursos disponveis no
ALV. Um deles a ordenao. Apesar da possibilidade de ordenar a tabela
interna antes da apresentao da lista, ou mesmo a lista depois da execuo
do programa atravs das variantes de exibio, as vezes necessrio que a lista j
apresente uma ordenao padro logo que a mesma aparea na tela. Para isto vamos
implementar uma rotina para fazer isto atravs do ALV.
Mais adiante veremos que possvel chamar uma variante de exibio na primeira
tela, dessa forma economizando precioso tempo j que muitas rotinas podero ser
descartadas, pois todos os atributos da lista tais como ordenaes de colunas e linhas,
sumarizaes, etc, estaro definidos na variante. Mas no se preocupe, pois teremos
um captulo especfico para tratar este assunto.
Vamos copiar o programa ZFRA0023_3 e cham-lo de ZFRA0023_4 e
implementaremos as funcionalidades, caso voc tenha pulado captulo 1, voc pode
copiar o modelo que encontra-se no final do manual.
1 Declarar a tabela interna que conter as informaes para ordenao;
* Tab. com informaes sobre a ordenao da lista
DATA: wt_sort
TYPE slis_t_sortinfo_alv.

2 Criar uma rotina para definir a ordenao, chamaremos a mesma de


Z_ORDENAR_LISTA, e nela pediremos para ordenar pelo campo de usurio de
criao ( ERDAT );
*&---------------------------------------------------------------------*
*&
Form Z_ORDENAR_LISTA
*&---------------------------------------------------------------------*
*
Ordenao da lista
*----------------------------------------------------------------------*
*
--> PT_SORT[] - Tabela com informaes de ordenao 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.

Autor: Flavio Ricardo de Almeida


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

12

G U I A

B S I C O

D E

CLEAR lf_sort.
* Montar estrutura
lf_sort-spos
lf_sort-fieldname
lf_sort-tabname
lf_sort-up
lf_sort-expa
APPEND lf_sort TO
**
*
*
*
*
*
*

P R O G R A M A O

= 1.
= 'ERNAM'.
= 'WT_SAIDA'.
= 'X'.
= 'X'.
wt_sort.

"
"
"
"
"

A L V

Sequncia de ordenao
Nome do campo
Nome da tabela de lista
Ordenao Crescente
Expandir lista

Outras opes possveis de utilizao


lf_sort-down
= 'X'.
" Ordenao decrescente
lf_sort-group
= '*'.
" Mudana de controle: quebra de
" pgina, inserir sublinha
lf_sort-subtot
= 'X'.
" Subtotal
lf_sort-comp
= 'X'.
" Comprimir lista mostrando
" apenas os subtotais

ENDFORM.

" Z_ORDENAR_LISTA

Veja que existem outras opes para ordenao, depois voc pode mudar o cdigo
para test-las.
4 Inserir chamada a rotina Z_ORDENAR_LISTA, antes da rotina de
Z_LIST_DISPLAY;
*$*$ Programa Principal -----------------------------------------------START-OF-SELECTION.
PERFORM z_buscar_dados.
* Indicar campos para exibio na lista
PERFORM z_fieldcat_init USING wt_fieldcat[].
* Ordenar lista
PERFORM z_ordenar_lista USING wt_sort[].
END-OF-SELECTION.
* Construo da lista propriamente dita ( Exibio das informaes )
PERFORM z_list_display.

5 Agora vamos passar mais um parmetros para a funo REUSE que est na subrotina Z_LIST_DISPLAY:
*&---------------------------------------------------------------------*
*&
Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
form z_list_display.
perform z_sapgui_progress_indicator
using 'Estruturando a lista. Aguarde...'.
call function 'REUSE_ALV_LIST_DISPLAY'
exporting
i_callback_program = wv_repid
*
i_structure_name
= 'VBAK'
it_fieldcat
= wt_fieldcat
it_sort
= wt_sort
i_save
= 'A'
tables
t_outtab
= wt_saida
exceptions
program_error
= 1
Autor: Flavio Ricardo de Almeida
www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

13

G U I A

B S I C O

D E

P R O G R A M A O

A L V

others
= 2.
* Verificar processamento da funo
if sy-subrc ne 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 novo parmetro:


it_sort = wt_sort = Nome da tabela interna com as configuraes para ordenao;
5 Resultado

FIGURA 4.1 Lista ordenada pelo coluna ERNAM, usurio de criao.

Veja que a lista foi apresentada ordenada pela coluna Criado por, de forma
crescente.

Autor: Flavio Ricardo de Almeida


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

14

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo

Criando grupos de
campos
Especificao de grupo de campos para variantes de exibio

captulo 1 mostrou que possvel montar a estrutura de campos da lista


sem referenciar estruturas do dicionrio. Um grupo de campos pode ser
bastante til para selecionar os mesmos para uma variante de exibio, pois
facilita a pesquisa para a composio da lista de sada.

Aqui vamos criar apenas dois grupos para demonstrao. Para isto vamos copiar o
programa ZFRA0023_4 e cham-lo de ZFRA0023_5
1 Declarar a tabela interna que conter as informaes para formar os grupos de
campos;
* Tab. de especificao de grupos
DATA: wt_sp_group TYPE slis_t_sp_group_alv.

2 Criar uma rotina para definir os grupos de campos, chamaremos a mesma de


Z_SP_GROUP_BUILD;
*---------------------------------------------------------------------*
*
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.
* Variveis
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.

Autor: Flavio Ricardo de Almeida


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

15

G U I A

B S I C O

D E

P R O G R A M A O

endform.

A L V

" FORM Z_SP_GROUP_BUILD

4 Inserir chamada rotina Z_SP_GROUP_BUILD;


*$*$ Programa Principal -----------------------------------------------START-OF-SELECTION.
PERFORM z_buscar_dados.
* Indicar campos para exibio 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[].
END-OF-SELECTION.
* Construo da lista propriamente dita ( Exibio das informaes )
PERFORM z_list_display.

5 Especificar na rotina Z_FIELDCAT_INIT, quais campos vo pertencer aos


grupos criados;
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[].
* Cd. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VBELN'.
lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-sp_group
= 'A'.
APPEND lf_fieldcat TO pt_fieldcat.
* Data de Criao
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERDAT'.
lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-sp_group
= 'A'.
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'.
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 lq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'NETWR'.
lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-sp_group
= 'V'.
APPEND lf_fieldcat TO pt_fieldcat.
...
ENDFORM.

Autor: Flavio Ricardo de Almeida


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

"
"
"
"

Nome do Campo
Tab. de Referncia
Grupo de Ordem Vendas
Gravar na tab. config.

" Grupo de Ordem Vendas

" Grupo de Ordem Vendas

" Grupo de Valores

" FORM Z_FIELDCAT_INIT

16

G U I A

B S I C O

D E

P R O G R A M A O

A L V

6 Agora vamos passar mais um parmetros para a funo REUSE que est na
rotina Z_LIST_DISPLAY:
*&---------------------------------------------------------------------*
*&
Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = wv_repid
*
i_structure_name
= 'VBAK'
it_fieldcat
= wt_fieldcat
it_sort
= wt_sort
it_special_groups = wt_sp_group
i_save
= 'A'
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 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 parmteros:


it_special_groups = wt_sp_group = Nome da tabela interna com as configuraes
para especificao de grupos;
7 Podemos visualizar os efeitos deste processo quando acionamos a criao de
variante de exibio;
Tecle o boto de Exibio de Variante Atual
abaixo aparecer;

Autor: Flavio Ricardo de Almeida


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

17

ou CRTL + F8 , e a tela

G U I A

B S I C O

D E

P R O G R A M A O

A L V

FIGURA 5.1 Tela para montar variante de exibio.

Agora vamos ocultar todos os campos para que possamos identificar a especificao
dos campos, para isto tecle no cone

FIGURA 5.2 Tela com campos ocultados.


Autor: Flavio Ricardo de Almeida
www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

18

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Veja que todos os campos passaram para o lado direito ( Campos ocultados ).
Agora tecle na Combo Box onde esta inscrito Todos os Campos, e veremos os
grupos que criamos;

FIGURA 5.3 Tela mostrando as opes de grupos especificadores existentes.

Autor: Flavio Ricardo de Almeida


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

19

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Vamos escolher o grupo Valores e veremos que apenas o campo especificado para
este grupo aparecer.

FIGURA 5.4 Tela apenas com campos do Grupo Valores..

Isto interessante quanto temos uma lista grande de campos disponveis para
composio da lista, para que possamos identificar melhor cada um deles.
Neste exemplo isto seria irrelevante j que temos poucos campos e todos podem ser
visualizados de maneira simples j na primeira tela.

Autor: Flavio Ricardo de Almeida


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

20

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo

Chamando uma variante


de exibio
Como chamar uma variante de exibio j na primeira tela, tela
de seleo.

qui vamos aprender como chamar uma variante de exibio j na primeira


tela, desde que ela j tenha sido criada previamente, ou seja, na tela de
seleo, sem a necessidade de executar o programa para depois escolher a
mesma melhorando assim a performance pois a seleo pode conter vrios
registros, e o mais importante, agilizando o processo para o usurio.
Vamos copiar o programa ZFRA0023_5 e cham-lo de ZFRA0023_6.
1 Declarar algumas estruturas para trabalhar com as variantes de exibio;
*$*$--- Estruturas ----------------------------------------------------data: wf_x_variant like disvariant.
data: wf_variant
like disvariant.

2 Criar na tela de parmetros a entrada pela escolha da variante de exibio:


*$*$ Tela de Seleo --------------------------------------------------* Variante
selection-screen begin of block b2 with frame title text-s02.
parameters: p_vari like disvariant-variant.
selection-screen end
of block b2.

3 No evento de inicializao incluiremos instrues para identificar para qual


programa deve-se procurar variantes de exibio j gravadas:
* Atribuies para variante
clear wf_variant.
wf_variant-report = wv_repid.

4 Criar de ajuda para o campo de variante, para que seja possvel procurar a mesma
atravs do recurso de matchcode ( F4 ), declarar o evento AT SELECTIONSCREEN ON VALUE REQUEST..., e depois criaremos uma rotina a qual
chamaremos de Z_F4_FOR_VARIANT:
Autor: Flavio Ricardo de Almeida
www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

21

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*$*$ Ajudas de tela ---------------------------------------------------* Processo de ajuda para variante


at selection-screen on value-request for p_vari.
perform z_f4_for_variant.

*&---------------------------------------------------------------------*
*&
Form Z_F4_FOR_VARIANT
*&---------------------------------------------------------------------*
*
Processo de ajuda pra variante
*----------------------------------------------------------------------*
form z_f4_for_variant.
* Varivel 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 funo
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.
endform.

" Z_F4_FOR_VARIANT

6 Criar o evento AT SELECTION-SCREEN ON... para validao do contedo


do campo de variante, e depois criar a rotina Z_VALIDACAO_VARIANTE:
*$*$ Validaes de tela -----------------------------------------------at selection-screen on p_vari.
perform z_validacao_variante.

*&---------------------------------------------------------------------*
*&
Form Z_VALIDACAO_VARIANTE
*&---------------------------------------------------------------------*
*
Realizar validao da variante de exibio
*----------------------------------------------------------------------*
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.

Autor: Flavio Ricardo de Almeida


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

22

G U I A

B S I C O

D E

P R O G R A M A O

A L V

else.
clear: wf_variant.
wf_variant-report = wv_repid.
endif.
endform.

" Z_VALIDACAO_VARIANTE

7 Neste caso, veremos o resultado, na tela de seleo:

FIGURA 6.1 Tela de seleo com opo de escolher a variante de exibio antes da execuo do programa

Caso ainda no tenha criado uma variante de exibio anteriormente, execute o


programa ( F8 ), tecle
selecione os campos e depois grave a variante atravs do
boto

. Agora retorne a tela de seleo.

Com o cursor posicionado no campo de Variante de Exibio acionar a tecla F4


e a ajuda ser acionada.
Ser aberta uma janela que conter as variantes de exibio globais, e as especficas
para o usurio. Veja a figura 6.2

Autor: Flavio Ricardo de Almeida


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

23

G U I A

B S I C O

D E

P R O G R A M A O

FIGURA 6.2 Janela POPUP com

A L V

variantes de exibio.

8 Agora vamos passar o parmetro de variante para a funo REUSE que est na
rotina Z_LIST_DISPLAY:
*&---------------------------------------------------------------------*
*&
Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = wv_repid
*
i_structure_name
= 'VBAK'
it_fieldcat
= wt_fieldcat
it_sort
= wt_sort
it_special_groups = wt_sp_group
i_save
= 'A'
is_variant
= wf_variant
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.

Autor: Flavio Ricardo de Almeida


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

" Z_LIST_DISPLAY

24

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo

Parmetros para
impresso
Configurar alguns parmetros de impresso da lista atravs de
estruturas do ALV.

s vezes queremos configurar um relatrio de modo que o mesmo no tenha


uma pgina de rosto para economizar papel, ou ento necessitamos reservar
linhas para impresso de um rodap, etc...

Neste captulo veremos como possvel fazer estas configuraes internamente no


programa.
Vamos copiar o programa ZFRA0023_6 e cham-lo de ZFRA0023_7 e
implementaremos as funcionalidades, caso voc tenha pulado os captulos anteriores,
voc pode copiar o que est no final do manual.
1 Declarar a estrutura que conter os campos de configuraes:
DATA: wf_print

TYPE slis_print_alv.

2 Criar uma rotina que definir os parmetros a serem utilizados, o qual


chamaremos de Z_PRINT_BUILD, que receber como parmetro a estrutura
declarada no item 1;
...
* Parmetros de impresso
PERFORM z_print_build USING wf_print.

...
3 Cdigo para o form Z_PRINT_BUILD:
*---------------------------------------------------------------------*
*
FORM Z_PRINT_BUILD
*
*---------------------------------------------------------------------*
*
Definir atributos de impresso da lista
*
*---------------------------------------------------------------------*
* --> PF_PRINT - Estrutura com atributos da impresso da lista
*
*---------------------------------------------------------------------*
Autor: Flavio Ricardo de Almeida
www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

25

G U I A

B S I C O

D E

P R O G R A M A O

A L V

FORM z_print_build USING pf_print TYPE slis_print_alv.


*
* PF_PRINT-PRINT
= 'X'.
" Imprimir no SPOOL
pf_print-no_print_selinfos = 'X'.
" No listar info. sobre seleo
pf_print-no_coverpage
= 'X'.
" No listar pgina de rostp
pf_print-no_print_listinfos = 'X'.
" No listar info. sobre a lista
* PF_PRINT-RESERVE_LINES
= 'X'.
" Reservar linhas
* PF_PRINT-NO_NEW_PAGE
= 'X'.
" Sem novas pginas
* PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " No alterar tamanho da linha
ENDFORM.

" Z_PRINT_BUILD

4 Agora vamos passar mais um parmetro para a funo REUSE que est na rotina
Z_LIST_DISPLAY:
*&---------------------------------------------------------------------*
*&
Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = wv_repid
*
i_structure_name
= 'VBAK'
it_fieldcat
= wt_fieldcat
it_sort
= wt_sort
it_special_groups = wt_sp_group
is_print
= wf_print
i_save
= 'A'
is_variant
= wf_variant
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 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 parmetros:


is_print = wf_print = Nome da estrutura com as configuraes de impresso;

Autor: Flavio Ricardo de Almeida


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

26

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo

Variaes de Layout
Incluindo caractersticas novas a lista.

eremos neste captulo que possvel mudar algumas caractersticas da linha


da lista, tais como criar uma checkbox, permitir nveis de quebra diferentes
nas totalizaes, entre outros.

Faremos duas incluses bsicas e deixaremos ao leitor a funo de pesquisar outras


caractersticas a serem exploradas. Para tal veja a estrutura SLIS_LAYOUT_ALV
do grupo de tipos SLIS.
Vamos copiar o programa ZFRA0023_7 e cham-lo de ZFRA0023_8.
1 Criar um campo novo na tabela de sada para que o mesmo seja um checkbox;
que chamaremos de BOX;

*$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida,


vbeln LIKE vbak-vbeln,
" Nro da ordem de venda
erdat LIKE vbak-erdat,
" Data de criao
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 lq. da ordem
vkorg LIKE vbak-vkorg,
" Org. de vendas
vtweg LIKE vbak-vtweg,
" Canal de distribuio
spart LIKE vbak-spart,
" Setor de atividade
vkgrp LIKE vbak-vkgrp,
" Grupo de vendedores
vkbur LIKE vbak-vkbur,
" Escritrio de vendas
box
,
" Checkbox
END
OF we_saida.

2 Declarar estrutura de layout;

DATA: wf_layout

TYPE slis_layout_alv.

3 Criar uma rotina que definir os parmetros a serem utilizados, o qual


chamaremos de Z_PRINT_BUILD, que receber como parmetro a estrutura
declarada no item 1;
Autor: Flavio Ricardo de Almeida
www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

27

G U I A

B S I C O

D E

P R O G R A M A O

A L V

...
* Layout da lista - Referente as definies
PERFORM z_layout_build USING wf_layout.

...
4 Cdigo para o form Z_PRINT_BUILD:
*&---------------------------------------------------------------------*
*&
Form Z_LAYOUT_BUILD
*&---------------------------------------------------------------------*
*
Layout de sada
*----------------------------------------------------------------------*
*
--> PF_LAYOUT - Estrutura para layout de sada da lista
*----------------------------------------------------------------------*
FORM z_layout_build USING pf_layout TYPE slis_layout_alv.
* Permitir mudana de nves de quebra para subtotais
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

5 Agora vamos passar mais um parmetro para a funo REUSE que est na rotina
Z_LIST_DISPLAY:
*&---------------------------------------------------------------------*
*&
Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = wv_repid
*
i_structure_name
= 'VBAK'
it_fieldcat
= wt_fieldcat
it_sort
= wt_sort
it_special_groups = wt_sp_group
is_print
= wf_print
is_layout
= wf_layout
i_save
= 'A'
is_variant
= wf_variant
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.

Autor: Flavio Ricardo de Almeida


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

" Z_LIST_DISPLAY

28

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Veja que passamos como parmetros:


is_layout = wf_layout = Nome da estrutura com as configuraes layout;

6 Tela do Relatrio:

FIGURA 8.1 Lista com checkbox.

7 Totalize a coluna do valor lquido, e depois acione o boto de subtotal

A janela a seguir ser exibida, mostrando as opes de ordenao para a


totalizao, porm o mais interessante a coluna GR, onde possvel escolher
os nveis de quebra de totais, posicione o cursor no mesmo e tecle a funo F4 (
Fig. 8.2 )

Autor: Flavio Ricardo de Almeida


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

29

G U I A

B S I C O

D E

P R O G R A M A O

A L V

FIGURA 8.2 Tela com a opo de tipos de quebra diferentes para os nveis de totais

Autor: Flavio Ricardo de Almeida


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

30

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo

Criando Eventos
Criando eventos para aes especficas para o relatrio.

xistem vrios eventos que podemos acionar para executar os mais diversos
processos no relatrio. Neste captulo vamos tratar os eventos principais, ou
mais usados, para mostrar que possvel interferir no processamento da lista
ALV.

Vamos copiar o programa ZFRA0023_8 e cham-lo de ZFRA0023_9.


1 Declarar a tabela de eventos;

* Tab. de eventos
DATA: wt_events
TYPE slis_t_event.

2 Criar uma rotina que definir os eventos a serem utilizados, que chamaremos de
Z_EVENTTAB_BUID;...
...
* Eventos que podem ser acionados na lista
PERFORM z_eventtab_build USING wt_events[].
...

3 Codificao para a rotina Z_EVENTTAB_BUILD:


Para atribuir nomes mais amigveis as rotinas de eventos, ou tenha uma identificao
melhor, possvel faz-lo conforme mostrado na rotina abaixo:
*---------------------------------------------------------------------*
*
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.
* Variveis
DATA: lf_event TYPE slis_alv_event.
* Obter eventos permitidos para lista grid
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

Autor: Flavio Ricardo de Almeida


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

31

G U I A

*
*

*
*
*

*
*
*
*
*
*

*
*
*

B S I C O

D E

P R O G R A M A O

A L V

EXPORTING
i_list_type = 0
IMPORTING
et_events
= pt_events.
Verificar se evento foi encontrado
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

Veja que no parmetro i_list_type atribumos o valor 0 (zero), que especifica os


eventos para lista simples. Este parmetro pode receber os seguintes valores:
0 = Lista Simples ( Funo REUSE_ALV_LIST_DISPLAY )
1 = Lista hierrquica seqencial ( REUSE_ALV_HIERSEQ_LIST_DISPLAY )
2 = Lista em blocos simples ( REUSE_ALV_BLOCK_LIST_APPEND )
3 = Lista em blocos hierrquica ( REUSE_ALV_BLOCK_LIST_HS_APPEND )

As demais sero vistas em outra oportunidade.


4 Agora vamos passar mais um parmetro para a funo REUSE que est na rotina
Z_LIST_DISPLAY:

Autor: Flavio Ricardo de Almeida


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

32

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*&---------------------------------------------------------------------*
*&
Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_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'
is_variant
= wf_variant
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 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 parmetros:


is_events = wt_events = Nome da tabela com os eventos;
6 Veremos cada evento descrito no tpico 3 ( trs ) de forma resumida apenas para
o leitor ter uma idia dos benefcios que as mesmas podem nos proporcionar.
6.1 O evento USER_COMMAND serve para tratar aes do usurio, aqui daremos
um exemplo simples que quando houver um duplo clique no campo do nmero da
ordem de venda, a transao VA03 ( Exibir ordem de cliente ) ser acionada exibindo
assim a ordem em questo.
*----------------------------------------------------------------------*
*
FORM Z_USER_COMMAND
*
*----------------------------------------------------------------------*
*
Aes do usurio
*
*----------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm
LIKE sy-ucomm
pf_selfield TYPE slis_selfield.
"#EC CALLED
*
CASE pv_ucomm.
*
Ao de Click duplo '&IC1'
WHEN '&IC1'.
*
Posicionar no registro selecionado
READ TABLE wt_saida INDEX pf_selfield-tabindex.
*
Verificar campo selecionado
CASE pf_selfield-sel_tab_field.
WHEN 'WT_SAIDA-VBELN'.

Autor: Flavio Ricardo de Almeida


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

33

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Determinar nro da ordem de venda ao parmetro de memria


SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.
*
Chamar transao de exibio da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
ENDFORM.

6.2 O evento TOP_OF_PAGE serve para criar um cabealho para cada pgina do
relatrio. Apenas um comentrio ser feito na rotina para visualizao do efeito do
mesmo no relatrio.
*----------------------------------------------------------------------*
*
FORM Z_TOP_OF_PAGE
*
*----------------------------------------------------------------------*
*
Evento de cabealho
*
*----------------------------------------------------------------------*
FORM z_top_of_page.
"#EC CALLED
WRITE: / 'Evento: top-of-page'.
ENDFORM.

6.3 O evento END_OF_PAGE serve para criar um rodap para cada pgina do
relatrio.
*----------------------------------------------------------------------*
*
FORM Z_END_OF_PAGE
*
*----------------------------------------------------------------------*
*
Evento para rodap da lista
*
*----------------------------------------------------------------------*
form z_end_of_page.
"#EC CALLED
write: / 'Evento: end_of_page'.
endform.

6.4 O evento TOP_OF_LIST, ser impresso apenas uma vez ao incio da lista.
*----------------------------------------------------------------------*
*
FORM Z_TOP_OF_LIST
*
*----------------------------------------------------------------------*
*
Evento para topo da lista
*
*----------------------------------------------------------------------*
form z_top_of_list.
"#EC CALLED
write: / 'Evento: top-of-list'.
endform.

6.5 O evento END_OF_LIST, ser impresso apenas uma vez ao final da lista.
*----------------------------------------------------------------------*
*
FORM Z_END_OF_LIST
*
*----------------------------------------------------------------------*
*
Evento de final de lista
*
*----------------------------------------------------------------------*
form z_end_of_list.
"#EC CALLED

Autor: Flavio Ricardo de Almeida


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

34

G U I A

B S I C O

D E

P R O G R A M A O

A L V

write: / 'Evento: end_of_list'.


endform.

6.5 Este um evento interessante, o PF_STATUS_SET, nele possvel indicar qual


a barra de status que deve ser apresentada para o relatrio.
Veremos em um tpico especfico como funciona este evento, assim criaremos uma
funcionalidade especfica deste evento interagindo com o checkbox.
*----------------------------------------------------------------------*
*
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.
endform.

6.6 Abaixo segue a interface dos outros eventos mais utilizados. Voc pode test-los
ativando os mesmos no evento Z_EVENTTAB_BUILD. Os pontos de paradas
esto comentados, mas voc pode ativ-los para verificar melhor o momento em que
cada um deles acionado.
*----------------------------------------------------------------------*
*
FORM Z_CALLER_EXIT
*
*----------------------------------------------------------------------*
*
Evento
*
*----------------------------------------------------------------------*
form z_caller_exit using pf_data.
"#EC CALLED
endform.
*----------------------------------------------------------------------*
*
FORM Z_BEFORE_LINE_OUTPUT
*
*----------------------------------------------------------------------*
*
Evento antes da impresso 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 impresso da linha
*
*----------------------------------------------------------------------*
form z_after_line_output
using pf_lineinfo type slis_lineinfo.
"#EC CALLED
*

break-point.

endform.

Autor: Flavio Ricardo de Almeida


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

35

G U I A

B S I C O

D E

P R O G R A M A O

A L V

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

7 Uma pequena amostra da tela com alguns eventos implementados.

FIGURA 9.1 Tela exibindo a aplicao de alguns eventos

Autor: Flavio Ricardo de Almeida


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

36

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo

Barra de Status
Personalizada
Atribuindo uma barra de status especfica para o programa.

odemos criar barra de status ( Status da Interface ) especficas para os


programas. Isto j deve ser sabido por todos, porm no ALV temos uma
maneira especial para indicar qual ser a barra de status que o programa
dever utilizar.

Vamos copiar o programa ZFRA0023_9 e cham-lo de ZFRA0023_10.


Para no perdermos as funcionalidades j existentes para os programas ALVs, vamos
copiar uma barra de status padro para os programas e depois adicionaremos nossas
funes;
1 Copiando uma barra de status padro para ALV;
1.1 Execute a transao SE41 ( Menu Painter ), escolha o programa SAPLKKBL e
a barra de status STANDARD.

Autor: Flavio Ricardo de Almeida


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

37

G U I A

B S I C O

D E

P R O G R A M A O

A L V

FIGURA 10.1 Copiando barra de status.

1.2 Copiar o status acionando o boto

1.3 Altere o nome do programa Para, para ZFRA0023_10;

FIGURA 10.2 Tela de cpia.

1.4 Salve e ative a barra de status;


2 Alterar o programa para utilizar a barra de status especfica para o ZFRA0023_10.
Na rotina Z_EVENTTAB_BUID, tire o comentrio da linha do evento de barra de
status.

Autor: Flavio Ricardo de Almeida


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

38

G U I A

B S I C O

D E

P R O G R A M A O

A L V

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

WHEN slis_ev_pf_status_set.
MOVE 'Z_PF_STATUS_SET' TO lf_event-form.

3 Na rotina Z_PF_STATUS_SET elimine o comentrio para acionar a barra de


status STANDARD;
*----------------------------------------------------------------------*
*
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.
ENDFORM.

4 Agora vamos adicionar um boto especfico para o programa ZFRA0023. Insira


um separador e depois adicione um boto chamado TESTE. Neste caso vamos
associar este boto a PF CTRL + F10.

FIGURA 10.3 Adicionando um boto especfico.

Autor: Flavio Ricardo de Almeida


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

39

G U I A

B S I C O

D E

P R O G R A M A O

A L V

FIGURA 10.4 Boto TESTE ao final da barra de status.

A construo da barra de status funciona da mesma forma como para os outros


programas ABAP, sendo possvel associar cones aos botes, etc, porm aqui
queremos apenas mostrar a personalizao da barra de status portanto deixamos a
cargo do leitor as questes de layout da barra de status, que pode ser obtida atravs da
ajuda para pesquisa da transao SE41.
No prximo captulo veremos como associar o boto TESTE a um determinado
evento.

Autor: Flavio Ricardo de Almeida


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

40

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo

Trabalhando com
checkbox
Associando um evento para trabalhar com as linhas selecionadas
atravs do checkbox.

seleo de uma ou mais linhas pode ser feita atravs de um checkbox como
aprendemos no captulo 8, e no captulo 10 aprendemos a criar uma barra de
status especfica para adicionarmos nossas prprias funes com o intuito de
acionar eventos especficos.

Agora neste captulo vamos integrar estas duas funcionalidades.


Vamos copiar o programa ZFRA0023_10 e cham-lo de ZFRA0023_11. No se
esquea de selecionar tambm a barra de status para a cpia ( interfaces do usurio ).
1 Na rotina Z_USER_COMMAND vamos criar uma entrada para o evento
TESTE;
*----------------------------------------------------------------------*
*
FORM Z_USER_COMMAND
*
*----------------------------------------------------------------------*
*
Aes do usurio
*
*----------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm
LIKE sy-ucomm
pf_selfield TYPE slis_selfield.
"#EC CALLED
*
CASE pv_ucomm.
*
Ao de Click duplo '&IC1'
WHEN '&IC1'.
*
Posicionar no registro selecionado
READ TABLE wt_saida INDEX pf_selfield-tabindex.
*
Verificar campo selecionado
CASE pf_selfield-sel_tab_field.
WHEN 'WT_SAIDA-VBELN'.
*
Determinar nro da ordem de venda ao parmetro de memria
SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.
*
Chamar transao de exibio da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
WHEN 'TESTE'.
PERFORM z_rotina_teste.
ENDCASE.
ENDFORM.

Autor: Flavio Ricardo de Almeida


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

41

G U I A

B S I C O

D E

P R O G R A M A O

A L V

2 Criar a rotina Z_ROTINA_TESTE, que exibir uma mensagem indicando quais


linhas foram selecionadas.
*&---------------------------------------------------------------------*
*&
Form Z_ROTINA_TESTE
*&---------------------------------------------------------------------*
*
Rotina para o evento TESTE ( Boto )
*----------------------------------------------------------------------*
FORM z_rotina_teste.
LOOP AT wt_saida.
Verificar se linha foi selecionada
CHECK wt_saida-box EQ 'X'.
*
Enviar mensagem para informar linha selecionada
MESSAGE i899(bd) WITH 'Foi escolhida a ordem:' wt_saida-vbeln.
ENDLOOP.
*

ENDFORM.

" Z_ROTINA_TESTE

3 Tela da lista;

FIGURA 11.1 Tela com mensagem de linha selecionada.

A mensagem ser exibida quantas linhas forem selecionadas, indicando na mesma o


nmero da ordem de venda.

Autor: Flavio Ricardo de Almeida


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

42

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo

Mudando cores dos


campos
Mudando os atributos de cores de campos.

o captulo 8 ( Variaes de Layout ) vimos que possvel mudar algumas


caractersticas da lista atravs da configurao da estrutura is_layout.
Com relao a cores pode-se configurar o parmetro zebra para que as
linhas da lista alternem as cores para que as mesmas sejam melhores
identificadas.
Neste captulo vamos aprender como mudar os atributos de cores para campos da
lista e conseqentemente para a linha.
Vamos copiar o programa ZFRA0023_11 e cham-lo de ZFRA0023_12. No se
esquea de selecionar tambm a barra de status para a cpia ( interfaces do usurio ).
1 Incluir estrutura de cores na estrutura we_sada;
*$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida,
vbeln LIKE vbak-vbeln,
" Nro da ordem de venda
erdat LIKE vbak-erdat,
" Data de criao
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 lq. da ordem
vkorg LIKE vbak-vkorg,
" Org. de vendas
vtweg LIKE vbak-vtweg,
" Canal de distribuio
spart LIKE vbak-spart,
" Setor de atividade
vkgrp LIKE vbak-vkgrp,
" Grupo de vendedores
vkbur LIKE vbak-vkbur,
" Escritrio de vendas
box
,
" Checkbox
color TYPE slis_t_specialcol_alv,
END
OF we_saida.

2 Vamos criar duas tabelas internas que contero uma configurao especfica de
cores.
* Tabs. de cores
DATA: wt_color_normal

TYPE slis_t_specialcol_alv WITH HEADER LINE,

Autor: Flavio Ricardo de Almeida


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

43

G U I A

B S I C O

D E

P R O G R A M A O

A L V

wt_color_selecao TYPE slis_t_specialcol_alv WITH HEADER LINE.

4 Criar rotina para atribuio de cores;


*&---------------------------------------------------------------------*
*&
Form Z_FIELD_COLOR
*&---------------------------------------------------------------------*
*
<-- PT_COLOR
- Tab. com configurao das cores
*
--> PV_COLOR
- Cor
*
--> PV_INTENSIFIED - Intensificado
*
--> PV_INVERSE
- Inverso de cores
*----------------------------------------------------------------------*
FORM z_field_color TABLES pt_color TYPE slis_t_specialcol_alv
USING value(pv_color)
TYPE i
value(pv_intensified) TYPE i
value(pv_inverse)
TYPE i.
DEFINE z_field_color.
pt_color-color-col = pv_color.
pt_color-color-int = pv_intensified.
pt_color-color-inv = pv_inverse.
pt_color-fieldname = &1.
append pt_color.
END-OF-DEFINITION.
* Inicializar tabela
CLEAR: pt_color[], pt_color.
* Definir campos
z_field_color: 'VBELN', 'ERDAT', 'ERNAM', 'AUDAT', 'AUART', 'NETWR',
'VKORG', 'VTWEG', 'SPART', 'VKGRP', 'VKBUR'.
ENDFORM.

" Z_FIELD_COLOR

5 Criar chamada da rotina para atribuio de cores;


*$*$ Programa Principal -----------------------------------------------START-OF-SELECTION.

* Determinar cores
PERFORM z_field_color: TABLES wt_color_normal USING 2 0 0,
TABLES wt_color_selecao USING 5 0 0.
...

6 Indicar a tabela de cores na rotina Z_LAYOUT_BUILD;


*&---------------------------------------------------------------------*
*&
Form Z_LAYOUT_BUILD
*&---------------------------------------------------------------------*
*
Layout de sada
*----------------------------------------------------------------------*
*
--> PF_LAYOUT - Estrutura para layout de sada da lista
*----------------------------------------------------------------------*
FORM z_layout_build USING pf_layout TYPE slis_layout_alv.
pf_layout-group_change_edit =
* Check box na lista
pf_layout-box_fieldname
=
pf_layout-box_tabname
=
* Determinar a tabela de cores
pf_layout-coltab_fieldname =

'X'.
'BOX'.
'WT_SAIDA'.
'COLOR'.

ENDFORM.

Autor: Flavio Ricardo de Almeida


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

" Z_LAYOUT_BUILD

44

G U I A

B S I C O

D E

P R O G R A M A O

A L V

7 Vamos aproveitar a rotina Z_ROTINA_TESTE para implementar a mudana de


cor. Faremos que as linhas que estiverem selecionadas no momento em que o boto
TESTE seja acionado mudem de cor.
*&---------------------------------------------------------------------*
*&
Form Z_ROTINA_TESTE
*&---------------------------------------------------------------------*
*
Rotina para o evento TESTE ( Boto )
*----------------------------------------------------------------------*
FORM z_rotina_teste.
LOOP AT wt_saida.
Verificar se linha foi selecionada
CHECK wt_saida-box EQ 'X'
IF wt_saida-box EQ 'X'.
*
Enviar mensagem para informar linha selecionada
MESSAGE i899(bd) WITH 'Foi escolhida a ordem:' wt_saida-vbeln.
*
Mudar cor da linha selecionada
wt_saida-color[] = wt_color_selecao[].
ELSE.
*
Mudar cor da linha selecionada
wt_saida-color[] = wt_color_normal[].
ENDIF.
MODIFY wt_saida TRANSPORTING color.
ENDLOOP.
*
*

ENDFORM.

" Z_ROTINA_TESTE

Veja que mudamos um pouco a rotina, trocamos o comando CHECK por um IF,
pois desta forma poderemos identificar as linhas que no esto selecionadas e retornlas a cor original caso tenham sido selecionadas em algum momento.
Atribuiremos as cores configuradas na tabela wt_color_selecao, para as linhas
selecionadas, caso contrrio ser atribuda as da wt_color_normal.
8 Detalhe importante, devemos informar que deve ser feito um REFRESH da lista
para que as alteraes, neste caso das cores, sejam atualizadas na lista. Para isto vamos
informar ao evento Z_USER_COMMAND o parmetro de REFRESH.
*----------------------------------------------------------------------*
*
FORM Z_USER_COMMAND
*
*----------------------------------------------------------------------*
*
Aes do usurio
*
*----------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm
LIKE sy-ucomm
pf_selfield TYPE slis_selfield.
"#EC CALLED
*
CASE pv_ucomm.
*
Ao de Click duplo '&IC1'
WHEN '&IC1'.
*
Posicionar no registro selecionado
READ TABLE wt_saida INDEX pf_selfield-tabindex.
*
Verificar campo selecionado
CASE pf_selfield-sel_tab_field.
WHEN 'WT_SAIDA-VBELN'.
*
Determinar nro da ordem de venda ao parmetro de memria
SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.
*
Chamar transao de exibio da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
WHEN 'TESTE'.

Autor: Flavio Ricardo de Almeida


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

45

G U I A

B S I C O

D E

P R O G R A M A O

A L V

PERFORM z_rotina_teste.
Realizar um REFRESH da lista
pf_selfield-refresh = 'X'.
ENDCASE.

ENDFORM.

O parmetro REFRESH tambm pode ser utilizado para atualizar a tela quando alguma
informao da tabela interna ( wt_saida ) sobre alguma alterao no contedo.
9 Teremos que realizar uma alterao na rotina Z_BUSCAR_DADOS, pois no
ser aceito o SELECT... INTO TABLE diretamente na tabela de sada wt_saida
pois a mesma com a incluso do campo color, do tipo
SLIS_T_SPECIALCOL_ALV, que uma tabela, passou a ter mais de uma
dimenso, e a clusula INTO TABLE aceita apenas tabelas internas unidimensionais.
*&---------------------------------------------------------------------*
*&
Form Z_BUSCAR_DADOS
*&---------------------------------------------------------------------*
*
Obter informaes para lista
*----------------------------------------------------------------------*
FORM z_buscar_dados.
* Variveis
DATA: BEGIN OF lt_saida OCCURS 0,
vbeln LIKE vbak-vbeln,
" Nro da ordem de venda
erdat LIKE vbak-erdat,
" Data de criao
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 lq. da ordem
vkorg LIKE vbak-vkorg,
" Org. de vendas
vtweg LIKE vbak-vtweg,
" Canal de distribuio
spart LIKE vbak-spart,
" Setor de atividade
vkgrp LIKE vbak-vkgrp,
" Grupo de vendedores
vkbur LIKE vbak-vkbur,
" Escritrio de vendas
END OF lt_saida.
* Exibir aviso
PERFORM z_sapgui_progress_indicator
USING 'Selecionando dados. Aguarde...'.
* Seleo das informaes
SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp
vkbur
*
INTO TABLE wt_saida
INTO TABLE lt_saida
FROM vbak
WHERE vbeln IN s_vbeln.
* Atribuir valores a tabela de sada
LOOP AT lt_saida.
MOVE-CORRESPONDING lt_saida TO wt_saida.
APPEND wt_saida.
ENDLOOP.
ENDFORM.

" Z_BUSCAR_DADOS

Veja que apenas foi criado um passo intermedirio para incluir os campos na tabela
de sada wt_sada.
10 Telas antes e depois de acionar o boto TESTE com uma linha selecionada;

Autor: Flavio Ricardo de Almeida


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

46

G U I A

B S I C O

D E

P R O G R A M A O

A L V

FIGURA 12.1 Tela antes de apertar o boto TESTE

FIGURA 12.2 Tela DEPOIS de apertar o boto TESTE, j com a linha selecionada colorida.

Autor: Flavio Ricardo de Almeida


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

47

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo

Inserindo cones
Agregando cones a linhas da lista.

m recurso bastante interessante a incluso de cones nas linhas da lista.


Neste captulo vamos aprender como simples dispor deste recurso e como
a lista pode ficar muito mais apresentvel ao usurio.

Vamos copiar o programa ZFRA0023_11 e cham-lo de ZFRA0023_13. No se


esquea de selecionar tambm a barra de status para a cpia.
1 Referenciar o include de definio de cones;
*$*$ Includes ---------------------------------------------------------INCLUDE <icon>.

2 Incluir campo na tabela de sada wt_saida que receber o cdigo do cone;


*$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida,
vbeln
LIKE vbak-vbeln,
" Nro da ordem de venda
erdat
LIKE vbak-erdat,
" Data de criao
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 lq. da ordem
vkorg
LIKE vbak-vkorg,
" Org. de vendas
vtweg
LIKE vbak-vtweg,
" Canal de distribuio
spart
LIKE vbak-spart,
" Setor de atividade
vkgrp
LIKE vbak-vkgrp,
" Grupo de vendedores
vkbur
LIKE vbak-vkbur,
" Escritrio de vendas
box
TYPE c
,
" Checkbox
icone(30) TYPE c
,
" cone
END
OF we_saida.

3 Faremos uma alterao na rotina Z_BUSCAR_DADOS, considerando o valor


lquido da ordem de venda como referncia para atribuio de cones.
*&---------------------------------------------------------------------*
*&
Form Z_BUSCAR_DADOS
*&---------------------------------------------------------------------*
*
Obter informaes para lista
*----------------------------------------------------------------------*
FORM z_buscar_dados.

Autor: Flavio Ricardo de Almeida


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

48

G U I A

B S I C O

D E

P R O G R A M A O

A L V

* Exibir mensagem
PERFORM z_sapgui_progress_indicator
USING 'Selecionando dados. Aguarde...'.
* Obter dados da base
SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp
vkbur
INTO TABLE wt_saida
FROM vbak
WHERE vbeln IN s_vbeln.
* Atribuir cones
LOOP AT wt_saida.
*
Verificar valor lquido
IF wt_saida-netwr GT '1000'.
wt_saida-icone = icon_red_light.
ELSEIF wt_saida-netwr GT '500'.
wt_saida-icone = icon_yellow_light.
ELSE.
wt_saida-icone = icon_green_light.
ENDIF.
MODIFY wt_saida TRANSPORTING icone.
ENDLOOP.
ENDFORM.

" Z_BUSCAR_DADOS

Este um exemplo da aplicao de cones a listas ALVs. Neste caso estamos


considerando que, ipoteticamente, ordens com valores lquidos entre 0 e 500 estariam
liberadas, entre 501 e 1000 deveriam ter ateno e acima de 1000 devem ser
analisadas, como se existissem limites para que uma ordem fosse liberada, etc...
Voc pode avaliar suas aplicaes e encontrar uma aplicao real, aqui apenas
queremos mostrar a ferramenta.
4 Finalmente incluiremos o campos ICONE na tabela wt_fieldcat;
*---------------------------------------------------------------------*
*
FORM Z_FIELDCAT_INIT
*
*---------------------------------------------------------------------*
*
Inicializar estrutura das informaes 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[].
* cone
clear lf_fieldcat.
add 1 to lv_col_pos.
lf_fieldcat-col_pos
= lv_col_pos.
lf_fieldcat-fieldname
= 'ICONE'.
lf_fieldcat-icon
= 'X'.
lf_fieldcat-datatype
= 'CHAR'.
lf_fieldcat-outputlen
= '4'.
append lf_fieldcat to pt_fieldcat.
* Cd. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VBELN'.
" Nome do Campo
lf_fieldcat-ref_tabname
= 'VBAK'." Tab. de Referncia
lf_fieldcat-sp_group
= 'A'.
" Grupo de Ordem Vendas
APPEND lf_fieldcat TO pt_fieldcat.
" Gravar na tab. config.

...

Autor: Flavio Ricardo de Almeida


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

49

G U I A

B S I C O

D E

P R O G R A M A O

5 Tela da lista;

FIGURA 13.1 Tela de lista com cones.

Autor: Flavio Ricardo de Almeida


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

50

A L V

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Consideraes Gerais
Referncias e ressalvas.
Copyright:
Copyright 2001 Flavio Ricardo de Almeida. Todos os direitos reservados.
O material contido neste manual pode ser reproduzido, alterado e redistribudo sem
autorizao prvia, desde que mantido os crditos.
Sem vnculo algum com a SAP AG ou quaisquer de suas subsidirias.
Trademakrs:
SAP, R/3, ABAP/4, ABAP so marcas registradas da SAP AG.

Autor: Flavio Ricardo de Almeida


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

51

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Apndice A
Programas utilizados como exemplos.
Os programas podem ser baixados do site Flavios Home Page no endereo
www.almeidafr.hpg.ig.com.br .

Captulo 2
*$*$********************************************************************
*$*$
*
*$*$ PROGRAMA: Meu primeiro ALV
*
*$*$ TIPO
: Lista ALV
*
*$*$ AUTOR
: Flavio R. Almeida (FRA) - FRA Consultoria
*
*$*$ DATA
: 12/12/2001
*
*$** OBS.
:
*
*$**
*
*$*$********************************************************************
*$*$
HISTRICO DAS MODIFICAES
*
*$*$-------------------------------------------------------------------*
*$*$ DATA
| AUTOR
| DESCRIO
*
*$*$-------------------------------------------------------------------*
*$**
|
|
*
*$*$********************************************************************
REPORT zfra0023_2 .
*$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida.
INCLUDE STRUCTURE vbak.
TYPES: END
OF we_saida.
*$*$ Tabelas Internas -------------------------------------------------DATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE.
*$*$ Variveis --------------------------------------------------------* Nome do programa
DATA: wv_repid
LIKE sy-repid.
*$*$ Tela de Seleo --------------------------------------------------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.
*$*$ Inicializao ----------------------------------------------------INITIALIZATION.
wv_repid
= sy-repid.
*$*$ Programa Principal -----------------------------------------------START-OF-SELECTION.
PERFORM z_buscar_dados.
END-OF-SELECTION.
* Construo da lista propriamente dita ( Exibio das informaes )
PERFORM z_list_display.
*$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------*
*&
Form Z_BUSCAR_DADOS

Autor: Flavio Ricardo de Almeida


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

52

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*&---------------------------------------------------------------------*
*
Obter informaes para lista
*----------------------------------------------------------------------*
FORM z_buscar_dados.
PERFORM z_sapgui_progress_indicator
USING 'Selecionando dados. Aguarde...'.
SELECT * INTO TABLE wt_saida
FROM vbak
WHERE vbeln IN s_vbeln.
ENDFORM.

" Z_BUSCAR_DADOS

*&---------------------------------------------------------------------*
*&
Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = wv_repid
i_structure_name
= 'VBAK'
i_save
= 'A'
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 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.

Autor: Flavio Ricardo de Almeida


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

" Z_SAPGUI_PROGRESS_INDICATOR

53

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo 3
*$*$********************************************************************
*$*$
*
*$*$ PROGRAMA: Montando estrutura da lista ALV
*
*$*$ TIPO
: Lista ALV
*
*$*$ AUTOR
: Flavio R. Almeida (FRA) - FRA Consultoria
*
*$*$ DATA
: 12/12/2001
*
*$** OBS.
:
*
*$**
*
*$*$********************************************************************
*$*$
HISTRICO DAS MODIFICAES
*
*$*$-------------------------------------------------------------------*
*$*$ DATA
| AUTOR
| DESCRIO
*
*$*$-------------------------------------------------------------------*
*$**
|
|
*
*$*$********************************************************************
REPORT zfra0023_3.
*$*$ 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 criao
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 lq. da ordem
vkorg LIKE vbak-vkorg,
" Org. de vendas
vtweg LIKE vbak-vtweg,
" Canal de distribuio
spart LIKE vbak-spart,
" Setor de atividade
vkgrp LIKE vbak-vkgrp,
" Grupo de vendedores
vkbur LIKE vbak-vkbur,
" Escritrio de vendas
END
OF we_saida.
*$*$ Tabelas Internas -------------------------------------------------DATA: wt_saida TYPE STANDARD TABLE OF we_saida WITH HEADER LINE.
DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.
*$*$ Variveis --------------------------------------------------------* Nome do programa
DATA: wv_repid LIKE sy-repid.
*$*$ Tela de Seleo --------------------------------------------------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.
*$*$ Inicializao ----------------------------------------------------INITIALIZATION.
wv_repid
= sy-repid.
*$*$ Programa Principal -----------------------------------------------START-OF-SELECTION.
PERFORM z_buscar_dados.
* Indicar campos para exibio na lista
PERFORM z_fieldcat_init USING wt_fieldcat[].
END-OF-SELECTION.
* Construo da lista propriamente dita ( Exibio das informaes )
PERFORM z_list_display.
*$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------*
*&
Form Z_BUSCAR_DADOS
Autor: Flavio Ricardo de Almeida
www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

54

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*&---------------------------------------------------------------------*
*
Obter informaes 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
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = wv_repid
*
i_structure_name
= 'VBAK'
it_fieldcat
= wt_fieldcat
i_save
= 'A'
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 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 informaes da lista
*
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha
*
*---------------------------------------------------------------------*

Autor: Flavio Ricardo de Almeida


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

55

G U I A

B S I C O

D E

P R O G R A M A O

A L V

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[].
* Cd. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VBELN'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Data de Criao
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERDAT'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERNAM'.
lf_fieldcat-ref_tabname
= 'VBAK'.
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 lq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'NETWR'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Organizao de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VKORG'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuio
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.
* Escritrio de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VKBUR'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
ENDFORM.

Autor: Flavio Ricardo de Almeida


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

" Nome do Campo


" Tab. de Referncia
" Gravar na tab. config.

" FORM Z_FIELDCAT_INIT

56

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo 4
*$*$********************************************************************
*$*$
*
*$*$ PROGRAMA: Ordenao de lista
*
*$*$ TIPO
: Lista ALV
*
*$*$ AUTOR
: Flavio R. Almeida (FRA) - FRA Consultoria
*
*$*$ DATA
: 12/12/2001
*
*$** OBS.
:
*
*$**
*
*$*$********************************************************************
*$*$
HISTRICO DAS MODIFICAES
*
*$*$-------------------------------------------------------------------*
*$*$ DATA
| AUTOR
| DESCRIO
*
*$*$-------------------------------------------------------------------*
*$**
|
|
*
*$*$********************************************************************
REPORT zfra0023_4.
*$*$ 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 criao
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 lq. da ordem
vkorg LIKE vbak-vkorg,
" Org. de vendas
vtweg LIKE vbak-vtweg,
" Canal de distribuio
spart LIKE vbak-spart,
" Setor de atividade
vkgrp LIKE vbak-vkgrp,
" Grupo de vendedores
vkbur LIKE vbak-vkbur,
" Escritrio de vendas
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 informaes sobre as caractersticas dos campos
DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.
* Tab. com informaes sobre a ordenao da lista
DATA: wt_sort
TYPE slis_t_sortinfo_alv.

*$*$ Variveis --------------------------------------------------------* Nome do programa


DATA: wv_repid LIKE sy-repid.
*$*$ Tela de Seleo --------------------------------------------------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.
*$*$ Inicializao ----------------------------------------------------INITIALIZATION.
wv_repid
= sy-repid.
*$*$ Programa Principal -----------------------------------------------START-OF-SELECTION.
PERFORM z_buscar_dados.
* Indicar campos para exibio na lista
PERFORM z_fieldcat_init USING wt_fieldcat[].
* Ordenar lista
PERFORM z_ordenar_lista USING wt_sort[].
Autor: Flavio Ricardo de Almeida
www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

57

G U I A

B S I C O

D E

P R O G R A M A O

A L V

END-OF-SELECTION.
* Construo da lista propriamente dita ( Exibio das informaes )
PERFORM z_list_display.
*$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------*
*&
Form Z_BUSCAR_DADOS
*&---------------------------------------------------------------------*
*
Obter informaes 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
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = wv_repid
*
i_structure_name
= 'VBAK'
it_fieldcat
= wt_fieldcat
it_sort
= wt_sort
i_save
= 'A'
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 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.

Autor: Flavio Ricardo de Almeida


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

58

G U I A

B S I C O

D E

P R O G R A M A O

ENDFORM.

A L V

" Z_SAPGUI_PROGRESS_INDICATOR

*---------------------------------------------------------------------*
*
FORM Z_FIELDCAT_INIT
*
*---------------------------------------------------------------------*
*
Inicializar estrutura das informaes 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[].
* Cd. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VBELN'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Data de Criao
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERDAT'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERNAM'.
lf_fieldcat-ref_tabname
= 'VBAK'.
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 lq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'NETWR'.
lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-do_sum
= 'X'.
APPEND lf_fieldcat TO pt_fieldcat.
* Organizao de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VKORG'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuio
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.
* Escritrio de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VKBUR'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
ENDFORM.

Autor: Flavio Ricardo de Almeida


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

" Nome do Campo


" Tab. de Referncia
" Gravar na tab. config.

" FORM Z_FIELDCAT_INIT

59

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*&---------------------------------------------------------------------*
*&
Form Z_ORDENAR_LISTA
*&---------------------------------------------------------------------*
*
Ordenao da lista
*----------------------------------------------------------------------*
*
--> PT_SORT[] - Tabela com informaes de ordenao 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
lf_sort-fieldname
lf_sort-tabname
lf_sort-up
lf_sort-expa
APPEND lf_sort TO
**
*
*
*
*
*
*

= 1.
= 'ERNAM'.
= 'WT_SAIDA'.
= 'X'.
= 'X'.
wt_sort.

"
"
"
"
"

Sequncia de ordenao
Nome do campo
Nome da tabela de lista
Ordenao Crescente
Expandir lista

Outras opes possveis de utilizao


lf_sort-down
= 'X'.
" Ordenao decrescente
lf_sort-group
= '*'.
" Mudana de controle: quebra de
" pgina, inserir sublinha
lf_sort-subtot
= 'X'.
" Subtotal
lf_sort-comp
= 'X'.
" Comprimir lista mostrando
" apenas os subtotais

ENDFORM.

Autor: Flavio Ricardo de Almeida


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

" Z_ORDENAR_LISTA

60

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo 5
*$*$********************************************************************
*$*$
*
*$*$ PROGRAMA: Especificao de grupos de campos da lista
*
*$*$ TIPO
: Lista ALV
*
*$*$ AUTOR
: Flavio R. Almeida (FRA) - FRA Consultoria
*
*$*$ DATA
: 12/12/2001
*
*$** OBS.
:
*
*$**
*
*$*$********************************************************************
*$*$
HISTRICO DAS MODIFICAES
*
*$*$-------------------------------------------------------------------*
*$*$ DATA
| AUTOR
| DESCRIO
*
*$*$-------------------------------------------------------------------*
*$**
|
|
*
*$*$********************************************************************
REPORT zfra0023_5.
*$*$ 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 criao
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 lq. da ordem
vkorg LIKE vbak-vkorg,
" Org. de vendas
vtweg LIKE vbak-vtweg,
" Canal de distribuio
spart LIKE vbak-spart,
" Setor de atividade
vkgrp LIKE vbak-vkgrp,
" Grupo de vendedores
vkbur LIKE vbak-vkbur,
" Escritrio de vendas
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 informaes sobre as caractersticas dos campos
DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.
* Tab. com informaes sobre a ordenao da lista
DATA: wt_sort
TYPE slis_t_sortinfo_alv.
* Tab. de especificao de grupos
DATA: wt_sp_group TYPE slis_t_sp_group_alv.
*$*$ Variveis --------------------------------------------------------* Nome do programa
DATA: wv_repid LIKE sy-repid.
*$*$ Tela de Seleo --------------------------------------------------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.
*$*$ Inicializao ----------------------------------------------------INITIALIZATION.
wv_repid
= sy-repid.
*$*$ Programa Principal -----------------------------------------------START-OF-SELECTION.
PERFORM z_buscar_dados.
* Indicar campos para exibio na lista
PERFORM z_fieldcat_init USING wt_fieldcat[].
Autor: Flavio Ricardo de Almeida
www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

61

G U I A

B S I C O

D E

P R O G R A M A O

A L V

* Ordenar lista
PERFORM z_ordenar_lista USING wt_sort[].
* Grupos de campos
PERFORM z_sp_group_build USING wt_sp_group[].
END-OF-SELECTION.
* Construo da lista propriamente dita ( Exibio das informaes )
PERFORM z_list_display.
*$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------*
*&
Form Z_BUSCAR_DADOS
*&---------------------------------------------------------------------*
*
Obter informaes 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
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = wv_repid
*
i_structure_name
= 'VBAK'
it_fieldcat
= wt_fieldcat
it_sort
= wt_sort
it_special_groups = wt_sp_group
i_save
= 'A'
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 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).

Autor: Flavio Ricardo de Almeida


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

62

G U I A

B S I C O

D E

P R O G R A M A O

A L V

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'


EXPORTING
*
PERCENTAGE = 0
text
= pv_text.
ENDFORM.

" Z_SAPGUI_PROGRESS_INDICATOR

*---------------------------------------------------------------------*
*
FORM Z_FIELDCAT_INIT
*
*---------------------------------------------------------------------*
*
Inicializar estrutura das informaes 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[].
* Cd. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VBELN'.
lf_fieldcat-ref_tabname
= 'VBAK'."
lf_fieldcat-sp_group
= 'A'.
"
APPEND lf_fieldcat TO pt_fieldcat.
"
* Data de Criao
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERDAT'.
lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-sp_group
= 'A'.
"
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'.
"
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 lq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'NETWR'.
lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-sp_group
= 'V'.
"
APPEND lf_fieldcat TO pt_fieldcat.
* Organizao de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VKORG'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuio
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'.

Autor: Flavio Ricardo de Almeida


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

63

" Nome do Campo


Tab. de Referncia
Grupo de Ordem Vendas
Gravar na tab. config.

Grupo de Ordem Vendas

Grupo de Ordem Vendas

Grupo de Valores

G U I A

B S I C O

D E

P R O G R A M A O

A L V

APPEND lf_fieldcat TO pt_fieldcat.


* Escritrio 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
*&---------------------------------------------------------------------*
*
Ordenao da lista
*----------------------------------------------------------------------*
*
--> PT_SORT[] - Tabela com informaes de ordenao 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
lf_sort-fieldname
lf_sort-tabname
lf_sort-up
lf_sort-expa
APPEND lf_sort TO
**
*
*
*
*
*
*

= 1.
= 'ERNAM'.
= 'WT_SAIDA'.
= 'X'.
= 'X'.
wt_sort.

"
"
"
"
"

Sequncia de ordenao
Nome do campo
Nome da tabela de lista
Ordenao Crescente
Expandir lista

Outras opes possveis de utilizao


lf_sort-down
= 'X'.
" Ordenao decrescente
lf_sort-group
= '*'.
" Mudana de controle: quebra de
" pgina, 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.
* Variveis
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.

Autor: Flavio Ricardo de Almeida


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

" FORM Z_SP_GROUP_BUILD

64

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo 6
*$*$********************************************************************
*$*$
*
*$*$ PROGRAMA: Variante de exibio
*
*$*$ TIPO
: Lista ALV
*
*$*$ AUTOR
: Flavio R. Almeida (FRA) - FRA Consultoria
*
*$*$ DATA
: 12/12/2001
*
*$** OBS.
:
*
*$**
*
*$*$********************************************************************
*$*$
HISTRICO DAS MODIFICAES
*
*$*$-------------------------------------------------------------------*
*$*$ DATA
| AUTOR
| DESCRIO
*
*$*$-------------------------------------------------------------------*
*$**
|
|
*
*$*$********************************************************************
REPORT zfra0023_6.
*$*$ 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 criao
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 lq. da ordem
vkorg LIKE vbak-vkorg,
" Org. de vendas
vtweg LIKE vbak-vtweg,
" Canal de distribuio
spart LIKE vbak-spart,
" Setor de atividade
vkgrp LIKE vbak-vkgrp,
" Grupo de vendedores
vkbur LIKE vbak-vkbur,
" Escritrio de vendas
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 informaes sobre as caractersticas dos campos
DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.
* Tab. com informaes sobre a ordenao da lista
DATA: wt_sort
TYPE slis_t_sortinfo_alv.
* Tab. de especificao de grupos
DATA: wt_sp_group TYPE slis_t_sp_group_alv.
*$*$--- Estruturas ----------------------------------------------------DATA: wf_x_variant LIKE disvariant.
DATA: wf_variant
LIKE disvariant.
*$*$ Variveis --------------------------------------------------------* Nome do programa
DATA: wv_repid LIKE sy-repid.
*$*$ Tela de Seleo --------------------------------------------------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.

Autor: Flavio Ricardo de Almeida


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

65

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*$*$ Inicializao ----------------------------------------------------INITIALIZATION.


wv_repid
= sy-repid.
* Atribuies 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.
*$*$ Validaes de tela -----------------------------------------------AT SELECTION-SCREEN ON p_vari.
PERFORM z_validacao_variante.
*$*$ Programa Principal -----------------------------------------------START-OF-SELECTION.
PERFORM z_buscar_dados.
* Indicar campos para exibio 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[].
END-OF-SELECTION.
* Construo da lista propriamente dita ( Exibio das informaes )
PERFORM z_list_display.
*$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------*
*&
Form Z_BUSCAR_DADOS
*&---------------------------------------------------------------------*
*
Obter informaes 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
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = wv_repid
*
i_structure_name
= 'VBAK'
it_fieldcat
= wt_fieldcat
it_sort
= wt_sort
it_special_groups = wt_sp_group
i_save
= 'A'
is_variant
= wf_variant

Autor: Flavio Ricardo de Almeida


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

66

G U I A

B S I C O

D E

P R O G R A M A O

A L V

TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 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 informaes 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[].
* Cd. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VBELN'.
lf_fieldcat-ref_tabname
= 'VBAK'."
lf_fieldcat-sp_group
= 'A'.
"
APPEND lf_fieldcat TO pt_fieldcat.
"
* Data de Criao
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERDAT'.
lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-sp_group
= 'A'.
"
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'.
"
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 lq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'NETWR'.

Autor: Flavio Ricardo de Almeida


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

67

" Nome do Campo


Tab. de Referncia
Grupo de Ordem Vendas
Gravar na tab. config.

Grupo de Ordem Vendas

Grupo de Ordem Vendas

G U I A

B S I C O

D E

P R O G R A M A O

A L V

lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-sp_group
= 'V'.
" Grupo de Valores
APPEND lf_fieldcat TO pt_fieldcat.
Organizao de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VKORG'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
Canal de distribuio
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.
Escritrio 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
*&---------------------------------------------------------------------*
*
Ordenao da lista
*----------------------------------------------------------------------*
*
--> PT_SORT[] - Tabela com informaes de ordenao 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
lf_sort-fieldname
lf_sort-tabname
lf_sort-up
lf_sort-expa
APPEND lf_sort TO
**
*
*
*
*
*
*

= 1.
= 'ERNAM'.
= 'WT_SAIDA'.
= 'X'.
= 'X'.
wt_sort.

"
"
"
"
"

Sequncia de ordenao
Nome do campo
Nome da tabela de lista
Ordenao Crescente
Expandir lista

Outras opes possveis de utilizao


lf_sort-down
= 'X'.
" Ordenao decrescente
lf_sort-group
= '*'.
" Mudana de controle: quebra de
" pgina, 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
*
*---------------------------------------------------------------------*

Autor: Flavio Ricardo de Almeida


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

68

G U I A

B S I C O

D E

P R O G R A M A O

A L V

FORM z_sp_group_build USING pt_sp_group TYPE slis_t_sp_group_alv.


* Variveis
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.
* Varivel 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 funo
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.
ENDFORM.

" Z_F4_FOR_VARIANT

*&---------------------------------------------------------------------*
*&
Form Z_VALIDACAO_VARIANTE
*&---------------------------------------------------------------------*
*
Realizar validao da variante de exibio
*----------------------------------------------------------------------*
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.

Autor: Flavio Ricardo de Almeida


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

69

G U I A

B S I C O

D E

P R O G R A M A O

A L V

ELSE.
CLEAR: wf_variant.
wf_variant-report = wv_repid.
ENDIF.
ENDFORM.

Autor: Flavio Ricardo de Almeida


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

" Z_VALIDACAO_VARIANTE

70

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo 7
*$*$********************************************************************
*$*$
*
*$*$ PROGRAMA: Configuraes de impresso
*
*$*$ TIPO
: Lista ALV
*
*$*$ AUTOR
: Flavio R. Almeida (FRA) - FRA Consultoria
*
*$*$ DATA
: 12/12/2001
*
*$** OBS.
:
*
*$**
*
*$*$********************************************************************
*$*$
HISTRICO DAS MODIFICAES
*
*$*$-------------------------------------------------------------------*
*$*$ DATA
| AUTOR
| DESCRIO
*
*$*$-------------------------------------------------------------------*
*$**
|
|
*
*$*$********************************************************************
REPORT zfra0023_7.
*$*$ 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 criao
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 lq. da ordem
vkorg LIKE vbak-vkorg,
" Org. de vendas
vtweg LIKE vbak-vtweg,
" Canal de distribuio
spart LIKE vbak-spart,
" Setor de atividade
vkgrp LIKE vbak-vkgrp,
" Grupo de vendedores
vkbur LIKE vbak-vkbur,
" Escritrio de vendas
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 informaes sobre as caractersticas dos campos
DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.
* Tab. com informaes sobre a ordenao da lista
DATA: wt_sort
TYPE slis_t_sortinfo_alv.
* Tab. de especificao de grupos
DATA: wt_sp_group TYPE slis_t_sp_group_alv.
*$*$--- Estruturas ----------------------------------------------------DATA: wf_x_variant LIKE disvariant.
DATA: wf_variant
LIKE disvariant.
DATA: wf_print

TYPE slis_print_alv.

*$*$ Variveis --------------------------------------------------------* Nome do programa


DATA: wv_repid LIKE sy-repid.
*$*$ Tela de Seleo --------------------------------------------------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.
Autor: Flavio Ricardo de Almeida
www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

71

G U I A

B S I C O

D E

P R O G R A M A O

A L V

PARAMETERS: p_vari LIKE disvariant-variant.


SELECTION-SCREEN END
OF BLOCK b2.
*$*$ Inicializao ----------------------------------------------------INITIALIZATION.
wv_repid
= sy-repid.
* Atribuies 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.
*$*$ Validaes de tela -----------------------------------------------AT SELECTION-SCREEN ON p_vari.
PERFORM z_validacao_variante.
*$*$ Programa Principal -----------------------------------------------START-OF-SELECTION.
PERFORM z_buscar_dados.
* Indicar campos para exibio 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[].
END-OF-SELECTION.
* Parmetros de impresso
PERFORM z_print_build USING wf_print.
* Construo da lista propriamente dita ( Exibio das informaes )
PERFORM z_list_display.
*$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------*
*&
Form Z_BUSCAR_DADOS
*&---------------------------------------------------------------------*
*
Obter informaes 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
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = wv_repid
*
i_structure_name
= 'VBAK'

Autor: Flavio Ricardo de Almeida


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

72

G U I A

B S I C O

D E

P R O G R A M A O

A L V

it_fieldcat
= wt_fieldcat
it_sort
= wt_sort
it_special_groups = wt_sp_group
is_print
= wf_print
i_save
= 'A'
is_variant
= wf_variant
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 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 informaes 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[].
* Cd. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VBELN'.
lf_fieldcat-ref_tabname
= 'VBAK'."
lf_fieldcat-sp_group
= 'A'.
"
APPEND lf_fieldcat TO pt_fieldcat.
"
* Data de Criao
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERDAT'.
lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-sp_group
= 'A'.
"
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'.
"
APPEND lf_fieldcat TO pt_fieldcat.
* Tipo de Ordem
CLEAR lf_fieldcat.

Autor: Flavio Ricardo de Almeida


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

73

" Nome do Campo


Tab. de Referncia
Grupo de Ordem Vendas
Gravar na tab. config.

Grupo de Ordem Vendas

Grupo de Ordem Vendas

G U I A

B S I C O

D E

P R O G R A M A O

A L V

lf_fieldcat-fieldname
= 'AUART'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
Valor lq. 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.
Organizao de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VKORG'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
Canal de distribuio
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.
Escritrio 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
*&---------------------------------------------------------------------*
*
Ordenao da lista
*----------------------------------------------------------------------*
*
--> PT_SORT[] - Tabela com informaes de ordenao 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
lf_sort-fieldname
lf_sort-tabname
lf_sort-up
lf_sort-expa
APPEND lf_sort TO
**
*
*
*
*
*
*

= 1.
= 'ERNAM'.
= 'WT_SAIDA'.
= 'X'.
= 'X'.
wt_sort.

"
"
"
"
"

Sequncia de ordenao
Nome do campo
Nome da tabela de lista
Ordenao Crescente
Expandir lista

Outras opes possveis de utilizao


lf_sort-down
= 'X'.
" Ordenao decrescente
lf_sort-group
= '*'.
" Mudana de controle: quebra de
" pgina, inserir sublinha
lf_sort-subtot
= 'X'.
" Subtotal
lf_sort-comp
= 'X'.
" Comprimir lista mostrando
" apenas os subtotais

ENDFORM.

" Z_ORDENAR_LISTA

*---------------------------------------------------------------------*

Autor: Flavio Ricardo de Almeida


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

74

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*
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.
* Variveis
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.
* Varivel 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 funo
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.
ENDFORM.

" Z_F4_FOR_VARIANT

*&---------------------------------------------------------------------*
*&
Form Z_VALIDACAO_VARIANTE
*&---------------------------------------------------------------------*
*
Realizar validao da variante de exibio
*----------------------------------------------------------------------*
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

Autor: Flavio Ricardo de Almeida


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

75

G U I A

B S I C O

D E

P R O G R A M A O

A L V

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 impresso da lista
*
*---------------------------------------------------------------------*
* --> PF_PRINT - Estrutura com atributos da impresso 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'.
" No listar info. sobre seleo
pf_print-no_coverpage
= 'X'.
" No listar pgina de rostp
pf_print-no_print_listinfos = 'X'.
" No listar info. sobre a lista
* PF_PRINT-RESERVE_LINES
= 'X'.
" Reservar linhas
* PF_PRINT-NO_NEW_PAGE
= 'X'.
" Sem novas pginas
* PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " No alterar tamanho da linha
ENDFORM.

Autor: Flavio Ricardo de Almeida


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

" Z_PRINT_BUILD

76

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo 8
*$*$********************************************************************
*$*$
*
*$*$ PROGRAMA: Layout de linha
*
*$*$ TIPO
: Lista ALV
*
*$*$ AUTOR
: Flavio R. Almeida (FRA) - FRA Consultoria
*
*$*$ DATA
: 12/12/2001
*
*$** OBS.
:
*
*$**
*
*$*$********************************************************************
*$*$
HISTRICO DAS MODIFICAES
*
*$*$-------------------------------------------------------------------*
*$*$ DATA
| AUTOR
| DESCRIO
*
*$*$-------------------------------------------------------------------*
*$**
|
|
*
*$*$********************************************************************
REPORT zfra0023_8.
*$*$ 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 criao
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 lq. da ordem
vkorg LIKE vbak-vkorg,
" Org. de vendas
vtweg LIKE vbak-vtweg,
" Canal de distribuio
spart LIKE vbak-spart,
" Setor de atividade
vkgrp LIKE vbak-vkgrp,
" Grupo de vendedores
vkbur LIKE vbak-vkbur,
" Escritrio 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 informaes sobre as caractersticas dos campos
DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.
* Tab. com informaes sobre a ordenao da lista
DATA: wt_sort
TYPE slis_t_sortinfo_alv.
* Tab. de especificao de grupos
DATA: wt_sp_group TYPE slis_t_sp_group_alv.
*$*$--- 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.

*$*$ Variveis --------------------------------------------------------* Nome do programa


DATA: wv_repid LIKE sy-repid.
*$*$ Tela de Seleo --------------------------------------------------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.

Autor: Flavio Ricardo de Almeida


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

77

G U I A

B S I C O

D E

P R O G R A M A O

A L V

* Variante
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02.
PARAMETERS: p_vari LIKE disvariant-variant.
SELECTION-SCREEN END
OF BLOCK b2.
*$*$ Inicializao ----------------------------------------------------INITIALIZATION.
wv_repid
= sy-repid.
* Atribuies 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.
*$*$ Validaes de tela -----------------------------------------------AT SELECTION-SCREEN ON p_vari.
PERFORM z_validacao_variante.
*$*$ Programa Principal -----------------------------------------------START-OF-SELECTION.
PERFORM z_buscar_dados.
* Indicar campos para exibio 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[].
END-OF-SELECTION.
* Parmetros de impresso
PERFORM z_print_build USING wf_print.
* Layout da lista - Referente as definies
PERFORM z_layout_build USING wf_layout.
* Construo da lista propriamente dita ( Exibio das informaes )
PERFORM z_list_display.
*$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------*
*&
Form Z_BUSCAR_DADOS
*&---------------------------------------------------------------------*
*
Obter informaes 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
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.

Autor: Flavio Ricardo de Almeida


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

78

G U I A

B S I C O

D E

P R O G R A M A O

A L V

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'


EXPORTING
i_callback_program = wv_repid
*
i_structure_name
= 'VBAK'
it_fieldcat
= wt_fieldcat
it_sort
= wt_sort
it_special_groups = wt_sp_group
is_print
= wf_print
is_layout
= wf_layout
i_save
= 'A'
is_variant
= wf_variant
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 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 informaes 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[].
* Cd. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VBELN'.
lf_fieldcat-ref_tabname
= 'VBAK'."
lf_fieldcat-sp_group
= 'A'.
"
APPEND lf_fieldcat TO pt_fieldcat.
"
* Data de Criao
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERDAT'.
lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-sp_group
= 'A'.
"
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERNAM'.

Autor: Flavio Ricardo de Almeida


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

79

" Nome do Campo


Tab. de Referncia
Grupo de Ordem Vendas
Gravar na tab. config.

Grupo de Ordem Vendas

G U I A

B S I C O

D E

P R O G R A M A O

A L V

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 lq. 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.
Organizao de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VKORG'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
Canal de distribuio
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.
Escritrio 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
*&---------------------------------------------------------------------*
*
Ordenao da lista
*----------------------------------------------------------------------*
*
--> PT_SORT[] - Tabela com informaes de ordenao 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
lf_sort-fieldname
lf_sort-tabname
lf_sort-up
lf_sort-expa
APPEND lf_sort TO
**
*
*
*
*
*

= 1.
= 'ERNAM'.
= 'WT_SAIDA'.
= 'X'.
= 'X'.
wt_sort.

"
"
"
"
"

Sequncia de ordenao
Nome do campo
Nome da tabela de lista
Ordenao Crescente
Expandir lista

Outras opes possveis de utilizao


lf_sort-down
= 'X'.
" Ordenao decrescente
lf_sort-group
= '*'.
" Mudana de controle: quebra de
" pgina, inserir sublinha
lf_sort-subtot
= 'X'.
" Subtotal
lf_sort-comp
= 'X'.
" Comprimir lista mostrando

Autor: Flavio Ricardo de Almeida


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

80

G U I A

B S I C O

D E

P R O G R A M A O

A L V

" 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.
* Variveis
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.
* Varivel 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 funo
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.
ENDFORM.

" Z_F4_FOR_VARIANT

*&---------------------------------------------------------------------*
*&
Form Z_VALIDACAO_VARIANTE
*&---------------------------------------------------------------------*
*
Realizar validao da variante de exibio
*----------------------------------------------------------------------*
FORM z_validacao_variante.

Autor: Flavio Ricardo de Almeida


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

81

G U I A

B S I C O

D E

P R O G R A M A O

A L V

* 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 impresso da lista
*
*---------------------------------------------------------------------*
* --> PF_PRINT - Estrutura com atributos da impresso 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'.
" No listar info. sobre seleo
pf_print-no_coverpage
= 'X'.
" No listar pgina de rostp
pf_print-no_print_listinfos = 'X'.
" No listar info. sobre a lista
* PF_PRINT-RESERVE_LINES
= 'X'.
" Reservar linhas
* PF_PRINT-NO_NEW_PAGE
= 'X'.
" Sem novas pginas
* PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " No alterar tamanho da linha
ENDFORM.

" Z_PRINT_BUILD

*&---------------------------------------------------------------------*
*&
Form Z_LAYOUT_BUILD
*&---------------------------------------------------------------------*
*
Layout de sada
*----------------------------------------------------------------------*
*
--> PF_LAYOUT - Estrutura para layout de sada 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.

Autor: Flavio Ricardo de Almeida


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

" Z_LAYOUT_BUILD

82

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo 9
*$*$********************************************************************
*$*$
*
*$*$ PROGRAMA: Eventos
*
*$*$ TIPO
: Lista ALV
*
*$*$ AUTOR
: Flavio R. Almeida (FRA) - FRA Consultoria
*
*$*$ DATA
: 12/12/2001
*
*$** OBS.
:
*
*$**
*
*$*$********************************************************************
*$*$
HISTRICO DAS MODIFICAES
*
*$*$-------------------------------------------------------------------*
*$*$ DATA
| AUTOR
| DESCRIO
*
*$*$-------------------------------------------------------------------*
*$**
|
|
*
*$*$********************************************************************
REPORT zfra0023_9.
*$*$ 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 criao
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 lq. da ordem
vkorg LIKE vbak-vkorg,
" Org. de vendas
vtweg LIKE vbak-vtweg,
" Canal de distribuio
spart LIKE vbak-spart,
" Setor de atividade
vkgrp LIKE vbak-vkgrp,
" Grupo de vendedores
vkbur LIKE vbak-vkbur,
" Escritrio 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 informaes sobre as caractersticas dos campos
DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.
* Tab. com informaes sobre a ordenao da lista
DATA: wt_sort
TYPE slis_t_sortinfo_alv.
* Tab. de especificao de grupos
DATA: wt_sp_group TYPE slis_t_sp_group_alv.
* Tab. de eventos
DATA: wt_events
TYPE slis_t_event.
*$*$--- Estruturas
DATA: wf_x_variant
DATA: wf_variant
DATA: wf_print
DATA: wf_layout

----------------------------------------------------LIKE disvariant.
LIKE disvariant.
TYPE slis_print_alv.
TYPE slis_layout_alv.

*$*$ Variveis --------------------------------------------------------* Nome do programa


DATA: wv_repid LIKE sy-repid.
*$*$ Tela de Seleo --------------------------------------------------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.
Autor: Flavio Ricardo de Almeida
www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

83

G U I A

B S I C O

D E

P R O G R A M A O

A L V

* Variante
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02.
PARAMETERS: p_vari LIKE disvariant-variant.
SELECTION-SCREEN END
OF BLOCK b2.
*$*$ Inicializao ----------------------------------------------------INITIALIZATION.
wv_repid
= sy-repid.
* Atribuies 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.
*$*$ Validaes de tela -----------------------------------------------AT SELECTION-SCREEN ON p_vari.
PERFORM z_validacao_variante.
*$*$ Programa Principal -----------------------------------------------START-OF-SELECTION.
PERFORM z_buscar_dados.
* Indicar campos para exibio 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[].
END-OF-SELECTION.
* Parmetros de impresso
PERFORM z_print_build USING wf_print.
* Layout da lista - Referente as definies
PERFORM z_layout_build USING wf_layout.
* Construo da lista propriamente dita ( Exibio das informaes )
PERFORM z_list_display.
*$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------*
*&
Form Z_BUSCAR_DADOS
*&---------------------------------------------------------------------*
*
Obter informaes 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
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.

Autor: Flavio Ricardo de Almeida


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

84

G U I A

B S I C O

D E

P R O G R A M A O

A L V

PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_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'
is_variant
= wf_variant
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 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 informaes 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[].
* Cd. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VBELN'.
lf_fieldcat-ref_tabname
= 'VBAK'."
lf_fieldcat-sp_group
= 'A'.
"
APPEND lf_fieldcat TO pt_fieldcat.
"
* Data de Criao
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERDAT'.
lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-sp_group
= 'A'.
"
APPEND lf_fieldcat TO pt_fieldcat.

Autor: Flavio Ricardo de Almeida


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

85

" Nome do Campo


Tab. de Referncia
Grupo de Ordem Vendas
Gravar na tab. config.

Grupo de Ordem Vendas

G U I A

B S I C O

D E

P R O G R A M A O

A L V

* 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 lq. 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.
* Organizao de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VKORG'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuio
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.
* Escritrio 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
*&---------------------------------------------------------------------*
*
Ordenao da lista
*----------------------------------------------------------------------*
*
--> PT_SORT[] - Tabela com informaes de ordenao 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
lf_sort-fieldname
lf_sort-tabname
lf_sort-up
lf_sort-expa
APPEND lf_sort TO

= 1.
= 'ERNAM'.
= 'WT_SAIDA'.
= 'X'.
= 'X'.
wt_sort.

"
"
"
"
"

Sequncia de ordenao
Nome do campo
Nome da tabela de lista
Ordenao Crescente
Expandir lista

** Outras opes possveis de utilizao


* lf_sort-down
= 'X'.
" Ordenao decrescente
* lf_sort-group
= '*'.
" Mudana de controle: quebra de

Autor: Flavio Ricardo de Almeida


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

86

G U I A

*
*
*
*

B S I C O

lf_sort-subtot
lf_sort-comp

D E

P R O G R A M A O

A L V

"
"
"
"

= 'X'.
= 'X'.

ENDFORM.

pgina, inserir sublinha


Subtotal
Comprimir lista mostrando
apenas os subtotais

" 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.
* Variveis
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.
* Varivel 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 funo
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.
ENDFORM.

" Z_F4_FOR_VARIANT

*&---------------------------------------------------------------------*
*&
Form Z_VALIDACAO_VARIANTE
*&---------------------------------------------------------------------*

Autor: Flavio Ricardo de Almeida


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

87

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*
Realizar validao da variante de exibio
*----------------------------------------------------------------------*
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 impresso da lista
*
*---------------------------------------------------------------------*
* --> PF_PRINT - Estrutura com atributos da impresso 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'.
" No listar info. sobre seleo
pf_print-no_coverpage
= 'X'.
" No listar pgina de rostp
pf_print-no_print_listinfos = 'X'.
" No listar info. sobre a lista
* PF_PRINT-RESERVE_LINES
= 'X'.
" Reservar linhas
* PF_PRINT-NO_NEW_PAGE
= 'X'.
" Sem novas pginas
* PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " No alterar tamanho da linha
ENDFORM.

" Z_PRINT_BUILD

*&---------------------------------------------------------------------*
*&
Form Z_LAYOUT_BUILD
*&---------------------------------------------------------------------*
*
Layout de sada
*----------------------------------------------------------------------*
*
--> PF_LAYOUT - Estrutura para layout de sada 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
*
*---------------------------------------------------------------------*
FORM z_eventtab_build USING pt_events TYPE slis_t_event.
* Variveis
DATA: lf_event TYPE slis_alv_event.
* Obter eventos permitidos para lista grid

Autor: Flavio Ricardo de Almeida


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

88

G U I A

*
*
*

*
*
*
*
*
*

*
*
*

B S I C O

D E

P R O G R A M A O

A L V

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
*
*----------------------------------------------------------------------*
*
Aes do usurio
*
*----------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm
LIKE sy-ucomm
pf_selfield TYPE slis_selfield.
"#EC CALLED
*
CASE pv_ucomm.
*
Ao de Click duplo '&IC1'
WHEN '&IC1'.
*
Posicionar no registro selecionado
READ TABLE wt_saida INDEX pf_selfield-tabindex.
*
Verificar campo selecionado
CASE pf_selfield-sel_tab_field.
WHEN 'WT_SAIDA-VBELN'.
*
Determinar nro da ordem de venda ao parmetro de memria
SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.
*
Chamar transao de exibio da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

Autor: Flavio Ricardo de Almeida


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

89

G U I A

B S I C O

D E

P R O G R A M A O

A L V

ENDCASE.
ENDCASE.
ENDFORM.
*----------------------------------------------------------------------*
*
FORM Z_TOP_OF_PAGE
*
*----------------------------------------------------------------------*
*
Evento de cabealho
*
*----------------------------------------------------------------------*
FORM z_top_of_page.
"#EC CALLED
WRITE: / 'Evento: 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.
ENDFORM.
*----------------------------------------------------------------------*
*
FORM Z_CALLER_EXIT
*
*----------------------------------------------------------------------*
*
Evento
*
*----------------------------------------------------------------------*
form z_caller_exit using pf_data.
"#EC CALLED
endform.

Autor: Flavio Ricardo de Almeida


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

90

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*----------------------------------------------------------------------*
*
FORM Z_BEFORE_LINE_OUTPUT
*
*----------------------------------------------------------------------*
*
Evento antes da impresso 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 impresso 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.

Autor: Flavio Ricardo de Almeida


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

91

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo 10
*$*$********************************************************************
*$*$
*
*$*$ PROGRAMA: Personalizando a barra de status
*
*$*$ TIPO
: Lista ALV
*
*$*$ AUTOR
: Flavio R. Almeida (FRA) - FRA Consultoria
*
*$*$ DATA
: 12/12/2001
*
*$** OBS.
:
*
*$**
*
*$*$********************************************************************
*$*$
HISTRICO DAS MODIFICAES
*
*$*$-------------------------------------------------------------------*
*$*$ DATA
| AUTOR
| DESCRIO
*
*$*$-------------------------------------------------------------------*
*$**
|
|
*
*$*$********************************************************************
REPORT zfra0023_10.
*$*$ 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 criao
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 lq. da ordem
vkorg LIKE vbak-vkorg,
" Org. de vendas
vtweg LIKE vbak-vtweg,
" Canal de distribuio
spart LIKE vbak-spart,
" Setor de atividade
vkgrp LIKE vbak-vkgrp,
" Grupo de vendedores
vkbur LIKE vbak-vkbur,
" Escritrio 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 informaes sobre as caractersticas dos campos
DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.
* Tab. com informaes sobre a ordenao da lista
DATA: wt_sort
TYPE slis_t_sortinfo_alv.
* Tab. de especificao de grupos
DATA: wt_sp_group TYPE slis_t_sp_group_alv.
* Tab. de eventos
DATA: wt_events
TYPE slis_t_event.
*$*$--- Estruturas
DATA: wf_x_variant
DATA: wf_variant
DATA: wf_print
DATA: wf_layout

----------------------------------------------------LIKE disvariant.
LIKE disvariant.
TYPE slis_print_alv.
TYPE slis_layout_alv.

*$*$ Variveis --------------------------------------------------------* Nome do programa


DATA: wv_repid LIKE sy-repid.
*$*$ Tela de Seleo --------------------------------------------------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.
Autor: Flavio Ricardo de Almeida
www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

92

G U I A

B S I C O

D E

P R O G R A M A O

A L V

* Variante
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02.
PARAMETERS: p_vari LIKE disvariant-variant.
SELECTION-SCREEN END
OF BLOCK b2.
*$*$ Inicializao ----------------------------------------------------INITIALIZATION.
wv_repid
= sy-repid.
* Atribuies 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.
*$*$ Validaes de tela -----------------------------------------------AT SELECTION-SCREEN ON p_vari.
PERFORM z_validacao_variante.
*$*$ Programa Principal -----------------------------------------------START-OF-SELECTION.
PERFORM z_buscar_dados.
* Indicar campos para exibio 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[].
END-OF-SELECTION.
* Parmetros de impresso
PERFORM z_print_build USING wf_print.
* Layout da lista - Referente as definies
PERFORM z_layout_build USING wf_layout.
* Construo da lista propriamente dita ( Exibio das informaes )
PERFORM z_list_display.
*$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------*
*&
Form Z_BUSCAR_DADOS
*&---------------------------------------------------------------------*
*
Obter informaes 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
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.

Autor: Flavio Ricardo de Almeida


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

93

G U I A

B S I C O

D E

P R O G R A M A O

A L V

PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_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'
is_variant
= wf_variant
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 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 informaes 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[].
* Cd. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VBELN'.
lf_fieldcat-ref_tabname
= 'VBAK'."
lf_fieldcat-sp_group
= 'A'.
"
APPEND lf_fieldcat TO pt_fieldcat.
"
* Data de Criao
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERDAT'.
lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-sp_group
= 'A'.
"
APPEND lf_fieldcat TO pt_fieldcat.

Autor: Flavio Ricardo de Almeida


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

94

" Nome do Campo


Tab. de Referncia
Grupo de Ordem Vendas
Gravar na tab. config.

Grupo de Ordem Vendas

G U I A

B S I C O

D E

P R O G R A M A O

A L V

* 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 lq. 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.
* Organizao de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VKORG'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuio
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.
* Escritrio 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
*&---------------------------------------------------------------------*
*
Ordenao da lista
*----------------------------------------------------------------------*
*
--> PT_SORT[] - Tabela com informaes de ordenao 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
lf_sort-fieldname
lf_sort-tabname
lf_sort-up
lf_sort-expa
APPEND lf_sort TO

= 1.
= 'ERNAM'.
= 'WT_SAIDA'.
= 'X'.
= 'X'.
wt_sort.

"
"
"
"
"

Sequncia de ordenao
Nome do campo
Nome da tabela de lista
Ordenao Crescente
Expandir lista

** Outras opes possveis de utilizao


* lf_sort-down
= 'X'.
" Ordenao decrescente
* lf_sort-group
= '*'.
" Mudana de controle: quebra de

Autor: Flavio Ricardo de Almeida


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

95

G U I A

*
*
*
*

B S I C O

lf_sort-subtot
lf_sort-comp

D E

P R O G R A M A O

A L V

"
"
"
"

= 'X'.
= 'X'.

ENDFORM.

pgina, inserir sublinha


Subtotal
Comprimir lista mostrando
apenas os subtotais

" 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.
* Variveis
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.
* Varivel 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 funo
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.
ENDFORM.

" Z_F4_FOR_VARIANT

*&---------------------------------------------------------------------*
*&
Form Z_VALIDACAO_VARIANTE
*&---------------------------------------------------------------------*

Autor: Flavio Ricardo de Almeida


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

96

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*
Realizar validao da variante de exibio
*----------------------------------------------------------------------*
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 impresso da lista
*
*---------------------------------------------------------------------*
* --> PF_PRINT - Estrutura com atributos da impresso 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'.
" No listar info. sobre seleo
pf_print-no_coverpage
= 'X'.
" No listar pgina de rostp
pf_print-no_print_listinfos = 'X'.
" No listar info. sobre a lista
* PF_PRINT-RESERVE_LINES
= 'X'.
" Reservar linhas
* PF_PRINT-NO_NEW_PAGE
= 'X'.
" Sem novas pginas
* PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " No alterar tamanho da linha
ENDFORM.

" Z_PRINT_BUILD

*&---------------------------------------------------------------------*
*&
Form Z_LAYOUT_BUILD
*&---------------------------------------------------------------------*
*
Layout de sada
*----------------------------------------------------------------------*
*
--> PF_LAYOUT - Estrutura para layout de sada 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
*
*---------------------------------------------------------------------*
FORM z_eventtab_build USING pt_events TYPE slis_t_event.
* Variveis
DATA: lf_event TYPE slis_alv_event.
* Obter eventos permitidos para lista grid

Autor: Flavio Ricardo de Almeida


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

97

G U I A

*
*
*

*
*
*
*

*
*
*

B S I C O

D E

P R O G R A M A O

A L V

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
*
*----------------------------------------------------------------------*
*
Aes do usurio
*
*----------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm
LIKE sy-ucomm
pf_selfield TYPE slis_selfield.
"#EC CALLED
*
CASE pv_ucomm.
*
Ao de Click duplo '&IC1'
WHEN '&IC1'.
*
Posicionar no registro selecionado
READ TABLE wt_saida INDEX pf_selfield-tabindex.
*
Verificar campo selecionado
CASE pf_selfield-sel_tab_field.
WHEN 'WT_SAIDA-VBELN'.
*
Determinar nro da ordem de venda ao parmetro de memria
SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.
*
Chamar transao de exibio da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

Autor: Flavio Ricardo de Almeida


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

98

G U I A

B S I C O

D E

P R O G R A M A O

A L V

ENDCASE.
ENDCASE.
ENDFORM.
*----------------------------------------------------------------------*
*
FORM Z_TOP_OF_PAGE
*
*----------------------------------------------------------------------*
*
Evento de cabealho
*
*----------------------------------------------------------------------*
FORM z_top_of_page.
"#EC CALLED
WRITE: / 'Evento: 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.
ENDFORM.
*----------------------------------------------------------------------*
*
FORM Z_CALLER_EXIT
*
*----------------------------------------------------------------------*
*
Evento
*
*----------------------------------------------------------------------*
FORM z_caller_exit USING pf_data.
"#EC CALLED
ENDFORM.

Autor: Flavio Ricardo de Almeida


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

99

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*----------------------------------------------------------------------*
*
FORM Z_BEFORE_LINE_OUTPUT
*
*----------------------------------------------------------------------*
*
Evento antes da impresso 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 impresso 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.

Autor: Flavio Ricardo de Almeida


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

100

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo 11
*$*$********************************************************************
*$*$
*
*$*$ PROGRAMA: Trabalhando com CHECKBOX
*
*$*$ TIPO
: LISTA ALV
*
*$*$ AUTOR
: Flavio R. Almeida (FRA) - FRA Consultoria
*
*$*$ DATA
: 12/12/2001
*
*$** OBS.
:
*
*$**
*
*$*$********************************************************************
*$*$
HISTRICO DAS MODIFICAES
*
*$*$-------------------------------------------------------------------*
*$*$ DATA
| AUTOR
| DESCRIO
*
*$*$-------------------------------------------------------------------*
*$**
|
|
*
*$*$********************************************************************
REPORT zfra0023_11.
*$*$ 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 criao
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 lq. da ordem
vkorg LIKE vbak-vkorg,
" Org. de vendas
vtweg LIKE vbak-vtweg,
" Canal de distribuio
spart LIKE vbak-spart,
" Setor de atividade
vkgrp LIKE vbak-vkgrp,
" Grupo de vendedores
vkbur LIKE vbak-vkbur,
" Escritrio 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 informaes sobre as caractersticas dos campos
DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.
* Tab. com informaes sobre a ordenao da lista
DATA: wt_sort
TYPE slis_t_sortinfo_alv.
* Tab. de especificao de grupos
DATA: wt_sp_group TYPE slis_t_sp_group_alv.
* Tab. de eventos
DATA: wt_events
TYPE slis_t_event.
*$*$--- Estruturas
DATA: wf_x_variant
DATA: wf_variant
DATA: wf_print
DATA: wf_layout

----------------------------------------------------LIKE disvariant.
LIKE disvariant.
TYPE slis_print_alv.
TYPE slis_layout_alv.

*$*$ Variveis --------------------------------------------------------* Nome do programa


DATA: wv_repid LIKE sy-repid.
*$*$ Tela de Seleo --------------------------------------------------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.
Autor: Flavio Ricardo de Almeida
www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

101

G U I A

B S I C O

D E

P R O G R A M A O

A L V

* Variante
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02.
PARAMETERS: p_vari LIKE disvariant-variant.
SELECTION-SCREEN END
OF BLOCK b2.
*$*$ Inicializao ----------------------------------------------------INITIALIZATION.
wv_repid
= sy-repid.
* Atribuies 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.
*$*$ Validaes de tela -----------------------------------------------AT SELECTION-SCREEN ON p_vari.
PERFORM z_validacao_variante.
*$*$ Programa Principal -----------------------------------------------START-OF-SELECTION.
PERFORM z_buscar_dados.
* Indicar campos para exibio 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[].
END-OF-SELECTION.
* Parmetros de impresso
PERFORM z_print_build USING wf_print.
* Layout da lista - Referente as definies
PERFORM z_layout_build USING wf_layout.
* Construo da lista propriamente dita ( Exibio das informaes )
PERFORM z_list_display.
*$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------*
*&
Form Z_BUSCAR_DADOS
*&---------------------------------------------------------------------*
*
Obter informaes 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
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.

Autor: Flavio Ricardo de Almeida


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

102

G U I A

B S I C O

D E

P R O G R A M A O

A L V

PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_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'
is_variant
= wf_variant
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 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 informaes 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[].
* Cd. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VBELN'.
lf_fieldcat-ref_tabname
= 'VBAK'."
lf_fieldcat-sp_group
= 'A'.
"
APPEND lf_fieldcat TO pt_fieldcat.
"
* Data de Criao
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERDAT'.
lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-sp_group
= 'A'.
"
APPEND lf_fieldcat TO pt_fieldcat.

Autor: Flavio Ricardo de Almeida


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

103

" Nome do Campo


Tab. de Referncia
Grupo de Ordem Vendas
Gravar na tab. config.

Grupo de Ordem Vendas

G U I A

B S I C O

D E

P R O G R A M A O

A L V

* 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 lq. 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.
* Organizao de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VKORG'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuio
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.
* Escritrio 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
*&---------------------------------------------------------------------*
*
Ordenao da lista
*----------------------------------------------------------------------*
*
--> PT_SORT[] - Tabela com informaes de ordenao 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
lf_sort-fieldname
lf_sort-tabname
lf_sort-up
lf_sort-expa
APPEND lf_sort TO

= 1.
= 'ERNAM'.
= 'WT_SAIDA'.
= 'X'.
= 'X'.
wt_sort.

"
"
"
"
"

Sequncia de ordenao
Nome do campo
Nome da tabela de lista
Ordenao Crescente
Expandir lista

** Outras opes possveis de utilizao


* lf_sort-down
= 'X'.
" Ordenao decrescente
* lf_sort-group
= '*'.
" Mudana de controle: quebra de

Autor: Flavio Ricardo de Almeida


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

104

G U I A

*
*
*
*

B S I C O

lf_sort-subtot
lf_sort-comp

D E

P R O G R A M A O

A L V

"
"
"
"

= 'X'.
= 'X'.

ENDFORM.

pgina, inserir sublinha


Subtotal
Comprimir lista mostrando
apenas os subtotais

" 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.
* Variveis
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.
* Varivel 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 funo
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.
ENDFORM.

" Z_F4_FOR_VARIANT

*&---------------------------------------------------------------------*
*&
Form Z_VALIDACAO_VARIANTE
*&---------------------------------------------------------------------*

Autor: Flavio Ricardo de Almeida


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

105

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*
Realizar validao da variante de exibio
*----------------------------------------------------------------------*
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 impresso da lista
*
*---------------------------------------------------------------------*
* --> PF_PRINT - Estrutura com atributos da impresso 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'.
" No listar info. sobre seleo
pf_print-no_coverpage
= 'X'.
" No listar pgina de rostp
pf_print-no_print_listinfos = 'X'.
" No listar info. sobre a lista
* PF_PRINT-RESERVE_LINES
= 'X'.
" Reservar linhas
* PF_PRINT-NO_NEW_PAGE
= 'X'.
" Sem novas pginas
* PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " No alterar tamanho da linha
ENDFORM.

" Z_PRINT_BUILD

*&---------------------------------------------------------------------*
*&
Form Z_LAYOUT_BUILD
*&---------------------------------------------------------------------*
*
Layout de sada
*----------------------------------------------------------------------*
*
--> PF_LAYOUT - Estrutura para layout de sada 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
*
*---------------------------------------------------------------------*
FORM z_eventtab_build USING pt_events TYPE slis_t_event.
* Variveis
DATA: lf_event TYPE slis_alv_event.
* Obter eventos permitidos para lista grid

Autor: Flavio Ricardo de Almeida


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

106

G U I A

*
*
*

*
*
*
*

*
*
*

B S I C O

D E

P R O G R A M A O

A L V

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
*
*----------------------------------------------------------------------*
*
Aes do usurio
*
*----------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm
LIKE sy-ucomm
pf_selfield TYPE slis_selfield.
"#EC CALLED
*
CASE pv_ucomm.
*
Ao de Click duplo '&IC1'
WHEN '&IC1'.
*
Posicionar no registro selecionado
READ TABLE wt_saida INDEX pf_selfield-tabindex.
*
Verificar campo selecionado
CASE pf_selfield-sel_tab_field.
WHEN 'WT_SAIDA-VBELN'.
*
Determinar nro da ordem de venda ao parmetro de memria
SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.
*
Chamar transao de exibio da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

Autor: Flavio Ricardo de Almeida


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

107

G U I A

B S I C O

D E

P R O G R A M A O

A L V

ENDCASE.
WHEN 'TESTE'.
PERFORM z_rotina_teste.
ENDCASE.
ENDFORM.
*----------------------------------------------------------------------*
*
FORM Z_TOP_OF_PAGE
*
*----------------------------------------------------------------------*
*
Evento de cabealho
*
*----------------------------------------------------------------------*
FORM z_top_of_page.
"#EC CALLED
WRITE: / 'Evento: 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.
ENDFORM.
*----------------------------------------------------------------------*
*
FORM Z_CALLER_EXIT
*
*----------------------------------------------------------------------*
*
Evento
*
*----------------------------------------------------------------------*
FORM z_caller_exit USING pf_data.
"#EC CALLED

Autor: Flavio Ricardo de Almeida


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

108

G U I A

B S I C O

D E

P R O G R A M A O

A L V

ENDFORM.
*----------------------------------------------------------------------*
*
FORM Z_BEFORE_LINE_OUTPUT
*
*----------------------------------------------------------------------*
*
Evento antes da impresso 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 impresso 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_ROTINA_TESTE
*&---------------------------------------------------------------------*
*
Rotina para o evento TESTE ( Boto )
*----------------------------------------------------------------------*
FORM z_rotina_teste.
LOOP AT wt_saida.
Verificar se linha foi selecionada
CHECK wt_saida-box EQ 'X'.
*
Enviar mensagem para informar linha selecionada
MESSAGE i899(bd) WITH 'Foi escolhida a ordem:' wt_saida-vbeln.
ENDLOOP.
*

ENDFORM.

Autor: Flavio Ricardo de Almeida


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

" Z_ROTINA_TESTE

109

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo 12
*$*$********************************************************************
*$*$
*
*$*$ PROGRAMA: Mudando cores de campos
*
*$*$ TIPO
: Lista ALV
*
*$*$ AUTOR
: Flavio R. Almeida (FRA) - FRA Consultoria
*
*$*$ DATA
: 12/12/2001
*
*$** OBS.
:
*
*$**
*
*$*$********************************************************************
*$*$
HISTRICO DAS MODIFICAES
*
*$*$-------------------------------------------------------------------*
*$*$ DATA
| AUTOR
| DESCRIO
*
*$*$-------------------------------------------------------------------*
*$**
|
|
*
*$*$********************************************************************
REPORT zfra0023_12.
*$*$ 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 criao
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 lq. da ordem
vkorg LIKE vbak-vkorg,
" Org. de vendas
vtweg LIKE vbak-vtweg,
" Canal de distribuio
spart LIKE vbak-spart,
" Setor de atividade
vkgrp LIKE vbak-vkgrp,
" Grupo de vendedores
vkbur LIKE vbak-vkbur,
" Escritrio de vendas
box
,
" Checkbox
color TYPE slis_t_specialcol_alv,
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 informaes sobre as caractersticas dos campos
DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.
* Tab. com informaes sobre a ordenao da lista
DATA: wt_sort
TYPE slis_t_sortinfo_alv.
* Tab. de especificao de grupos
DATA: wt_sp_group TYPE slis_t_sp_group_alv.
* Tab. de eventos
DATA: wt_events
TYPE slis_t_event.
* Tabs. de cores
DATA: wt_color_normal TYPE slis_t_specialcol_alv WITH HEADER LINE,
wt_color_selecao TYPE slis_t_specialcol_alv WITH HEADER LINE.
*$*$--- Estruturas
DATA: wf_x_variant
DATA: wf_variant
DATA: wf_print
DATA: wf_layout

----------------------------------------------------LIKE disvariant.
LIKE disvariant.
TYPE slis_print_alv.
TYPE slis_layout_alv.

*$*$ Variveis --------------------------------------------------------* Nome do programa


DATA: wv_repid LIKE sy-repid.
Autor: Flavio Ricardo de Almeida
www.almeidafr.hpg.ig.com.br
almeidafr@bigfoot.com

110

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*$*$ Tela de Seleo --------------------------------------------------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.
*$*$ Inicializao ----------------------------------------------------INITIALIZATION.
wv_repid
= sy-repid.
* Atribuies 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.
*$*$ Validaes de tela -----------------------------------------------AT SELECTION-SCREEN ON p_vari.
PERFORM z_validacao_variante.
*$*$ Programa Principal -----------------------------------------------START-OF-SELECTION.
* Obter informaes da base de dados
PERFORM z_buscar_dados.
* Indicar campos para exibio 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[].
* Determinar cores
PERFORM z_field_color: TABLES wt_color_normal USING 2 0 0,
TABLES wt_color_selecao USING 5 0 0.
END-OF-SELECTION.
* Parmetros de impresso
PERFORM z_print_build USING wf_print.
* Layout da lista - Referente as definies
PERFORM z_layout_build USING wf_layout.
* Construo da lista propriamente dita ( Exibio das informaes )
PERFORM z_list_display.
*$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------*
*&
Form Z_BUSCAR_DADOS
*&---------------------------------------------------------------------*
*
Obter informaes para lista
*----------------------------------------------------------------------*
FORM z_buscar_dados.
* Variveis
DATA: BEGIN OF lt_saida OCCURS 0,
vbeln LIKE vbak-vbeln,
" Nro da ordem de venda
erdat LIKE vbak-erdat,
" Data de criao
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 lq. da ordem
vkorg LIKE vbak-vkorg,
" Org. de vendas
vtweg LIKE vbak-vtweg,
" Canal de distribuio

Autor: Flavio Ricardo de Almeida


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

111

G U I A

B S I C O

D E

P R O G R A M A O

spart LIKE vbak-spart,


vkgrp LIKE vbak-vkgrp,
vkbur LIKE vbak-vkbur,
END OF lt_saida.

A L V

" Setor de atividade


" Grupo de vendedores
" Escritrio de vendas

* Exibir aviso
PERFORM z_sapgui_progress_indicator
USING 'Selecionando dados. Aguarde...'.
* Seleo das informaes
SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp
vkbur
*
INTO TABLE wt_saida
INTO TABLE lt_saida
FROM vbak
WHERE vbeln IN s_vbeln.
* Atribuir valores a tabela de sada
LOOP AT lt_saida.
MOVE-CORRESPONDING lt_saida TO wt_saida.
APPEND wt_saida.
ENDLOOP.
ENDFORM.

" Z_BUSCAR_DADOS

*&---------------------------------------------------------------------*
*&
Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_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'
is_variant
= wf_variant
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 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

Autor: Flavio Ricardo de Almeida


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

112

G U I A

B S I C O

D E

P R O G R A M A O

A L V

PERCENTAGE = 0
text
= pv_text.

ENDFORM.

" Z_SAPGUI_PROGRESS_INDICATOR

*---------------------------------------------------------------------*
*
FORM Z_FIELDCAT_INIT
*
*---------------------------------------------------------------------*
*
Inicializar estrutura das informaes 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[].
* Cd. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VBELN'.
lf_fieldcat-ref_tabname
= 'VBAK'."
lf_fieldcat-sp_group
= 'A'.
"
APPEND lf_fieldcat TO pt_fieldcat.
"
* Data de Criao
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERDAT'.
lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-sp_group
= 'A'.
"
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'.
"
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 lq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'NETWR'.
lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-sp_group
= 'V'.
"
APPEND lf_fieldcat TO pt_fieldcat.
* Organizao de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VKORG'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuio
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.
* Escritrio de Vendas

Autor: Flavio Ricardo de Almeida


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

113

" Nome do Campo


Tab. de Referncia
Grupo de Ordem Vendas
Gravar na tab. config.

Grupo de Ordem Vendas

Grupo de Ordem Vendas

Grupo de Valores

G U I A

B S I C O

D E

P R O G R A M A O

A L V

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
*&---------------------------------------------------------------------*
*
Ordenao da lista
*----------------------------------------------------------------------*
*
--> PT_SORT[] - Tabela com informaes de ordenao 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
lf_sort-fieldname
lf_sort-tabname
lf_sort-up
lf_sort-expa
APPEND lf_sort TO
**
*
*
*
*
*
*

= 1.
= 'ERNAM'.
= 'WT_SAIDA'.
= 'X'.
= 'X'.
wt_sort.

"
"
"
"
"

Sequncia de ordenao
Nome do campo
Nome da tabela de lista
Ordenao Crescente
Expandir lista

Outras opes possveis de utilizao


lf_sort-down
= 'X'.
" Ordenao decrescente
lf_sort-group
= '*'.
" Mudana de controle: quebra de
" pgina, 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.
* Variveis
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.

Autor: Flavio Ricardo de Almeida


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

114

G U I A

B S I C O

D E

P R O G R A M A O

A L V

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

" Z_F4_FOR_VARIANT

*&---------------------------------------------------------------------*
*&
Form Z_VALIDACAO_VARIANTE
*&---------------------------------------------------------------------*
*
Realizar validao da variante de exibio
*----------------------------------------------------------------------*
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 impresso da lista
*
*---------------------------------------------------------------------*
* --> PF_PRINT - Estrutura com atributos da impresso 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'.
" No listar info. sobre seleo
pf_print-no_coverpage
= 'X'.
" No listar pgina de rostp
pf_print-no_print_listinfos = 'X'.
" No listar info. sobre a lista
* PF_PRINT-RESERVE_LINES
= 'X'.
" Reservar linhas
* PF_PRINT-NO_NEW_PAGE
= 'X'.
" Sem novas pginas
* PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " No alterar tamanho da linha

Autor: Flavio Ricardo de Almeida


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

115

G U I A

B S I C O

D E

P R O G R A M A O

ENDFORM.

A L V

" Z_PRINT_BUILD

*&---------------------------------------------------------------------*
*&
Form Z_LAYOUT_BUILD
*&---------------------------------------------------------------------*
*
Layout de sada
*----------------------------------------------------------------------*
*
--> PF_LAYOUT - Estrutura para layout de sada da lista
*----------------------------------------------------------------------*
FORM z_layout_build USING pf_layout TYPE slis_layout_alv.
pf_layout-group_change_edit =
* Check box na lista
pf_layout-box_fieldname
=
pf_layout-box_tabname
=
* Determinar a tabela de cores
pf_layout-coltab_fieldname =

'X'.
'BOX'.
'WT_SAIDA'.
'COLOR'.

ENDFORM.

" Z_LAYOUT_BUILD

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

Autor: Flavio Ricardo de Almeida


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

116

G U I A

B S I C O

D E

P R O G R A M A O

A L V

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
*
*----------------------------------------------------------------------*
*
Aes do usurio
*
*----------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm
LIKE sy-ucomm
pf_selfield TYPE slis_selfield.
"#EC CALLED
*
CASE pv_ucomm.
*
Ao de Click duplo '&IC1'
WHEN '&IC1'.
*
Posicionar no registro selecionado
READ TABLE wt_saida INDEX pf_selfield-tabindex.
*
Verificar campo selecionado
CASE pf_selfield-sel_tab_field.
WHEN 'WT_SAIDA-VBELN'.
*
Determinar nro da ordem de venda ao parmetro de memria
SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.
*
Chamar transao de exibio da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
WHEN 'TESTE'.
PERFORM z_rotina_teste.
*
Realizar um REFRESH da lista
pf_selfield-refresh = 'X'.
ENDCASE.
ENDFORM.
*----------------------------------------------------------------------*
*
FORM Z_TOP_OF_PAGE
*
*----------------------------------------------------------------------*
*
Evento de cabealho
*
*----------------------------------------------------------------------*
FORM z_top_of_page.
"#EC CALLED
WRITE: / 'Evento: 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
*
*----------------------------------------------------------------------*

Autor: Flavio Ricardo de Almeida


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

117

G U I A

B S I C O

D E

P R O G R A M A O

FORM z_top_of_list.

A L V

"#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.
ENDFORM.
*----------------------------------------------------------------------*
*
FORM Z_CALLER_EXIT
*
*----------------------------------------------------------------------*
*
Evento
*
*----------------------------------------------------------------------*
FORM z_caller_exit USING pf_data.
"#EC CALLED
ENDFORM.
*----------------------------------------------------------------------*
*
FORM Z_BEFORE_LINE_OUTPUT
*
*----------------------------------------------------------------------*
*
Evento antes da impresso 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 impresso 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

Autor: Flavio Ricardo de Almeida


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

118

G U I A

B S I C O

D E

P R O G R A M A O

A L V

pv_index_slave LIKE sy-tabix


pv_index_sum
LIKE sy-tabix.
*

"#EC CALLED

break-point.

ENDFORM.
*&---------------------------------------------------------------------*
*&
Form Z_ROTINA_TESTE
*&---------------------------------------------------------------------*
*
Rotina para o evento TESTE ( Boto )
*----------------------------------------------------------------------*
FORM z_rotina_teste.
LOOP AT wt_saida.
Verificar se linha foi selecionada
CHECK wt_saida-box EQ 'X'
IF wt_saida-box EQ 'X'.
*
Enviar mensagem para informar linha selecionada
MESSAGE i899(bd) WITH 'Foi escolhida a ordem:' wt_saida-vbeln.
*
Mudar cor da linha selecionada
wt_saida-color[] = wt_color_selecao[].
ELSE.
*
Mudar cor da linha selecionada
wt_saida-color[] = wt_color_normal[].
ENDIF.
MODIFY wt_saida TRANSPORTING color.
ENDLOOP.
*
*

ENDFORM.

" Z_ROTINA_TESTE

*&---------------------------------------------------------------------*
*&
Form Z_FIELD_COLOR
*&---------------------------------------------------------------------*
*
<-- PT_COLOR
- Tab. com configurao das cores
*
--> PV_COLOR
- Cor
*
--> PV_INTENSIFIED - Intensificado
*
--> PV_INVERSE
- Inverso de cores
*----------------------------------------------------------------------*
FORM z_field_color TABLES pt_color TYPE slis_t_specialcol_alv
USING value(pv_color)
TYPE i
value(pv_intensified) TYPE i
value(pv_inverse)
TYPE i.
DEFINE z_field_color.
pt_color-color-col = pv_color.
pt_color-color-int = pv_intensified.
pt_color-color-inv = pv_inverse.
pt_color-fieldname = &1.
append pt_color.
END-OF-DEFINITION.
* Inicializar tabela
CLEAR: pt_color[], pt_color.
* Definir campos
z_field_color: 'VBELN', 'ERDAT', 'ERNAM', 'AUDAT', 'AUART', 'NETWR',
'VKORG', 'VTWEG', 'SPART', 'VKGRP', 'VKBUR'.
ENDFORM.

Autor: Flavio Ricardo de Almeida


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

" Z_FIELD_COLOR

119

G U I A

B S I C O

D E

P R O G R A M A O

A L V

Captulo 13
*$*$********************************************************************
*$*$
*
*$*$ PROGRAMA: Inserindo cones
*
*$*$ TIPO
: Lista ALV
*
*$*$ AUTOR
: Flavio R. Almeida (FRA) - FRA Consultoria
*
*$*$ DATA
: 12/12/2001
*
*$** OBS.
:
*
*$**
*
*$*$********************************************************************
*$*$
HISTRICO DAS MODIFICAES
*
*$*$-------------------------------------------------------------------*
*$*$ DATA
| AUTOR
| DESCRIO
*
*$*$-------------------------------------------------------------------*
*$**
|
|
*
*$*$********************************************************************
REPORT zfra0023_13.
*$*$ Type pools -------------------------------------------------------TYPE-POOLS: slis.
*$*$ Includes ---------------------------------------------------------INCLUDE <icon>.
*$*$ Tipos ------------------------------------------------------------TYPES: BEGIN OF we_saida,
vbeln
LIKE vbak-vbeln,
" Nro da ordem de venda
erdat
LIKE vbak-erdat,
" Data de criao
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 lq. da ordem
vkorg
LIKE vbak-vkorg,
" Org. de vendas
vtweg
LIKE vbak-vtweg,
" Canal de distribuio
spart
LIKE vbak-spart,
" Setor de atividade
vkgrp
LIKE vbak-vkgrp,
" Grupo de vendedores
vkbur
LIKE vbak-vkbur,
" Escritrio de vendas
box
TYPE c
,
" Checkbox
icone(30) TYPE c
,
" cone
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 informaes sobre as caractersticas dos campos
DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.
* Tab. com informaes sobre a ordenao da lista
DATA: wt_sort
TYPE slis_t_sortinfo_alv.
* Tab. de especificao de grupos
DATA: wt_sp_group TYPE slis_t_sp_group_alv.
* Tab. de eventos
DATA: wt_events
TYPE slis_t_event.
*$*$--- Estruturas
DATA: wf_x_variant
DATA: wf_variant
DATA: wf_print
DATA: wf_layout

----------------------------------------------------LIKE disvariant.
LIKE disvariant.
TYPE slis_print_alv.
TYPE slis_layout_alv.

*$*$ Variveis --------------------------------------------------------* Nome do programa


DATA: wv_repid LIKE sy-repid.

Autor: Flavio Ricardo de Almeida


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

120

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*$*$ Tela de Seleo --------------------------------------------------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.
*$*$ Inicializao ----------------------------------------------------INITIALIZATION.
wv_repid
= sy-repid.
* Atribuies 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.
*$*$ Validaes de tela -----------------------------------------------AT SELECTION-SCREEN ON p_vari.
PERFORM z_validacao_variante.
*$*$ Programa Principal -----------------------------------------------START-OF-SELECTION.
* Obter informaes
PERFORM z_buscar_dados.
* Indicar campos para exibio 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[].
END-OF-SELECTION.
* Parmetros de impresso
PERFORM z_print_build USING wf_print.
* Layout da lista - Referente as definies
PERFORM z_layout_build USING wf_layout.
* Construo da lista propriamente dita ( Exibio das informaes )
PERFORM z_list_display.
*$*$ Subrotinas -------------------------------------------------------*&---------------------------------------------------------------------*
*&
Form Z_BUSCAR_DADOS
*&---------------------------------------------------------------------*
*
Obter informaes para lista
*----------------------------------------------------------------------*
FORM z_buscar_dados.
* Exibir mensagem
PERFORM z_sapgui_progress_indicator
USING 'Selecionando dados. Aguarde...'.
* Obter dados da base
SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp
vkbur
INTO TABLE wt_saida
FROM vbak
WHERE vbeln IN s_vbeln.
* Atribuir cones
LOOP AT wt_saida.
*
Verificar valor lquido
IF wt_saida-netwr GT '1000'.
wt_saida-icone = icon_red_light.

Autor: Flavio Ricardo de Almeida


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

121

G U I A

B S I C O

D E

P R O G R A M A O

A L V

ELSEIF wt_saida-netwr GT '500'.


wt_saida-icone = icon_yellow_light.
ELSE.
wt_saida-icone = icon_green_light.
ENDIF.
MODIFY wt_saida TRANSPORTING icone.
ENDLOOP.
ENDFORM.

" Z_BUSCAR_DADOS

*&---------------------------------------------------------------------*
*&
Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
*
Lista informaes na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
CALL FUNCTION 'REUSE_ALV_LIST_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'
is_variant
= wf_variant
TABLES
t_outtab
= wt_saida
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
* Verificar processamento da funo
IF sy-subrc NE 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 informaes da lista
*
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha
*
*---------------------------------------------------------------------*
FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv.

Autor: Flavio Ricardo de Almeida


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

122

G U I A

B S I C O

D E

P R O G R A M A O

A L V

* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.
* Limpar tabela
CLEAR pt_fieldcat[].
* cone
clear lf_fieldcat.
lf_fieldcat-fieldname
= 'ICONE'.
lf_fieldcat-icon
= 'X'.
lf_fieldcat-datatype
= 'CHAR'.
lf_fieldcat-outputlen
= '4'.
append lf_fieldcat to pt_fieldcat.
* Cd. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VBELN'.
lf_fieldcat-ref_tabname
= 'VBAK'."
lf_fieldcat-sp_group
= 'A'.
"
APPEND lf_fieldcat TO pt_fieldcat.
"
* Data de Criao
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'ERDAT'.
lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-sp_group
= 'A'.
"
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'.
"
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 lq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'NETWR'.
lf_fieldcat-ref_tabname
= 'VBAK'.
lf_fieldcat-sp_group
= 'V'.
"
APPEND lf_fieldcat TO pt_fieldcat.
* Organizao de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VKORG'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuio
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.
* Escritrio de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname
= 'VKBUR'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
ENDFORM.

Autor: Flavio Ricardo de Almeida


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

" Nome do Campo


Tab. de Referncia
Grupo de Ordem Vendas
Gravar na tab. config.

Grupo de Ordem Vendas

Grupo de Ordem Vendas

Grupo de Valores

" FORM Z_FIELDCAT_INIT

123

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*&---------------------------------------------------------------------*
*&
Form Z_ORDENAR_LISTA
*&---------------------------------------------------------------------*
*
Ordenao da lista
*----------------------------------------------------------------------*
*
--> PT_SORT[] - Tabela com informaes de ordenao 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
lf_sort-fieldname
lf_sort-tabname
lf_sort-up
lf_sort-expa
APPEND lf_sort TO
**
*
*
*
*
*
*

= 1.
= 'ERNAM'.
= 'WT_SAIDA'.
= 'X'.
= 'X'.
wt_sort.

"
"
"
"
"

Sequncia de ordenao
Nome do campo
Nome da tabela de lista
Ordenao Crescente
Expandir lista

Outras opes possveis de utilizao


lf_sort-down
= 'X'.
" Ordenao decrescente
lf_sort-group
= '*'.
" Mudana de controle: quebra de
" pgina, 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.
* Variveis
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.
* Varivel local
DATA: lv_exit.
* Encontrar variante
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING

Autor: Flavio Ricardo de Almeida


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

124

G U I A

B S I C O

D E

P R O G R A M A O

A L V

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

" Z_F4_FOR_VARIANT

*&---------------------------------------------------------------------*
*&
Form Z_VALIDACAO_VARIANTE
*&---------------------------------------------------------------------*
*
Realizar validao da variante de exibio
*----------------------------------------------------------------------*
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 impresso da lista
*
*---------------------------------------------------------------------*
* --> PF_PRINT - Estrutura com atributos da impresso 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'.
" No listar info. sobre seleo
pf_print-no_coverpage
= 'X'.
" No listar pgina de rostp
pf_print-no_print_listinfos = 'X'.
" No listar info. sobre a lista
* PF_PRINT-RESERVE_LINES
= 'X'.
" Reservar linhas
* PF_PRINT-NO_NEW_PAGE
= 'X'.
" Sem novas pginas
* PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " No alterar tamanho da linha
ENDFORM.

" Z_PRINT_BUILD

*&---------------------------------------------------------------------*
*&
Form Z_LAYOUT_BUILD
*&---------------------------------------------------------------------*
*
Layout de sada

Autor: Flavio Ricardo de Almeida


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

125

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*----------------------------------------------------------------------*
*
--> PF_LAYOUT - Estrutura para layout de sada 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
*
*---------------------------------------------------------------------*
FORM z_eventtab_build USING pt_events TYPE slis_t_event.
* Variveis
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.

Autor: Flavio Ricardo de Almeida


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

126

G U I A

B S I C O

D E

P R O G R A M A O

ENDLOOP.
*
ENDFORM.

A L V

" FORM Z_EVENTTAB_BUILD

*----------------------------------------------------------------------*
*
FORM Z_USER_COMMAND
*
*----------------------------------------------------------------------*
*
Aes do usurio
*
*----------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm
LIKE sy-ucomm
pf_selfield TYPE slis_selfield.
"#EC CALLED
*
CASE pv_ucomm.
*
Ao de Click duplo '&IC1'
WHEN '&IC1'.
*
Posicionar no registro selecionado
READ TABLE wt_saida INDEX pf_selfield-tabindex.
*
Verificar campo selecionado
CASE pf_selfield-sel_tab_field.
WHEN 'WT_SAIDA-VBELN'.
*
Determinar nro da ordem de venda ao parmetro de memria
SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.
*
Chamar transao de exibio da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
WHEN 'TESTE'.
PERFORM z_rotina_teste.
ENDCASE.
ENDFORM.
*----------------------------------------------------------------------*
*
FORM Z_TOP_OF_PAGE
*
*----------------------------------------------------------------------*
*
Evento de cabealho
*
*----------------------------------------------------------------------*
FORM z_top_of_page.
"#EC CALLED
WRITE: / 'Evento: 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
*

Autor: Flavio Ricardo de Almeida


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

127

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*----------------------------------------------------------------------*
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.
ENDFORM.
*----------------------------------------------------------------------*
*
FORM Z_CALLER_EXIT
*
*----------------------------------------------------------------------*
*
Evento
*
*----------------------------------------------------------------------*
FORM z_caller_exit USING pf_data.
"#EC CALLED
ENDFORM.
*----------------------------------------------------------------------*
*
FORM Z_BEFORE_LINE_OUTPUT
*
*----------------------------------------------------------------------*
*
Evento antes da impresso 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 impresso 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_ROTINA_TESTE
*&---------------------------------------------------------------------*

Autor: Flavio Ricardo de Almeida


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

128

G U I A

B S I C O

D E

P R O G R A M A O

A L V

*
Rotina para o evento TESTE ( Boto )
*----------------------------------------------------------------------*
FORM z_rotina_teste.
LOOP AT wt_saida.
Verificar se linha foi selecionada
CHECK wt_saida-box EQ 'X'.
*
Enviar mensagem para informar linha selecionada
MESSAGE i899(bd) WITH 'Foi escolhida a ordem:' wt_saida-vbeln.
ENDLOOP.
*

ENDFORM.

Autor: Flavio Ricardo de Almeida


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

" Z_ROTINA_TESTE

129

Você também pode gostar