Você está na página 1de 6

*----------------------------------------------------------------------*

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

Você também pode gostar