Beruflich Dokumente
Kultur Dokumente
GUIA DE PROGRAMAO
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
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
Captulo 3
Captulo 4
Ordenando a lista...................................................................12
Captulo 5
Captulo 6
Captulo 7
Captulo 8
Captulo 9
Captulo 10
Captulo 11
Captulo 12
Captulo 13
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.
G U I A
B S I C O
D E
P R O G R A M A O
A L V
Captulo
este captulo vamos criar uma lista bastante simples, porm muito til e
verstil para apresentao de informaes.
G U I A
B S I C O
D E
P R O G R A M A O
A L V
" 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
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
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.
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.
"
"
"
"
"
"
"
"
"
"
"
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.
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 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.
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
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.
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
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 a lista foi apresentada ordenada pela coluna Criado por, de forma
crescente.
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
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.
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
"
"
"
"
Nome do Campo
Tab. de Referncia
Grupo de Ordem Vendas
Gravar na tab. config.
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
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
Agora vamos ocultar todos os campos para que possamos identificar a especificao
dos campos, para isto tecle no cone
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;
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.
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.
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
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
*&---------------------------------------------------------------------*
*&
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.
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
FIGURA 6.1 Tela de seleo com opo de escolher a variante de exibio antes da execuo do programa
23
G U I A
B S I C O
D E
P R O G R A M A O
variantes de exibio.
24
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
Captulo
Parmetros para
impresso
Configurar alguns parmetros de impresso da lista atravs de
estruturas do ALV.
TYPE slis_print_alv.
...
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
*
*---------------------------------------------------------------------*
FORM z_print_build USING pf_print TYPE slis_print_alv.
25
G U I A
B S I C O
D E
P R O G R A M A O
A L V
*
*
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'
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
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.
DATA: wf_layout
TYPE slis_layout_alv.
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'
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
28
G U I A
B S I C O
D E
P R O G R A M A O
A L V
6 Tela do Relatrio:
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
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.
* 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[].
...
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.
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'
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
33
G U I A
B S I C O
D E
P R O G R A M A O
A L V
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
34
G U I A
B S I C O
D E
P R O G R A M A O
A L V
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.
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.
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.
37
G U I A
B S I C O
D E
P R O G R A M A O
A L V
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.
39
G U I A
B S I C O
D E
P R O G R A M A O
A L V
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.
41
G U I A
B S I C O
D E
P R O G R A M A O
A L V
ENDFORM.
" Z_ROTINA_TESTE
3 Tela da lista;
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
2 Vamos criar duas tabelas internas que contero uma configurao especfica de
cores.
* Tabs. de cores
DATA: wt_color_normal
43
G U I A
B S I C O
D E
P R O G R A M A O
A L V
" Z_FIELD_COLOR
* Determinar cores
PERFORM z_field_color: TABLES wt_color_normal USING 2 0 0,
TABLES wt_color_selecao USING 5 0 0.
...
'X'.
'BOX'.
'WT_SAIDA'.
'COLOR'.
ENDFORM.
" 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
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'.
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;
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.2 Tela DEPOIS de apertar o boto TESTE, j com a linha selecionada colorida.
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.
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
...
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;
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.
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
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.
" 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
*
*---------------------------------------------------------------------*
55
G U I A
B S I C O
D E
P R O G R A M A O
A L V
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.
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.
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.
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
ENDFORM.
" 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).
62
G U I A
B S I C O
D E
P R O G R A M A O
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'."
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'.
63
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
*&---------------------------------------------------------------------*
*&
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
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.
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.
65
G U I A
B S I C O
D E
P R O G R A M A O
A L V
" 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
66
G U I A
B S I C O
D E
P R O G R A M A O
A L V
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'.
lf_fieldcat-ref_tabname
= 'VBAK'.
67
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-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_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
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.
68
G U I A
B S I C O
D E
P R O G R A M A O
A L V
* 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_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.
ELSE.
69
G U I A
B S I C O
D E
P R O G R A M A O
A L V
CLEAR: wf_variant.
wf_variant-report = wv_repid.
ENDIF.
ENDFORM.
" 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.
71
G U I A
B S I C O
D E
P R O G R A M A O
A L V
" 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'
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'
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'.
73
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'.
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_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
ENDFORM.
" Z_ORDENAR_LISTA
*---------------------------------------------------------------------*
*
FORM Z_SP_GROUP_BUILD
*
74
G U I A
B S I C O
D E
P R O G R A M A O
A L V
*---------------------------------------------------------------------*
*
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_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'
75
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_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
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.
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...'.
78
G U I A
B S I C O
D E
P R O G R A M A O
A L V
" 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'.
79
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-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_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
80
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_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_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
81
G U I A
B S I C O
D E
P R O G R A M A O
A L V
" 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
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.
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.
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'
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
85
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
= '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_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
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
= 'X'.
= 'X'.
A L V
" Subtotal
" 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_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
87
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_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
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
88
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
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_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.
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.
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.
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.
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.
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.
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'
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
94
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
= '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_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
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
= 'X'.
= 'X'.
A L V
" Subtotal
" 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_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
96
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_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
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
97
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
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_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.
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.
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.
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.
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.
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.
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'
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
103
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
= '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_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
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
= 'X'.
= 'X'.
A L V
" Subtotal
" 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_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
105
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_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
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
106
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
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_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.
107
G U I A
B S I C O
D E
P R O G R A M A O
A L V
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
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.
" 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.
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
111
G U I A
B S I C O
D E
P R O G R A M A O
A L V
* 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'
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
112
G U I A
B S I C O
text
D E
P R O G R A M A O
A L V
= 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
CLEAR lf_fieldcat.
113
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
lf_fieldcat-fieldname
= 'VKBUR'.
lf_fieldcat-ref_tabname
= 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
ENDFORM.
*&---------------------------------------------------------------------*
*&
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
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_F4_FOR_VARIANT
*&---------------------------------------------------------------------*
*
Processo de ajuda pra variante
*----------------------------------------------------------------------*
FORM z_f4_for_variant.
* Varivel local
114
G U I A
B S I C O
D E
P R O G R A M A O
A L V
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
ENDFORM.
" Z_PRINT_BUILD
115
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_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.
WHEN slis_ev_after_line_output.
116
G U I A
B S I C O
D E
P R O G R A M A O
A L V
117
G U I A
B S I C O
D E
P R O G R A M A O
A L V
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
118
G U I A
B S I C O
D E
P R O G R A M A O
pv_index_sum
*
A L V
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.
" 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.
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.
121
G U I A
B S I C O
D E
P R O G R A M A O
A L V
" 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'
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
122
G U I A
B S I C O
D E
P R O G R A M A O
A L V
Grupo de Valores
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
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_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
124
G U I A
B S I C O
D E
P R O G R A M A O
A L V
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
*----------------------------------------------------------------------*
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.
ENDLOOP.
126
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_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
*
*----------------------------------------------------------------------*
127
G U I A
B S I C O
D E
P R O G R A M A O
FORM z_end_of_list.
A L V
"#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 )
128
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_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
129