Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

performance :program taking long time so exit before giving output

Former Member
0 Likes
622

Hi all

Kindly modify my below mentioned code. In quality its giving dump as program taking long time and it exit before giving output as i am using clustered table bseg.

SELECT-OPTIONS:

DATUM FOR BSIS-BUDAT,

SAKTO FOR BSEG-HKONT NO-EXTENSION.

TYPES: BEGIN OF TY_TAB1,

HKONT TYPE BSIS-HKONT,

POSTDT TYPE BSIS-ZUONR,

BUDAT TYPE BSIS-BUDAT,

KOSTL TYPE BSIS-KOSTL,

MATNR TYPE TY_BESTAND-MATNR,

END OF TY_TAB1.

DATA: ITAB TYPE TABLE OF BSIS WITH HEADER LINE,

ITAB1 TYPE TABLE OF TY_TAB1 WITH HEADER LINE,

WATAB1 TYPE TY_TAB1,

ITAB2 TYPE TABLE OF TY_TAB1 WITH HEADER LINE,

WATAB2 TYPE TY_TAB1.

SELECT DISTINCT HKONT BUDAT KOSTL FROM BSIS INTO CORRESPONDING FIELDS OF TABLE ITAB1

WHERE BUDAT IN DATUM

AND HKONT IN SAKTO.

LOOP AT ITAB1 INTO WATAB1.

SELECT SINGLE MATNR INTO WATAB1-MATNR FROM BSEG

WHERE

HKONT = WATAB1-HKONT

AND KOSTL = WATAB1-KOSTL

AND MATNR <> ''.

IF SY-SUBRC = 0.

MOVE WATAB1-HKONT TO BESTAND_QTR-SAKTO.

MOVE WATAB1-BUDAT TO BESTAND_QTR-DATUM.

READ TABLE BESTAND WITH KEY MATNR = WATAB1-MATNR.

CLEAR WATAB1.

IF SY-SUBRC = 0.

  • LOOP AT bestand .

LOOP AT G_T_MSEG_LEAN INTO G_S_MSEG_LEAN WHERE WERKS EQ BESTAND-BWKEY." added by Garima on 21.04.07

IF G_S_MSEG_LEAN-MATNR = BESTAND-MATNR.

IF G_S_MSEG_LEAN-SHKZG = 'H'.

G_S_MSEG_LEAN-MENGE = G_S_MSEG_LEAN-MENGE * ( -1 ).

G_S_MSEG_LEAN-DMBTR = G_S_MSEG_LEAN-DMBTR * ( -1 ).

ENDIF.

IF G_S_MSEG_LEAN-BWART = '105' OR G_S_MSEG_LEAN-BWART = '106' OR G_S_MSEG_LEAN-BWART = '122' OR G_S_MSEG_LEAN-BWART = '101' OR G_S_MSEG_LEAN-BWART = '102' OR G_S_MSEG_LEAN-BWART = '561'

OR G_S_MSEG_LEAN-BWART = '562'.

L_REC_QTY = L_REC_QTY + G_S_MSEG_LEAN-MENGE.

L_REC_AMT = L_REC_AMT + G_S_MSEG_LEAN-DMBTR.

ELSEIF G_S_MSEG_LEAN-BWART = '301' OR G_S_MSEG_LEAN-BWART = '302'.

ELSEIF G_S_MSEG_LEAN-BWART IS NOT INITIAL AND G_S_MSEG_LEAN-BWART <> '601' AND G_S_MSEG_LEAN-BWART <> '602' .

L_ISS_QTY = L_ISS_QTY + G_S_MSEG_LEAN-MENGE.

L_ISS_AMT = L_ISS_AMT + G_S_MSEG_LEAN-DMBTR.

ELSEIF G_S_MSEG_LEAN-BWART IS NOT INITIAL AND ( G_S_MSEG_LEAN-BWART = '601' OR G_S_MSEG_LEAN-BWART = '602' ).

L_SALE_QTY = L_SALE_QTY + G_S_MSEG_LEAN-MENGE.

L_SALE_AMT = L_SALE_AMT + G_S_MSEG_LEAN-DMBTR.

ELSEIF G_S_MSEG_LEAN-BWART IS INITIAL.

