Foro -Documentación -Código fuente -Contacto -Empleo

Buscar

Traducir

Amazon

ZBC001 PDF Imprimir E-mail
Usar puntuación: / 0
MaloBueno 
Código fuente - Utilidades varias
Miércoles, 22 de Diciembre de 2004 16:57
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
Comentarios
Buscar
¡Sólo los usuarios registrados pueden escribir comentarios!

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 
home search