Vous êtes sur la page 1sur 10

*======================================================================*

* Open Mind IT *
* Programa : Z_TESTE_BRUNO_EX01 *
* Funo : Exibio de Relatrio de Vos com Horrios - ALV Simples *
* Analista : <Fulano de Tal> *
* Autor : Bruno Santos *
* Data : 26.05.2014 *
*======================================================================*
* Log de Modificaes: *
*======================================================================*
* Data |Descrio |Autor *
* | | *
*======================================================================*
REPORT z_teste_bruno_ex02.

*======================================================================*
* CONSTANTES
*======================================================================*
TABLES: sflight, spfli.

TYPE-POOLS: slis, kkblo. "Tipos para uso em ALV


*======================================================================*
* CONSTANTES
*======================================================================*
CONSTANTS: c_x TYPE c VALUE 'X'.

*======================================================================*
* VARIANTES GLOBAIS
*======================================================================*
DATA: vg_campo(50) TYPE c.
*======================================================================*
* ESTRUTURAS
*======================================================================*
TYPES:
"Estrutura de Vo
BEGIN OF y_sflight,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
END OF y_sflight,

"Estrutura de Horrio de vos


BEGIN OF y_spfli,
carrid TYPE spfli-carrid,
connid TYPE spfli-connid,
cityfrom TYPE spfli-cityfrom,
airpfrom TYPE spfli-airpfrom,
cityto TYPE spfli-cityto,
airpto TYPE spfli-airpto,
deptime TYPE spfli-deptime,
arrtime TYPE spfli-arrtime,
END OF y_spfli,

"Estrutura de Horrio de vos


BEGIN OF y_saida,
carrid TYPE spfli-carrid,
connid TYPE spfli-connid,
fldate TYPE sflight-fldate,
cityfrom TYPE spfli-cityfrom,
airpfrom TYPE spfli-airpfrom,
cityto TYPE spfli-cityto,
airpto TYPE spfli-airpto,
deptime TYPE spfli-deptime,
arrtime TYPE spfli-arrtime,
END OF y_saida.

*======================================================================*
* TABELAS INTERNAS
*======================================================================*
DATA: t_sflight TYPE TABLE OF y_sflight,
t_spfli TYPE TABLE OF y_spfli,
t_saida TYPE TABLE OF y_saida,
t_fieldcat TYPE slis_t_fieldcat_alv,
t_sort TYPE slis_t_sortinfo_alv.

*======================================================================*
* WORK AREAS
*======================================================================*
DATA: wa_sflight TYPE y_sflight,
wa_spfli TYPE y_spfli,
wa_saida TYPE y_saida,
wa_fieldcat TYPE slis_fieldcat_alv,
wa_layout TYPE slis_layout_alv,
wa_sort TYPE slis_sortinfo_alv.

*======================================================================*
* TELA DE SELEO
*======================================================================*
* Parmetros de Seleo
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECT-OPTIONS:
"Denominao breve da companhia area
s_carrid FOR sflight-carrid,
"Cdigo da conexo de vo individual
s_connid FOR sflight-connid.

SELECTION-SCREEN END OF BLOCK b1.

*======================================================================*
* INICIALIZAO
*======================================================================*
INITIALIZATION.

*======================================================================*
* INCIO DO PROCESSAMENTO
*======================================================================*
START-OF-SELECTION.

"Seleciona os dados
PERFORM seleciona_dados.

"Monta a tabela de sada


PERFORM monta_saida.

"Exibe o relatrio de Vos


PERFORM exibe_relatorio_voo.
*======================================================================*
* FORMS
*======================================================================*
*&---------------------------------------------------------------------*
*& Form SELECIONA_DADOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM seleciona_dados .

"Seleciona os Vos
SELECT carrid connid fldate
FROM sflight
INTO TABLE t_sflight
WHERE carrid IN s_carrid
AND connid IN s_connid.

IF sy-subrc = 0.

"Seleciona os Vos
SELECT carrid connid cityfrom airpfrom cityto
airpto deptime arrtime
FROM spfli
INTO TABLE t_spfli
FOR ALL ENTRIES IN t_sflight
WHERE carrid EQ t_sflight-carrid
AND connid EQ t_sflight-connid.

ENDIF.

ENDFORM. " SELECIONA_DADOS


*&---------------------------------------------------------------------*
*& Form MONTA_SAIDA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM monta_saida .

"Ordena as tabelas internas


SORT: t_sflight BY carrid connid,
t_spfli BY carrid connid.

"Monta a tabela de sada


LOOP AT t_sflight INTO wa_sflight.

