2008 Feb 12 7:20 AM
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
2008 Feb 12 7:29 AM
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.
2008 Feb 12 7:46 AM
2008 Feb 12 7:29 AM
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
2008 Feb 12 7:36 AM
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.
2008 Mar 03 6:36 AM
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |