代码效率比对
通过对标准程序SAT代码进行的一个包装,满足了自定义代码效率比对的功能
-
上传代码文档

-
双击Test run,可以看到代码,点击运行可以知道效率

-
编辑左右两边的代码,跟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.

139

被折叠的 条评论
为什么被折叠?



