Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
GUIA DE PROGRAMAÇÃO
Desenvolvimento de aplicações ABAP
Índice
Capítulo 1 Introdução ............................................................................. 3
Capítulo 2 Lista Hierárquica ALV ......................................................... 4
Capítulo 3 Implementando Recursos a Lista Hierárquica .................11
Capítulo 4 Lista de Blocos Simples ........................................................16
Capítulo 5 Lista de Bloco Hierárquico .................................................29
Capítulo 6 Caixa de Diálogo ALV (POPUP) ......................................34
Capítulo 7 Lista ALV GRID ..................................................................39
Capítulo 8 Carregando uma Figura ........................................................48
Capítulo 9 Incluir Logotipo a Lista ALV .............................................54
Introdução
Apresentação de outros tópicos relacionados a ferramenta ABAP
LIST VIEWER conhecida simplesmente por ALV.
C
omo vimos no volume 1 desta obra, a ferramenta ALV ( ABAP LIST
VIEWER ) permite criar listas de uma maneira fácil e prática. Consiste
basicamente em utilizar funções genéricas pertencentes a classe de
desenvolvimento SLIS.
Neste volume veremos como funcionam as listas dos tipos hierárquicas, popup,
blocos e Grid.
Existe a opção de utilizar objetos para a construção das listas mas não serão
abordadas neste manual, para isto consulte a ajuda do sistema no seguinte tópico: SAP
Library " Basis Components " Basis Service / Communications Interfaces (BC-SRV)
"BC - ALV Grid Control.
N
este capítulo vamos criar uma lista hierárquica, mostrando a dependência
de uma informação em relação a outra. Neste caso utilizaremos como
exemplo informações de ordens de vendas ( Cabeçalho e Itens ).
No R/3, através da transação SE38, ou SE80 àqueles que preferem uma visualização
dos processos separadamente, vamos criar nosso primeiro programa através da
primeira transação mencionada. Iremos chamá-lo de ZFRA0023_14.
2 – Declarar tipos (estrturura) das tabelas internas que irão conter os dados a serem
listados, (“Cabeçalho da Ordem de Venda” e “Itens da Ordem de Venda”);
*$*$ Tipos -------------------------------------------------------------
TYPES: BEGIN OF we_cabecalho,
vbeln LIKE vbak-vbeln, " Nro da ordem de venda
erdat LIKE vbak-erdat, " Data de criação
ernam LIKE vbak-ernam, " Criado por
audat LIKE vbak-audat, " Data da ordem
auart LIKE vbak-auart, " Tipo de ordem
netwr LIKE vbak-netwr, " Valor líq. da ordem
vkorg LIKE vbak-vkorg, " Org. de vendas
vtweg LIKE vbak-vtweg, " Canal de distribuição
spart LIKE vbak-spart, " Setor de atividade
vkgrp LIKE vbak-vkgrp, " Grupo de vendedores
vkbur LIKE vbak-vkbur, " Escritório de vendas
END OF we_cabecalho.
* Nome do programa
wv_repid = sy-repid.
* Definição das tabelas - Header e Item
wv_tabname_header = 'WT_CABECALHO'.
wv_tabname_item = 'WT_ITEM'.
* Define informações da chave
CLEAR wf_keyinfo.
wf_keyinfo-header01 = 'VBELN'.
wf_keyinfo-item01 = 'VBELN'.
END-OF-SELECTION.
...
*&---------------------------------------------------------------------*
*& Form Z_OBTER_DADOS
*&---------------------------------------------------------------------*
* Obter informações para lista
*----------------------------------------------------------------------*
FORM z_obter_dados.
* Mensagem
PERFORM z_sapgui_progress_indicator
USING 'Selecionando dados. Aguarde...'.
* Obter informações dos cabeçalho
SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp
vkbur
INTO TABLE wt_cabecalho
FROM vbak
WHERE vbeln IN s_vbeln.
* Verificar se alguma informação foi encontrada
IF sy-subrc EQ 0.
* Obter informações dos ítens
SELECT vbeln posnr matnr arktx kwmeng netwr
INTO TABLE wt_item
FROM vbap
FOR ALL ENTRIES IN wt_cabecalho
WHERE vbeln EQ wt_cabecalho-vbeln.
ENDIF.
* Ordenar tabelas
SORT: wt_cabecalho, wt_item.
*&---------------------------------------------------------------------*
*& Form Z_SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* Interagir com o front-end - Enviar mensagens
*----------------------------------------------------------------------*
* --> PV_TEXT - Mensagem
*----------------------------------------------------------------------*
FORM z_sapgui_progress_indicator USING value(pv_text).
9 – Criar tabela interna que conterá as informações das características dos campos da
lista;
* Tab. com informações sobre as características dos campos
* Limpar tabela
CLEAR pt_fieldcat[].
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.
* Data de Criação
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERDAT'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERNAM'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Tipo de Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'AUART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Organização de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKORG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VTWEG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Setor de atividade
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'SPART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Grupo de Vendedores
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKGRP'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Escritório de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKBUR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Ítem da ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'POSNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do material
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'MATNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição do material na Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ARKTX'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Quantidade do ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KWMENG'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líquido ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
12 – Resultado
Agora com a lista pronta é possível mudar o layout do mesmo ocultando colunas,
sumarizando colunas de valor, ordenando outras, etc... e gravar os layouts para
visualizações futuras, assim como para a lista simples vista no volume 1, para isto utilize
a barra de status que contem os botões para acionar estas funcionalidades.
Implementando recursos
a lista hierárquica
Implementar recusros à lista hierárquica para deixá-la mais
apresentável.
N
o capítulo anterior aprendemos a criar uma lista hierárquica básica, porém
todos os recursos demonstrados no volume 1 podem ser implementados
nesta lista.
Neste capítulo vamos implementar algumas delas que tenham uma mudança
significativa com relação a que foram implementadas para a lista simples.
* Variáveis
DATA: lf_event TYPE slis_alv_event.
Veja que neste exemplo houve uma mudança em relação a lista simples no conteúdo
do parâmetro i_list_type.
Nem todos os eventos disponibilizados para a lista simples estão disponíveis para a
lista hierárquica porém podemos trabalhar com os principais.
/12 sy-title.
ENDFORM.
Cabeçalho apenas ilustrativo, é claro que você pode melhorá-lo colocando o nome da
empresa, data e hora de execução, número de páginas, etc...
ENDFORM.
1.6 – Para dar um toque especial vamos fazer com que o campo do número da
ordem (VBELN) da tabela de cabeçalho (WT_CABECALHO), fique com um
indicador de nagevação (hotspot), para isto adicione a linha abaixo para o campo
na rotina z_fieldcat_init;
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
lf_fieldcat-hotspot = 'X'.
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.
perform z_sapgui_progress_indicator
using 'Estruturando a lista. Aguarde...'.
*
call function 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
exporting
i_callback_program = wv_repid
it_fieldcat = wt_fieldcat[]
i_save = 'A'
i_tabname_header = wv_tabname_header
i_tabname_item = wv_tabname_item
is_keyinfo = wf_keyinfo
it_events = wt_events[]
tables
t_outtab_header = wt_cabecalho
t_outtab_item = wt_item
exceptions
program_error = 1
others = 2.
* Verificar processamento da função
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
3 – Resultado;
FIGURA 3.1 Lista ALV Hierárquica – Com recursos implementados por eventos
Este capítulo teve a intenssão de mostrar ao leitor que tudo que criamos para lista
simples, como CHECKBOX, ÍCONES, mudança de cores, etc, podem ser
implementadas para a lista hierárquica.
N
este capítulo veremos como criar várias listas simples ALVs com layouts
variados em um mesmo programa. Este tipo de lista pode ser útil quando
necessário mostrar informações diferentes.
4 – Tela de seleção;
*$*$ Tela de Seleção ---------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
SELECT-OPTIONS: s_vbeln FOR wt_cabecalho-vbeln.
SELECTION-SCREEN END OF BLOCK b1.
Até aqui temos uma implementação normal para qualquer programa ABAP. A partir
deste ponto começaremos a implementar as funcionalidades ALV.
Vamos criar apenas três blocos os quais chamaremos de clientes, cabeçalho e item;
* Variáveis
DATA: lf_event TYPE slis_alv_event.
*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_CABECALHO
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de cabeçalho das ordens *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_cabecalho USING pt_events TYPE slis_t_event.
* Variáveis
DATA: lf_event TYPE slis_alv_event.
WHEN slis_ev_list_modify.
MOVE 'Z_TOP_OF_LIST_CABEC' TO lf_event-form.
WHEN slis_ev_top_of_list.
* move 'Z_TOP_OF_LIST_CABEC' to lf_event-form.
WHEN slis_ev_end_of_page.
* move 'Z_END_OF_PAGE_CABEC' to lf_event-form.
WHEN slis_ev_end_of_list.
* move 'Z_END_OF_LIST_CABEC' to lf_event-form.
WHEN slis_ev_after_line_output.
* MOVE 'Z_AFTER_LINE_OUTPUT_CABEC' TO lf_event-form.
WHEN slis_ev_before_line_output.
* MOVE 'Z_BEFORE_LINE_OUTPUT_CABEC' TO lf_event-form.
ENDCASE.
MODIFY pt_events FROM lf_event.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_ITEM
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de ítens das ordens *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_ITEM USING pt_events TYPE slis_t_event.
* Variáveis
DATA: lf_event TYPE slis_alv_event.
Veja que neste exemplo houve uma mudança em relação a lista simples no conteúdo
do parâmetro i_list_type.
*&---------------------------------------------------------------------*
*& Form Z_TOP_OF_LIST_CABEC
*&---------------------------------------------------------------------*
* Cabeçalho de cabeçalho
*----------------------------------------------------------------------*
FORM z_top_of_list_cabec.
*&---------------------------------------------------------------------*
*& Form Z_TOP_OF_LIST_ITEM
*&---------------------------------------------------------------------*
* Cabeçalho de ítem
*----------------------------------------------------------------------*
FORM z_top_of_list_item.
*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_CLIENTE *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de cliente *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_cliente USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.
* Limpar tabela
CLEAR pt_fieldcat[].
* Campos para lista de cliente
* Código do cliente
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KUNNR'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NAME1'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Endereço
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'STRAS'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Estados
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'REGIO'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* País
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'LAND1'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
*
ENDFORM. " Z_FIELDCAT_CLIENTE
*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_CABECALHO *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de cabeçalho *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_cabecalho USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.
* Limpar tabela
CLEAR pt_fieldcat[].
* Campos para lista de cabeçalho
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
lf_fieldcat-hotspot = 'X'.
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.
* Data de Criação
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERDAT'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERNAM'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Tipo de Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'AUART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Organização de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKORG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VTWEG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Setor de atividade
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'SPART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Grupo de Vendedores
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKGRP'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Escritório de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKBUR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do cliente
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KUNNR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
*
ENDFORM. " Z_FIELDCAT_CABECALHO
*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_ITEM *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de item *
*---------------------------------------------------------------------*
* Limpar tabela
CLEAR pt_fieldcat[].
* Campos para lista de item
* Nro ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Ítem da ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'POSNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do material
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'MATNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição do material na Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ARKTX'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Quantidade do ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KWMENG'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líquido ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
8 – Inicializar blocos;
Estras estruturas são exigidas nas funções de criação dos blocos. As mesmas podem
ser configuradas de acordo com as necessidades dos blocos, assim como vimos no
volume 1.
t_outtab = wt_item.
Não é obrigatório o uso desta estrutura porem iremos utilizá-la na função de listagem
das informações.
FORM z_list_display.
Veja que não existe segredo para composição da lista, pois apenas devemos ter
atenção na seqüência de utilização das funções e aos parâmetros obrigatórios.
13 – Resultado;
Lista de Bloco
Hierárquico
Lista com bloco onde as informações mantêm uma relação
hierárquica.
N
o capítulo anterior vimos como criar uma lista de blocos simples. Agora
iremos implementar uma lista onde um dos blocos é hierárquico, ou seja,
existe um relacionamento de hierarquia entre as informações do bloco.
2.2 - Criar a tabela de eventos para o bloco hierárquico que chamaremos de ORDEM;
* Tab. de eventos
DATA: wt_eventos_cliente TYPE slis_t_event,
wt_eventos_ordem TYPE slis_t_event.
2.3 – Mudar chamada da rotina de eventos para blocos e eliminar chamada cabeçalho
e item;
* Determinar eventos para cada bloco
PERFORM z_eventos_clientes USING wt_eventos_cliente[].
PERFORM z_eventos_ordem USING wt_eventos_ordem[].
2.4 – Para criar a rotina de eventos para o bloco de ordem, vamos aproveitar a rotina
Z_EVENTOS_CABECALHO renomeando para Z_ENVENTOS_ORDEM que
terá acodificação abaixo;
*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_ORDEM
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de ordens *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_ordem USING pt_events TYPE slis_t_event.
* Variáveis
DATA: lf_event TYPE slis_alv_event.
Veja que neste exemplo houve uma mudança em relação ao bloco simples no
conteúdo do parâmetro i_list_type.
i_list_type = 3 = Tipo de lista para qual eventos devem ser obtidos, neste caso bloco
herárquico
* Limpar tabela
* CLEAR pt_fieldcat[].
* Campos para lista de item
* Nro ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
...
4 – Criar uma estrutura de layout para o bloco Ordem e eliminar as dos blocos
Cabecalho e Item;
*$*$ Estruturas --------------------------------------------------------
* Layout das listas
DATA: wf_layout_cliente TYPE slis_layout_alv,
wf_layout_ordem TYPE slis_layout_alv.
9 - Resultado;
A
qui vamos aprender como criar uma caixa de diálogo (popup) utilizando
recursos ALV, que nada mais é um programa que permite que seja escolhido
o tamanho da tela, e que seus botões (gui status) ficam no rodapé.
Vamos criar um programa que irá acionar a janela popup e mostrará os registros que
foram selecionados.
7 – Vamos implementar a rotina principal juntamente com a rotina para obter dados
para lista;
*$*$ Rotina Principal --------------------------------------------------
START-OF-SELECTION.
*
PERFORM z_obter_dados.
* Limpar tabela
CLEAR pt_fieldcat[].
* Montar estrutura
CLEAR lf_fieldcat.
* Código do cliente
* lf_field-col_pos = 1.
lf_fieldcat-fieldname = 'KUNNR'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição do cliente
* lf_afield-col_pos = 2.
lf_fieldcat-fieldname = 'NAME1'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* I_SCROLL_TO_SEL_LINE = 'X'
i_tabname = 'WT_CLIENTE'
* I_STRUCTURE_NAME =
it_fieldcat = wt_fieldcat
* IT_EXCLUDING =
i_callback_program = wv_repid
* I_CALLBACK_USER_COMMAND =
* IS_PRIVATE =
IMPORTING
es_selfield = wf_sel
* E_EXIT =
TABLES
t_outtab = wt_cliente
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
LOOP AT wt_cliente.
* Verificar se o registro foi selecionado
CHECK NOT wt_cliente-box IS INITIAL.
* Listar registro
WRITE: / 'CLIENTE:', wt_cliente-kunnr,
'-', wt_cliente-name1.
ENDLOOP.
10.4 – Agora na próxima tela veremos uma listagem dos registros selecionados;
V
eremos neste capítulo um outro formato de lista ALV, a ALV GRID List.
Este tipo de lista é muito mais elegante que as listas ALV vistas no volume 1,
apesar de não possuir algumas funcionalidades.
1 – Teremos que fazer alguns ajustes em algumas rotinas de eventos, por isto faremos
uma pequena alteração na rotina Z_EVENTTAB_BUILD, basicamente comentar as
linhas de eventos ativas as quais trataremos em outro tópico;
*---------------------------------------------------------------------*
* FORM Z_EVENTTAB_BUILD *
*---------------------------------------------------------------------*
* Definir eventos associados a lista *
*---------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*---------------------------------------------------------------------*
FORM z_eventtab_build USING pt_events TYPE slis_t_event.
* Variáveis
DATA: lf_event TYPE slis_alv_event.
WHEN slis_ev_top_of_page.
* MOVE 'Z_TOP_OF_PAGE' TO lf_event-form.
WHEN slis_ev_top_of_coverpage.
* move 'Z_TOP_OF_COVERPAGE' to lf_event-form.
WHEN slis_ev_end_of_coverpage.
* move 'Z_END_OF_COVERPAGE' to lf_event-form.
WHEN slis_ev_foreign_top_of_page.
* move 'Z_FOREIGN_TOP_OF_PAGE' to lf_event-form.
WHEN slis_ev_foreign_end_of_page.
* move 'Z_FOREIGN_END_OF_PAGE' to lf_event-form.
WHEN slis_ev_pf_status_set.
* MOVE 'Z_PF_STATUS_SET' TO lf_event-form.
WHEN slis_ev_list_modify.
* MOVE 'Z_LIST_MODIFY' TO lf_event-form.
WHEN slis_ev_top_of_list.
* MOVE 'Z_TOP_OF_LIST' TO lf_event-form.
WHEN slis_ev_end_of_page.
* MOVE 'Z_END_OF_PAGE' TO lf_event-form.
WHEN slis_ev_end_of_list.
* MOVE 'Z_END_OF_LIST' TO lf_event-form.
WHEN slis_ev_after_line_output.
* MOVE 'Z_AFTER_LINE_OUTPUT' TO lf_event-form.
WHEN slis_ev_before_line_output.
* MOVE 'Z_BEFORE_LINE_OUTPUT' TO lf_event-form.
WHEN slis_ev_subtotal_text.
* MOVE 'Z_SUBTOTAL_TEXT' TO lf_event-form.
ENDCASE.
MODIFY pt_events FROM lf_event.
ENDLOOP.
*
ENDFORM. " FORM Z_EVENTTAB_BUILD
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
ENDIF.
Veja como é simples alterar a lista simples ALV para uma lista GRID, é possível fazer
esta alteração para todos os programas visto no volume 1.
ENDFORM.
* Limpar tabela
CLEAR pt_fieldcat[].
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
lf_fieldcat-sp_group = 'A'. " Grupo de Ordem Vendas
lf_fieldcat-hotspot = 'X'. " Indicador de ativo
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.
...
Agora execute o programa e veja que ao clicar no número da ordem, será exibia a
transação VA03 (Exibir Ordem).
FIGURA 7.2 Tela com lista GRID ALV com o campo do nº da ordem ativo.
ENDFORM.
DATA: lv_data_hd(30),
lv_data(10),
lv_hora(08).
*
* Cabeçalho
CLEAR lf_line.
lf_line-key = 'Título:'.
lf_line-typ = 'S'.
lf_line-info = sy-title.
APPEND lf_line TO pt_top_of_page.
* Informações
* Montar data - hora
CLEAR lf_line.
lf_line-typ = 'S'.
lf_line-key = 'Report'.
lf_line-info = sy-repid.
APPEND lf_line TO pt_top_of_page.
** Formatar data - hora
* WRITE sy-datum TO lv_data.
* WRITE sy-uzeit TO lv_hora.
* CONCATENATE lv_data '-' lv_hora INTO lv_data_hd SEPARATED BY space.
** Montar data - hora
* CLEAR lf_line.
* lf_line-typ = 'S'.
* lf_line-key = 'Data - Hora'.
* lf_line-info = lv_data_hd.
* APPEND lf_line TO pt_top_of_page.
* Comentário
CLEAR lf_line.
lf_line-typ = 'A'.
lf_line-info = 'Lista GRID'.
APPEND lf_line TO pt_top_of_page.
ENDFORM.
Caso o logotipo não apareça por não existir em sua aplicação não se preocupe pois no
próximo capítulo aprenderemos a criar nossas próprias figuras.
FIGURA 7.4 Tela com lista GRID ALV com LOGOTIPO no cabeçalho.
Vimos neste capítulo como é fácil criar uma lista ALV do tippo GRID.
V
eremos neste capítulo que é possível criar no sistemas nossas próprias
figuras para utilizarmos de várias maneiras uma delas é como LOGOTIPO,
na lista ALV do tipo GRID.
Utilize uma ferramenta de criação de figuras ou simplesmente escolha uma que exista
no seu sistema operacional, internet, etc. Utilizaremos a bandeira do Brasil.
Estes são os campos necessários para carregar a figura, os outros campos são
informativos.
3 – Configuração da figura;
3.1 – Após execução <F8> a tela abaixo será exibida para carregarmos a figura;
Na janela inferior escolha a aba <Criar> e depois abra a pasta “Tipos de doc.s
tandard”.
3.2 - Será exibida a tela da fig. 8.3, onde deve-se dar um duplo clique no ´ítem
“TELA”;
3.3 – Após o duplo clique no item “TELA” será aberta uma tela para informar o
caminho da figura;
5 – Com um duplo clique item “Tela” na janela superior pode-se visualisar a figura;
Para transportar a figura para outros ambientes, por exemplo: Qualidade e Produção.
Crie uma Change Request teclando <Shift + F12> ou no botão “Transportar
documentos” representado pelo ícone .
A
gora que aprendemos a carregar figuras no R/3, vamos mostrar como
utilizá-las como LOGOTIPO, em aplicações ALV GRID. A alteração é
muito simples pois teremos que fazer uma única modificação.
ENDFORM.
Veja que apenas comentamos a linha com o logotipo e passamos como parâmetro o
logotipo criado no capítulo anterior.
FIGURA 9.1 Tela exibindo lista ALV GRID com logotipo personalizado.
Considerações Gerais
Referências e ressalvas.
Copyright:
O material contido neste manual pode ser reproduzido, alterado e redistribuído sem
autorização prévia, desde que mantido os créditos.
Trademakrs:
SAP®, R/3®, ABAP/4®, ABAP® são marcas registradas da SAP AG.
Apêndice A
Programas utilizados como exemplos.
Capítulo 2
*$*$********************************************************************
*$*$ *
*$*$ PROGRAMA: Lista Hierárquica *
*$*$ TIPO : Lista ALV *
*$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria *
*$*$ DATA : 12/01/2002 *
*$** OBS. : *
*$** *
*$*$********************************************************************
*$*$ HISTÓRICO DAS MODIFICAÇÕES *
*$*$-------------------------------------------------------------------*
*$*$ DATA | AUTOR | DESCRIÇÃO *
*$*$-------------------------------------------------------------------*
*$** | | *
*$*$********************************************************************
REPORT zfra0023_14 .
END-OF-SELECTION.
* Construção da lista propriamente dita ( Exibição das informações )
PERFORM z_list_display.
* Nome do programa
wv_repid = sy-repid.
* Definição das tabelas - Header e Item
wv_tabname_header = 'WT_CABECALHO'.
wv_tabname_item = 'WT_ITEM'.
* Define informações da chave
CLEAR wf_keyinfo.
wf_keyinfo-header01 = 'VBELN'.
wf_keyinfo-item01 = 'VBELN'.
*&---------------------------------------------------------------------*
*& Form Z_OBTER_DADOS
*&---------------------------------------------------------------------*
* Obter informações para lista
*----------------------------------------------------------------------*
FORM z_obter_dados.
* Mensagem
PERFORM z_sapgui_progress_indicator
USING 'Selecionando dados. Aguarde...'.
* Obter informações dos cabeçalho
SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp
vkbur
INTO TABLE wt_cabecalho
FROM vbak
WHERE vbeln IN s_vbeln.
*&---------------------------------------------------------------------*
*& Form Z_SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* Interagir com o front-end - Enviar mensagens
*----------------------------------------------------------------------*
* --> PV_TEXT - Mensagem
*----------------------------------------------------------------------*
FORM z_sapgui_progress_indicator USING value(pv_text).
*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_INIT *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.
* Limpar tabela
CLEAR pt_fieldcat[].
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.
* Data de Criação
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERDAT'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERNAM'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Tipo de Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'AUART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Organização de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKORG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VTWEG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Setor de atividade
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'SPART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Grupo de Vendedores
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKGRP'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Escritório de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKBUR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Ítem da ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'POSNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do material
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'MATNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição do material na Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ARKTX'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Quantidade do ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KWMENG'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líquido ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
*&---------------------------------------------------------------------*
*& Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
* Listar imformações
*----------------------------------------------------------------------*
FORM z_list_display.
* Mensagem
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
*
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
i_callback_program = wv_repid
it_fieldcat = wt_fieldcat[]
i_save = 'A'
i_tabname_header = wv_tabname_header
i_tabname_item = wv_tabname_item
is_keyinfo = wf_keyinfo
TABLES
t_outtab_header = wt_cabecalho
t_outtab_item = wt_item
EXCEPTIONS
program_error = 1
OTHERS = 2.
* Verificar processamento da função
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Capítulo 3
*$*$********************************************************************
*$*$ *
*$*$ PROGRAMA: Lista Hierárquica - Recursos *
*$*$ TIPO : Lista ALV *
*$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria *
*$*$ DATA : 12/01/2002 *
*$** OBS. : *
*$** *
*$*$********************************************************************
*$*$ HISTÓRICO DAS MODIFICAÇÕES *
*$*$-------------------------------------------------------------------*
*$*$ DATA | AUTOR | DESCRIÇÃO *
*$*$-------------------------------------------------------------------*
*$** | | *
*$*$********************************************************************
REPORT zfra0023_15 .
* Tab. de eventos
DATA: wt_events TYPE slis_t_event.
END-OF-SELECTION.
* Construção da lista propriamente dita ( Exibição das informações )
PERFORM z_list_display.
* Nome do programa
wv_repid = sy-repid.
* Definição das tabelas - Header e Item
wv_tabname_header = 'WT_CABECALHO'.
wv_tabname_item = 'WT_ITEM'.
* Define informações da chave
CLEAR wf_keyinfo.
wf_keyinfo-header01 = 'VBELN'.
wf_keyinfo-item01 = 'VBELN'.
*&---------------------------------------------------------------------*
*& Form Z_OBTER_DADOS
*&---------------------------------------------------------------------*
* Obter informações para lista
*----------------------------------------------------------------------*
FORM z_obter_dados.
* Mensagem
PERFORM z_sapgui_progress_indicator
USING 'Selecionando dados. Aguarde...'.
* Obter informações dos cabeçalho
SELECT vbeln erdat ernam audat auart netwr vkorg vtweg spart vkgrp
vkbur
INTO TABLE wt_cabecalho
FROM vbak
WHERE vbeln IN s_vbeln.
* Verificar se alguma informação foi encontrada
IF sy-subrc EQ 0.
* Obter informações dos ítens
SELECT vbeln posnr matnr arktx kwmeng netwr
INTO TABLE wt_item
FROM vbap
FOR ALL ENTRIES IN wt_cabecalho
WHERE vbeln EQ wt_cabecalho-vbeln.
ENDIF.
* Ordenar tabelas
SORT: wt_cabecalho, wt_item.
*&---------------------------------------------------------------------*
*& Form Z_SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* Interagir com o front-end - Enviar mensagens
*----------------------------------------------------------------------*
* --> PV_TEXT - Mensagem
*----------------------------------------------------------------------*
FORM z_sapgui_progress_indicator USING value(pv_text).
*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_INIT *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.
* Limpar tabela
CLEAR pt_fieldcat[].
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
lf_fieldcat-hotspot = 'X'.
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.
* Data de Criação
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERDAT'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERNAM'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Tipo de Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'AUART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Organização de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKORG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VTWEG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Setor de atividade
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'SPART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Grupo de Vendedores
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKGRP'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Escritório de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKBUR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Ítem da ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'POSNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do material
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'MATNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição do material na Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ARKTX'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Quantidade do ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KWMENG'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líquido ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
*&---------------------------------------------------------------------*
*& Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
* Listar imformações
*----------------------------------------------------------------------*
FORM z_list_display.
* Mensagem
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
*
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
i_callback_program = wv_repid
it_fieldcat = wt_fieldcat[]
i_save = 'A'
i_tabname_header = wv_tabname_header
i_tabname_item = wv_tabname_item
is_keyinfo = wf_keyinfo
it_events = wt_events[]
TABLES
t_outtab_header = wt_cabecalho
t_outtab_item = wt_item
EXCEPTIONS
program_error = 1
OTHERS = 2.
* Verificar processamento da função
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*&---------------------------------------------------------------------*
*& Form Z_EVENTTAB_BUILD
*&---------------------------------------------------------------------*
* Definir eventos associados a lista *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventtab_build USING pt_events TYPE slis_t_event.
* Variáveis
DATA: lf_event TYPE slis_alv_event.
*----------------------------------------------------------------------*
* FORM Z_USER_COMMAND *
*----------------------------------------------------------------------*
* Ações do usuário *
*----------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm LIKE sy-ucomm
pf_selfield TYPE slis_selfield. "#EC CALLED
*
CASE pv_ucomm.
* Ação de Click duplo '&IC1'
WHEN '&IC1'.
* Verificar campo selecionado
CASE pf_selfield-sel_tab_field.
WHEN 'WT_CABECALHO-VBELN'.
* Posicionar no registro selecionado
READ TABLE wt_cabecalho INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'AUN' FIELD wt_cabecalho-vbeln.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
ENDFORM.
*----------------------------------------------------------------------*
* FORM Z_TOP_OF_PAGE *
*----------------------------------------------------------------------*
* Evento de cabeçalho *
*----------------------------------------------------------------------*
FORM z_top_of_page. "#EC CALLED
ENDFORM.
Capítulo 4
*$*$********************************************************************
*$*$ *
*$*$ PROGRAMA: Lista de Blocos Simples *
*$*$ TIPO : Lista ALV *
*$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria *
*$*$ DATA : 12/01/2002 *
*$** OBS. : *
*$** *
*$*$********************************************************************
*$*$ HISTÓRICO DAS MODIFICAÇÕES *
*$*$-------------------------------------------------------------------*
*$*$ DATA | AUTOR | DESCRIÇÃO *
*$*$-------------------------------------------------------------------*
*$** | | *
*$*$********************************************************************
REPORT zfra0023_16 .
* Tab. de eventos
DATA: wt_eventos_cliente TYPE slis_t_event,
wt_eventos_cabecalho TYPE slis_t_event,
wt_eventos_item TYPE slis_t_event.
*&---------------------------------------------------------------------*
*& Form Z_SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* Interagir com o front-end - Enviar mensagens
*----------------------------------------------------------------------*
* --> PV_TEXT - Mensagem
*----------------------------------------------------------------------*
FORM z_sapgui_progress_indicator USING value(pv_text).
*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_CLIENTES
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de clientes *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_clientes USING pt_events TYPE slis_t_event.
* Variáveis
DATA: lf_event TYPE slis_alv_event.
*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_CABECALHO
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de cabeçalho das ordens *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_cabecalho USING pt_events TYPE slis_t_event.
* Variáveis
DATA: lf_event TYPE slis_alv_event.
*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_ITEM
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de ítens das ordens *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_item USING pt_events TYPE slis_t_event.
* Variáveis
DATA: lf_event TYPE slis_alv_event.
EXPORTING
i_list_type = 2 " 2 = Lista Bloco Simples
IMPORTING
et_events = pt_events.
* Verificar se evento foi encontrado
LOOP AT pt_events INTO lf_event.
CASE lf_event-name.
WHEN slis_ev_top_of_page.
* MOVE 'Z_TOP_OF_PAGE_ITEM' TO lf_event-form.
WHEN slis_ev_top_of_coverpage.
* move 'Z_TOP_OF_COVERPAGE_ITEM' to lf_event-form.
WHEN slis_ev_end_of_coverpage.
* move 'Z_END_OF_COVERPAGE_ITEM' to lf_event-form.
WHEN slis_ev_foreign_top_of_page.
* move 'Z_FOREIGN_TOP_OF_PAGE_ITEM' to lf_event-form.
WHEN slis_ev_foreign_end_of_page.
* move 'Z_FOREIGN_END_OF_PAGE_ITEM' to lf_event-form.
WHEN slis_ev_list_modify.
* MOVE 'Z_LIST_MODIFY_ITEM' TO lf_event-form.
WHEN slis_ev_top_of_list.
MOVE 'Z_TOP_OF_LIST_ITEM' TO lf_event-form.
WHEN slis_ev_end_of_page.
* move 'Z_END_OF_PAGE_ITEM' to lf_event-form.
WHEN slis_ev_end_of_list.
* move 'Z_END_OF_LIST_ITEM' to lf_event-form.
WHEN slis_ev_after_line_output.
* MOVE 'Z_AFTER_LINE_OUTPUT_ITEM' TO lf_event-form.
WHEN slis_ev_before_line_output.
* MOVE 'Z_BEFORE_LINE_OUTPUT_ITEM' TO lf_event-form.
ENDCASE.
MODIFY pt_events FROM lf_event.
ENDLOOP.
*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_CLIENTE *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de cliente *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_cliente USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.
* Limpar tabela
CLEAR pt_fieldcat[].
* Campos para lista de cliente
* Código do cliente
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KUNNR'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NAME1'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* Endereço
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'STRAS'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* Estados
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'REGIO'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* País
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'LAND1'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
*
ENDFORM. " Z_FIELDCAT_CLIENTE
*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_CABECALHO *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de cabeçalho *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_cabecalho USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.
* Limpar tabela
CLEAR pt_fieldcat[].
* Campos para lista de cabeçalho
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
lf_fieldcat-hotspot = 'X'.
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.
* Data de Criação
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERDAT'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERNAM'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Tipo de Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'AUART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Organização de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKORG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VTWEG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Setor de atividade
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'SPART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Grupo de Vendedores
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKGRP'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Escritório de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKBUR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do cliente
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KUNNR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
*
ENDFORM. " Z_FIELDCAT_CABECALHO
*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_ITEM *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de item *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_item USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.
* Limpar tabela
CLEAR pt_fieldcat[].
* Campos para lista de item
* Nro ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Ítem da ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'POSNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do material
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'MATNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição do material na Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ARKTX'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
*---------------------------------------------------------------------*
* FORM Z_PRINT_BUILD *
*---------------------------------------------------------------------*
* Definir atributos de impressão da lista *
*---------------------------------------------------------------------*
* --> PF_PRINT - Estrutura com atributos da impressão da lista *
*---------------------------------------------------------------------*
FORM z_print_build USING pf_print TYPE slis_print_alv.
*
* PF_PRINT-PRINT = 'X'. " Imprimir no SPOOL
pf_print-no_print_selinfos = 'X'. " Não listar info. sobre seleção
pf_print-no_coverpage = 'X'. " Não listar página de rostp
pf_print-no_print_listinfos = 'X'. " Não listar info. sobre a lista
* PF_PRINT-RESERVE_LINES = 'X'. " Reservar linhas
* PF_PRINT-NO_NEW_PAGE = 'X'. " Sem novas páginas
* PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " Não alterar tamanho da linha
*&---------------------------------------------------------------------*
*& Form Z_LIST_INIT
*&---------------------------------------------------------------------*
* Inicialização da lista
*----------------------------------------------------------------------*
FORM z_list_init.
*
DATA: lv_program TYPE repid.
*
* Atribuir nome do programa
lv_program = sy-repid.
* Inicializar lista
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
i_callback_program = lv_program
i_callback_user_command = 'Z_USER_COMMAND'.
* i_callback_pf_status_set = 'STANDARD'
* it_excluding = wt_extab.
*
ENDFORM. " Z_LIST_INIT
*&---------------------------------------------------------------------*
*& Form Z_LIST_APPEND
*&---------------------------------------------------------------------*
* Criar os blocos de listas
*----------------------------------------------------------------------*
FORM z_list_append.
it_events = wt_eventos_cliente
i_text = 'CLIENTE'
TABLES
t_outtab = wt_cliente.
* Criar bloco de Cabeçalho
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
it_fieldcat = wt_fieldcat_cabecalho
is_layout = wf_layout_cabecalho
i_tabname = 'WT_CABECALHO'
it_events = wt_eventos_cabecalho
i_text = 'CABEÇALHO'
TABLES
t_outtab = wt_cabecalho.
* Criar bloco de Ítem
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
it_fieldcat = wt_fieldcat_item
is_layout = wf_layout_item
i_tabname = 'WT_ITEM'
it_events = wt_eventos_item
i_text = 'ITEM'
TABLES
t_outtab = wt_item.
*&---------------------------------------------------------------------*
*& Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
* Impressão da lista
*----------------------------------------------------------------------*
FORM z_list_display.
*&---------------------------------------------------------------------*
*& Form Z_TOP_OF_LIST_CLI
*&---------------------------------------------------------------------*
* Cabeçalho de cliente
*----------------------------------------------------------------------*
FORM z_top_of_list_cli.
*&---------------------------------------------------------------------*
*& Form Z_TOP_OF_LIST_CABEC
*&---------------------------------------------------------------------*
* Cabeçalho de cabeçalho
*----------------------------------------------------------------------*
FORM z_top_of_list_cabec.
*&---------------------------------------------------------------------*
*& Form Z_TOP_OF_LIST_ITEM
*&---------------------------------------------------------------------*
* Cabeçalho de ítem
*----------------------------------------------------------------------*
FORM z_top_of_list_item.
*---------------------------------------------------------------------*
* FORM Z_USER_COMMAND *
*---------------------------------------------------------------------*
* Ações do usuário *
*---------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm LIKE sy-ucomm "#EC CALLED
pf_selfield TYPE slis_selfield.
*
CASE pv_ucomm.
WHEN '&IC1'.
* Verificar qual bloco foi acionado
CASE pf_selfield-tabname.
WHEN 'WT_CLIENTE'.
* Exibir CLIENTE
* Informações do registro
READ TABLE wt_cliente INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'KUN' FIELD wt_cliente-kunnr.
SET PARAMETER ID 'BUK' FIELD ''.
SET PARAMETER ID 'VKO' FIELD ''.
SET PARAMETER ID 'VTW' FIELD ''.
SET PARAMETER ID 'SPA' FIELD ''.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'XD03' AND SKIP FIRST SCREEN.
WHEN 'WT_CABECALHO'.
* Exibir ORDEM
* Informações do registro
READ TABLE wt_cabecalho INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'AUN' FIELD wt_cabecalho-vbeln.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
WHEN 'WT_ITEM'.
* Exibir ORDEM
* Informações do registro
READ TABLE wt_item INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'AUN' FIELD wt_item-vbeln.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
*
ENDFORM. " Z_USER_COMMAND
Capítulo 5
*$*$********************************************************************
*$*$ *
*$*$ PROGRAMA: Lista de Bloco Hierárquico *
*$*$ TIPO : Lista ALV *
*$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria *
*$*$ DATA : 12/01/2002 *
*$** OBS. : *
*$** *
*$*$********************************************************************
*$*$ HISTÓRICO DAS MODIFICAÇÕES *
*$*$-------------------------------------------------------------------*
*$*$ DATA | AUTOR | DESCRIÇÃO *
*$*$-------------------------------------------------------------------*
*$** | | *
*$*$********************************************************************
REPORT zfra0023_17 .
* Tab. de eventos
DATA: wt_eventos_cliente TYPE slis_t_event,
wt_eventos_ordem TYPE slis_t_event.
ENDIF.
* Ordenar tabelas
SORT: wt_cliente, wt_cabecalho, wt_item.
*&---------------------------------------------------------------------*
*& Form Z_SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* Interagir com o front-end - Enviar mensagens
*----------------------------------------------------------------------*
* --> PV_TEXT - Mensagem
*----------------------------------------------------------------------*
FORM z_sapgui_progress_indicator USING value(pv_text).
*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_CLIENTES
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de clientes *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_clientes USING pt_events TYPE slis_t_event.
* Variáveis
DATA: lf_event TYPE slis_alv_event.
*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_ORDEM
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de ordens *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_ordem USING pt_events TYPE slis_t_event.
* Variáveis
DATA: lf_event TYPE slis_alv_event.
*&---------------------------------------------------------------------*
*& Form Z_EVENTOS_ITEM
*&---------------------------------------------------------------------*
* Definir eventos associados a lista de ítens das ordens *
*----------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*----------------------------------------------------------------------*
FORM z_eventos_item USING pt_events TYPE slis_t_event.
* Variáveis
DATA: lf_event TYPE slis_alv_event.
*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_CLIENTE *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de cliente *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_cliente USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.
* Limpar tabela
CLEAR pt_fieldcat[].
* Campos para lista de cliente
* Código do cliente
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KUNNR'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NAME1'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* Endereço
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'STRAS'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* Estados
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'REGIO'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_CABECALHO *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de cabeçalho *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_cabecalho USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.
* Limpar tabela
CLEAR pt_fieldcat[].
* Campos para lista de cabeçalho
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
lf_fieldcat-hotspot = 'X'.
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.
* Data de Criação
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERDAT'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERNAM'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Tipo de Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'AUART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Organização de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKORG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VTWEG'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Setor de atividade
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'SPART'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Grupo de Vendedores
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKGRP'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Escritório de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKBUR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do cliente
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KUNNR'.
lf_fieldcat-tabname = 'WT_CABECALHO'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
*
ENDFORM. " Z_FIELDCAT_CABECALHO
*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_ITEM *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista de item *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_item USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.
* Limpar tabela
* CLEAR pt_fieldcat[].
* Campos para lista de item
* Nro ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Ítem da ordem de venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'POSNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Código do material
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'MATNR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição do material na Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ARKTX'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Quantidade do ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'KWMENG'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líquido ítem na ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-tabname = 'WT_ITEM'.
lf_fieldcat-ref_tabname = 'VBAP'.
APPEND lf_fieldcat TO pt_fieldcat.
*---------------------------------------------------------------------*
* FORM Z_PRINT_BUILD *
*---------------------------------------------------------------------*
* Definir atributos de impressão da lista *
*---------------------------------------------------------------------*
* --> PF_PRINT - Estrutura com atributos da impressão da lista *
*---------------------------------------------------------------------*
FORM z_print_build USING pf_print TYPE slis_print_alv.
*
* PF_PRINT-PRINT = 'X'. " Imprimir no SPOOL
pf_print-no_print_selinfos = 'X'. " Não listar info. sobre seleção
pf_print-no_coverpage = 'X'. " Não listar página de rostp
pf_print-no_print_listinfos = 'X'. " Não listar info. sobre a lista
* PF_PRINT-RESERVE_LINES = 'X'. " Reservar linhas
* PF_PRINT-NO_NEW_PAGE = 'X'. " Sem novas páginas
* PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " Não alterar tamanho da linha
*&---------------------------------------------------------------------*
*& Form Z_LIST_INIT
*&---------------------------------------------------------------------*
* Inicialização da lista
*----------------------------------------------------------------------*
FORM z_list_init.
*
DATA: lv_program TYPE repid.
*
* Atribuir nome do programa
lv_program = sy-repid.
* Inicializar lista
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
i_callback_program = lv_program
i_callback_user_command = 'Z_USER_COMMAND'.
* i_callback_pf_status_set = 'STANDARD'
* it_excluding = wt_extab.
*
ENDFORM. " Z_LIST_INIT
*&---------------------------------------------------------------------*
*& Form Z_LIST_APPEND
*&---------------------------------------------------------------------*
* Criar os blocos de listas
*----------------------------------------------------------------------*
FORM z_list_append.
* Indicar relacionamento
wf_keyinfo-header01 = 'VBELN'.
wf_keyinfo-item01 = 'VBELN'.
* Criar bloco hierárquico
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_HS_APPEND'
EXPORTING
is_layout = wf_layout_ordem
it_fieldcat = wt_fieldcat_ordem
is_keyinfo = wf_keyinfo
i_header_tabname = 'WT_CABECALHO'
i_item_tabname = 'WT_ITEM'
it_events = wt_eventos_ordem
i_text = 'ORDEM'
TABLES
t_outtab_header = wt_cabecalho
t_outtab_item = wt_item.
*&---------------------------------------------------------------------*
*& Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
* Impressão da lista
*----------------------------------------------------------------------*
FORM z_list_display.
*&---------------------------------------------------------------------*
*& Form Z_TOP_OF_LIST_CLI
*&---------------------------------------------------------------------*
* Cabeçalho de cliente
*----------------------------------------------------------------------*
FORM z_top_of_list_cli.
*&---------------------------------------------------------------------*
*& Form Z_TOP_OF_LIST_ORDEM
*&---------------------------------------------------------------------*
* Cabeçalho de lista para bloco de ordem
*----------------------------------------------------------------------*
FORM z_top_of_list_ordem.
*---------------------------------------------------------------------*
* FORM Z_USER_COMMAND *
*---------------------------------------------------------------------*
* Ações do usuário *
*---------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm LIKE sy-ucomm "#EC CALLED
pf_selfield TYPE slis_selfield.
*
CASE pv_ucomm.
WHEN '&IC1'.
* Verificar qual bloco foi acionado
CASE pf_selfield-tabname.
WHEN 'WT_CLIENTE'.
* Exibir CLIENTE
* Informações do registro
READ TABLE wt_cliente INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'KUN' FIELD wt_cliente-kunnr.
SET PARAMETER ID 'BUK' FIELD ''.
SET PARAMETER ID 'VKO' FIELD ''.
SET PARAMETER ID 'VTW' FIELD ''.
SET PARAMETER ID 'SPA' FIELD ''.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'XD03' AND SKIP FIRST SCREEN.
WHEN 'WT_CABECALHO'.
* Exibir ORDEM
* Informações do registro
READ TABLE wt_cabecalho INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'AUN' FIELD wt_cabecalho-vbeln.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
WHEN 'WT_ITEM'.
* Exibir ORDEM
* Informações do registro
READ TABLE wt_item INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'AUN' FIELD wt_item-vbeln.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
*
ENDFORM. " Z_USER_COMMAND
Capítulo 6
*$*$********************************************************************
*$*$ Projeto *
*$*$ *
*$*$ PROGRAMA: POPUP para seleção de valores via ALV *
*$*$ TIPO : Lista ALV *
*$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria *
*$*$ DATA : 14/01/2002 *
*$** OBS. : *
*$** *
*$*$********************************************************************
*$*$ HISTÓRICO DAS MODIFICAÇÕES *
*$*$-------------------------------------------------------------------*
*$*$ DATA | AUTOR | DESCRIÇÃO *
*$*$-------------------------------------------------------------------*
*$** | | *
*$*$********************************************************************
REPORT zfra0023_18 .
* Configurações de campos
DATA: wt_fieldcat TYPE slis_t_fieldcat_alv.
*&---------------------------------------------------------------------*
*& Form Z_OBTER_DADOS
*&---------------------------------------------------------------------*
* Obter informações para lista
*----------------------------------------------------------------------*
FORM z_obter_dados.
*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_INIT *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.
* Limpar tabela
CLEAR pt_fieldcat[].
* Montar estrutura
CLEAR lf_fieldcat.
* Código do cliente
* lf_field-col_pos = 1.
lf_fieldcat-fieldname = 'KUNNR'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
* Descrição do cliente
* lf_afield-col_pos = 2.
lf_fieldcat-fieldname = 'NAME1'.
lf_fieldcat-tabname = 'WT_CLIENTE'.
lf_fieldcat-ref_tabname = 'KNA1'.
APPEND lf_fieldcat TO pt_fieldcat.
*&---------------------------------------------------------------------*
*& Form Z_POPUP
*&---------------------------------------------------------------------*
* Acionar caixa de diálogo (POPUP)
*----------------------------------------------------------------------*
FORM z_popup.
* Função POPUP
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
i_title = 'POPUP - ALV'
* I_SELECTION = 'X'
i_zebra = 'X'
i_screen_start_column = 5
i_screen_start_line = 5
i_screen_end_column = 55
i_screen_end_line = 15
i_checkbox_fieldname = 'BOX'
* I_LINEMARK_FIELDNAME =
* I_SCROLL_TO_SEL_LINE = 'X'
i_tabname = 'WT_CLIENTE'
* I_STRUCTURE_NAME =
it_fieldcat = wt_fieldcat
* IT_EXCLUDING =
i_callback_program = wv_repid
* I_CALLBACK_USER_COMMAND =
* IS_PRIVATE =
IMPORTING
es_selfield = wf_sel
* E_EXIT =
TABLES
t_outtab = wt_cliente
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*&---------------------------------------------------------------------*
*& Form Z_DISPLAY_LIST
*&---------------------------------------------------------------------*
* Exibir registros selecionados
*----------------------------------------------------------------------*
FORM z_display_list.
LOOP AT wt_cliente.
* Verificar se o registro foi selecionado
CHECK NOT wt_cliente-box IS INITIAL.
* Listar registro
WRITE: / 'CLIENTE:', wt_cliente-kunnr,
'-', wt_cliente-name1.
ENDLOOP.
Capítulo 7
*$*$********************************************************************
*$*$ *
*$*$ PROGRAMA: Lista ALV GRID *
*$*$ TIPO : Lista ALV *
*$*$ AUTOR : Flavio R. Almeida (FRA) - FRA Consultoria *
*$*$ DATA : 18/01/2002 *
*$** OBS. : *
*$** *
*$*$********************************************************************
*$*$ HISTÓRICO DAS MODIFICAÇÕES *
*$*$-------------------------------------------------------------------*
*$*$ DATA | AUTOR | DESCRIÇÃO *
*$*$-------------------------------------------------------------------*
*$** | | *
*$*$********************************************************************
REPORT zfra0023_19.
* Tab. de eventos
DATA: wt_events TYPE slis_t_event.
* Variante
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02.
PARAMETERS: p_vari LIKE disvariant-variant.
SELECTION-SCREEN END OF BLOCK b2.
END-OF-SELECTION.
* Parâmetros de impressão
PERFORM z_print_build USING wf_print.
* Layout da lista - Referente as definições
PERFORM z_layout_build USING wf_layout.
* Construção da lista propriamente dita ( Exibição das informações )
PERFORM z_list_display.
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.
*&---------------------------------------------------------------------*
*& Form Z_LIST_DISPLAY
*&---------------------------------------------------------------------*
* Lista informações na tela
*----------------------------------------------------------------------*
FORM z_list_display.
PERFORM z_sapgui_progress_indicator
USING 'Estruturando a lista. Aguarde...'.
*&---------------------------------------------------------------------*
*& Form Z_SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* Interagir com o front-end - Enviar mensagens
*----------------------------------------------------------------------*
* --> PV_TEXT - Mensagem
*----------------------------------------------------------------------*
FORM z_sapgui_progress_indicator USING value(pv_text).
*---------------------------------------------------------------------*
* FORM Z_FIELDCAT_INIT *
*---------------------------------------------------------------------*
* Inicializar estrutura das informações da lista *
*---------------------------------------------------------------------*
* --> PT_FIELDCAT - Tab. com estrutura de linha *
*---------------------------------------------------------------------*
FORM z_fieldcat_init USING pt_fieldcat TYPE slis_t_fieldcat_alv.
* Estruturas
DATA: lf_fieldcat TYPE slis_fieldcat_alv.
* Limpar tabela
CLEAR pt_fieldcat[].
* Cód. doc. venda
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VBELN'. " Nome do Campo
lf_fieldcat-ref_tabname = 'VBAK'." Tab. de Referência
lf_fieldcat-sp_group = 'A'. " Grupo de Ordem Vendas
lf_fieldcat-hotspot = 'X'. " Indicador de ativo
APPEND lf_fieldcat TO pt_fieldcat. " Gravar na tab. config.
* Data de Criação
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERDAT'.
lf_fieldcat-ref_tabname = 'VBAK'.
lf_fieldcat-sp_group = 'A'. " Grupo de Ordem Vendas
APPEND lf_fieldcat TO pt_fieldcat.
* Criado por
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'ERNAM'.
lf_fieldcat-ref_tabname = 'VBAK'.
lf_fieldcat-sp_group = 'A'. " Grupo de Ordem Vendas
APPEND lf_fieldcat TO pt_fieldcat.
* Tipo de Ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'AUART'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Valor líq. da ordem
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'NETWR'.
lf_fieldcat-ref_tabname = 'VBAK'.
lf_fieldcat-sp_group = 'V'. " Grupo de Valores
APPEND lf_fieldcat TO pt_fieldcat.
* Organização de vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKORG'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Canal de distribuição
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VTWEG'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Setor de atividade
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'SPART'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Grupo de Vendedores
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKGRP'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
* Escritório de Vendas
CLEAR lf_fieldcat.
lf_fieldcat-fieldname = 'VKBUR'.
lf_fieldcat-ref_tabname = 'VBAK'.
APPEND lf_fieldcat TO pt_fieldcat.
*&---------------------------------------------------------------------*
*& Form Z_ORDENAR_LISTA
*&---------------------------------------------------------------------*
* Ordenação da lista
*----------------------------------------------------------------------*
* --> PT_SORT[] - Tabela com informações de ordenação dos campos
*----------------------------------------------------------------------*
FORM z_ordenar_lista USING pt_sort TYPE slis_t_sortinfo_alv.
* Estrutura para gravar na lista
DATA: lf_sort TYPE slis_sortinfo_alv.
CLEAR lf_sort.
* Montar estrutura
lf_sort-spos = 1. " Sequência de ordenação
lf_sort-fieldname = 'ERNAM'. " Nome do campo
lf_sort-tabname = 'WT_SAIDA'. " Nome da tabela de lista
lf_sort-up = 'X'. " Ordenação Crescente
*---------------------------------------------------------------------*
* FORM Z_SP_GROUP_BUILD *
*---------------------------------------------------------------------*
* Definir tipos de grupos de campos *
*---------------------------------------------------------------------*
* --> PT_SP_GROUP - Estrutura do grupo de campos *
*---------------------------------------------------------------------*
FORM z_sp_group_build USING pt_sp_group TYPE slis_t_sp_group_alv.
* Variáveis
DATA: lf_sp_group TYPE slis_sp_group_alv.
* Atribuir valores
* Ordem de Venda
CLEAR lf_sp_group.
lf_sp_group-sp_group = 'A'.
lf_sp_group-text = 'Ordem de Venda'(g01).
APPEND lf_sp_group TO pt_sp_group.
* Status da Ordem de Venda
CLEAR lf_sp_group.
lf_sp_group-sp_group = 'V'.
lf_sp_group-text = 'Valores'(g02).
APPEND lf_sp_group TO pt_sp_group.
*&---------------------------------------------------------------------*
*& Form Z_F4_FOR_VARIANT
*&---------------------------------------------------------------------*
* Processo de ajuda pra variante
*----------------------------------------------------------------------*
FORM z_f4_for_variant.
* Variável local
DATA: lv_exit.
* Encontrar variante
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = wf_variant
i_save = 'A'
* it_default_fieldcat =
IMPORTING
e_exit = lv_exit
es_variant = wf_x_variant
EXCEPTIONS
not_found = 2.
* Verificar processamento da função
IF sy-subrc = 2.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
* Atribuir valor
IF lv_exit = space.
p_vari = wf_x_variant-variant.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form Z_VALIDACAO_VARIANTE
*&---------------------------------------------------------------------*
* Realizar validação da variante de exibição
*----------------------------------------------------------------------*
FORM z_validacao_variante.
* Variante
IF NOT p_vari IS INITIAL.
MOVE: wf_variant TO wf_x_variant,
p_vari TO wf_x_variant-variant.
* Verificar existencia
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
i_save = 'A'
CHANGING
cs_variant = wf_x_variant.
wf_variant = wf_x_variant.
ELSE.
CLEAR: wf_variant.
wf_variant-report = wv_repid.
ENDIF.
*---------------------------------------------------------------------*
* FORM Z_PRINT_BUILD *
*---------------------------------------------------------------------*
* Definir atributos de impressão da lista *
*---------------------------------------------------------------------*
* --> PF_PRINT - Estrutura com atributos da impressão da lista *
*---------------------------------------------------------------------*
FORM z_print_build USING pf_print TYPE slis_print_alv.
*
* PF_PRINT-PRINT = 'X'. " Imprimir no SPOOL
pf_print-no_print_selinfos = 'X'. " Não listar info. sobre seleção
pf_print-no_coverpage = 'X'. " Não listar página de rostp
pf_print-no_print_listinfos = 'X'. " Não listar info. sobre a lista
* PF_PRINT-RESERVE_LINES = 'X'. " Reservar linhas
* PF_PRINT-NO_NEW_PAGE = 'X'. " Sem novas páginas
* PF_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'. " Não alterar tamanho da linha
*&---------------------------------------------------------------------*
*& Form Z_LAYOUT_BUILD
*&---------------------------------------------------------------------*
* Layout de saída
*----------------------------------------------------------------------*
* --> PF_LAYOUT - Estrutura para layout de saída da lista
*----------------------------------------------------------------------*
FORM z_layout_build USING pf_layout TYPE slis_layout_alv.
pf_layout-group_change_edit = 'X'.
* Check box na lista
pf_layout-box_fieldname = 'BOX'.
pf_layout-box_tabname = 'WT_SAIDA'.
*---------------------------------------------------------------------*
* FORM Z_EVENTTAB_BUILD *
*---------------------------------------------------------------------*
* Definir eventos associados a lista *
*---------------------------------------------------------------------*
* --> PT_EVENTS - Eventos associados a lista *
*---------------------------------------------------------------------*
FORM z_eventtab_build USING pt_events TYPE slis_t_event.
* Variáveis
DATA: lf_event TYPE slis_alv_event.
*----------------------------------------------------------------------*
* FORM Z_USER_COMMAND *
*----------------------------------------------------------------------*
* Ações do usuário *
*----------------------------------------------------------------------*
FORM z_user_command USING pv_ucomm LIKE sy-ucomm
pf_selfield TYPE slis_selfield. "#EC CALLED
*
CASE pv_ucomm.
* Ação de Click duplo '&IC1'
WHEN '&IC1'.
* Verificar campo selecionado
CASE pf_selfield-sel_tab_field.
* WHEN 'WT_SAIDA-VBELN'.
WHEN '1-VBELN'.
* Posicionar no registro selecionado
READ TABLE wt_saida INDEX pf_selfield-tabindex.
* Determinar nro da ordem de venda ao parâmetro de memória
SET PARAMETER ID 'AUN' FIELD wt_saida-vbeln.
* Chamar transação de exibição da ordem de venda
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
ENDFORM.
*----------------------------------------------------------------------*
* FORM Z_TOP_OF_PAGE *
*----------------------------------------------------------------------*
* Evento de cabeçalho *
*----------------------------------------------------------------------*
FORM z_top_of_page. "#EC CALLED
ENDFORM.
*----------------------------------------------------------------------*
* FORM Z_END_OF_PAGE *
*----------------------------------------------------------------------*
* Evento para rodapé da lista *
*----------------------------------------------------------------------*
FORM z_end_of_page. "#EC CALLED
ENDFORM.
*----------------------------------------------------------------------*
* FORM Z_TOP_OF_LIST *
*----------------------------------------------------------------------*
* Evento para topo da lista *
*----------------------------------------------------------------------*
FORM z_top_of_list. "#EC CALLED
ENDFORM.
*----------------------------------------------------------------------*
* FORM Z_END_OF_LIST *
*----------------------------------------------------------------------*
* Evento de final de lista *
*----------------------------------------------------------------------*
FORM z_end_of_list. "#EC CALLED
ENDFORM.
*----------------------------------------------------------------------*
* FORM Z_PF_STATUS_SET *
*----------------------------------------------------------------------*
* Especificar barra de status *
*----------------------------------------------------------------------*
FORM z_pf_status_set USING pt_extab TYPE slis_t_extab. "#EC CALLED
* Acionar barra de comandos
* set pf-status 'STANDARD' excluding pt_extab.
ENDFORM.
*----------------------------------------------------------------------*
* FORM Z_CALLER_EXIT *
*----------------------------------------------------------------------*
* Evento *
*----------------------------------------------------------------------*
FORM z_caller_exit USING pf_data. "#EC CALLED
ENDFORM.
*----------------------------------------------------------------------*
* FORM Z_BEFORE_LINE_OUTPUT *
*----------------------------------------------------------------------*
* Evento antes da impressão da linha *
*----------------------------------------------------------------------*
FORM z_before_line_output
USING pf_lineinfo TYPE slis_lineinfo. "#EC CALLED
* break-point.
ENDFORM.
*----------------------------------------------------------------------*
* FORM Z_AFTER_LINE_OUTPUT *
*----------------------------------------------------------------------*
* Evento depois da impressão da linha *
*----------------------------------------------------------------------*
FORM z_after_line_output
USING pf_lineinfo TYPE slis_lineinfo. "#EC CALLED
* break-point.
ENDFORM.
*----------------------------------------------------------------------*
* FORM Z_LIST_MODIFY *
*----------------------------------------------------------------------*
* Evento modifica linha da lista *
*----------------------------------------------------------------------*
FORM z_list_modify USING pv_tabname TYPE slis_tabname
pv_index LIKE sy-tabix
pv_index_slave LIKE sy-tabix
pv_index_sum LIKE sy-tabix. "#EC CALLED
* break-point.
ENDFORM.
*---------------------------------------------------------------------*
* FORM Z_COMMENT_BUILD *
*---------------------------------------------------------------------*
* Montar layout das estruturas de comentários *
*---------------------------------------------------------------------*
* --> PT_TOP_OF_PAGE - Tab. com procedimentos para cabeçalho *
*---------------------------------------------------------------------*
FORM z_comment_build USING pt_top_of_page TYPE slis_t_listheader.
* Variáveis
DATA: lf_line TYPE slis_listheader.
DATA: lv_data_hd(30),
lv_data(10),
lv_hora(08).
*
* Cabeçalho
CLEAR lf_line.
lf_line-key = 'Título:'.
lf_line-typ = 'S'.
lf_line-info = sy-title.
APPEND lf_line TO pt_top_of_page.
* Informações
* Montar data - hora
CLEAR lf_line.
lf_line-typ = 'S'.
lf_line-key = 'Report'.
lf_line-info = sy-repid.
APPEND lf_line TO pt_top_of_page.
** Formatar data - hora
* WRITE sy-datum TO lv_data.
* WRITE sy-uzeit TO lv_hora.
* CONCATENATE lv_data '-' lv_hora INTO lv_data_hd SEPARATED BY space.
** Montar data - hora
* CLEAR lf_line.
* lf_line-typ = 'S'.
* lf_line-key = 'Data - Hora'.
* lf_line-info = lv_data_hd.
* APPEND lf_line TO pt_top_of_page.
* Comentário
CLEAR lf_line.
lf_line-typ = 'A'.
lf_line-info = 'Lista GRID'.
APPEND lf_line TO pt_top_of_page.