Você está na página 1de 12

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

-*
*& Report  ZEXER7
*&
*&--------------------------------------------------------------------
-*
*&Criado por: Lucas Guimarães Santos
*&data:       21   .dezembro .2017
*&--------------------------------------------------------------------
-*

REPORT           zexer7 NO STANDARD PAGE HEADING MESSAGE-ID zsd.

INCLUDE          <icon>.
INCLUDE          <list>.

TYPE-POOLS:       vrm,
                  gfw,
                  slis.

TABLES:           ekko,
                  ekpo,
                  mara.

TYPES: BEGIN OF   y_saida,
       ebeln LIKE ekko-ebeln, "Nº do documento de compras
       bukrs LIKE ekko-bukrs, "Empresa
       bstyp LIKE ekko-bstyp, "Categoria do documento de compras
       bsart LIKE ekko-bsart, "Tipo de documento de compras
       statu LIKE ekko-statu, "Status do documento de compra
       ernam LIKE ekko-ernam, "Nome do responsável que adicionou o ob
jeto
       lifnr LIKE ekko-lifnr, "Nº conta do fornecedor
       spras LIKE ekko-spras, "Código de idioma
       kdate LIKE ekko-kdate, "Fim da validade~

       ebelp LIKE ekpo-ebelp,
       matnr LIKE ekpo-matnr, "Nº do material
       werks LIKE ekpo-werks, "Centro
       matkl LIKE ekpo-matkl, "Grupo de mercadorias
       ktmng LIKE ekpo-ktmng, "Quantidade prevista
       peinh LIKE ekpo-peinh, "Unidade de preço
       ersda LIKE mara-ersda, "Data de criação
       mtart LIKE mara-mtart, "Tipo de material
       END   OF   y_saida.

TYPES: BEGIN OF   y_ekko,     "Cabeçalho do documento de compra
       ebeln LIKE ekko-ebeln, "Nº do documento de compras
       bukrs LIKE ekko-bukrs, "Empresa
       bstyp LIKE ekko-bstyp, "Categoria do documento de compras
       bsart LIKE ekko-bsart, "Tipo de documento de compras
       statu LIKE ekko-statu, "Status do documento de compra
       ernam LIKE ekko-ernam, "Nome do responsável que adicionou o ob
jeto
       lifnr LIKE ekko-lifnr, "Nº conta do fornecedor
       spras LIKE ekko-spras, "Código de idioma
       kdate LIKE ekko-kdate, "Fim da validade
       END   OF   y_ekko,

       BEGIN OF   y_ekpo,
       ebeln LIKE ekpo-ebeln, "Nº do documento de compras
       statu LIKE ekpo-statu, "Status da solicitação de cotação
       matnr LIKE ekpo-matnr, "Nº do material
       bukrs LIKE ekpo-bukrs, "Empresa
       werks LIKE ekpo-werks, "Centro
       matkl LIKE ekpo-matkl, "Grupo de mercadorias
       ktmng LIKE ekpo-ktmng, "Quantidade prevista
       peinh LIKE ekpo-peinh, "Unidade de preço
       END   OF   y_ekpo,

       BEGIN OF   y_mara,     "Dados gerais de material
       matnr LIKE mara-matnr, "Nº do material
       ersda LIKE mara-ersda, "Data de criação
       ernam LIKE mara-ernam, "Nome do responsável que adicionou o ob
jeto
       mtart LIKE mara-mtart, "Tipo de material
       END   OF   y_mara.

*=========================================================
*=========================================================
DATA:  t_saida      TYPE TABLE OF y_saida WITH HEADER LINE,
       wa_saida     TYPE          y_saida,
       t_ekko       TYPE TABLE OF y_ekko WITH HEADER LINE,
       wa_ekko      TYPE          y_ekko,
       t_ekpo       TYPE TABLE OF y_ekpo WITH HEADER LINE,
       wa_ekpo      TYPE          y_ekpo,
       t_mara       TYPE TABLE OF y_mara WITH HEADER LINE,
       wa_mara      TYPE          y_mara.

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   TYPE disvariant.
DATA:  v_repid      LIKE sy-repid.

