Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 11

*&---------------------------------------------------------------------*

*& Report  ZLUC_APOSTILA_JOSE1
*&
*&---------------------------------------------------------------------*
*&  AUTOR: LUCAS GUIMARÃES SANTOS
*& CARGO: APRENDIZ ADMINISTRATIVO/ABAP
*  MOTIVO: TESTE
*  ANO: 2017
*&---------------------------------------------------------------------*

REPORT  zluc_apostila_jose1 NO STANDARD PAGE HEADING.

break desenvolv15.

TABLES mara.

INCLUDE <list>.

TYPE-POOLS: vrm,
            gfw,
            slis.

TYPES: BEGIN OF ty_saida.
*  =======================================================
*  Criei uma estrutura que vai exibir apenas os campos que declarei,
*  independente de quantos campos coloquei no select
*  =======================================================
        INCLUDE STRUCTURE zsaida.
TYPES: END OF ty_saida.

TYPES: BEGIN OF ty_mara.
*====================================================================================
* Quando incluimos uma estrutura, podemos selecionar todos os campos dentro da tabela.
*====================================================================================
        INCLUDE STRUCTURE mara.
*       MATNR LIKE MARA-MATNR,
*       ERSDA LIKE MARA-ERSDA,
*       ERNAM LIKE MARA-ERNAM,
*       AENAM LIKE MARA-AENAM,
*       MTART LIKE MARA-MTART,
*       MATKL LIKE MARA-MATKL.
TYPES: END OF ty_mara.

TYPES: BEGIN OF ty_makt.
        INCLUDE STRUCTURE makt.
*       MATNR LIKE MAKT-MATNR,
*       MAKTX LIKE MAKT-MAKTX,
TYPES: END OF ty_makt.

TYPES: BEGIN OF ty_t134t.
        INCLUDE STRUCTURE t134t.
TYPES: END OF ty_t134t.

DATA: t_saida TYPE TABLE OF ty_saida WITH HEADER LINE,
      t_mara   TYPE TABLE OF ty_mara WITH HEADER LINE,
      t_makt   TYPE TABLE OF ty_makt WITH HEADER LINE,
      vl_botao     TYPE c,
      msg(60)      TYPE c VALUE ' !!!!! A T E N Ç Ã O !!!!!'.

DATA: t_linecolor  TYPE slis_specialcol_alv OCCURS 0 WITH HEADER LINE,
      t_listheader TYPE slis_t_listheader,
      t_fieldcat   TYPE slis_t_fieldcat_alv          WITH HEADER LINE,
      t_sort       TYPE slis_sortinfo_alv  OCCURS 0  WITH HEADER LINE.
DATA: v_listheader TYPE slis_listheader,

    v_layout       TYPE slis_layout_alv,
    v_print        TYPE slis_print_alv,
    v_variante     LIKE disvariant.

DATA: v_repid LIKE sy-repid.

START-OF-SELECTION.

  SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-004.
  SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-006.
  SELECT-OPTIONS: s_matnr FOR mara-matnr,
                  s_ersda FOR mara-ersda,
                  s_aenam FOR mara-aenam,
                  s_ernam FOR mara-ernam,
                  s_mtart FOR mara-mtart,
                  s_matkl FOR mara-matkl.
  SELECTION-SCREEN END OF BLOCK b2.

  SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-005.
  PARAMETERS: p_ordmat  RADIOBUTTON GROUP gp1 DEFAULT 'X',
              p_ordalf  RADIOBUTTON GROUP gp1,
              p_ordat   RADIOBUTTON GROUP gp1,
              p_ordnom  RADIOBUTTON GROUP gp1.
  SELECTION-SCREEN END OF BLOCK b3.
*
  SELECTION-SCREEN END OF BLOCK b1.