"L os horrios dos vos


READ TABLE t_spfli INTO wa_spfli WITH KEY carrid = wa_sflight-carrid
connid = wa_sflight-connid
BINARY SEARCH.
"Se encontrou...
IF sy-subrc = 0.
wa_saida-carrid = wa_sflight-carrid.

wa_saida-connid = wa_sflight-connid.

wa_saida-fldate = wa_sflight-fldate.

wa_saida-cityfrom = wa_spfli-cityfrom.

wa_saida-airpfrom = wa_spfli-airpfrom.

wa_saida-cityto = wa_spfli-cityto.

wa_saida-airpto = wa_spfli-airpto.

wa_saida-deptime = wa_spfli-deptime.

wa_saida-arrtime = wa_spfli-arrtime.

APPEND wa_saida TO t_saida.

ENDIF.

ENDLOOP.

ENDFORM. " MONTA_SAIDA


*&---------------------------------------------------------------------*
*& Form EXIBE_RELATORIO_VOO
*&---------------------------------------------------------------------*
* CORES DE CAMPOS
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM exibe_relatorio_voo .

"Verifica se a tabela de sada contm dados


IF t_saida[] IS NOT INITIAL.

"Monta o Layout do ALV


PERFORM monta_fieldcat.

"Exibe o ALV
PERFORM exibe_alv.

ELSE.
"Mensagem de Aviso
MESSAGE 'No foram encontradas informaes de vos.' TYPE 'I'.

ENDIF.

ENDFORM. " EXIBE_RELATORIO_VOO


*&---------------------------------------------------------------------*
*& Form MONTA_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM monta_fieldcat .

* 1 COLUNA - Cia Area:


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'CARRID'. " Campo Tabela Interna
wa_fieldcat-tabname = 'T_SAIDA'. " Tabela Interna
* wa_fieldcat-ref_tabname = 'MATNR'. " Campo Tabela Standard
* wa_fieldcat-ref_fieldname = 'MARA'. " Tabela Standard
wa_fieldcat-reptext_ddic = 'Cia Area'. "Ttulo da Coluna
wa_fieldcat-hotspot = 'X'. " Define Hotspot (sublinhado)
wa_fieldcat-just = 'C'. " (R)ight (L)eft (C)ent (Alinhamento)
wa_fieldcat-outputlen = 9. " Largura da Coluna

APPEND wa_fieldcat TO t_fieldcat.

* 2 COLUNA - Cod Vo:


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'CONNID'. " Campo Tabela Interna
wa_fieldcat-tabname = 'T_SAIDA'. " Tabela Interna
* wa_fieldcat-ref_tabname = 'MATNR'. " Campo Tabela Standard
* wa_fieldcat-ref_fieldname = 'MARA'. " Tabela Standard
wa_fieldcat-reptext_ddic = 'Cod Vo'. "Ttulo da Coluna
wa_fieldcat-hotspot = 'X'. " Define Hotspot
wa_fieldcat-just = 'C'. " (R)ight (L)eft (C)ent
wa_fieldcat-outputlen = 8. " Largura da Coluna

APPEND wa_fieldcat TO t_fieldcat.

* 3 coluna - Dt Vo:
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'FLDATE'. " Campo Tabela Interna
wa_fieldcat-tabname = 'T_SAIDA'. " Tabela Interna
* wa_fieldcat-ref_tabname = 'MATNR'. " Campo Tabela Standard
* wa_fieldcat-ref_fieldname = 'MARA'. " Tabela Standard
wa_fieldcat-reptext_ddic = 'Dt Vo'. "Ttulo da Coluna
* wa_fieldcat-hotspot = 'X'. " Define Hotspot
wa_fieldcat-just = 'C'. " (R)ight (L)eft (C)ent
wa_fieldcat-outputlen = 10. " Largura da Coluna

APPEND wa_fieldcat TO t_fieldcat.

* 4 COLUNA - Cid Partida:


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'CITYFROM'. " Campo Tabela Interna
wa_fieldcat-tabname = 'T_SAIDA'. " Tabela Interna
* wa_fieldcat-ref_tabname = 'MATNR'. " Campo Tabela Standard
* wa_fieldcat-ref_fieldname = 'MARA'. " Tabela Standard
wa_fieldcat-reptext_ddic = 'Cid Partida'. "Ttulo da Coluna
* wa_fieldcat-hotspot = 'X'. " Define Hotspot
wa_fieldcat-just = 'C'. " (R)ight (L)eft (C)ent
wa_fieldcat-outputlen = 12. " Largura da Coluna

APPEND wa_fieldcat TO t_fieldcat.

