*&---------------------------------------------------------------------* *& Report ZTESTDB *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ZTESTDB. DATA: t1 TYPE i, t2 TYPE i, t3 TYPE i, t4 TYPE i, t5 TYPE i, t6 TYPE i, t7 TYPE i, don TYPE i, BEGIN OF lt OCCURS 0, matnr TYPE mseg-matnr, werks TYPE mseg-werks, menge TYPE mseg-menge, mblnr TYPE mseg-mblnr, mjahr TYPE mseg-mjahr, zeile TYPE mseg-zeile, maktx TYPE makt-maktx, * cpudt_mkpf TYPE mseg-cpudt_mkpf, * SHKZG TYPE mseg-SHKZG, END OF lt, time(33), lts LIKE TABLE OF lt WITH HEADER LINE, ltt LIKE TABLE OF lt WITH HEADER LINE, t TYPE p DECIMALS 0. don = 5. don = 1. DO don TIMES. time = sy-index. CONDENSE time . time = '执行次数:' && time. WRITE: / '***********************************************************', time. CLEAR : lt[], lts[], t1 , t2 , t3 , t4 , t5 , t7 , t6 . GET RUN TIME FIELD t1. SELECT * UP TO 7000000 ROWS FROM mseg INTO CORRESPONDING FIELDS OF TABLE lt. GET RUN TIME FIELD t2. LOOP AT lt. lts-matnr = lt-matnr. lts-werks = lt-werks. * lts-lgort = lt-lgort. lts-menge = lt-menge. ** lts-cpudt_mkpf = lt-cpudt_mkpf. ** lts-cpudt_mkpf+6(2) = '01'. ** ** IF lt-SHKZG = 'H'. ** lts-menge = lts-menge * ( -1 ). ** ENDIF. COLLECT lts. ENDLOOP. GET RUN TIME FIELD t3. SORT lt ASCENDING BY matnr werks. LOOP AT lt. ltt-menge = ltt-menge + ltt-menge . AT END OF werks. ltt-matnr = lt-matnr. ltt-werks = lt-werks. APPEND ltt. CLEAR ltt. ENDAT. ENDLOOP. GET RUN TIME FIELD t4. SORT lt ASCENDING BY matnr . DELETE ADJACENT DUPLICATES FROM lt COMPARING matnr. GET RUN TIME FIELD t5. SELECT * FROM makt INTO TABLE @DATA(ltm) FOR ALL ENTRIES IN @lt WHERE matnr = @lt-matnr. GET RUN TIME FIELD t6. SORT ltm ASCENDING BY matnr . LOOP AT ltt. READ TABLE ltm ASSIGNING FIELD-SYMBOL(<fs>) WITH KEY matnr = ltt-matnr BINARY SEARCH. IF sy-subrc = 0. ltt-maktx = <fs>-maktx. MODIFY ltt. ENDIF. ENDLOOP. GET RUN TIME FIELD t7. time = ( t2 - t1 ) / 1000000. CONDENSE time . time = '数据库抽数据时间:' && time. WRITE / time. time = ( t3 - t2 ) / 1000000. CONDENSE time . time = 'collect 合计时间:' && time. WRITE / time. time = ( t4 - t3 ) / 1000000. CONDENSE time . time = 'at end 时间:' && time. WRITE / time. time = ( t5 - t4 ) / 1000000. CONDENSE time . time = ' DUPLICATES 时间:' && time. WRITE / time. time = ( t6 - t5 ) / 1000000. CONDENSE time . time = '取文本 时间:' && time. WRITE / time. time = ( t7 - t6 ) / 1000000. CONDENSE time . time = '文本赋值 时间:' && time. WRITE / time. ENDDO. GET RUN TIME FIELD t1. SELECT matnr FROM mara UP TO 1000 ROWS INTO CORRESPONDING FIELDS OF TABLE lt. LOOP AT lt. SELECT SINGLE maktx FROM makt INTO lt-maktx WHERE matnr = lt-matnr AND spras = '1'. MODIFY lt. ENDLOOP. GET RUN TIME FIELD t2. time = ( t2 - t1 ) / 1000000. CONDENSE time . time = '数据库循环抽数据时间:' && time. WRITE / time.
网友评论