Escolar Documentos
Profissional Documentos
Cultura Documentos
2 - Aula - ABAP - Foundations
2 - Aula - ABAP - Foundations
Vamos criar o terceiro programa, que terá uma tela de seleção, acessará três tabelas e exibirá o resultado
em uma lista standard.
Clique em criar:
Depois de preencher a tela conforme acima, clique em Gravar.
REPORT ZAF0003 LINE-COUNT 65
LINE-SIZE 162
NO STANDARD PAGE HEADING.
*** Declaração de tabelas
TABLES: sflight, "Vôo
spfli, "Horário de vôos
scarr. "Companhia aérea
DATA: BEGIN OF wa_flight,
carrid LIKE sflight-carrid,
connid LIKE sflight-connid,
fldate LIKE sflight-fldate,
price LIKE sflight-price,
currency LIKE sflight-currency,
seatsmax LIKE sflight-seatsmax,
seatsocc LIKE sflight-seatsocc,
cityfrom LIKE spfli-cityfrom,
cityto LIKE spfli-cityto,
fltime LIKE spfli-fltime,
carrname LIKE scarr-carrname,
END OF wa_flight.
DATA: v_cor TYPE c. "Usada para relatório ZEBRADO
*** Definir Tela de Seleção
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS: s_carrid FOR sflight-carrid,
s_connid FOR sflight-connid,
s_fldate FOR sflight-fldate.
SELECTION-SCREEN END OF BLOCK B1.
*** Iniciar a seleção dos dados
START-OF-SELECTION.
SELECT carrid
connid
fldate
price
currency
seatsmax
seatsocc
INTO CORRESPONDING FIELDS OF wa_flight
"(wa_flight-carrid,wa_flight-connid)
FROM sflight
WHERE carrid IN s_carrid
AND connid IN s_connid
AND fldate IN s_fldate.
SELECT SINGLE carrname INTO wa_flight-carrname
FROM scarr WHERE carrid EQ wa_flight-carrid.
*** Verificar se comando acima foi executado com sucesso
IF sy-subrc NE 0. "Não encontrou registro
wa_flight-carrname = 'Cia Sem Descrição'.
ENDIF.
SELECT cityfrom
cityto
fltime
INTO CORRESPONDING FIELDS OF wa_flight
FROM spfli
WHERE carrid EQ wa_flight-carrid
AND connid EQ wa_flight-connid.
IF v_cor EQ ' '.
v_cor = 'X'.
ELSE.
v_cor = ' '.
ENDIF.
PERFORM exibe_relatorio USING v_cor.
IF sy-linno EQ 64. "Se número da ultima linha é 64.
ULINE.
NEW-PAGE. "Inicia nova página e muda o valor de SY-LINNO para o valor inicial.
ENDIF.
ENDSELECT.
ENDSELECT.
IF sy-subrc EQ 0. "registro foi encontrado.
IF sy-linno LT 64 . "Se ultima linha for menor que 64, fecha a pagina com ULINE.
ULINE.
ENDIF.
ELSE.
MESSAGE i004(zt3msg00).
ENDIF.
INCLUDE ZAF0003_F01.
TOP-OF-PAGE.
ULINE.
FORMAT COLOR 6. "Cor Vermelha
WRITE: / '| Relatório de Vôos - Aeroporto Internacional Guarulhos',
110 'Data:', sy-datlo, 140 'Página: ', sy-pagno, 162 '|'.
ULINE.
FORMAT COLOR 3. "Cor Amarela
WRITE: / '| Cia | Descrição | Conx | Data Vôo | Preço da Passagem | Moeda | Tot. Ass
en | Assen. Ocu | Cidade de origem | Cidade de destino | Tmp Vôo|'.
ULINE.
*----------------------------------------------------------------------*
***INCLUDE ZAF0003_F01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form exibe_relatorio
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM exibe_relatorio USING l_cor.
IF l_cor EQ 'X'.
FORMAT COLOR 2.
ELSE.
FORMAT COLOR 4.
ENDIF.
WRITE: / '|', wa_flight-carrid,
'|', wa_flight-carrname,
'|', wa_flight-connid,
'|', wa_flight-fldate,
'|', wa_flight-price,
'|', wa_flight-currency,
'|', wa_flight-seatsmax,
'|', wa_flight-seatsocc,
'|', wa_flight-cityfrom,
'|', wa_flight-cityto,
'|', wa_flight-fltime, '|'.
ENDFORM. " exibe_relatorio
Salve e ative.
Clique em Ir para Elementos de Texto Textos de Seleção
Salve e ative.
Clique em Criar:
REPORT zaf0004.
*** Declaração de Tabelas
TABLES: sflight,
spfli,
saplane,
scarr,
sbook.
*** Declaração de tabelas internas.
DATA: BEGIN OF i_flight OCCURS 0,
carrid LIKE sflight-carrid,
connid LIKE sflight-connid,
fldate LIKE sflight-fldate,
price LIKE sflight-price,
currency LIKE sflight-currency,
seatsmax LIKE sflight-seatsmax,
seatsocc LIKE sflight-seatsocc,
cityfrom LIKE spfli-cityfrom,
cityto LIKE spfli-cityto,
fltime LIKE spfli-fltime,
carrname LIKE scarr-carrname,
seatsmax_b LIKE saplane-seatsmax_b, "Capacidade Classe executiva
seatsmax_f LIKE saplane-seatsmax_f, "Capacidade Primeira classe
seatsfree TYPE i, "Assentos livres.
END OF i_flight.
DATA: i_book LIKE sbook OCCURS 0.
*Definições para ALV
TYPE-POOLS: slis.
DATA: repid LIKE sy-repid.
DATA: fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA: fieldcat2 TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA: layout TYPE slis_layout_alv.
DATA: PRINT TYPE slis_print_alv.
DATA: SORT TYPE slis_t_sortinfo_alv WITH HEADER LINE.
DATA: variante LIKE disvariant,
def_variante LIKE disvariant.
DATA: w_tit(70).
*** Definir Tela de Seleção
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS: s_carrid FOR sflight-carrid,
s_connid FOR sflight-connid,
s_fldate FOR sflight-fldate.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t02.
SELECT-OPTIONS: s_cityf FOR spfli-cityfrom,
s_cityt FOR spfli-cityto.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-003.
PARAMETERS: p_varia LIKE disvariant-variant.
SELECTION-SCREEN END OF BLOCK B3.
*** Inicialização
INITIALIZATION.
s_carrid-sign = 'I'.
s_carrid-option = 'EQ'.
s_carrid-low = 'LH'.
APPEND s_carrid.
PERFORM alv_init.
*** Iniciar seleção dos dados
START-OF-SELECTION.
SELECT sflight~carrid
sflight~connid
sflight~fldate
sflight~price
sflight~currency
sflight~seatsmax
sflight~seatsocc
spfli~cityfrom
spfli~cityto
spfli~fltime
scarr~carrname
saplane~seatsmax_b
saplane~seatsmax_f
INTO TABLE i_flight
FROM sflight INNER JOIN spfli
ON spfli~carrid EQ sflight~carrid
AND spfli~connid EQ sflight~connid
INNER JOIN scarr
ON scarr~carrid EQ sflight~carrid
INNER JOIN saplane
ON saplane~planetype EQ sflight~planetype
WHERE sflight~carrid IN s_carrid
AND sflight~connid IN s_connid
AND sflight~fldate IN s_fldate
AND spfli~cityfrom IN s_cityf
AND spfli~cityto IN s_cityt.
LOOP AT i_flight.
i_flight-seatsfree = i_flight-seatsmax - i_flight-seatsocc.
MODIFY i_flight.
ENDLOOP.
*** Inicio da Seleção
PERFORM chama_alv.
*---------------------------------------------------------------------*
* FORM CHAMA_ALV *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM chama_alv.
*----------------------------------------------------------------------*
*
* FIELDCAT-JUST = X_JUST (X)
CLEAR: fieldcat.
* CLEAR: fieldcat, fieldcat[].
REFRESH: fieldcat.
PERFORM monta_fieldcat USING
'CARRID' 'I_FLIGHT' 'SFLIGHT' ' ' ' ' ' '.
PERFORM monta_fieldcat USING
'CARRNAME' 'I_FLIGHT' 'SCARR' ' ' ' ' 'X'.
PERFORM monta_fieldcat USING
'CONNID' 'I_FLIGHT' 'SFLIGHT' ' ' ' ' ' '.
PERFORM monta_fieldcat USING
'FLDATE' 'I_FLIGHT' 'SFLIGHT' ' ' ' ' ' '.
PERFORM monta_fieldcat USING
'SEATSMAX' 'I_FLIGHT' 'SFLIGHT' ' ' ' ' ' '.
PERFORM monta_fieldcat USING
'SEATSOCC' 'I_FLIGHT' 'SFLIGHT' ' ' ' ' ' '.
PERFORM monta_fieldcat USING
'SEATSFREE' 'I_FLIGHT' ' ' 'Ass. Livres' ' ' ' '.
PERFORM monta_fieldcat USING
'CITYFROM' 'I_FLIGHT' 'SPFLI' ' ' ' ' ' '.
PERFORM monta_fieldcat USING
'CITYTO' 'I_FLIGHT' 'SPFLI' ' ' ' ' ' '.
PERFORM monta_fieldcat USING
'FLTIME' 'I_FLIGHT' 'SPFLI' ' ' ' ' ' '.
PERFORM monta_fieldcat USING
'SEATSMAX_B' 'I_FLIGHT' 'SAPLANE' ' ' ' ' ' '.
PERFORM monta_fieldcat USING
'SEATSMAX_F' 'I_FLIGHT' 'SAPLANE' ' ' ' ' ' '.
w_tit = 'Relatório de Vôos e Conexões'.
layout-zebra = 'X'.
PRINT-no_print_listinfos = 'X'.
variante-variant = p_varia.
* CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' "Usado na 4.0
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' "Usado na 4.6 "RWERP2005
EXPORTING
i_callback_program = repid
* I_CALLBACK_PF_STATUS_SET = 'SET_STATUS'
i_callback_user_command = 'COMANDO'
it_fieldcat = fieldcat[]
is_layout = layout
i_grid_title = w_tit
i_default = 'X'
i_save = 'A'
is_variant = variante
is_print = PRINT
TABLES
t_outtab = i_flight
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " CHAMA_ALV
*----------------------------------------------------------------------*
FORM monta_fieldcat USING
x_field x_tab x_ref x_text x_sum x_hotspot.
*----------------------------------------------------------------------*
*
fieldcat-fieldname = x_field.
fieldcat-tabname = x_tab.
fieldcat-ref_tabname = x_ref.
* fieldcat-inttype = x_type.
fieldcat-reptext_ddic = x_text.
fieldcat-do_sum = x_sum.
fieldcat-HOTSPOT = x_hotspot.
APPEND fieldcat.
CLEAR fieldcat.
*
ENDFORM. " MONTA_FIELDCAT
*---------------------------------------------------------------------*
* USER_COMMAND *
*---------------------------------------------------------------------*
FORM comando USING ucomm LIKE sy-ucomm
selfield TYPE slis_selfield.
IF selfield-sel_tab_field EQ 'I_FLIGHT-CARRNAME'.
READ TABLE i_flight INDEX selfield-tabindex.
IF sy-subrc EQ 0.
SELECT * INTO TABLE i_book FROM sbook
WHERE carrid EQ i_flight-carrid
AND connid EQ i_flight-connid
AND fldate EQ i_flight-fldate.
IF sy-subrc EQ 0.
PERFORM chama_alv2.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. "COMANDO
*---------------------------------------------------------------------*
* FORM SET_STATUS *
*---------------------------------------------------------------------*
FORM set_status USING pf_tab TYPE slis_t_extab.
ENDFORM. "SET_STATUS
*----------------------------------------------------------------------*
FORM alv_init.
*----------------------------------------------------------------------*
*
CLEAR: variante.
repid = sy-repid.
variante-REPORT = repid.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = 'A'
CHANGING
cs_variant = variante
EXCEPTIONS
not_found = 2.
IF sy-subrc = 0.
p_varia = variante-variant.
ENDIF.
*
ENDFORM. " ALV_INIT
*---------------------------------------------------------------------*
* FORM CHAMA_ALV *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM chama_alv2.
*----------------------------------------------------------------------*
*
* FIELDCAT-JUST = X_JUST (X)
CLEAR: fieldcat2.
* CLEAR: fieldcat, fieldcat[].
REFRESH: fieldcat2.
PERFORM monta_fieldcat2 USING
'CARRID' 'I_BOOK' 'SBOOK' ' ' ' ' ' '.
PERFORM monta_fieldcat2 USING
'CONNID' 'I_BOOK' 'SBOOK' ' ' ' ' ' '.
PERFORM monta_fieldcat2 USING
'FLDATE' 'I_BOOK' 'SBOOK' ' ' ' ' ' '.
PERFORM monta_fieldcat2 USING
'CUSTOMID' 'I_BOOK' 'SBOOK' ' ' ' ' ' '.
PERFORM monta_fieldcat2 USING
'LUGGWEIGHT' 'I_BOOK' 'SBOOK' ' ' ' ' ' '.
PERFORM monta_fieldcat2 USING
'PASSNAME' 'I_BOOK' 'SBOOK' ' ' ' ' ' '.
w_tit = 'Dados do Passageiro'.
layout-zebra = 'X'.
PRINT-no_print_listinfos = 'X'.
variante-variant = p_varia.
* CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' "Usado na 4.0
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' "Usado na 4.6 "RWERP2005
EXPORTING
i_callback_program = repid
* I_CALLBACK_PF_STATUS_SET = 'SET_STATUS'
* i_callback_user_command = 'COMANDO'
it_fieldcat = fieldcat2[]
is_layout = layout
i_grid_title = w_tit
i_default = 'X'
i_save = 'A'
is_variant = variante
is_print = PRINT
TABLES
t_outtab = i_book
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " CHAMA_ALV
*----------------------------------------------------------------------*
FORM monta_fieldcat2 USING
x_field x_tab x_ref x_text x_sum x_hotspot.
*----------------------------------------------------------------------*
*
fieldcat2-fieldname = x_field.
fieldcat2-tabname = x_tab.
fieldcat2-ref_tabname = x_ref.
* fieldcat2-inttype = x_type.
fieldcat2-reptext_ddic = x_text.
fieldcat2-do_sum = x_sum.
fieldcat2-HOTSPOT = x_hotspot.
APPEND fieldcat2.
CLEAR fieldcat2.
*
ENDFORM. " MONTA_FIELDCAT
Salve e ative.