L_OTHERS_QTY = L_OTHERS_QTY + G_S_MSEG_LEAN-MENGE.

L_OTHERS_AMT = L_OTHERS_AMT + G_S_MSEG_LEAN-DMBTR.

ENDIF.

ENDIF.

ENDLOOP.

MOVE BESTAND-MATNR TO BESTAND_QTR-MATNR.

READ TABLE IT_MAKT WITH KEY MATNR = BESTAND-MATNR.

IF SY-SUBRC = 0.

MOVE IT_MAKT-MAKTX TO BESTAND_QTR-MAKTX.

ENDIF.

READ TABLE IT_T023T WITH KEY MATKL = BESTAND-MATKL.

IF SY-SUBRC = 0.

MOVE IT_T023T-WGBEZ TO BESTAND_QTR-WGBEZ.

ENDIF.

READ TABLE IT_MTART WITH KEY MATNR = BESTAND-MATNR.

IF SY-SUBRC = 0.

MOVE IT_MTART-MTART TO BESTAND_QTR-MTART.

READ TABLE IT_T134 WITH KEY MTART = IT_MTART-MTART.

IF SY-SUBRC = 0.

MOVE IT_T134-MTBEZ TO BESTAND_QTR-MTBEZ.

ENDIF.

ENDIF.

MOVE BESTAND-ANFMENGE TO BESTAND_QTR-ANFMENGE.

MOVE BESTAND-ENDMENGE TO BESTAND_QTR-ENDMENGE.

MOVE BESTAND-ANFWERT TO BESTAND_QTR-ANFWERT.

MOVE BESTAND-ENDWERT TO BESTAND_QTR-ENDWERT.

MOVE BESTAND-MATKL TO BESTAND_QTR-MATKL.

MOVE BESTAND-MEINS TO BESTAND_QTR-MEINS.

MOVE L_REC_QTY TO BESTAND_QTR-SOLL.

MOVE L_ISS_QTY TO BESTAND_QTR-HABEN.

MOVE L_REC_AMT TO BESTAND_QTR-SOLLWERT.

MOVE L_ISS_AMT TO BESTAND_QTR-HABENWERT.

MOVE L_OTHERS_QTY TO BESTAND_QTR-QTY_OTHERS.

MOVE L_OTHERS_AMT TO BESTAND_QTR-AMT_OTHERS.

MOVE L_SALE_QTY TO BESTAND_QTR-QTY_SALE.

MOVE L_SALE_AMT TO BESTAND_QTR-AMT_SALE.

APPEND BESTAND_QTR.

CLEAR BESTAND_QTR.

CLEAR : L_REC_QTY,L_ISS_QTY,L_REC_AMT,L_ISS_AMT,L_OTHERS_QTY,L_OTHERS_AMT,L_SALE_QTY,L_SALE_AMT.

ENDIF.

ELSE.

CONTINUE.

ENDIF.

ENDLOOP.

PERFORM CREATE_FIELD_CATALOG. "Quarter Ending

PERFORM DISPLAY_OUTPUT.

ENDCASE.

Regards

Anu

Hi all

Kindly modify my below mentioned code. In quality its giving dump as program taking long time and it exit before giving output as i am using clustered table bseg.

SELECT-OPTIONS:

DATUM FOR BSIS-BUDAT,

SAKTO FOR BSEG-HKONT NO-EXTENSION.

TYPES: BEGIN OF TY_TAB1,

HKONT TYPE BSIS-HKONT,

POSTDT TYPE BSIS-ZUONR,

BUDAT TYPE BSIS-BUDAT,

KOSTL TYPE BSIS-KOSTL,

MATNR TYPE TY_BESTAND-MATNR,

END OF TY_TAB1.

DATA: ITAB TYPE TABLE OF BSIS WITH HEADER LINE,

ITAB1 TYPE TABLE OF TY_TAB1 WITH HEADER LINE,

WATAB1 TYPE TY_TAB1,

ITAB2 TYPE TABLE OF TY_TAB1 WITH HEADER LINE,

WATAB2 TYPE TY_TAB1.

SELECT DISTINCT HKONT BUDAT KOSTL FROM BSIS INTO CORRESPONDING FIELDS OF TABLE ITAB1

