Categorias

Obtenção do Histórico de Acessos ao SAP R/3

Este programa tem o objetivo de gerar um Relatório de Mapeamento de acessos ao SAP R/3

*----------------------------------------------------------------------*
* 
*----------------------------------------------------------------------*
* Objetivo......: Relatório de Mapeamento de acessos                   *
* Descrição.....: Programa que gera relatório                          *
*----------------------------------------------------------------------*
* Feito por.....: Rodolpho Elmir Hewlett Packard Consulting            *
* Início........: 09/02/1999     Fim.....: 00/00/1999                  *
*----------------------------------------------------------------------*

REPORT ZRGM0001
       NO STANDARD PAGE HEADING      " cabeçalho manual
       MESSAGE-ID ZD                 " classe de mensagens usada no pgm
       LINE-SIZE  95                 " tamanho da linha
       LINE-COUNT 69(2).             " qte linhas para quebra de página
*----------------------------------------------------------------------*
TABLES: USR02,                         " dt/hora logon
        USR03,                         " nome usuário
        UST04,                         " módulo usuário
        USR08.                         " transações usuário
*----------------------------------------------------------------------*
*--      Declaração de variáveis e área de trabalho.              -----*
*----------------------------------------------------------------------*
DATA: W-MANDT LIKE  UST04-MANDT,
      FLAG    TYPE  C.

DATA: BEGIN OF TABELA OCCURS 0,
      TTRANSACAO TYPE C,
      TPROFILE(2) TYPE C,
      TBNAME LIKE UST04-BNAME,
      TNAME1 LIKE USR03-NAME1,
      TTRDAT LIKE USR02-TRDAT,
      TLTIME LIKE USR02-LTIME,
      END OF TABELA.

DATA: BEGIN OF TABTRANS OCCURS 0,
      BNAME     LIKE UST04-BNAME,
      TRANSNAME LIKE USR08-TRANSNAME,
      END OF TABTRANS.

*----------------------------------------------------------------------*
*-------     Formatação de tela               -------------------------*
*----------------------------------------------------------------------*
*-------  Salta duas linhas após cabeçalho.          ------------------*
SELECTION-SCREEN SKIP 2.
*-------  Define uma caixa ao redor do parameter.    ------------------*
SELECTION-SCREEN BEGIN OF BLOCK RAD1
  WITH FRAME TITLE TEXT-001.

*-------  Posiciona campos lado a lado.              ------------------*
  SELECTION-SCREEN BEGIN OF LINE.
*-------  Define posicionamento dos campos na tela   ------------------*
   SELECTION-SCREEN POSITION 1.
     PARAMETERS: CLI1 RADIOBUTTON GROUP GCLI.
   SELECTION-SCREEN COMMENT 3(3) TEXT-002.
  SELECTION-SCREEN END OF LINE.

  SELECTION-SCREEN BEGIN OF LINE.
   SELECTION-SCREEN POSITION 1.
     PARAMETERS: CLI2 RADIOBUTTON GROUP GCLI.
   SELECTION-SCREEN COMMENT 3(3) TEXT-003.
  SELECTION-SCREEN END OF LINE.

  SELECTION-SCREEN BEGIN OF LINE.
   SELECTION-SCREEN POSITION 1.
     PARAMETERS: CLI3 RADIOBUTTON GROUP GCLI.
   SELECTION-SCREEN COMMENT 3(3) TEXT-004.
  SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK RAD1.
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK RAD2
  WITH FRAME.
  SELECT-OPTIONS DATA FOR SY-DATUM.
SELECTION-SCREEN END OF BLOCK RAD2.

*----------------------------------------------------------------------*
*--        (top-of-page) para quebrar página          -----------------*
*----------------------------------------------------------------------*
TOP-OF-PAGE.

  WRITE  / SY-ULINE.
  WRITE: / SY-VLINE, 'Dia:'    COLOR COL_KEY,
                      SY-DATUM COLOR COL_KEY,
                     'às:'     COLOR COL_KEY,
                      SY-UZEIT COLOR COL_KEY.

  WRITE: 35 'Empresa XXXXX'  COLOR COL_KEY,
         80 'página: '                           COLOR COL_KEY,
         88  SY-PAGNO                            COLOR COL_KEY,
         95  SY-VLINE.
  ULINE.

  WRITE:  /   SY-VLINE,
          95  SY-VLINE.
  WRITE:  /   SY-VLINE,
          30 'RELATÓRIO DE MAPEAMENTO DE ACESSOS' COLOR COL_KEY,
          65 '( CLIENT: ' COLOR COL_KEY, 75 W-MANDT COLOR COL_KEY,
          78 ')' COLOR COL_KEY,
          95  SY-VLINE.
  WRITE   /   SY-ULINE.

