‎2009 Mar 23 2:12 PM
Hallo
I have a code for net value. it is working good. But when c_vkdfif-vbtyp = 'K' it dont enter in second loop.
can somebody tell me where is my mistake.
LOOP AT c_vkdfif.
IF c_vkdfif-vbtyp = 'J' OR ( c_vkdfif-vbtyp = 'T' OR c_vkdfif-vbtyp = 'K' ).
SELECT a~netwr b~lfimg a~kwmeng INTO CORRESPONDING FIELDS OF TABLE lt_vbap FROM lips AS b
INNER JOIN vbap AS a ON b~vgbel = a~vbeln AND b~vgpos = a~posnr WHERE b~vbeln = c_vkdfif-vbeln.
LOOP AT lt_vbap.
lvx_netwr = ( lt_vbap-netwr / lt_vbap-kwmeng ) * lt_vbap-lfimg.
lv_netwr = lv_netwr + lvx_netwr.
IF c_vkdfif-vbtyp = 'T'.
IF lv_netwr > 0 OR lv_netwr = 0.
lv_netwr = -1 * lv_netwr.
ELSE.
lv_netwr = lv_netwr - lvx_netwr.
ENDIF.
ENDIF.
IF c_vkdfif-vbtyp = 'K'.
IF lv_netwr > 0 OR lv_netwr = 0.
lv_netwr = -1 * ( lv_netwr + lvx_netwr ).
ELSE.
lv_netwr = lv_netwr - lvx_netwr.
ENDIF.
ENDIF.
ENDLOOP.
c_vkdfif-netwr = lv_netwr.
MODIFY c_vkdfif.
CLEAR lv_netwr.
ENDIF.
ENDLOOP.Thanks a lot
Waseem.
Edited by: Matt on Mar 23, 2009 4:24 PM - added tags
‎2009 Mar 23 2:17 PM
Hi,
Check this below select statement is returning values or not if c_vkdfif-vbtyp = 'K'
SELECT anetwr blfimg a~kwmeng INTO CORRESPONDING FIELDS OF TABLE lt_vbap FROM lips AS b
INNER JOIN vbap AS a ON bvgbel = avbeln AND bvgpos = aposnr WHERE b~vbeln = c_vkdfif-vbeln.
‎2009 Mar 23 2:18 PM
Maybe because the select return sy-subrc = 4 ?
So the internal table lt_vbap doesnt contains any value to loop. Remember that in a INNER JOIN union if the a value exits in A table but not in B table the statment doesnt return anything.
BTW, I recommend you to make the select outside the LOOPS
‎2009 Mar 23 3:13 PM
Try with removing those "(" and ")" . Why u are using this, though you have used this for the same condition field.
Kuntal
‎2009 Mar 23 3:27 PM
I have proposed a code that might solve your problem, please declare an additional field VBELN in LT_VBAP structure. The code is also performance tuned.
if c_vkdikk is not initial.
SELECT a~vbeln
a~netwr
b~lfimg
a~kwmeng
INTO CORRESPONDING FIELDS OF TABLE lt_vbap
FROM lips AS b
INNER JOIN vbap AS a
ON bvgbel = avbeln
AND bvgpos = aposnr
FOR ALL ENTRIES IN c_vkdfif
WHERE b~vbeln = c_vkdfif-vbeln.
SORT c_vkdfif BY vbeln.
SORT lt_vbap BY vbeln.
LOOP AT c_vkdfif.
IF c_vkdfif-vbtyp = 'J' OR
c_vkdfif-vbtyp = 'T' OR
c_vkdfif-vbtyp = 'K'.
CLEAR lt_vbap.
READ TABLE lt_vbap WITH KEY vbeln = c_vkdfif-vbeln
BINARY SEARCH.
IF sy-subrc = 0.
LOOP AT lt_vbap FROM sy-tabix.
IF lt_vbap-vbeln = c_vkdfif-vbeln.
lvx_netwr = ( lt_vbap-netwr / lt_vbap-kwmeng ) * lt_vbap-lfimg.
lv_netwr = lv_netwr + lvx_netwr.
IF c_vkdfif-vbtyp = 'T'.
IF lv_netwr > 0 OR lv_netwr = 0.
lv_netwr = -1 * lv_netwr.
ELSE.
lv_netwr = lv_netwr - lvx_netwr.
ENDIF.
ELSEIF c_vkdfif-vbtyp = 'K'.
IF lv_netwr > 0 OR lv_netwr = 0.
lv_netwr = -1 * ( lv_netwr + lvx_netwr ).
ELSE.
lv_netwr = lv_netwr - lvx_netwr.
ENDIF.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDLOOP.
c_vkdfif-netwr = lv_netwr.
MODIFY c_vkdfif.
CLEAR lv_netwr.
ENDIF.
ENDIF.
endif.
‎2009 Mar 25 1:32 PM