*
*  SELECTION-SCREEN BEGIN OF BLOCK B5 WITH FRAME TITLE TEXT-004.
*  SELECTION-SCREEN BEGIN OF LINE.
*  PARAMETERS:     P_UNIX  RADIOBUTTON GROUP EST.
*  SELECTION-SCREEN COMMENT 5(5) TEXT-S06 FOR FIELD P_UNIX.
*  PARAMETERS:     P_PC RADIOBUTTON GROUP EST.
*  SELECTION-SCREEN COMMENT 15(10) TEXT-S05 FOR FIELD  P_PC.
*  PARAMETERS:     P_PC1 RADIOBUTTON GROUP EST.
*  SELECTION-SCREEN COMMENT 27(10) TEXT-S07 FOR FIELD  P_PC1.
*
*  SELECTION-SCREEN END OF LINE.
*  SELECTION-SCREEN END OF BLOCK B5.

*quando usamos o inner join no select, excluimos o passo de montar tela, pois o próprio inner j
oin
*ja monta automaticamente

  PERFORM z_select_data.
  IF t_saida[] IS NOT INITIAL.
    PERFORM z_progress_indicator USING ''.
*    PERFORM Z_MOUNT_SCREEN.
    PERFORM z_fill_alv.
    PERFORM z_start_alv.
    PERFORM z_sort_t_saida.

*    PERFORM Z_TOP_OF_PAGE.

    PERFORM z_smartform.
*   PERFORM Z_CALL_ALV.
  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  SELECT_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM z_select_data .
  PERFORM z_progress_indicator USING 'Lendo dados da tabela'.

*  SELECT mara~matnr
*         mara~ersda
*         mara~ernam
*         mara~aenam
*         mara~mtart
*         t134t~mtbez
*         mara~matkl
*         makt~maktx
*    INTO TABLE t_saida                             "TODAS AS INFORMAÇÕES JA ESTÃO SENDO JO
GADAS NA TABELA DE SAIDA
*    FROM mara                                      "SENDO ASSIM NÃO PRECISAMOS MONTAR UMA 
TELA.
*    INNER JOIN makt  ON mara~matnr EQ makt~matnr  "RELACIONANDO OS CAMPOS
*    INNER JOIN t134t ON mara~mtart EQ t134t~mtart  "Inner join é mais lento que o FOR ALL ENT
RIES IN, sendo assim não é bom para tabelas com muitos registros!!!
*    WHERE mara~matnr IN s_matnr
*    AND   mara~ersda IN s_ersda
*    AND   mara~ernam IN s_ernam
*    AND   mara~aenam IN s_aenam
*    AND   mara~mtart IN s_mtart
*    AND   mara~matkl IN s_matkl
*    AND   makt~spras  = sy-langu
*    AND   t134t~spras = sy-langu.
*
  SELECT mara~matnr mara~ersda
         mara~ernam mara~aenam
         mara~mtart mara~matkl
        makt~maktx t134t~mtbez
    INTO TABLE t_saida                             "TODAS AS INFORMAÇÕES JA ESTÃO SENDO JOGADAS 
NA TABELA DE SAIDA
   FROM mara                                      "SENDO ASSIM NÃO PRECISAMOS MONTAR UMA TELA.
    INNER JOIN makt  ON mara~matnr EQ makt~matnr   "RELACIONANDO OS CAMPOS
    INNER JOIN t134t ON mara~mtart EQ t134t~mtart  "Inner join é mais lento que o FOR ALL ENTRIE
S IN, sendo assim não é bom para tabelas com muitos registros!!!
    WHERE mara~matnr IN s_matnr
    AND   mara~ersda IN s_ersda
    AND   mara~ernam IN s_ernam
    AND   mara~aenam IN s_aenam
    AND   mara~mtart IN s_mtart
    AND   mara~matkl IN s_matkl
    AND   makt~spras  = sy-langu
    AND   t134t~spras = sy-langu.

  BREAK-POINT.

