Application Development 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: 

help in clear ..................

Former Member
0 Kudos

hi Gurus...

i have a small issue in my report where

my select is working good and satisfying the screen condition and according fetches values

but inside the loop , i have used a read stmt to check sy-subrc NE 0 and gets appended to my itable ,

but thing is that , when i have a conditio which doesnt satisfy the sel. screen

the field that is inside the read stmt ...tat column value alone returns in the ALV , i have used the clear but than its showin in the o/p.

wat ever field i use inside the read get shown in the o/p thou the cond is not satisfied, where to clear

PLZ HELP

i have given my code..........................

  LOOP AT it_pos INTO wa_pos .
    READ TABLE it_kna1 INTO wa_kna1 WITH KEY kunnr = wa_pos-konto .
    IF sy-subrc = 0.

      wa_final-name1 = wa_kna1-name1.
      wa_final-budat = wa_pos-budat.

      READ TABLE it_t005u INTO wa_t005u WITH KEY  bland = wa_kna1-regio.
      IF sy-subrc = 0.
        wa_final-bezei = wa_t005u-bezei.
      ENDIF.

    ENDIF.

*read table it_vbrp into wa_vbrp with key vbeln = wa_vbeln.*
*if sy-subrc ne 0.*
*wa_final-xblnr = wa_pos-xblnr.
*
*append wa_final to it_final.
*
*endif.
*
    LOOP AT it_vbrp INTO wa_vbrp  WHERE  vbeln = wa_vbeln .

      READ TABLE it_vbrk INTO wa_vbrk WITH KEY vbeln = wa_vbrp-vbeln.
      IF sy-subrc = 0.
        wa_final-knumv = wa_vbrk-knumv.
      ENDIF.

      wa_final-arktx = wa_vbrp-arktx.
      wa_final-fkimg = wa_vbrp-fkimg.
      wa_final-sgtxt = wa_pos-sgtxt.

      LOOP AT it_konv INTO wa_konv WHERE knumv = wa_vbrk-knumv AND  kposn = wa_vbrp-posnr.

        wa_pos-dmshb = ( wa_konv-kwert ) - ( ( wa_konv-kwert * ra_data ) / 100 ).
        wa_final-dmbtr = wa_pos-dmshb.

        APPEND wa_final TO it_final.

      ENDLOOP.
    ENDLOOP.
    CLEAR:  wa_kna1, wa_t005u,wa_vbrk, wa_vbrp, wa_konv, wa_final, wa_pos.
  ENDLOOP.

Edited by: Matt on Apr 13, 2009 8:02 AM Please wrap code in tags. See how much easier it is to read!

Edited by: Matt on Apr 13, 2009 8:03 AM - corrected indenting

15 REPLIES 15

Former Member
0 Kudos

Dear ,

Always clear the work area just before the endif of ur sy-subrc check . if you dont need that value for further processing .

read table it_vbrp into wa_vbrp with key vbeln = wa_vbeln.

If sy-subrc NE 0.

wa_final-xblnr = wa_pos-xblnr.

append wa_final to it_final.

clear wa_final , wa_pos

Endif.

Thanks

-Ankit

0 Kudos

thank you ankit ...but still the same problem ....and not getting cleared

matt
Active Contributor
0 Kudos

Go through your program in debug and see what happens to the variables.

matt

0 Kudos

Hi,

A Basic thumb rule is we need to use clear statement after every append statement

Eg:

Append wa to itab.

clear wa.

and it is advisable to clear before read statement

clear wa.

Read itab into wa index sy-tabix.

{

Your condition can be used after read statement

}

Thanks

Santhiya B

0 Kudos

Hi,

Is the internal table get appended with no value in it or with the previous value..

dev_parbutteea
Active Contributor
0 Kudos

Hi,

LOOP AT it_pos INTO wa_pos .

clear wa_kna1.

READ TABLE it_kna1 INTO wa_kna1 WITH KEY kunnr = wa_pos-konto .

IF sy-subrc = 0.

wa_final-name1 = wa_kna1-name1.

wa_final-budat = wa_pos-budat.

clear wa_t005u.

read table it_t005u into wa_t005u with key bland = wa_kna1-regio.

If sy-subrc = 0.