*----------------------------------------------------------------------*
*-- Este cabeçalho é impresso na quebra de página.                   --*
*----------------------------------------------------------------------*
  WRITE: / SY-VLINE,  7 'MÓDULO :'   COLOR COL_KEY,
             TABELA-TPROFILE         COLOR COL_KEY, 95 SY-VLINE.
  WRITE: / SY-ULINE, 95  SY-VLINE.
  WRITE: / SY-VLINE,  7 'Usuário'     COLOR COL_KEY, 52 SY-VLINE,
                     58 'Data Acesso' COLOR COL_KEY, 74 SY-VLINE,
                     79 'Hora Acesso' COLOR COL_KEY, 95 SY-VLINE.
  ULINE.

*---- Antes do end-of-page o pgm processa o start-of-selection --------*
 END-OF-PAGE.
 ULINE.

*----------------------------------------------------------------------*
*--  START-OF-SELECTION  Evento que ocorre ao executar o programa. ----*
*- Identifica onde termina cabeçalho e começa processamento principal -*
*----------------------------------------------------------------------*
START-OF-SELECTION.

IF CLI1 NE ' '.
   W-MANDT = '400'.
ELSEIF CLI2 NE ' '.
   W-MANDT = '420'.
ELSEIF CLI3 NE ' '.
   W-MANDT = '430'.
ENDIF.

*---- Leitura da tabela de Módulos ------------------------------------*
SELECT BNAME PROFILE MANDT  FROM UST04 CLIENT SPECIFIED
       INTO (UST04-BNAME, UST04-PROFILE, UST04-MANDT)
       WHERE MANDT EQ W-MANDT AND
             (       PROFILE  LIKE 'T:SD%' OR
                     PROFILE  LIKE 'T:PP%' OR
                     PROFILE  LIKE 'T:PM%' OR
                     PROFILE  LIKE 'T:MM%' OR
                     PROFILE  LIKE 'T:FI%' OR
                     PROFILE  LIKE 'T:CO%' OR
                     PROFILE  LIKE 'T:HR%' OR
                     PROFILE  LIKE 'T:QM%' OR
                     PROFILE  LIKE 'T:PS%' )
       ORDER BY PROFILE BNAME.

    CLEAR TABELA.
*---- Leitura da tabela de Usuários -----------------------------------*
    SELECT MANDT BNAME TRDAT LTIME FROM USR02  CLIENT SPECIFIED
           INTO (USR02-MANDT, USR02-BNAME, USR02-TRDAT, USR02-LTIME)
           WHERE TRDAT       IN DATA    AND
                 MANDT EQ W-MANDT AND
                       BNAME EQ UST04-BNAME.

*---- Leitura da tabela de Nomes de Usuários --------------------------*
      SELECT BNAME NAME1    FROM USR03 CLIENT SPECIFIED
             INTO (USR03-BNAME, USR03-NAME1)
             WHERE       BNAME EQ USR02-BNAME.
      ENDSELECT.

      IF SY-SUBRC NE 0.
         USR03-NAME1 = '   Não encontrado '.
      ENDIF.

*---- Leitura da tabela de Transações acessadas pelo Usuário.   -------*
      SELECT  MANDT BNAME TRANSNAME   FROM  USR08 CLIENT SPECIFIED
             INTO (USR08-MANDT, USR08-BNAME, USR08-TRANSNAME)
             WHERE       BNAME EQ USR02-BNAME AND
                         USR08-MANDT EQ W-MANDT.
             PERFORM GRAVATRANS.
             TABELA-TTRANSACAO = 'X'.
      ENDSELECT.

*---- Grava Tabela com dados para o relatório -------------------------*
      PERFORM GRAVA.

    ENDSELECT.

    IF SY-SUBRC EQ 0.
      FLAG = '*'.
    ENDIF.

ENDSELECT.

*---- Testa retorno da tabela de Módulos, se tudo ok, classifica ------*
*---- tabela e emite relatório com quebra por módulo  eliminando ------*
*---- duplicata de usuário(bname).                               ------*
IF SY-SUBRC NE 0.
   SKIP 2.
   MESSAGE S005.
ELSE.
   PERFORM IMPRESSAO.
ENDIF.

*------ Imprime relatório. --------------------------------------------*
FORM IMPRESSAO.
    IF FLAG EQ ' '.
      SKIP 2.
      MESSAGE W005.
    ENDIF.

    SORT TABELA BY TTRANSACAO DESCENDING TPROFILE TBNAME ASCENDING .
    LOOP AT TABELA.
      AT NEW TTRANSACAO.
         IF TABELA-TTRANSACAO EQ SPACE.
            ULINE.
            FORMAT COLOR 3.
            WRITE: /01 SY-VLINE ,
                    35 'USUÁRIOS QUE APENAS LOGARAM',
                    95 SY-VLINE .
            FORMAT COLOR OFF.
            ULINE.
            SKIP.
         ENDIF.
      ENDAT.
