Lista tiempo CPU por usuario
************************************************************************
** PROGRAMA.....: ZBC001 *
** AUTOR........: GETULIO CRUGEL *
** CRIAÇÃO......: JUNHO/2004 *
** MÓDULO.......: BC - BASIS COMPONENT *
** DESCRIÇÃO....: LISTA TEMPO DE CPU DE USUÁRIOS *
************************************************************************
REPORT zbc001 MESSAGE-ID zbcmsg.
TYPE-POOLS: slis.
TYPE-POOLS: sapwl.
DATA: txt_report LIKE dokhl-object.
TABLES: usr02,
usr03,
tstc.
DATA: BEGIN OF it_usr03 OCCURS 0.
INCLUDE STRUCTURE usr03.
DATA: END OF it_usr03.
DATA: BEGIN OF it_allstat OCCURS 0.
INCLUDE STRUCTURE sapwlpfnrm.
DATA: END OF it_allstat.
DATA: all_stats TYPE sapwl_allstats.
DATA: wa_stats TYPE sapwl_allstats WITH HEADER LINE.
DATA: BEGIN OF ti_alv OCCURS 0,
account LIKE it_allstat-account, "NOME DO USUÁRIO
terminal LIKE it_allstat-terminalid, "TERMINAL
depto LIKE usr03-abtlg, "NUMERO DO DEPARTAMENTO
trans LIKE it_allstat-tcode, "TRANSAÇÃO
report LIKE it_allstat-report, "REPORT
data LIKE it_allstat-date, "DATA
hora LIKE it_allstat-starttime, "HORA INICIAL
tempo(10) TYPE p DECIMALS 4, "TEMPO DE CPU USADO
END OF ti_alv.
DATA: BEGIN OF ti_saida OCCURS 0,
account(12) TYPE c, "NOME DO USUÁRIO
terminal(20) TYPE c, "TERMINAL
depto(05) TYPE c, "NUMERO DO DEPARTAMENTO
trans(20) TYPE c, "TRANSAÇÃO
report(20) TYPE c, "REPORT
data(08) TYPE c, "DATA
tempo(15) TYPE c, "TEMPO DE CPU USADO
END OF ti_saida.
DATA: BEGIN OF ti_user OCCURS 0,
usuario LIKE usr03-bname, "NOME DO USUÁRIO
depto LIKE usr03-abtlg, "NUMERO DO DEPARTAMENTO
END OF ti_user.
TYPES: BEGIN OF st_aux,
account LIKE it_allstat-account, "NOME DO USUÁRIO
terminal LIKE it_allstat-terminalid, "TERMINAL
depto LIKE usr03-abtlg, "NUMERO DO DEPARTAMENTO
trans LIKE it_allstat-tcode, "TRANSAÇÃO
report LIKE it_allstat-report, "REPORT
data LIKE it_allstat-date, "DATA
tempo(10) TYPE p DECIMALS 4, "TEMPO DE CPU USADO
END OF st_aux.
DATA: tp_aux TYPE st_aux.
DATA: collect_suma TYPE HASHED TABLE OF st_aux
WITH UNIQUE KEY account terminal depto trans report
DATA WITH HEADER LINE.
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv,
gt_sort TYPE slis_sortinfo_alv OCCURS 0 WITH HEADER LINE,
lt_sort TYPE slis_t_sortinfo_alv,
gt_events TYPE slis_t_event,
t_listheader TYPE slis_t_listheader,
gs_layout TYPE slis_layout_alv,
v_print TYPE slis_print_alv.
DATA: v_listheader TYPE slis_listheader, "cabeçalho
v_flag,
v_variante LIKE disvariant, "Variante de exibição
v_repid LIKE sy-repid,
v_program TYPE string,
p_dir(30) TYPE c VALUE '/home/sapcons/ZBC001.txt'.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: so_usr FOR usr02-bname,
so_dpto FOR usr03-abtlg,
so_tcod FOR tstc-tcode.
PARAMETER: p_timini LIKE sy-uzeit OBLIGATORY DEFAULT '070000',
p_time LIKE sy-uzeit OBLIGATORY DEFAULT '001000',
p_datini LIKE sy-datum DEFAULT sy-datum,
p_alv TYPE c RADIOBUTTON GROUP gp1 ,
p_linux TYPE c RADIOBUTTON GROUP gp1 DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS p_varia LIKE disvariant-variant.
SELECTION-SCREEN END OF BLOCK b2.
************************************************************************
INITIALIZATION.
************************************************************************
PERFORM zf_init_alv.
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_varia.
************************************************************************
PERFORM zf_recupera_layouts_salvos.
************************************************************************
START-OF-SELECTION.
************************************************************************
IF p_linux IS NOT INITIAL AND
sy-batch NE 'X'.
MESSAGE i001.
STOP.
ENDIF.
IF p_datini IS INITIAL.
p_datini = sy-datum.
ENDIF.
PERFORM seleciona_user.
PERFORM seleciona_dpto.
PERFORM read_statistic.
IF p_linux IS NOT INITIAL.
PERFORM transfere.
ENDIF.
*=======================================================================
* Rotinas de emissão dos relatórios - ALV *=======================================================================
IF p_alv IS NOT INITIAL.
PERFORM fieldcat_init USING gt_fieldcat[].
PERFORM layout_init USING gs_layout.
PERFORM zf_sort_subtotal.
PERFORM eventtab_build USING gt_events[].
PERFORM main.
ENDIF.
************************************************************************
* FORM s e l e c i o n a _ u s e r
************************************************************************
FORM seleciona_user.
SELECT bname
INTO TABLE ti_user
FROM usr02
WHERE bname IN so_usr.
ENDFORM. "seleciona_user
************************************************************************
* FORM s e l e c i o n a _ d p t o
************************************************************************
FORM seleciona_dpto.
LOOP AT ti_user.
CALL FUNCTION 'SUSR_USER_ADDRESS_READ'
EXPORTING
user_name = ti_user-usuario
* READ_DB_DIRECTLY = ' '
IMPORTING
* USER_ADDRESS =
user_usr03 = it_usr03
EXCEPTIONS
user_address_not_found = 1
OTHERS = 2.
IF sy-subrc = 0 AND
it_usr03-abtlg IN so_dpto.
MOVE it_usr03-abtlg TO ti_user-depto.
MODIFY ti_user.
ELSE.
DELETE ti_user.
ENDIF.
ENDLOOP.
ENDFORM. "seleciona_dpto
************************************************************************
* FORM r e a d _ s t a t i s t i c
************************************************************************
* Chama função SAPWL_READ_STATISTIC_FILES
************************************************************************
FORM read_statistic.
LOOP AT ti_user.
CALL FUNCTION 'SAPWL_READ_STATISTIC_FILES'
EXPORTING
read_client = sy-mandt
read_time = p_time
read_time_delta = '000200'
* read_exclude_username =
read_start_date = p_datini
read_start_time = p_timini
read_username = ti_user-usuario
read_workprocess = 'FFFF'
statistic_file = ' '
as_statistic_file = ' '
no_buffer_flush = ' '
wait_factor = 150
include_appl_stat = ' '
* IMPORTING
* PROBLEMS =
* TOTAL_RECS_READ =
* TABLES
* PROTOCOL =
* RFC_RETURNS =
* SERVER_LIST =
CHANGING
all_stats = all_stats.
IF p_alv IS NOT INITIAL.
PERFORM grava_ti_alv.
ELSE.
PERFORM saida_arquivo.
ENDIF.
ENDLOOP.
ENDFORM. "read_statistic
************************************************************************
* FORM g r a v a _ t i _ a l v
************************************************************************
* Grava tabela interna para relatório ALV
************************************************************************
FORM grava_ti_alv.
LOOP AT all_stats INTO wa_stats. " ASSIGNING ALL_STATS.
IF wa_stats-record-tcode NOT IN so_tcod.
CONTINUE.
ENDIF.
IF wa_stats-record-cputi EQ 0.
CONTINUE.
ENDIF.
LOOP AT ti_user WHERE usuario = wa_stats-record-account.
ENDLOOP.
IF sy-subrc EQ 0.
MOVE ti_user-depto TO ti_alv-depto.
ENDIF.
MOVE wa_stats-record-account TO ti_alv-account.
MOVE wa_stats-record-terminalid TO ti_alv-terminal.
MOVE wa_stats-record-report TO ti_alv-report.
MOVE wa_stats-record-tcode TO ti_alv-trans.
MOVE wa_stats-record-startdate TO ti_alv-data.
MOVE wa_stats-record-starttime TO ti_alv-hora.
ti_alv-tempo = ( wa_stats-record-cputi / 1000000 ).
APPEND ti_alv.
ENDLOOP.
ENDFORM. "grava_ti_alv
************************************************************************
* FORM s a i d a _ a r q u i v o
************************************************************************
* Grava saída em arquivo para salvar no servidor Linux
************************************************************************
FORM saida_arquivo.
DATA: segundos(10) TYPE p DECIMALS 4.
*************** SUMARIZA AS INFORMAÇÕES ***************************
LOOP AT all_stats INTO wa_stats. " ASSIGNING ALL_STATS.
IF wa_stats-record-tcode NOT IN so_tcod.
CONTINUE.
ENDIF.
IF wa_stats-record-cputi EQ 0.
CONTINUE.
ENDIF.
LOOP AT ti_user WHERE usuario = wa_stats-record-account.
ENDLOOP.
IF sy-subrc EQ 0.
MOVE ti_user-depto TO tp_aux-depto.
ENDIF.
MOVE wa_stats-record-account TO tp_aux-account.
MOVE wa_stats-record-terminalid TO tp_aux-terminal.
MOVE wa_stats-record-report TO tp_aux-report.
MOVE wa_stats-record-tcode TO tp_aux-trans.
MOVE wa_stats-record-startdate TO tp_aux-data.
segundos = ( wa_stats-record-cputi / 1000000 ).
MOVE segundos TO tp_aux-tempo.
COLLECT tp_aux INTO collect_suma.
CLEAR segundos.
ENDLOOP.
******************************************************************
LOOP AT collect_suma.
MOVE collect_suma-depto TO ti_saida-depto.
MOVE collect_suma-account TO ti_saida-account.
MOVE collect_suma-terminal TO ti_saida-terminal.
MOVE collect_suma-report TO ti_saida-report.
MOVE collect_suma-trans TO ti_saida-trans.
MOVE collect_suma-data TO ti_saida-data.
WRITE collect_suma-tempo TO ti_saida-tempo.
APPEND ti_saida.
ENDLOOP.
CLEAR collect_suma.
REFRESH collect_suma.
ENDFORM. "saida_arquivo
************************************************************************
* FORM t r a n s f e r e
************************************************************************
* Transfere arquivo para o servidor Linux
************************************************************************
FORM transfere.
v_program = p_dir.
TRANSLATE v_program TO LOWER CASE.
OPEN DATASET v_program FOR OUTPUT IN TEXT MODE.
LOOP AT ti_saida.
TRANSFER ti_saida TO v_program.
ENDLOOP.
CLOSE DATASET v_program.
ENDFORM. "transfere
*=======================================================================
* Form fieldcat_init
*=======================================================================
FORM fieldcat_init USING lt_fieldcat TYPE slis_t_fieldcat_alv.
DATA: ls_fieldcat TYPE slis_fieldcat_alv.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'ACCOUNT'.
ls_fieldcat-tabname = 'TI_ALV'.
ls_fieldcat-reptext_ddic = 'USUARIO'.
ls_fieldcat-key = ' '.
APPEND ls_fieldcat TO lt_fieldcat.
ls_fieldcat-fieldname = 'TERMINAL'.
ls_fieldcat-tabname = 'TI_ALV'.
ls_fieldcat-reptext_ddic = 'TERMINAL'.
ls_fieldcat-key = ' '.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'DEPTO'.
ls_fieldcat-tabname = 'TI_ALV'.
ls_fieldcat-reptext_ddic = 'DEPTO'.
ls_fieldcat-key = ' '.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'TRANS'.
ls_fieldcat-tabname = 'TI_ALV'.
ls_fieldcat-reptext_ddic = 'TRANSAÇÃO'.
ls_fieldcat-key = ' '.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'REPORT'.
ls_fieldcat-tabname = 'TI_ALV'.
ls_fieldcat-reptext_ddic = 'REPORT'.
ls_fieldcat-key = ' '.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'DATA'.
ls_fieldcat-tabname = 'TI_ALV'.
ls_fieldcat-reptext_ddic = 'DATA'.
ls_fieldcat-key = ' '.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'HORA'.
ls_fieldcat-tabname = 'TI_ALV'.
ls_fieldcat-reptext_ddic = 'HORA'.
ls_fieldcat-key = ' '.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'TEMPO'.
ls_fieldcat-tabname = 'TI_ALV'.
ls_fieldcat-reptext_ddic = 'TEMPO CPU(Seg)'.
ls_fieldcat-key = ' '.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ENDFORM. " fieldcat_init
*=======================================================================
** Form layout_init
*=======================================================================
FORM layout_init USING ls_layout TYPE slis_layout_alv.
* ls_layout-zebra = 'X'.
ls_layout-colwidth_optimize = 'X'.
ENDFORM. "layout_init
*=======================================================================
** Form zf_sort_subtotal
*=======================================================================
FORM zf_sort_subtotal .
CLEAR gt_sort[].
gt_sort-spos = 1.
gt_sort-fieldname = 'ACCOUNT'.
gt_sort-tabname = 'TI_ALV'.
gt_sort-up = 'X'.
APPEND gt_sort TO lt_sort.
CLEAR gt_sort[].
gt_sort-spos = 2.
gt_sort-fieldname = 'TRANS'.
gt_sort-tabname = 'TI_ALV'.
gt_sort-up = 'X'.
APPEND gt_sort TO lt_sort.
CLEAR gt_sort[].
ENDFORM. " zf_sort_subtotal
*=======================================================================
** Form eventtab_build
*=======================================================================
FORM eventtab_build USING lt_events TYPE slis_t_event.
DATA: ls_event TYPE slis_alv_event.
MOVE 'PF_STATUS_SET' TO ls_event-name.
MOVE 'WHOLE_TOOLBAR1' TO ls_event-form.
APPEND ls_event TO lt_events.
CLEAR ls_event.
MOVE 'USER_COMMAND' TO ls_event-name.
MOVE 'USER_COMMAND' TO ls_event-form.
APPEND ls_event TO lt_events.
CLEAR ls_event.
ENDFORM. "eventtab_build
*=======================================================================
** FORM PF_STATUS_SET
*=======================================================================
FORM whole_toolbar1 USING extab TYPE slis_t_extab. "#EC CALLED
SET PF-STATUS 'WHOLE_TOOLBAR1'.
ENDFORM. "whole_toolbar
*=======================================================================
** FORM user_command *
*=======================================================================
** --> RF_UCOMM *
** --> RS_SELFIELD *
*=======================================================================
FORM user_command USING rf_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield. "#EC CALLED
CASE rf_ucomm.
WHEN 'ZTBC001'.
txt_report = 'ZBC001'.
CALL FUNCTION 'ERGO_TEXT_SHOW'
EXPORTING
textname = txt_report
id = 'RE'
langu = sy-langu.
ENDCASE.
ENDFORM. "user_command
*=======================================================================
** Form main
*=======================================================================
FORM main.
v_variante-variant = p_varia.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = 'ZBC001'
i_callback_top_of_page = 'ZF_TOP_OF_PAGE'
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
it_sort = lt_sort[]
i_save = 'A'
is_variant = v_variante
it_events = gt_events[]
TABLES
t_outtab = ti_alv.
IF sy-subrc <> 0.
MESSAGE i001.
STOP.
ENDIF.
ENDFORM. "main
*=======================================================================
** Form zf_top_of_page
*=======================================================================
FORM zf_top_of_page.
CHECK v_flag IS INITIAL.
CLEAR t_listheader[].
CLEAR v_listheader.
v_listheader-typ = 'H'.
v_listheader-info = 'TEMPO DE CPU DE USUÁRIOS'.
APPEND v_listheader TO t_listheader.
CLEAR v_listheader.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = t_listheader.
ENDFORM. "zf_top_of_page
*=======================================================================
** Form zf_init_alv
*=======================================================================
** Chama relatório default
*=======================================================================
FORM zf_init_alv .
v_repid = sy-repid.
CLEAR v_variante.
v_variante-report = v_repid.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = ' '
CHANGING
cs_variant = v_variante
EXCEPTIONS
not_found = 2.
IF sy-subrc = 0.
p_varia = v_variante-variant.
ENDIF.
ENDFORM. " zf_init_alv
*=======================================================================
** Form zf_recupera_layouts_salvos
*=======================================================================
** Recupera outros layouts salvos
*=======================================================================
FORM zf_recupera_layouts_salvos .
v_variante-report = v_repid.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = v_variante
i_save = 'A'
IMPORTING
es_variant = v_variante
EXCEPTIONS
not_found = 2.
IF sy-subrc = 2.
MESSAGE i003.
STOP.
ENDIF.
p_varia = v_variante-variant.
ENDFORM. " zf_recupera_layouts_salvos
|