* 5 COLUNA - Aer Partida:


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'AIRPFROM'. " Campo Tabela Interna
wa_fieldcat-tabname = 'T_SAIDA'. " Tabela Interna
* wa_fieldcat-ref_tabname = 'MATNR'. " Campo Tabela Standard
* wa_fieldcat-ref_fieldname = 'MARA'. " Tabela Standard
wa_fieldcat-reptext_ddic = 'Aer Partida'. "Ttulo da Coluna
* wa_fieldcat-hotspot = 'X'. " Define Hotspot
wa_fieldcat-just = 'C'. " (R)ight (L)eft (C)ent
wa_fieldcat-outputlen = 12. " Largura da Coluna

APPEND wa_fieldcat TO t_fieldcat.

* 6 COLUNA - Cid Chegada:


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'CITYTO'. " Campo Tabela Interna
wa_fieldcat-tabname = 'T_SAIDA'. " Tabela Interna
* wa_fieldcat-ref_tabname = 'MATNR'. " Campo Tabela Standard
* wa_fieldcat-ref_fieldname = 'MARA'. " Tabela Standard
wa_fieldcat-reptext_ddic = 'Cid Chegada'. "Ttulo da Coluna
* wa_fieldcat-hotspot = 'X'. " Define Hotspot
wa_fieldcat-just = 'C'. " (R)ight (L)eft (C)ent
wa_fieldcat-outputlen = 12. " Largura da Coluna

APPEND wa_fieldcat TO t_fieldcat.

* 7 COLUNA - Aer Destino:


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'AIRPTO'. " Campo Tabela Interna
wa_fieldcat-tabname = 'T_SAIDA'. " Tabela Interna
* wa_fieldcat-ref_tabname = 'MATNR'. " Campo Tabela Standard
* wa_fieldcat-ref_fieldname = 'MARA'. " Tabela Standard
wa_fieldcat-reptext_ddic = 'Aer Destino'. "Ttulo da Coluna
* wa_fieldcat-hotspot = 'X'. " Define Hotspot
wa_fieldcat-just = 'C'. " (R)ight (L)eft (C)ent
wa_fieldcat-outputlen = 12. " Largura da Coluna

APPEND wa_fieldcat TO t_fieldcat.

* 8 COLUNA - Hora Partida:


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'DEPTIME'. " Campo Tabela Interna
wa_fieldcat-tabname = 'T_SAIDA'. " Tabela Interna
* wa_fieldcat-ref_tabname = 'MATNR'. " Campo Tabela Standard
* wa_fieldcat-ref_fieldname = 'MARA'. " Tabela Standard
wa_fieldcat-reptext_ddic = 'Hora Partida'. "Ttulo da Coluna
* wa_fieldcat-hotspot = 'X'. " Define Hotspot
wa_fieldcat-just = 'C'. " (R)ight (L)eft (C)ent
wa_fieldcat-outputlen = 13. " Largura da Coluna

APPEND wa_fieldcat TO t_fieldcat.

* 9 COLUNA - Hora Chegada:


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'ARRTIME'. " Campo Tabela Interna
wa_fieldcat-tabname = 'T_SAIDA'. " Tabela Interna
* wa_fieldcat-ref_tabname = 'MATNR'. " Campo Tabela Standard
* wa_fieldcat-ref_fieldname = 'MARA'. " Tabela Standard
wa_fieldcat-reptext_ddic = 'Hora Chegada'. "Ttulo da Coluna
* wa_fieldcat-hotspot = 'X'. " Define Hotspot
wa_fieldcat-just = 'C'. " (R)ight (L)eft (C)ent
wa_fieldcat-outputlen = 13. " Largura da Coluna
APPEND wa_fieldcat TO t_fieldcat.

ENDFORM. " MONTA_FIELDCAT


*&---------------------------------------------------------------------*
*& Form EXIBE_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM exibe_alv .

"Evitar efeito colateral na chamada do ALV


DATA: vl_repid TYPE sy-repid.

"Ordenar os campos do ALV


wa_sort-spos = '01'.
wa_sort-fieldname = 'CARRID' .
wa_sort-tabname = 'T_SAIDA'.
wa_sort-group = 'X'.
wa_sort-up = 'X'.

APPEND wa_sort TO t_sort.

wa_sort-spos = '02'.
wa_sort-fieldname = 'CONNID' .
wa_sort-tabname = 'T_SAIDA'.
wa_sort-group = 'X'.
wa_sort-up = 'X'.

APPEND wa_sort TO t_sort.

