【无标题】ABAP 代码效率比对

代码效率比对

通过对标准程序SAT代码进行的一个包装,满足了自定义代码效率比对的功能
  1. 上传代码文档
    在这里插入图片描述

  2. 双击Test run,可以看到代码,点击运行可以知道效率
    在这里插入图片描述

  3. 编辑左右两边的代码,跟SE38一样,但是编辑完保存之后,需要退到初始界面再进来才行(这个地方需要注意代码长度因为太长就保存不起)

在这里插入图片描述

代码如下:

*&---------------------------------------------------------------------*
*& Report  SAT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZSAT MESSAGE-ID ZI NO STANDARD PAGE HEADING.

INCLUDE <ICON>.

*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
*                  SELECTION SCREEN
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *

PARAMETERS: PAR_TEST AS CHECKBOX,
            PAR_FROM(2) TYPE P,
            PAR_TO(2)   TYPE P,
            PAR_CNT(2)  TYPE P DEFAULT 1,
            SAPCLOCK RADIOBUTTON GROUP PGR1,
            OSCLOCK  RADIOBUTTON GROUP PGR1,
            LKTEST AS CHECKBOX USER-COMMAND KK,
            P_FILE TYPE STRING  DEFAULT '\\' MODIF ID KK.

*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
*                  TYPES AND DATA
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *

* types
TYPES: T_SLINE TYPE EDPLINE,
       BEGIN OF T_S,
         LINE TYPE T_SLINE,
       END   OF T_S.

* controls
DATA: DOCKING_CONTAINER TYPE REF TO CL_GUI_DOCKING_CONTAINER,
      TREE TYPE REF TO CL_SIMPLE_TREE_MODEL,
      MAIN_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      V_CONTAINER TYPE REF TO CL_GUI_EASY_SPLITTER_CONTAINER,
      H_CONTAINER TYPE REF TO CL_GUI_EASY_SPLITTER_CONTAINER,
      H1_CONTAINER TYPE REF TO CL_GUI_EASY_SPLITTER_CONTAINER,
      H2_CONTAINER TYPE REF TO CL_GUI_EASY_SPLITTER_CONTAINER,
      CODE_RIGHT_EDITOR TYPE REF TO CL_GUI_TEXTEDIT,
      CODE_LEFT_EDITOR TYPE REF TO CL_GUI_TEXTEDIT,
      GLOBAL_DATA_CONTAINER TYPE REF TO CL_GUI_DIALOGBOX_CONTAINER,
      GLOBAL_DATA_VIEWER TYPE REF TO CL_GUI_TEXTEDIT,
      DD TYPE REF TO CL_DD_DOCUMENT,
      DD_LEFT TYPE REF TO CL_DD_DOCUMENT,
      DD_RIGHT TYPE REF TO CL_DD_DOCUMENT.

* dynpro
DATA: FCODE LIKE SY-UCOMM.
DATA: RUNTIME_L TYPE I.
DATA: RUNTIME_R TYPE I.
DATA: RUNTIME_X TYPE C.
DATA: TITLE_LEFT TYPE T_SLINE.
DATA: TITLE_RIGHT TYPE T_SLINE.
DATA: XTENDED_TITLE(70).

* coding
DATA: SL TYPE STANDARD TABLE OF T_SLINE WITH HEADER LINE,
      SR TYPE STANDARD TABLE OF T_SLINE WITH HEADER LINE.
DATA: INIT_L TYPE STANDARD TABLE OF T_SLINE WITH HEADER LINE,
      INIT_R TYPE STANDARD TABLE OF T_SLINE WITH HEADER LINE.
DATA: INIX_L TYPE STANDARD TABLE OF T_SLINE WITH HEADER LINE,
      INIX_R TYPE STANDARD TABLE OF T_SLINE WITH HEADER LINE.
DATA: C TYPE STANDARD TABLE OF T_SLINE WITH HEADER LINE.

* buffer
DATA: BEGIN OF R  OCCURS 200, LINE TYPE T_SLINE, END OF R.
DATA: BEGIN OF E  OCCURS 200, LINE TYPE T_SLINE, END OF E.
DATA: BEGIN OF X  OCCURS 200, LINE TYPE T_SLINE, END OF X.

* subroutine pool
DATA: POOL_NAME LIKE SY-REPID.
DATA: SOURCE_TMP TYPE STANDARD TABLE OF T_S WITH HEADER LINE.

* other
DATA: RUNTIME_MULT TYPE I VALUE 10.
DATA: RUNTIME_BASE TYPE I.
DATA: X_TABIX      LIKE SY-TABIX,
      SYN_ERROR,
      GEN_ERROR.
DATA: CLOCK_TYPE      TYPE I,
      CLOCK_TYPE_N(1) TYPE N.