wa_final-bezei = wa_t005u-bezei.

Endif.

Endif.

clear wa_vbrp.

read table it_vbrp into wa_vbrp with key vbeln = wa_vbeln.

If sy-subrc NE 0.

wa_final-xblnr = wa_pos-xblnr.

append wa_final to it_final.

Endif.

Loop at it_vbrp into wa_vbrp where vbeln = wa_vbeln .

clear: wa_final-knumv, wa_final-arktx, wa_Final-fkimg , wa_final-sgtxt, wa_final-dmbtr.

read table it_vbrk into wa_vbrk with key vbeln = wa_vbrp-vbeln.

If sy-subrc = 0.

wa_final-knumv = wa_vbrk-knumv.

Endif.

wa_final-arktx = wa_vbrp-arktx.

wa_Final-fkimg = wa_vbrp-fkimg.

wa_final-sgtxt = wa_pos-sgtxt.

Loop at it_konv into wa_konv where knumv = wa_vbrk-knumv and kposn = wa_vbrp-posnr.

wa_pos-dmshb = ( wa_konv-kwert ) - ( ( wa_konv-kwert * ra_data ) / 100 ).

wa_final-dmbtr = wa_pos-dmshb.

Append wa_final to it_final.

clear wa_konv.

Endloop.

clear wa_vbrp.

Endloop.

clear: wa_kna1, wa_t005u,wa_vbrk, wa_vbrp, wa_konv, wa_final, wa_pos.

ENDLOOP.

0 Kudos

DEV IAM HAVING STILL THE SAME ISSUE THOU TRIED WITH YOUR CHANGED

0 Kudos

c the problem is that i suppose you have not CLEARED the fields .

debug the code and check the work area after each read statement i think you will get the solution of your question .

0 Kudos

While debugging i noticed that

since the sy-subrc NE 0 is been checked and since that condition is getting satisfied and has values in it , the field inside the read stmt returns value in the final output....but the previous values are getting cleared

0 Kudos

Hi,

I guess the problem could be here...

LOOP AT it_konv INTO wa_konv WHERE knumv = wa_vbrk-knumv AND  kposn = wa_vbrp-posnr.
 
        wa_pos-dmshb = ( wa_konv-kwert ) - ( ( wa_konv-kwert * ra_data ) / 100 ).
        wa_final-dmbtr = wa_pos-dmshb.
 
        APPEND wa_final TO it_final.
 
      ENDLOOP.

I think it might have to be like - calculate with in loop and store in a variable..

MOVE and append after the LOOP.

Edited by: Guru Ram on Apr 13, 2009 8:35 AM

Former Member
0 Kudos

LOOP AT it_pos INTO wa_pos . -


>>> main loop

READ TABLE it_kna1 INTO wa_kna1 WITH KEY kunnr = wa_pos-konto . -->> 1st read

IF sy-subrc = 0.

wa_final-name1 = wa_kna1-name1.

wa_final-budat = wa_pos-budat.

read table it_t005u into wa_t005u with key bland = wa_kna1-regio.

If sy-subrc = 0.

wa_final-bezei = wa_t005u-bezei.

Endif.

Endif.

read table it_vbrp into wa_vbrp with key vbeln = wa_vbeln. --->> 2nd read

If sy-subrc NE 0.

wa_final-xblnr = wa_pos-xblnr.

append wa_final to it_final.

Endif.

Loop at it_vbrp into wa_vbrp where vbeln = wa_vbeln . -->> 2nd loop

read table it_vbrk into wa_vbrk with key vbeln = wa_vbrp-vbeln.

If sy-subrc = 0.

wa_final-knumv = wa_vbrk-knumv.

Endif.

wa_final-arktx = wa_vbrp-arktx.

wa_Final-fkimg = wa_vbrp-fkimg.

wa_final-sgtxt = wa_pos-sgtxt.

Loop at it_konv into wa_konv where knumv = wa_vbrk-knumv and kposn = wa_vbrp-posnr.

wa_pos-dmshb = ( wa_konv-kwert ) - ( ( wa_konv-kwert * ra_data ) / 100 ).

wa_final-dmbtr = wa_pos-dmshb.

Append wa_final to it_final.

