Você está na página 1de 13

ABAP Foundations – Aula 2

Vamos criar o terceiro programa, que terá uma tela de seleção, acessará três tabelas e exibirá o resultado
em uma lista standard.

Execute a transação SE38.

Vale lembrar aqui, que NA é o número do aluno.

Clique em criar:
Depois de preencher a tela conforme acima, clique em Gravar.

Na tela a seguir clique em Objeto Local:

A partir deste ponto vamos inserir o código fonte:


Segue código fonte:

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.

Segue o código fonte do INCLUDE.

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

Clique agora na Guia Simbolos de Texto:

Salve e ative.

Execute o programa para visualizar o resultado.


Para o quarto programa, vamos utilizar de JOINs e ALV.

Execute a transação SE38:

Clique em Criar:

Depois clique em Gravar. Na tela seguinte clique em Objeto Local.


*&---------------------------------------------------------------------*
*&  Report  ZAF0004
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

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

Depois clique em Gravar. Ative o programa.

Clique em Ir para  Elementos de Texto  Textos de Seleção:


Ao marcar o campo Refer.Dict., o Programa ABAP vai buscar os textos dos elementos de dados.

Salve e ative.

Ao clicar no nome da companhia aérea, temos os dados dos clientes:

Você também pode gostar