09-30-2008 12:08 PM
Hi,
SELECT-OPTIONS: SO_KUNNR FOR KNA1-KUNNR OBLIGATORY.
SORT IT_BSID1 BY KUNNR.
SORT IT_KNA1 BY KUNNR.
SORT IT_OPBAL BY KUNNR.
LOOP AT IT_KNA1 INTO WA_KNA1.
CLEAR : WA_OUTPUT.
WA_OUTPUT-KUNNR = WA_KNA1-KUNNR.
WA_OUTPUT-NAME1 = WA_KNA1-NAME1.
READ TABLE IT_OPBAL WITH KEY KUNNR = WA_KNA1-KUNNR
BINARY SEARCH.
IF SY-SUBRC = 0.
WA_OUTPUT-OPNBAL = IT_OPBAL-LC_BAL.
ENDIF.
LOOP AT IT_BSID1 INTO WA_BSID1 WHERE KUNNR = WA_KNA1-KUNNR.
IF SY-SUBRC = 0.
CASE WA_BSID1-BLART.
WHEN 'RV'.
IF WA_BSID1-SHKZG = 'S'.
WA_OUTPUT-SALE = WA_BSID1-DMBTR.
ENDIF.
ENDLOOP.
ENDLOOP.
Both WA_KNA1 AND WA_BSID1 contains the same KUNNR .
But after LOOP AT .....WHERE i am not getting SY-SUBRC = 0.
For example if i give the KUNNR = 2 in the selection-screen everything is fine but if i give KUNNR = 7002 in the selection-screen the above problem is arising.
when i checked in debugging at
LOOP AT ...WHERE statement
wa_kna1-kunnr = 0000007002 and wa_bsid1-kunnr = 0000007002.But iam getting sy-subrc = 8. Please suggest soln .
Thanks and Regards
Venkat
09-30-2008 12:27 PM
I don't think that LOOP is setting SY-SUBRC inside the loop. Which means that in some cases SY-SUBRC ne 0 could "survive" from the preceding READ statement (no entry in IT_OPBAL).
From my point of view you can remove the IF SY-SUBRC = 0 statement inside the LOOP AT IT_BSID1 altogether, because you will not be inside the loop anymore, should SY-SUBRC be not equal 0.
Thomas
P.S. just looked it up in ABAP docu: LOOP is not setting SY-SUBRC, only when there were no LOOP passes at all due to the WHERE condition, SY-SUBRC will be 4 after the ENDLOOP.
10-01-2008 12:25 AM
Hi,
that IF condition in the second loop is useless. That second loop goes only over records which fulfill the condition in WHERE. You can also combine conditions in your WHERE statement.
LOOP AT IT_BSID1 INTO WA_BSID1 WHERE KUNNR = WA_KNA1-KUNNR AND
SHKZG = 'S' AND
BLART = 'RV'.
WA_OUTPUT-SALE = WA_BSID1-DMBTR.
ENDLOOP.
Cheers
10-05-2008 12:56 PM
hey,
In the case of LOOPS there is no need to check the SY-SUBRC ok,
Chage the code as,
LOOP AT IT_BSID1 INTO WA_BSID1 WHERE KUNNR = WA_KNA1-KUNNR.
CASE WA_BSID1-BLART.
WHEN 'RV'.
IF WA_BSID1-SHKZG = 'S'.
WA_OUTPUT-SALE = WA_BSID1-DMBTR.
ENDCASE.
ENDLOOP.
ENDLOOP.
Regards,
Midhun Abraham
10-06-2008 9:30 AM
hi,
you are getting result of READ TABLE IT_OPBAL WITH KEY KUNNR = WA_KNA1-KUNNR BINARY SEARCH.
You can get result for LOOP after the ENDLOOP statement.system will give 0 or 4. 0 for LOOP has gone inside. 4 for LOOP didn't go to inside.
10-06-2008 10:14 AM
SELECT-OPTIONS: SO_KUNNR FOR KNA1-KUNNR OBLIGATORY.
SORT IT_BSID1 BY KUNNR.
SORT IT_KNA1 BY KUNNR.
SORT IT_OPBAL BY KUNNR.
LOOP AT IT_KNA1 INTO WA_KNA1.
CLEAR : WA_OUTPUT.
WA_OUTPUT-KUNNR = WA_KNA1-KUNNR.
WA_OUTPUT-NAME1 = WA_KNA1-NAME1.
READ TABLE IT_OPBAL
WITH KEY KUNNR = WA_KNA1-KUNNR
BINARY SEARCH.
IF SY-SUBRC = 0.
WA_OUTPUT-OPNBAL = IT_OPBAL-LC_BAL.
ENDIF.
LOOP AT IT_BSID1
INTO WA_BSID1
WHERE KUNNR = WA_KNA1-KUNNR.
IF SY-SUBRC = 0.
CASE WA_BSID1-BLART.
WHEN 'RV'.
IF WA_BSID1-SHKZG = 'S'.
WA_OUTPUT-SALE = WA_BSID1-DMBTR.
ENDIF.
ENDLOOP.
ENDLOOP.
What you need a better performaning solution
SELECT-OPTIONS: SO_KUNNR FOR KNA1-KUNNR OBLIGATORY.
SORT IT_BSID1 BY KUNNR.
SORT IT_KNA1 BY KUNNR.
SORT IT_OPBAL BY KUNNR.
LOOP AT IT_KNA1 INTO WA_KNA1.
CLEAR : WA_OUTPUT.
WA_OUTPUT-KUNNR = WA_KNA1-KUNNR.
WA_OUTPUT-NAME1 = WA_KNA1-NAME1.
READ TABLE IT_OPBAL
WITH KEY KUNNR = WA_KNA1-KUNNR
BINARY SEARCH.
IF SY-SUBRC = 0.
WA_OUTPUT-OPNBAL = IT_OPBAL-LC_BAL.
ENDIF.
READ TABLE IT_BSID1
TRANSPORTING NO FIELDS
WHERE KUNNR = WA_KNA1-KUNNR.
BINARY SEARCH.
IF SY-SUBRC = 0.
TABIX = SY-TABIX.
LOOP AT IT_BSID1
INTO WA_BSID1
FROM INDEX tabix.
IF ( WA_BSID1-KUNNR NE WA_KNA1-KUNNR ).
EXIT.
ELSE.
IF ( WA_BSID1-BLART = 'RV'
AND WA_BSID1-SHKZG = 'S' ).
WA_OUTPUT-SALE = WA_BSID1-DMBTR.
ENDIF.
WA_OUTPUT-OPNBAL = IT_OPBAL-LC_BAL.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
There are maybe some smaller bugs, which you will easily figure out with the syntax check, but the structurse should be o.k.
Siegfried