*    SELECT *
*    FROM MARA
*    INTO TABLE T_MARA
*    WHERE MATNR IN S_MATNR
*    AND   ERSDA IN S_ERSDA
*    AND   ERNAM IN S_ERNAM
*    AND   AENAM IN S_AENAM
*    AND   MTART IN S_MTART
*    AND   MATKL IN S_MATKL.
*
  IF t_saida[] IS INITIAL. "verifica se a tabela esta vazia

*  select *
*  from makt
*  into table t_makt
*  WHERE matnr = t_mara-matnr.

**    esta é uma função que vai estourar um pop up na tela com uma mensagem, esta mensagem voc
e definirá.
    CALL FUNCTION 'POPUP_FOR_INTERACTION'
      EXPORTING
        headline       = msg                              "mensagem apresentada no topo da janela 
de popup
        text1          = 'Não há registros nesta tabela '
        text2          = 'com os parâmetros requisitados!!!'
        text3          = 'Por favor digite um registro válido'
*       text4          = vg_chama
        ticon          = 'E'  "IWEQC " * ticon = 'Q'       "IWEQC "tipo de mensagem apresentada
        button_1       = 'OK'
*       button_2       = 'VOLTAR SELEÇÃO'
      IMPORTING
        button_pressed = vl_botao.                         "botão da janela
*    vg_mostrou = 'X'.

    STOP.
    LEAVE SCREEN.

  ENDIF.

ENDFORM.                    " SELECT_DATA

*&---------------------------------------------------------------------*
*&      Form  PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PV_TEXT    text
*----------------------------------------------------------------------*
FORM z_progress_indicator USING pv_text.

  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      percentage = 0
      text       = pv_text.

ENDFORM.                    " PROGRESS_INDICATOR

*&---------------------------------------------------------------------*
*&      Form  FILL_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM z_fill_alv .

  PERFORM f_preenche_fieldcat USING:     'MATNR' ' '     'MATERIAL '                               
  'C' '' 'X' 'X',
                                         'ERSDA' ' '     'DATA DE CRIAÇÃO'                         
  'D' '' ' ' ' ',
                                         'ERNAM' ' '     'RESP. QUE ADD'                           
  'C' '' ' ' 'X',
                                         'AENAM' ' '     'RESP.PELA MODIFICAÇÃO'                   
  'C' '' ' ' ' ',
                                         'MTART' ' '     'TIPO DO MATERIAL'                        
  'C' '' ' ' ' ',
                                         'MTBEZ' ' '     'DENOMINAÇÃO DO TIPO DE MATERIAL'         
  'C' '' ' ' ' ',
                                         'MATKL' ' '     'GRUPO DE MERCADORIA'                     
  'C' '' ' ' ' ',
                                         'MAKTX' ' '     'DESCRIÇÃO DE MATERIAL'                   
  'C' '' ' ' ' '.

ENDFORM.                    " FILL_ALV
*&---------------------------------------------------------------------*
*&      Form  F_PREENCHE_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0259   text
*      -->P_0260   text
*      -->P_0261   text
*      -->P_0262   text
*      -->P_0263   text
*      -->P_0264   text
*      -->P_0265   text
*----------------------------------------------------------------------*
FORM f_preenche_fieldcat  USING
                                p_field
                                p_dict
                                p_text
                                p_type
                                p_output
                                p_key
                                p_hotspot.

  CLEAR t_fieldcat.

  t_fieldcat-fieldname     = p_field.
  t_fieldcat-tabname       = 'T_SAIDA'. "nome da minha tabela
  IF p_dict IS INITIAL.
    t_fieldcat-reptext_ddic  = p_text.
    t_fieldcat-inttype       = p_type.
    t_fieldcat-outputlen     = p_output.
  ELSE.
    t_fieldcat-rollname      = p_dict.
  ENDIF.
  t_fieldcat-key(1)        = p_key.

  IF p_hotspot = 'X'.                     "Marque apenas os campo com 'X'
    t_fieldcat-hotspot       = 'X'.

  ENDIF.
  APPEND t_fieldcat.

