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.