*=========================================================
*=========================================================
START-OF-SELECTION.

  SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-003.
  SELECT-OPTIONS: s_ebeln FOR ekko-ebeln,
                  s_bukrs FOR ekko-bukrs,
                  s_statu FOR ekko-statu,
                  s_ersda FOR mara-ersda,
                  s_ernam FOR ekko-ernam,
                  s_matnr FOR ekpo-matnr,
                  s_werks FOR ekpo-werks.
  SELECTION-SCREEN END   OF BLOCK b1.

  SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
  PARAMETERS: p_data RADIOBUTTON GROUP g1,
              p_nome RADIOBUTTON GROUP g1,
              p_mate RADIOBUTTON GROUP g1 DEFAULT 'X'.
  SELECTION-SCREEN END OF BLOCK b2.

  SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-001.

  PARAMETERS:" p_down AS CHECKBOX USER-COMMAND uc1,
              p_file TYPE rlgrap-filename MODIF ID dld . "OBLIGATORY.

  SELECTION-SCREEN END   OF BLOCK b3.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

  PERFORM z_pesquisa_de_diretorio CHANGING p_file.

START-OF-SELECTION.

  "IF p_down = 'X' AND p_file IS INITIAL.
  "STOP.

  "ENDIF.
  PERFORM selecionar_dados.
  IF t_saida[] IS NOT INITIAL.
    PERFORM preencher_alv.
    PERFORM ordenar_dados.
    "IF p_down = 'X'.
    " PERFORM download_do_arquivo.
    " ENDIF.
    PERFORM chamar_alv.
  ELSE.
    MESSAGE i012.
  ENDIF.

END-OF-SELECTION.
  PERFORM limpar_variaveis.
*&--------------------------------------------------------------------
-*
*&      Form  SELECIONAR_DADOS
*&--------------------------------------------------------------------
-*
*       text
*---------------------------------------------------------------------
-*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------------
-*
FORM selecionar_dados .
  SELECT  ekko~ebeln ekko~bukrs ekko~bstyp ekko~bsart ekko~statu ekko~
ernam ekko~lifnr ekko~spras
          ekko~kdate
          ekpo~ebelp ekpo~matnr ekpo~werks ekpo~matkl ekpo~ktmng ekpo~
peinh mara~ersda mara~mtart
          INTO TABLE t_saida
          FROM ekko
          INNER JOIN ekpo ON ekko~ebeln EQ ekpo~ebeln
          INNER JOIN mara ON ekpo~matnr EQ mara~matnr
          WHERE ekko~ebeln IN s_ebeln
          AND   ekko~bukrs IN s_bukrs
          AND   ekko~statu IN s_statu
          AND   ekko~ernam IN s_ernam
          AND   ekpo~matnr IN s_matnr
          AND   ekpo~werks IN s_werks
          AND   mara~ersda IN s_ersda
          AND   ekko~spras EQ  sy-langu.

  IF t_saida[] IS INITIAL.
    MESSAGE i001.
  ENDIF.

ENDFORM.                    " SELECIONAR_DADOS
*&--------------------------------------------------------------------
-*
*&      Form  PREENCHER_ALV
*&--------------------------------------------------------------------
-*
*       text
*---------------------------------------------------------------------
-*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------------
-*
FORM preencher_alv .
  PERFORM preenche_fieldcat USING:    'EBELN' ''  'Nº do documento de 
compras '                'C'    '10' '' '' 'C400',
                                      'EBELP' ''  'Item'               
                        'C'    '4' '' '' '',
                                      'BUKRS' ''  'Empresa'            
                        'C'    '4' '' '' '',
                                      'BSTYP' ''  'Categoria do docume
nto de compras'          'C'    '1' '' '' '',
                                      'BSART' ''  'Tipo de documento d
e compras'               'C'    '4' '' '' '',
                                      'STATU' ''  'Status do documento 
de compra'              'C'    '1' '' '' '',
                                      'ERNAM' ''  'Nome do responsável 
que adicionou o objeto' 'C'    '12' '' '' '',
                                      'LIFNR' ''  'Nº conta do fornece
dor'                     'C'    '10' '' '' '',
                                      'SPRAS' ''  'Código de idioma'   
                        'LANG' '1' '' '' '',
                                      'KDATE' ''  'Fim da validade'    
                        'DAT'  '8' '' '' '',
                                      'MATNR' ''  'Nº do material'     
                        '' '' '' 'X' 'C300',
                                      'WERKS' ''  'Centro'             
                        '' '' '' '' '',
                                      'MATKL' ''  'Grupo de mercadoria
s'                       '' '' '' '' '',
                                      'KTMNG' ''  'Quantidade prevista
'                        '' '' '' '' '',
                                      'PEINH' ''  'Unidade de preço'   
                        '' '' '' '' '',
                                      'ERSDA' ''  'Data de criação'    
                        '' '' '' '' '',
                                      'MTART' ''  'Tipo de material'   
                        '' '' '' '' ''.