ENDFORM.                    " F_PREENCHE_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  START_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM z_start_alv .

  v_repid = sy-repid.

  CLEAR v_variante.

  v_variante-report = v_repid.

  CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
    EXPORTING
      i_save     = 'A'
    CHANGING
      cs_variant = v_variante
    EXCEPTIONS
      not_found  = 2.
  IF sy-subrc = 0.

  ENDIF.

ENDFORM.                    " START_ALV

*&---------------------------------------------------------------------*
*&      Form  Z_SORT_T_SAIDA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM z_sort_t_saida .

  IF p_ordmat = 'X'.
    SORT t_saida BY matnr.
  ENDIF.

  IF p_ordalf = 'X'.
    SORT t_saida BY maktx.
  ENDIF.

  IF p_ordat = 'X'.
    SORT t_saida BY ersda.
  ENDIF.

  IF p_ordnom = 'X'.
    SORT t_saida BY ernam.
  ENDIF.

ENDFORM.                    " Z_SORT_T_SAIDA
*&---------------------------------------------------------------------*
*&      Form  MOUNT_SCREEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
*FORM Z_MOUNT_SCREEN .
*BREAK desenvolv15.
*  REFRESH T_SAIDA.
*  CLEAR T_SAIDA.
*
*
**  SORT  T_MARA BY MATNR ERSDA ERNAM AENAM MTART MATKL.
*  SORT  T_MAKT BY MATNR MAKTX.
*
*  LOOP AT T_saida.
*
**    READ TABLE T_MAKT WITH KEY MATNR = T_MARA-MATNR
**    BINARY SEARCH.
*
*
*    MOVE-CORRESPONDING T_MARA TO T_SAIDA.
*    MOVE-CORRESPONDING T_MAKT TO T_SAIDA.
**    MOVE: T_MARA-MATNR TO T_SAIDA-MATNR,
**          T_MARA-ERSDA TO T_SAIDA-ERSDA,
**          T_MARA-ERNAM TO T_SAIDA-ERNAM,
**          T_MARA-AENAM TO T_SAIDA-AENAM,
**          T_MARA-MTART TO T_SAIDA-MTART,
**          T_MARA-MATKL TO T_SAIDA-MATKL,
**          T_MAKT-MAKTX TO T_SAIDA-MAKTX.
*
*    APPEND T_SAIDA.
*
*  ENDLOOP.
*ENDFORM.                    " MOUNT_SCREEN

*&---------------------------------------------------------------------*
*&      Form  CALL_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM z_call_alv .

  v_layout-zebra             = 'X'.   "Layout Zebra
  v_layout-expand_all        = 'X'.   "Abrir subitens
  v_layout-colwidth_optimize = 'X'.   "Largura melhor possível
*  V_LAYOUT-BOX_FIELDNAME    = 'SEL'.  "Coluna Selecionável
*  V_LAYOUT-EDIT              = ' '.   "Permitir a edição

*  v_print-no_print_listinfos = 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = v_repid
      i_grid_title             = 'ALV QUE O JOSÉ MANDOU FAZER COM A MARA' "Título do ALV
      i_background_id          = 'ALV_BACKGROUND'                         "background do Header L
ine
      i_callback_top_of_page   = 'Z_TOP_OF_PAGE'
*     I_CALLBACK_PF_STATUS_SET = 'F_STATUS' "CRIAR BOTÕES E OS EVENTOS DOS BOTÕES
      i_callback_user_command  = 'ZF_USER_COMMAND'
      it_fieldcat              = t_fieldcat[]
      is_layout                = v_layout
      it_sort                  = t_sort[]
*     I_DEFAULT                = 'X'
*     I_SAVE                   = 'A'
*     IS_VARIANT               = V_VARIANTE
*     is_print                 = v_print
    TABLES
      t_outtab                 = t_saida
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.