DATA: BEGIN OF GDS_Y ,
  LINE TYPE T_SLINE,
  END OF GDS_Y.
DATA GDT_Y LIKE TABLE OF GDS_Y.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
*                  INITIALIZATION
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
INITIALIZATION.
  GET PARAMETER ID 'ATRA_CLOCK_TYPE' FIELD CLOCK_TYPE_N.
  CASE CLOCK_TYPE_N.
    WHEN '1'. CLOCK_TYPE = 1.
    WHEN '2'. CLOCK_TYPE = 2.
  ENDCASE.
  CASE CLOCK_TYPE.
    WHEN 1.      SAPCLOCK = ' '. OSCLOCK = 'X'.
    WHEN 2.      SAPCLOCK = 'X'. OSCLOCK = ' '.
    WHEN OTHERS. SAPCLOCK = 'X'. OSCLOCK = ' '.
  ENDCASE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.  "全部可以本地上传
  PERFORM GET_LOCAL_FORM USING P_FILE.

AT SELECTION-SCREEN OUTPUT.
  PERFORM GET_ACTIVE.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
*                  START-OF-SELECTION
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
START-OF-SELECTION.
  PERFORM AUTHORITY_CHECK.
  IF OSCLOCK = 'X'.
    SET RUN TIME CLOCK RESOLUTION LOW.
  ENDIF.
  PERFORM INIT.

  IF PAR_TEST IS INITIAL.
    CALL SCREEN 100.
  ELSE.
      PERFORM TEST_EXAMPLES."最好只能在测试环境使用
  ENDIF.

*---------------------------------------------------------------------*
*       FORM INIT                                                     *
*---------------------------------------------------------------------*
FORM INIT.

* Read program prototype (with global data) into table R
  TRY.
      READ REPORT 'RSHOWTI0' INTO R.      "获取RSHOWTI0中的代码给R
    CATCH CX_SY_READ_SRC_LINE_TOO_LONG.
      MESSAGE E501.
  ENDTRY.

* Read examples into table X
  IF LKTEST = 'X'.
    PERFORM READ_SHOW .
  ELSE.
    PERFORM READ_RSHOWTIX USING:
                           'RSHOWTI1',
                           'RSHOWTI2',
                           'RSHOWTI3',
                           'RSHOWTI4',
                           'RSHOWTI5',
                           'RSHOWTI6'.
  ENDIF.
* Measure time of GET RUNTIME statement
  PERFORM SET_RUNTIME_BASE.
ENDFORM.                    "INIT

*---------------------------------------------------------------------*
*       FORM READ_RSHOWTIX                                            *
*---------------------------------------------------------------------*
FORM READ_RSHOWTIX USING RNAME LIKE SY-REPID.
  DATA: BEGIN OF Y  OCCURS 200, LINE TYPE T_SLINE, END OF Y.
  DATA: NO_DISPLAY.

  TRY.
      READ REPORT RNAME INTO Y.
    CATCH CX_SY_READ_SRC_LINE_TOO_LONG.
      MESSAGE E501.
  ENDTRY.

  LOOP AT Y INTO X.
    IF X-LINE(3) = '*>T'.
      IF X-LINE+3(1) = '('.
        NO_DISPLAY = 'X'.
      ELSE.
        NO_DISPLAY = SPACE.
      ENDIF.
    ENDIF.
    IF NO_DISPLAY = SPACE.
      APPEND X.
    ENDIF.
  ENDLOOP.
ENDFORM.                               "READ_RSHOWTIX

*---------------------------------------------------------------------*
*       FORM SET_RUNTIME_BASE                                         *
*---------------------------------------------------------------------*
*       Time measurement for "GET RUNTIME" statement                  *
*---------------------------------------------------------------------*
FORM SET_RUNTIME_BASE.
  DATA: I1 TYPE I, I2 TYPE I.
*
  RUNTIME_BASE = 999999.

  DO 10 TIMES.
    GET RUN TIME FIELD I1.
    GET RUN TIME FIELD I2.
    I2 = I2 - I1.
    IF I2 LT RUNTIME_BASE.
      RUNTIME_BASE = I2.
    ENDIF.
  ENDDO.
ENDFORM.                               "SET_RUNTIME_BASE

*---------------------------------------------------------------------*
*       FORM GET_RUNTIME                                              *
*---------------------------------------------------------------------*
FORM GET_RUNTIME.
  DATA: BEGIN OF SYN_MSG, L1(72), L2(72), L3(72), END OF SYN_MSG.
  DATA: SYN_LIN TYPE I, SYN_WRD(30).                        "#EC NEEDED
  DATA: MSG(218) TYPE C.

  CLEAR RUNTIME_L.
  CLEAR RUNTIME_R.
  CLEAR RUNTIME_X.

  PERFORM FILL_S.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值