wa_sort-spos = '03'.
wa_sort-fieldname = 'FLDATE' .
wa_sort-tabname = 'T_SAIDA'.
wa_sort-group = 'X'.
wa_sort-up = 'X'.

APPEND wa_sort TO t_sort.

"Define layout do relatrio cor sim cor no


wa_layout-zebra = 'X'.

"A - todas as linhas, C - sem linha, B - uma linha


wa_layout-edit_mode = 'A'.

"Define nome do programa chamados do ALV


vl_repid = sy-repid.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'


EXPORTING
i_callback_program = vl_repid " Nome programa
* i_callback_pf_status_set = 'PF_STATUS_SET'
i_callback_top_of_page = 'TOP_OF_PAGE' " Cabealho
i_callback_user_command = 'USER_COMMAND'
it_fieldcat = t_fieldcat[] "Colunas do ALV
it_sort = t_sort[]
i_default = 'X'
i_save = 'A'
is_layout = wa_layout
TABLES
t_outtab = t_saida[]
EXCEPTIONS
program_error = 1
OTHERS = 2.

ENDFORM. " EXIBE_ALV


*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&---------------------------------------------------------------------*
* Formata cabealho de pgina para o relatrio ALV, caso seja impres-
* so usado o cabealho padro do projeto, caso contrrio impres-
* so informao de ttulo e data e hora.
*----------------------------------------------------------------------*
FORM top_of_page.

DATA: vl_repid TYPE sy-repid.

DATA: t_alv_header TYPE slis_t_listheader,


wa_alv_header TYPE slis_listheader.

DATA: tot_regtxt(4),
vl_data(10),
vl_hora(08).

"Formatando a data de AAAMMDD para DD/MM/AAAA


vl_data = sy-datum.

CONCATENATE vl_data+6(2)'/'
vl_data+4(2)'/'
vl_data(4)
INTO vl_data.

"Formatando a hora para HH:MM:SS


vl_hora = sy-uzeit.

CONCATENATE vl_hora(2)':'
vl_hora+2(2)':'
vl_hora+4(2)':'
INTO vl_hora.

* Verifica se sada impressora ou visualizao de pr-impresso


IF ( sy-ucomm NE 'PRIN' OR sy-ucomm NE '&RNT_PREV' ).

vl_repid = sy-repid.

"Escreve cabealho
CLEAR: wa_alv_header.
REFRESH: t_alv_header.

"Escreve linha 01
wa_alv_header-typ = 'H'.
wa_alv_header-info = 'Relatrio de Vos'.

APPEND wa_alv_header TO t_alv_header.


"Escreve linha 02
wa_alv_header-typ = 'S'.
wa_alv_header-key = 'Data: '.
wa_alv_header-info = vl_data.

APPEND wa_alv_header TO t_alv_header.

"Escreve linha 03
wa_alv_header-typ = 'S'.
wa_alv_header-key = 'Hora: '.
wa_alv_header-info = vl_hora.

APPEND wa_alv_header TO t_alv_header.

"Escreve linha 05
wa_alv_header-typ = 'S'.
wa_alv_header-key = 'Usurio: '.
wa_alv_header-info = sy-uname.

APPEND wa_alv_header TO t_alv_header.

"Escreve linha no cabealho do ALV


CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
i_logo = 'ENJOYSAP_LOGO'
it_list_commentary = t_alv_header[].

ENDIF.

ENDFORM. " TOP_OF_PAGE_ALV

*======================================================================*
* FORM AT_USER_COMMAND
*======================================================================*
* Trata o que ir ser feito quando o usurio clicar nas colunas
*======================================================================*
FORM user_command USING ucomm LIKE sy-ucomm
selfield TYPE kkblo_selfield.
* Seleciona a coluna clicada
* selfield = selfield. "Selfield contem a coluna selecionada

CASE ucomm.
WHEN '&IC1'.

* L na tabela de sada
READ TABLE t_saida INTO wa_saida INDEX selfield-tabindex.

IF sy-subrc EQ 0.

* Se foi clicado na coluna do VO.


IF selfield-fieldname = 'CARRID' OR
selfield-fieldname = 'CONNID'.

* Passa o valor clicado na coluna como parmetro para a transao que se


* quer chamar.
** Passa o id do vo para a transao de Vos
SET PARAMETER ID 'CAR' FIELD wa_saida-carrid.

SET PARAMETER ID 'CON' FIELD wa_saida-connid.


** Chamo a transao
CALL TRANSACTION 'DEMO_TRANSACTION'. " and skip first screen.
ENDIF.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDFORM. " YS_EXIBE_ALV_HOTSPOT

Vous aimerez peut-être aussi