ENDFORM.                    " CALL_ALV
*&---------------------------------------------------------------------*
*&      Form  TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM z_top_of_page .

  DATA: l_datum(17)   TYPE c.
  DATA: l_uzeit(17)   TYPE c.
  DATA: l_uname(20)   TYPE c.

  CLEAR t_listheader[].
  CLEAR v_listheader.

  v_listheader-typ  = 'H'.
  v_listheader-info = text-013.

  APPEND v_listheader TO t_listheader.

  CONCATENATE 'Data' ':' sy-datum+6(2) '.' sy-datum+4(2) '.' sy-datum(4)
  INTO l_datum.

  v_listheader-typ  = 'S '.
  v_listheader-info = l_datum.

  APPEND v_listheader TO t_listheader.

  CONCATENATE 'horário' ': ' sy-uzeit(2) ':' sy-uzeit+2(2) ':' sy-uzeit+4(2)
  INTO l_uzeit.

  v_listheader-typ  = 'S'.
  v_listheader-info = l_uzeit.

  APPEND v_listheader TO t_listheader.

  CONCATENATE 'Usuário: ' sy-uname INTO l_uname SEPARATED BY  space.

  v_listheader-typ = 'S'.
  v_listheader-info = l_uname.

  APPEND v_listheader TO t_listheader.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      i_logo             = 'MARISA_LOGO'
      it_list_commentary = t_listheader.

ENDFORM.                    " TOP_OF_PAGE

*PF_STATUS 'F_STATUS'.

*&---------------------------------------------------------------------*
*&      Form  Z_HOTSPOT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
*ESTE PERFORME JÁ ESTA DECLARADO DENTRO DA MINHA FUNÇÃO QUE EXIBE O ALV
"l_ucomm
*                              |
*                              v
FORM zf_user_command USING p_evento_tela TYPE sy-ucomm
                           p_selfield    TYPE slis_selfield. " SY-UCOMM É O EVENTO QUE O USUÁRIO 
FEZ NA TELA

  IF sy-subrc = 0.

  ENDIF.

  CASE p_evento_tela.
    WHEN '&IC1'.                                         "comando stander para hotspot
      CASE p_selfield-sel_tab_field.                     "compo que esta sendo selecionado
          CHECK p_selfield-value IS NOT INITIAL.         "Checar se o campo tem valor
        WHEN 'T_SAIDA-MATNR'.
          SET PARAMETER ID 'MAT' FIELD p_selfield-value. "colocando ação no campo
*          LEAVE TO TRANSACTION 'MM03'.
          CALL TRANSACTION 'MM43'.
        WHEN 'T_SAIDA-ERNAM'.
          SET PARAMETER ID 'XUS' FIELD p_selfield-value.
          LEAVE TO TRANSACTION 'SU01'.
      ENDCASE.
    WHEN 'E'.
      LEAVE TO SCREEN 0.
  ENDCASE.

ENDFORM.                    " Z_HOTSPOT
*&---------------------------------------------------------------------*
*&      Form  Z_SMARTFORM
*&---------------------------------------------------------------------*
FORM z_smartform .
  TABLES: ssfcrespd.

  DATA: fm_name TYPE rs38l_fnam.

*--- Busca o número do smartform referente ao nome
*--- Esse número muda cada vez que a request é transportada

  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = 'Z_SF01_FORM'
    IMPORTING
      fm_name            = fm_name
    EXCEPTIONS
      no_form            = 1
      no_function_module = 2
      OTHERS             = 3.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  DATA: t_user LIKE usr02 OCCURS 0 WITH HEADER LINE,
       e_control_parameters TYPE ssfctrlop,
       e_output_options     TYPE ssfcompop.

*
*BREAK-POINT.
*--- As variáveis p/ IMPORTING, EXPORTING e TABLES são definidas no
*--- formulário (algumas já existem e podem ser usadas)
  CALL FUNCTION fm_name
    TABLES
      t_saida          = t_saida
    EXCEPTIONS
      formatting_error = 1
      internal_error   = 2
      send_error       = 3
      user_canceled    = 4
      OTHERS           = 5.

  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.                    " Z_SMARTFORM

You might also like