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

Loop-EndLoop

Former Member
0 Likes
721

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

5 REPLIES 5
Read only

Former Member
0 Likes
613

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.

Read only

Rodrigo-Giner
Active Contributor
0 Likes
613

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

Read only

former_member376453
Contributor
0 Likes
613

Try with removing those "(" and ")" . Why u are using this, though you have used this for the same condition field.

Kuntal

Read only

jcutinho
Explorer
0 Likes
613

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.

Read only

Former Member
0 Likes
613

Thanks I solved my problem with your tip.