*&---------------------------------------------------------------------*
*& Report YTEST0001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT YTEST0001.
TABLES:vbak,
vbap. "
************************************************************************
** 定义结构类型 Define the structure's type **
************************************************************************
TYPES:BEGIN OF ty_result,
vbeln TYPE sy-tabix,
posnr TYPE vbap-posnr,
kunnr TYPE vbak-kunnr,
name1 TYPE kna1-name1,
matnr TYPE vbap-matnr,
arktx TYPE vbap-arktx,
kwmeng TYPE vbap-kwmeng,
meins TYPE vbap-meins,
kbetr TYPE konv-kbetr,
netwr TYPE vbap-netwr,
waerk TYPE vbap-waerk,
END OF ty_result.
************************************************************************
** 定义变量与内表 Define the variants and Internal tables **
************************************************************************
DATA:gt_hash TYPE HASHED TABLE OF ty_result WITH UNIQUE KEY vbeln posnr,
gt_sort TYPE SORTED TABLE OF ty_result WITH UNIQUE KEY vbeln posnr,
gs_result TYPE ty_result,
gv_rows TYPE sy-tabix.
************************************************************************
** 宏定义 Define the macro **
************************************************************************
DEFINE mcr_range.
clear &1.
&1-sign = 'I'.
&1-option = &2.
&1-low = &3.
&1-high = &4.
append &1.
END-OF-DEFINITION.
************************************************************************
** 选择屏幕 Customize the selection-screen **
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK xavery WITH FRAME TITLE text-001.
PARAMETERS:p_rows TYPE sytabix DEFAULT '100', "初始化内表的记录数
p_loop TYPE sytabix DEFAULT '100'. "读取的次数
SELECTION-SCREEN END OF BLOCK xavery.
************************************************************************
** 执行程序事件 Executing the program's events **
************************************************************************
INITIALIZATION.
START-OF-SELECTION.
PERFORM sub_init_data.
PERFORM sub_sort_table.
PERFORM sub_hash_table.
END-OF-SELECTION.
*@---------------------------------------------------------------------*
*@ Form SUB_INIT_DATA
*@---------------------------------------------------------------------*
* 初始化选择条件
*----------------------------------------------------------------------*
FORM sub_init_data .
DEFINE mcr_init.
clear gs_result.
gs_result-vbeln = sy-index.
gs_result-kunnr = '100000000'.
gs_result-matnr = 'A0010312'.
do 10 times.
gs_result-posnr = gs_result-posnr + 10.
insert gs_result into table gt_hash.
insert gs_result into table gt_sort.
enddo.
END-OF-DEFINITION.
REFRESH:gt_hash,
gt_sort.
DO p_rows TIMES.
mcr_init.
ENDDO.
ENDFORM. " SUB_INIT_DATA
*&---------------------------------------------------------------------*
*& Form SUB_HASH_TABLE
*&---------------------------------------------------------------------*
* 测试哈希表的性能
*----------------------------------------------------------------------*
FORM sub_hash_table .
CLEAR gv_rows.
DO p_loop TIMES.
CLEAR gs_result.
READ TABLE gt_hash INTO gs_result
WITH KEY vbeln = sy-index
posnr = '000020'.
* TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
gv_rows = gv_rows + 1.
ENDIF.
ENDDO.
WRITE:/ gv_rows.
ENDFORM. " SUB_HASH_TABLE
*&---------------------------------------------------------------------*
*& Form SUB_SORT_TABLE
*&---------------------------------------------------------------------*
* 测试排序表的性能
*----------------------------------------------------------------------*
FORM sub_sort_table .
CLEAR gv_rows.
DO p_loop TIMES.
CLEAR gs_result.
READ TABLE gt_sort INTO gs_result
WITH KEY vbeln = sy-index
posnr = '000020'
BINARY SEARCH.
* TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
gv_rows = gv_rows + 1.
ENDIF.
ENDDO.
WRITE:/ gv_rows.
ENDFORM. " SUB_SORT_TABLE