*-----   Testa quebra de módulo.    -----------------------------------*
      AT NEW TPROFILE.
*----------------------------------------------------------------------*
*--     Este cabeçalho é impresso na quebra de módulo.               --*
*----------------------------------------------------------------------*
*-O teste com sy-linno(conta linhas impressas) é para não permitir a  -*
*-  impressão de um cabeçalho sem usuário no final da página.         -*
*----------------------------------------------------------------------*
         IF SY-LINNO < 62 AND SY-LINNO > 10.
          ULINE.
          WRITE: / SY-VLINE, 95 SY-VLINE.
          WRITE: / SY-VLINE,  7 'MÓDULO :'   COLOR COL_KEY,
                     TABELA-TPROFILE         COLOR COL_KEY, 95 SY-VLINE.
          WRITE: / SY-ULINE. ", 95 sy-vline.
          WRITE: / SY-VLINE,  7 'Usuário'    COLOR COL_KEY, 52 SY-VLINE,
                           58 'Data Acesso'  COLOR COL_KEY, 74 SY-VLINE,
                           79 'Hora Acesso'  COLOR COL_KEY, 95 SY-VLINE.
          ULINE.
*----------------------------------------------------------------------*
**   Se não imprimir o cabeçalho acima, também não pode imprimir o   ***
**      usuário, então pulo a página.                                ***
*----------------------------------------------------------------------*
         ELSEIF SY-LINNO > 61 AND SY-LINNO < 67.
                WRITE: / SY-ULINE.
                NEW-PAGE.
         ENDIF.
      ENDAT.

*-----     Testa quebra de usuário.   ---------------------------------*
      AT NEW TBNAME.
         WRITE: / SY-VLINE,  7 TABELA-TBNAME, 19 SY-VLINE,
               52 SY-VLINE, 95 SY-VLINE.
* -- Se estes campos forem carregados aqui, ficam com sujeira.Porque?--*
*             22 tabela-tname1,
*             54 tabela-ttrdat,
*             66 tabela-tltime.
      ENDAT.

      WRITE: 22 TABELA-TNAME1,
             59 TABELA-TTRDAT, 74 SY-VLINE,
             81 TABELA-TLTIME.

*--------  Testa fim do módulo.      ----------------------------------*
*      at end of tprofile.
*         uline.
*      endat.

*-- Lista transações acessadas pelo usuário. --------------------------*
     SORT TABTRANS.
     LOOP AT TABTRANS WHERE BNAME =  TABELA-TBNAME.
          AT FIRST.
             ULINE.
             WRITE: /1 SY-VLINE, 5 'Transações : ', 19 SY-VLINE,
                                                    95 SY-VLINE.
             WRITE: /1 SY-VLINE, 2 SY-ULINE(17),    19 SY-VLINE,
                                                    95 SY-VLINE.
          ENDAT.

*-Controle para quebra automática de página na impressão de transações-*
           IF SY-LINNO = 67.
              WRITE: / SY-VLINE, 7 TABELA-TBNAME, 19 SY-VLINE,
                                52 SY-VLINE,      95 SY-VLINE.
              WRITE: 22 TABELA-TNAME1, 59 TABELA-TTRDAT, 74 SY-VLINE,
                     81 TABELA-TLTIME.
              ULINE.
              WRITE: /1 SY-VLINE, 3 'Cont transações: ',
                                                    19 SY-VLINE,
                                                    95 SY-VLINE.
              WRITE: /1 SY-VLINE, 2 SY-ULINE(17),   19 SY-VLINE,
                                                    95 SY-VLINE.
          ENDIF.
*----------------------------------------------------------------------*

          WRITE: /1 SY-VLINE, 8 TABTRANS-TRANSNAME, 19 SY-VLINE,
                                                    95 SY-VLINE.
          AT END OF BNAME.
             ULINE.
          ENDAT.
     ENDLOOP.
*----------------------------------------------------------------------*
    ENDLOOP.
    ULINE.
    SY-LINNO = 0.
ENDFORM.
*---------------------------------------------------------------------*
FORM GRAVA.
  TABELA-TPROFILE = UST04-PROFILE+2(2).
  TABELA-TBNAME   = UST04-BNAME.
  TABELA-TNAME1   = USR03-NAME1.
  TABELA-TTRDAT   = USR02-TRDAT.
  TABELA-TLTIME   = USR02-LTIME.
  APPEND TABELA.
ENDFORM.
*---------------------------------------------------------------------*
FORM GRAVATRANS.
  TABTRANS-BNAME     = UST04-BNAME.
  TABTRANS-TRANSNAME = USR08-TRANSNAME.
  APPEND TABTRANS.
ENDFORM.