Endloop.

Endloop.

clear: wa_kna1, wa_t005u,wa_vbrk, wa_vbrp, wa_konv, wa_final, wa_pos.

ENDLOOP.

-


main loop satisfied ....

1st read not satisfied..

2nd read satisfied the if condition.

2nd loop not satisfied.

then the result is as u said...only one colum will get appended and will be shown in the O/P.

Former Member
0 Kudos

Hi,

Actually your code s not pretty clear,but as you said

but thing is that , when i have a conditio which doesnt satisfy the sel. screen 
the field that is inside the read stmt ...tat column value alone returns in the ALV , i have used the clear but than its showin in the o/p.

is happening becuase you are first moving value into Work Area-->Appending it and then at the end clearing it,for eg. in ur code

READ TABLE it_vbrk INTO wa_vbrk WITH KEY vbeln = wa_vbrp-vbeln.
      IF sy-subrc = 0.
        wa_final-knumv = wa_vbrk-knumv.
      ENDIF

.

but if ur conditions are not satisfied then you shud clear this field befor appending..

READ TABLE it_vbrk INTO wa_vbrk WITH KEY vbeln = wa_vbrp-vbeln.
      IF sy-subrc = 0.
        wa_final-knumv = wa_vbrk-knumv.
      *ELSE.*
           *CLEAR wa_final-knumv .*
      ENDIF.

....so just use the approach if conditions successful--->populate WA_FINAL-fld

else CLEAR WA_FINAL-fld>Append->Clear WA_FINAL

Regards,

Neha

Edited by: Neha Shukla on Apr 13, 2009 11:53 AM

Former Member
0 Kudos

What u have to do is, jus write as below...

if sy-subrc NE 0.

if wa_final is not initial. -


>>> New condition

wa_final-xblnr = wa_pos-xblnr.

append wa_final to i_final

endif.

endif.

This will solve ur problem

Regards,

Veeranji Reddy P.

Former Member
0 Kudos

try the below code

add the bold letters clear statement,now i will work

{

LOOP AT it_pos INTO wa_pos .

clear wa_final. "it needs to be cleared here because in different places u r trying to append and this is the starting place,so it ideal to clear here.

clear wa_kna1.

READ TABLE it_kna1 INTO wa_kna1 WITH KEY kunnr = wa_pos-konto .

IF sy-subrc = 0.

wa_final-name1 = wa_kna1-name1.

wa_final-budat = wa_pos-budat.

clear wa_t005u

READ TABLE it_t005u INTO wa_t005u WITH KEY bland = wa_kna1-regio.

IF sy-subrc = 0.

wa_final-bezei = wa_t005u-bezei.

ENDIF.

ENDIF.

read table it_vbrp into wa_vbrp with key vbeln = wa_vbeln.

if sy-subrc ne 0.

*wa_final-xblnr = wa_pos-xblnr.

*

*append wa_final to it_final.

*

*endif.

*

LOOP AT it_vbrp INTO wa_vbrp WHERE vbeln = wa_vbeln .

clear wa_vbrk.

READ TABLE it_vbrk INTO wa_vbrk WITH KEY vbeln = wa_vbrp-vbeln.

IF sy-subrc = 0.

wa_final-knumv = wa_vbrk-knumv.

ENDIF.

wa_final-arktx = wa_vbrp-arktx.

wa_final-fkimg = wa_vbrp-fkimg.

wa_final-sgtxt = wa_pos-sgtxt.

LOOP AT it_konv INTO wa_konv WHERE knumv = wa_vbrk-knumv AND kposn = wa_vbrp-posnr.

wa_pos-dmshb = ( wa_konv-kwert ) - ( ( wa_konv-kwert * ra_data ) / 100 ).

wa_final-dmbtr = wa_pos-dmshb.

APPEND wa_final TO it_final.

clear wa_final.

ENDLOOP.

ENDLOOP.

CLEAR: wa_kna1, wa_t005u,wa_vbrk, wa_vbrp, wa_konv, wa_final, wa_pos.

ENDLOOP.

}

Former Member
0 Kudos

thankx all ....i solved the problem by myself.................

the issue was that ...before getting inside the loop i jus checked the condition as

if it_kna1[] not initial...