• BW数据加载时间分析程序


    REPORT zrpbw_001 MESSAGE-ID zbw01.
    TYPE-POOLS:slis.
    TABLES:rsreqdone,rsbkrequest,rsbkdtp,rsldpio,rsstatmanpart,rsmoniptab.

    DATA:gt_done     TYPE TABLE OF rsreqdone,
         gs_done     TYPE rsreqdone,
         gt_rsbkdtp  TYPE TABLE OF rsbkdtp,
         gs_rsbkdtp  TYPE rsbkdtp,
         gt_rsldpio  TYPE TABLE OF rsldpio,
         gs_rsldpio  TYPE rsldpio,
         gt_rsldpiot TYPE TABLE OF rsldpiot,
         gs_rsldpiot TYPE rsldpiot,
         gt_part     TYPE TABLE OF rsstatmanpart,
         gs_part     TYPE rsstatmanpart,
         gt_request  TYPE TABLE OF rsbkrequest,
         gs_request  TYPE rsbkrequest,
         gt_iptab    TYPE TABLE OF rsmoniptab,
         gs_iptab    TYPE rsmoniptab.

    DATA:BEGIN OF gs_output,
           rnr         TYPE rsrequnr"数据传输请求号
           logdpid     TYPE rslogdpid,
           src         TYPE  rsbksrcnm,
           srctlogo    TYPE  rsbksrctlogo,
           tgt         TYPE  rsbktgtnm,
           tgttlogo    TYPE  rsbktgttlogo,
           bdate       TYPE sy-datum,
           btime       TYPE sy-uzeit,
           edate       TYPE sy-datum,
           etime       TYPE sy-uzeit,
           runtime     TYPE p DECIMALS 3,
           anz_recs    TYPE rsnumrecord,
           insert_recs TYPE rsnumrecord,
           tstatus     TYPE rsstatus,
         END OF gs_output,
         gt_output LIKE TABLE OF gs_output.

    DATA:gt_fieldcat TYPE slis_t_fieldcat_alv,
         gs_fieldcat TYPE slis_fieldcat_alv,
         gs_layout   TYPE slis_layout_alv.

    SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE t1.
    SELECT-OPTIONS:s_bgdate FOR sy-datum DEFAULT sy-datum NO-EXTENSION OBLIGATORY.  "开始日期
    " p_endate TYPE sy-datum DEFAULT '99991231'.  "结束日期

    SELECTION-SCREEN END OF BLOCK blk1.

    INITIALIZATION.
      t1 '选择条件'.

    START-OF-SELECTION.
      PERFORM get_data.  "数据获取
      PERFORM display_alv.  "数据显示
    *&---------------------------------------------------------------------*
    *&      Form  GET_DATA
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM get_data .
      DATA:l_second TYPE i.
      DATA:l_date     TYPE sy-datum,
           l_time     TYPE sy-uzeit,
           l_date_end TYPE sy-datum,
           l_time_end TYPE sy-uzeit.
      "由于后台表存放的时间是UTC时区时间,实际前台看到时间是UTC+8时区,两者相差8小时
      l_date = s_bgdate-low 1.
      l_time '160000'.
      IF s_bgdate-high IS NOT INITIAL.
        l_date_end = s_bgdate-high.
        l_time_end '160000'.
      ELSE.
        l_date_end = s_bgdate-low.
        l_time_end '160000'.
      ENDIF.

    *抓取数据加载日志
      SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_done
        FROM rsreqdone
        WHERE ( datum EQ l_date AND uzeit GE l_time )
          OR ( datum EQ l_date_end AND uzeit LE l_time_end )
          OR ( datum GT l_date AND datum LT l_date_end ).

      "删除DTP或者信息包为空的数据
      DELETE gt_done WHERE logdpid IS INITIAL.

      LOOP AT gt_done INTO gs_done.
        CLEAR gs_output.
        gs_output-rnr = gs_done-rnr.
        gs_output-logdpid = gs_done-logdpid.
        gs_output-tstatus = gs_done-tstatus.
        "开始时间时区转换成UTC+8
        PERFORM frm_calc_time USING 'UTC+8'
                                gs_done-datum
                                gs_done-uzeit
                        CHANGING gs_output-bdate
                                 gs_output-btime.
        "结束时间时区转换成UTC+8
        PERFORM frm_calc_time USING 'UTC+8'
                                gs_done-tdatum
                                gs_done-tuzeit
                        CHANGING gs_output-edate
                                 gs_output-etime.
        "计算时间差
        IF gs_output-bdate IS NOT INITIAL AND gs_output-edate IS NOT INITIAL.
          CLEAR l_second.
          CALL FUNCTION 'SALP_SM_CALC_TIME_DIFFERENCE'
            EXPORTING
              date_1  = gs_output-bdate
              time_1  = gs_output-btime
              date_2  = gs_output-edate
              time_2  = gs_output-etime
            IMPORTING
              seconds = l_second.

          gs_output-runtime = l_second / 60.
        ENDIF.

        APPEND gs_output TO gt_output.
      ENDLOOP.

      "  DELETE gt_output WHERE runtime IS INITIAL.


      "补充源对象,源对象类型,目标对象,目标对象类型
      IF gt_output IS NOT INITIAL.
        "DTP信息
        SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_rsbkdtp
          FROM rsbkdtp
          FOR ALL ENTRIES IN gt_output
          WHERE dtp = gt_output-logdpid
            AND objvers 'A'.
        SORT gt_rsbkdtp BY dtp.

        "INFOPACKAGE信息
        SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_rsldpio
          FROM rsldpio
          FOR ALL ENTRIES IN gt_output
          WHERE logdpid = gt_output-logdpid
            AND objvers 'A'.
        SORT gt_rsldpio BY logdpid.

        IF gt_rsldpio IS NOT INITIAL.
          SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_rsldpiot
          FROM rsldpiot
          FOR ALL ENTRIES IN gt_rsldpio
          WHERE langu 1
            AND logdpid = gt_rsldpio-logdpid
            AND objvers 'A'.
          SORT gt_rsldpiot BY logdpid.
        ENDIF.

        "请求数据条目数
    *    SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_part
    *      FROM rsstatmanpart
    *      FOR ALL ENTRIES IN gt_output
    *      WHERE rnr = gt_output-rnr.
    *    SORT gt_part BY rnr.
        "DTP请求数据条目数
        SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_request
          FROM rsbkrequest
          FOR ALL ENTRIES IN gt_output
          WHERE request = gt_output-rnr.
        SORT gt_request BY request.

        "信息包数据条目数
        SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_iptab
          FROM rsmoniptab
          FOR ALL ENTRIES IN gt_output
          WHERE rnr = gt_output-rnr.
        DELETE gt_iptab WHERE rqrecord IS INITIAL.
        SORT gt_iptab BY rnr ip_nr DESCENDING.
        DELETE ADJACENT DUPLICATES FROM gt_iptab COMPARING rnr.

        LOOP AT gt_output INTO gs_output.
          CLEAR gs_rsbkdtp.
          "补充DTP源对象,目标对象,对象类型
          READ TABLE gt_rsbkdtp INTO gs_rsbkdtp WITH KEY
          dtp = gs_output-logdpid BINARY SEARCH.
          IF sy-subrc 0.
            gs_output-src = gs_rsbkdtp-src.
            gs_output-srctlogo = gs_rsbkdtp-srctlogo.
            gs_output-tgt   = gs_rsbkdtp-tgt.
            gs_output-tgttlogo = gs_rsbkdtp-tgttlogo.
          ENDIF.

          CLEAR:gs_rsldpio,gs_rsldpiot.
          READ TABLE gt_rsldpio INTO gs_rsldpio WITH KEY
          logdpid = gs_output-logdpid BINARY SEARCH.
          IF sy-subrc 0.         
    READ TABLE gt_rsldpiot INTO gs_rsldpiot WITH KEY       logdpid 
    = gs_rsldpio-logdpid BINARY SEARCH.         gs_output
    -src = gs_rsldpiot-text.         gs_output
    -srctlogo 'ISIP'.         
    CONCATENATE gs_rsldpio-oltpsource gs_rsldpio-logsys INTO gs_output-tgt SEPARATED BY space.         gs_output
    -tgttlogo 'RSDS'.       
    ENDIF.       

    "补充请求中数据条目数       
    CLEAR gs_request.       
    READ TABLE gt_request INTO gs_request WITH KEY request = gs_output-rnr BINARY SEARCH.       
    IF sy-subrc 0.
    *        IF gs_request-tstate = 4.  "已删除的
    *          DELETE gt_output.
    *          CONTINUE.
    *        ENDIF.         gs_output
    -anz_recs = gs_request-linesread.       
    ENDIF.       
    CLEAR gs_iptab.       
    READ TABLE gt_iptab INTO gs_iptab WITH KEY rnr = gs_output-rnr BINARY SEARCH.       
    IF sy-subrc 0.         gs_output
    -anz_recs = gs_iptab-rqrecord.       
    ENDIF.       

    MODIFY gt_output FROM gs_output.     
    ENDLOOP.   
    ENDIF.   

    SORT gt_output BY  runtime  DESCENDING tgttlogo DESCENDING.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  DISPLAY_ALV
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM display_alv .   
    DATA: l_col_pos TYPE sy-cucol.   
    DEFINE build_fieldcat.     l_col_pos 
    = l_col_pos + 1.     
    CLEAR gs_fieldcat.     gs_fieldcat
    -col_pos       = l_col_pos.     gs_fieldcat
    -fieldname     = &1.     gs_fieldcat
    -seltext_m     = &2.     
    APPEND gs_fieldcat TO gt_fieldcat.   
    END-OF-DEFINITION.   

    "输出字段   
    REFRESH gt_fieldcat.   build_fieldcat
    :'LOGDPID' '信息包',                  
    'SRC' '源对象',                  
    'SRCTLOGO' '源对象类型',                  
    'TGT' '目标对象',                  
    'TGTTLOGO' '目标对象类型',                  
    'BDATE' '开始日期',                  
    'BTIME' '开始时间',                  
    'EDATE' '结束日期',                  
    'ETIME' '结束时间',                  
    'RUNTIME' '运行时间(分)',                  
    'ANZ_RECS' '传输的记录',                  
    'TSTATUS' '状态'.   gs_layout

    -colwidth_optimize 'X'.   

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'     
    EXPORTING
    *     I_CALLBACK_PROGRAM                = ' '
    *     I_CALLBACK_PF_STATUS_SET          = ' '
    *     I_CALLBACK_USER_COMMAND           = ' '
    *     I_CALLBACK_TOP_OF_PAGE            = ' '
    *     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
    *     I_CALLBACK_HTML_END_OF_LIST       = ' '
    *     I_STRUCTURE_NAME                  =
    *     I_BACKGROUND_ID                   = ' '
    *     I_GRID_TITLE  =
    *     I_GRID_SETTINGS                   =       is_layout     
    = gs_layout       it_fieldcat   
    = gt_fieldcat
    *     IT_EXCLUDING  =
    *     IT_SPECIAL_GROUPS                 =
    *     IT_SORT       =
    *     IT_FILTER     =
    *     IS_SEL_HIDE   =
    *     I_DEFAULT     = 'X'
    *     I_SAVE        = ' '     
    TABLES       t_outtab      
    = gt_output     
    EXCEPTIONS       program_error 
    1       
    OTHERS        2.   
    IF sy-subrc <> 0.
    * Implement suitable error handling here   
    ENDIF.

    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  FRM_CALC_TIME
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->P_0164   text
    *      -->P_GS_DONE_DATUM  text
    *      -->P_GS_DONE_UZEIT  text
    *      <--P_GS_OUTPUT_BDATE  text
    *      <--P_GS_OUTPUT_BTIME  text
    *----------------------------------------------------------------------*
    FORM frm_calc_time  USING   u_timez TYPE sy-zonlo                              u_date 
    TYPE sy-datum                              u_time 
    TYPE sy-uzeit                 
    CHANGING c_date TYPE sy-datum                          c_time 
    TYPE uzeit.   

    DATA: l_tstampl     TYPE timestampl,         l_txttime
    (30).   

    CLEAR:c_date,c_time.   

    CONCATENATE u_date u_time INTO l_txttime.   l_tstampl 
    = l_txttime.   

    CONVERT TIME STAMP l_tstampl TIME ZONE u_timez     
    INTO DATE c_date TIME c_time.
    ENDFORM.

  • 相关阅读:
    第七届湘计算机程序设计竞赛的学生 报道称,数字游戏
    python IDE
    字符串处理
    Ajax得知(两)—— 一个简单的Ajax示例
    九度OJ 1068 球半径和数量 (模拟)
    centos 之7zip
    svnclient本地化和异常处理
    java web.xml listener servlet 和filter加载顺序
    Jquery zTree实例
    探索Android中的Parcel机制(上)
  • 原文地址:https://www.cnblogs.com/xmqlv20081008/p/7284260.html
Copyright © 2020-2023  润新知