WHERE BUDAT IN DATUM

AND HKONT IN SAKTO.

LOOP AT ITAB1 INTO WATAB1.

SELECT SINGLE MATNR INTO WATAB1-MATNR FROM BSEG

WHERE

HKONT = WATAB1-HKONT

AND KOSTL = WATAB1-KOSTL

AND MATNR <> ''.

IF SY-SUBRC = 0.

MOVE WATAB1-HKONT TO BESTAND_QTR-SAKTO.

MOVE WATAB1-BUDAT TO BESTAND_QTR-DATUM.

READ TABLE BESTAND WITH KEY MATNR = WATAB1-MATNR.

CLEAR WATAB1.

IF SY-SUBRC = 0.

  • LOOP AT bestand .

LOOP AT G_T_MSEG_LEAN INTO G_S_MSEG_LEAN WHERE WERKS EQ BESTAND-BWKEY." added by Garima on 21.04.07

IF G_S_MSEG_LEAN-MATNR = BESTAND-MATNR.

IF G_S_MSEG_LEAN-SHKZG = 'H'.

G_S_MSEG_LEAN-MENGE = G_S_MSEG_LEAN-MENGE * ( -1 ).

G_S_MSEG_LEAN-DMBTR = G_S_MSEG_LEAN-DMBTR * ( -1 ).

ENDIF.

IF G_S_MSEG_LEAN-BWART = '105' OR G_S_MSEG_LEAN-BWART = '106' OR G_S_MSEG_LEAN-BWART = '122' OR G_S_MSEG_LEAN-BWART = '101' OR G_S_MSEG_LEAN-BWART = '102' OR G_S_MSEG_LEAN-BWART = '561'

OR G_S_MSEG_LEAN-BWART = '562'.

L_REC_QTY = L_REC_QTY + G_S_MSEG_LEAN-MENGE.

L_REC_AMT = L_REC_AMT + G_S_MSEG_LEAN-DMBTR.

ELSEIF G_S_MSEG_LEAN-BWART = '301' OR G_S_MSEG_LEAN-BWART = '302'.

ELSEIF G_S_MSEG_LEAN-BWART IS NOT INITIAL AND G_S_MSEG_LEAN-BWART <> '601' AND G_S_MSEG_LEAN-BWART <> '602' .

L_ISS_QTY = L_ISS_QTY + G_S_MSEG_LEAN-MENGE.

L_ISS_AMT = L_ISS_AMT + G_S_MSEG_LEAN-DMBTR.

ELSEIF G_S_MSEG_LEAN-BWART IS NOT INITIAL AND ( G_S_MSEG_LEAN-BWART = '601' OR G_S_MSEG_LEAN-BWART = '602' ).

L_SALE_QTY = L_SALE_QTY + G_S_MSEG_LEAN-MENGE.

L_SALE_AMT = L_SALE_AMT + G_S_MSEG_LEAN-DMBTR.

ELSEIF G_S_MSEG_LEAN-BWART IS INITIAL.

L_OTHERS_QTY = L_OTHERS_QTY + G_S_MSEG_LEAN-MENGE.

L_OTHERS_AMT = L_OTHERS_AMT + G_S_MSEG_LEAN-DMBTR.

ENDIF.

ENDIF.

ENDLOOP.

MOVE BESTAND-MATNR TO BESTAND_QTR-MATNR.

READ TABLE IT_MAKT WITH KEY MATNR = BESTAND-MATNR.

IF SY-SUBRC = 0.

MOVE IT_MAKT-MAKTX TO BESTAND_QTR-MAKTX.

ENDIF.

READ TABLE IT_T023T WITH KEY MATKL = BESTAND-MATKL.

IF SY-SUBRC = 0.

MOVE IT_T023T-WGBEZ TO BESTAND_QTR-WGBEZ.

ENDIF.

READ TABLE IT_MTART WITH KEY MATNR = BESTAND-MATNR.

IF SY-SUBRC = 0.

MOVE IT_MTART-MTART TO BESTAND_QTR-MTART.

READ TABLE IT_T134 WITH KEY MTART = IT_MTART-MTART.