ENDFORM.                    " PREENCHER_ALV
*&--------------------------------------------------------------------
-*
*&      Form  PREENCHE_FILD
*&--------------------------------------------------------------------
-*
*       text
*---------------------------------------------------------------------
-*
*      -->P_0522   text
*      -->P_0523   text
*      -->P_0524   text
*      -->P_0525   text
*      -->P_0526   text
*      -->P_0527   text
*      -->P_0528   text
*      -->P_0529   text
*---------------------------------------------------------------------
-*
FORM preenche_fieldcat  USING
                               p_field
                               p_dict
                               p_text
                               p_type       " verifica o tipo do camp
o
                               p_output
                               p_key        " verifica se o campo é c
have
                               p_hotspot    " faz de um campo um link
                               p_emphasize. " colocar cor em uma colu
na
  CLEAR t_fieldcat.

  t_fieldcat-fieldname       = p_field.   " Lê os campos
  t_fieldcat-tabname         = 'T_SAIDA'. " Nome da minha tabela
  IF p_dict IS INITIAL.
    t_fieldcat-reptext_ddic  = p_text.    " Lê o nome dos meus campos
    t_fieldcat-inttype       = p_type.    " Lê o tipo do meu campo
    t_fieldcat-outputlen     = p_output.  " Lê o tamanho do meu campo
  ELSE.
    t_fieldcat-rollname      = p_dict.
  ENDIF.
  t_fieldcat-key(1)          = p_key.
  IF p_hotspot = 'X'.                     " Verifica se o campo do me
u fieldcat esta marcado com X
    t_fieldcat-hotspot       = 'X'.
  ENDIF.
  t_fieldcat-emphasize       = p_emphasize.
  APPEND t_fieldcat.

ENDFORM.                    " PREENCHE_FILD

*&--------------------------------------------------------------------
-*
*&      Form  ORDENAR_DADOS
*&--------------------------------------------------------------------
-*
*       text
*---------------------------------------------------------------------
-*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------------
-*
FORM ordenar_dados .

  IF p_data = 'X'.
    SORT t_saida BY ersda.
  ELSEIF p_nome = 'X'.
    SORT t_saida BY ernam.
  ELSEIF p_mate = 'X'.
    SORT t_saida BY matnr.
  ENDIF.

ENDFORM.                    " ORDENAR_DADOS
*&--------------------------------------------------------------------
-*
*&      Form  CHAMAR_ALV
*&--------------------------------------------------------------------
-*
*       text
*---------------------------------------------------------------------
-*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------------
-*
FORM chamar_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'.
  v_variante = 'TESTE'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = sy-repid "sempre colocar sy-repid
      i_grid_title             = 'ALV QUE O JOSÉ MANDOU FAZER COM A MA
RA' "Título do ALV
      i_background_id          = 'ALV_BACKGROUND'                      
   "background do Header Line
      i_callback_top_of_page   = 'Z_TOP_OF_PAGE'
      i_callback_pf_status_set = 'ZF_PF_STATUS' "CRIAR BOTÕES E OS EVE
NTOS 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.

*   SET PF-STATUS 'PF_STATUS1'.
ENDFORM.                    " CHAMAR_ALV

*&--------------------------------------------------------------------
-*
*&      Form  zf_user_command
*&--------------------------------------------------------------------
-*
*       text
*---------------------------------------------------------------------
-*
*      -->P_EVENTO_TELA  text
*      -->P_SELFIELD     text
*---------------------------------------------------------------------
-*
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.

  DATA: vl_text TYPE ug_txtlg.

  CASE p_evento_tela.

    WHEN 'DOWNLOAD'.
      IF p_file IS INITIAL.
        MESSAGE i013.
        CALL FUNCTION 'UR_CF_POPUP_TEXT_INPUT'
          EXPORTING
            i_title   = 'Digite um nome para o arquivo!!'
            i_text    = ' '
          IMPORTING
            e_text    = vl_text
          EXCEPTIONS
            cancelled = 1
            OTHERS    = 2.
        IF sy-subrc <> 0.
          MESSAGE: i014.
          LEAVE TO SCREEN 0.

        ENDIF.

        p_file = vl_text.

      ELSE.
        PERFORM download_do_arquivo.
      ENDIF.

    WHEN '&IC1'.                                         "comando stan
der para hotspot
      CASE p_selfield-sel_tab_field.                     "compo que es
ta 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
          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.                    "zf_user_command