IF SY-SUBRC = 0.

MOVE IT_T134-MTBEZ TO BESTAND_QTR-MTBEZ.

ENDIF.

ENDIF.

MOVE BESTAND-ANFMENGE TO BESTAND_QTR-ANFMENGE.

MOVE BESTAND-ENDMENGE TO BESTAND_QTR-ENDMENGE.

MOVE BESTAND-ANFWERT TO BESTAND_QTR-ANFWERT.

MOVE BESTAND-ENDWERT TO BESTAND_QTR-ENDWERT.

MOVE BESTAND-MATKL TO BESTAND_QTR-MATKL.

MOVE BESTAND-MEINS TO BESTAND_QTR-MEINS.

MOVE L_REC_QTY TO BESTAND_QTR-SOLL.

MOVE L_ISS_QTY TO BESTAND_QTR-HABEN.

MOVE L_REC_AMT TO BESTAND_QTR-SOLLWERT.

MOVE L_ISS_AMT TO BESTAND_QTR-HABENWERT.

MOVE L_OTHERS_QTY TO BESTAND_QTR-QTY_OTHERS.

MOVE L_OTHERS_AMT TO BESTAND_QTR-AMT_OTHERS.

MOVE L_SALE_QTY TO BESTAND_QTR-QTY_SALE.

MOVE L_SALE_AMT TO BESTAND_QTR-AMT_SALE.

APPEND BESTAND_QTR.

CLEAR BESTAND_QTR.

CLEAR : L_REC_QTY,L_ISS_QTY,L_REC_AMT,L_ISS_AMT,L_OTHERS_QTY,L_OTHERS_AMT,L_SALE_QTY,L_SALE_AMT.

ENDIF.

ELSE.

CONTINUE.

ENDIF.

ENDLOOP.

PERFORM CREATE_FIELD_CATALOG. "Quarter Ending

PERFORM DISPLAY_OUTPUT.

ENDCASE.

Regards

Anu

5 REPLIES 5
Read only

Former Member
0 Likes
579

Instead of select within the loop take the following approach :



SELECT DISTINCT HKONT BUDAT KOSTL FROM BSIS INTO CORRESPONDING FIELDS OF TABLE ITAB1
WHERE BUDAT IN DATUM
AND HKONT IN SAKTO.

If not ITAB1 si initial.

SELECT SINGLE MATNR INTO Gt-MATNR FROM BSEG
For all entries in ITAB1
WHERE
HKONT = ITAB1-WATAB1-HKONT
AND KOSTL = ITAB1-KOSTL
AND MATNR ' '.

if sy-subrc eq 0.
   loop at Gt-MATNR into gw_matnr.
        MOVE WATAB1-HKONT TO BESTAND_QTR-SAKTO.
        MOVE WATAB1-BUDAT TO BESTAND_QTR-DATUM.
       READ TABLE BESTAND WITH KEY MATNR = gw_matnr.

If sy-subrc EQ 0.

****** add ur farther logic here
endif.            
   endif.
endif.

endif. 




Read only

0 Likes
579

Hi abhishek

How have you declared gt-matnr and gw-matnr

Read only

Former Member
0 Likes
579

Hi Annu,

I think you should access table BSIS also by field BUKRS, or else that would give you a full access to the table, instead of an index access.

I hope this helps. Kind regards,

Alvaro

Read only

Former Member
0 Likes
579

Hi,

SELECT DISTINCT HKONT BUDAT KOSTL FROM BSIS INTO CORRESPONDING FIELDS OF TABLE ITAB1

WHERE BUDAT IN DATUM

AND HKONT IN SAKTO.

check Sy-subrc = 0 here....

then dont go for Select inside the LOOP END LOOP... as it dimishes the performance a lot.

try like this

**LOOP AT ITAB1 INTO WATAB1.

SELECT SINGLE MATNR INTO WATAB1-MATNR UPTO 100 Rows FROM BSEG

WHERE

HKONT = WATAB1-HKONT

AND KOSTL = WATAB1-KOSTL

AND MATNR ''.

I just changed the select single statement by writing UP to 100 rows.

Try this..

Regards.

Read only

Former Member
0 Likes
579

solved by own.Changed the logic