*&--------------------------------------------------------------------
-*
*&      Form  LIMPAR_VARIÁVEIS
*&--------------------------------------------------------------------
-*
*       text
*---------------------------------------------------------------------
-*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------------
-*

*&--------------------------------------------------------------------
-*
*&      Form  DOWNLOAD_DO_ARQUIVO
*&--------------------------------------------------------------------
-*
*       text
*---------------------------------------------------------------------
-*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------------------------
-*
FORM download_do_arquivo .
  DATA: lv_file TYPE string.
        lv_file =    p_file.

  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
*     BIN_FILESIZE                    =
      filename                        = lv_file
      filetype                        = 'ASC'
*     APPEND                          = ' '
      write_field_separator           = ' '
*     HEADER                          = '00'
*     TRUNC_TRAILING_BLANKS           = ' '
*     WRITE_LF                        = 'X'
*     COL_SELECT                      = ' '
*     COL_SELECT_MASK                 = ' '
*     DAT_MODE                        = ' '
*     CONFIRM_OVERWRITE               = ' '
*     NO_AUTH_CHECK                   = ' '
*     CODEPAGE                        = ' '
*     IGNORE_CERR                     = ABAP_TRUE
*     REPLACEMENT                     = '#'
*     WRITE_BOM                       = ' '
*     TRUNC_TRAILING_BLANKS_EOL       = 'X'
*     WK1_N_FORMAT                    = ' '
*     WK1_N_SIZE                      = ' '
*     WK1_T_FORMAT                    = ' '
*     WK1_T_SIZE                      = ' '
*     WRITE_LF_AFTER_LAST_LINE        = ABAP_TRUE
*     SHOW_TRANSFER_STATUS            = ABAP_TRUE
*     VIRUS_SCAN_PROFILE              = '/SCET/GUI_DOWNLOAD'
*   IMPORTING
*     FILELENGTH                      =
    TABLES
      data_tab                        = t_saida
*     FIELDNAMES                      =
   EXCEPTIONS
     file_write_error                = 1
     no_batch                        = 2
     gui_refuse_filetransfer         = 3
     invalid_type                    = 4
     no_authority                    = 5
     unknown_error                   = 6
     header_not_allowed              = 7
     separator_not_allowed           = 8
     filesize_not_allowed            = 9
     header_too_long                 = 10
     dp_error_create                 = 11
     dp_error_send                   = 12
     dp_error_write                  = 13
     unknown_dp_error                = 14
     access_denied                   = 15
     dp_out_of_memory                = 16
     disk_full                       = 17
     dp_timeout                      = 18
     file_not_found                  = 19
     dataprovider_exception          = 20
     control_flush_error             = 21
     OTHERS                          = 22
            .
ENDFORM.                    " DOWNLOAD_DO_ARQUIVO

*&--------------------------------------------------------------------
-*
*&      Form  limpar_variaveis
*&--------------------------------------------------------------------
-*
*       text
*---------------------------------------------------------------------
-*
FORM limpar_variaveis .

  CLEAR:t_saida[],
        wa_saida,
        t_ekko[],
        wa_ekko ,
        t_ekpo[],
        wa_ekpo ,
        t_mara[],
        wa_mara,

        t_linecolor,
        t_listheader,
        t_fieldcat,
        t_sort,
        v_listheader,
        v_layout,
        v_print,
        v_variante,
        v_repid.

ENDFORM.                    " LIMPAR_VARIÁVEIS
*-----------------------------------------------------------*
*&      Form  F_ALV_PF_vencUS
*&--------------------------------------------------------------------
-*
*       text
*---------------------------------------------------------------------
-*
FORM zf_pf_status USING pi_extab TYPE kkblo_t_extab.
*  SET PF-STATUS 'STATUS' EXCLUDING pi_extab.
  SET PF-STATUS 'PF_STATUS'.
ENDFORM.                    "ZF_ALV_PF_vencUS

*&--------------------------------------------------------------------
-*
*&      Form  z_top_of_page
*&--------------------------------------------------------------------
-*
*       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.                    "Z_TOP_OF_PAGE
*&--------------------------------------------------------------------
-*
*&      Form  Z_PESQUISA_DE_DIRETORIO
*&--------------------------------------------------------------------
-*
*       text
*---------------------------------------------------------------------
-*
*      <--P_P_FILE  text
*---------------------------------------------------------------------
-*
FORM z_pesquisa_de_diretorio  CHANGING p_file.

  CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
    CHANGING
      file_name     = p_file
    EXCEPTIONS
      mask_too_long = 1
      other         = 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.                    " Z_PESQUISA_DE_DIRETORIO

Você também pode gostar