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

need alternatives for my code...

aris_hidalgo
Contributor
0 Likes
618

Hello experts,

I am currently modifying a code where it seems it doesnt pass the data to be fetched into the variables v_usnam and v_ppnam. I checked BSAK table and there is a data on it. Anyway, when I tries to remove the AT NEW statement, it worked. But I need an alternative for AT NEW. Below is the code guys. Thanks you so much...

AT NEW belnr.

CLEAR: v_usnam, v_ppnam.

SELECT SINGLE usnam ppnam FROM bkpf

INTO (v_usnam, v_ppnam)

WHERE bukrs = p_bukrs

AND belnr = it_bsak-belnr

AND gjahr = it_bsak-gjahr.

ENDAT.

it_alv-ppnam = v_ppnam.

it_alv-usnam = v_usnam.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
602

Hi Viray,

The problem which you got above was that

<b>when you use AT NEW.. the fields to the right of the specified fields would be ***.</b>

DATA temp_belnr LIKE it_bsak-belnr.
DATA prev_belnr LIKE it_bsak-belnr.
LOOP AT it_bsak.
temp_belnr = it_bsak-belnr.
IF temp_belnr NE prev_belnr.
CLEAR: v_usnam, v_ppnam.
SELECT SINGLE usnam ppnam FROM bkpf
INTO (v_usnam, v_ppnam)
WHERE bukrs = p_bukrs
AND belnr = it_bsak-belnr
AND gjahr = it_bsak-gjahr.
ENDIF.
prev_belnr = temp_belnr.
it_alv-ppnam = v_ppnam.
it_alv-usnam = v_usnam.
ENDLOOP.

5 REPLIES 5
Read only

Former Member
0 Likes
603

Hi Viray,

The problem which you got above was that

<b>when you use AT NEW.. the fields to the right of the specified fields would be ***.</b>

DATA temp_belnr LIKE it_bsak-belnr.
DATA prev_belnr LIKE it_bsak-belnr.
LOOP AT it_bsak.
temp_belnr = it_bsak-belnr.
IF temp_belnr NE prev_belnr.
CLEAR: v_usnam, v_ppnam.
SELECT SINGLE usnam ppnam FROM bkpf
INTO (v_usnam, v_ppnam)
WHERE bukrs = p_bukrs
AND belnr = it_bsak-belnr
AND gjahr = it_bsak-gjahr.
ENDIF.
prev_belnr = temp_belnr.
it_alv-ppnam = v_ppnam.
it_alv-usnam = v_usnam.
ENDLOOP.

Read only

Former Member
0 Likes
602

hi ,

Table should be sorted when you use control-break statements.

after At new statement you have to use Read statement.

your code should be like this:

AT NEW belnr.

Read table it_bsak index sy-tabix.

CLEAR: v_usnam, v_ppnam.

SELECT SINGLE usnam ppnam FROM bkpf

INTO (v_usnam, v_ppnam)

WHERE bukrs = p_bukrs

AND belnr = it_bsak-belnr

AND gjahr = it_bsak-gjahr.

ENDAT.

it_alv-ppnam = v_ppnam.

it_alv-usnam = v_usnam.

Regards

Ashok P

Read only

Former Member
0 Likes
602

Please give us the structure of your it_bsak. One option is that you declare a structure of type it_bsak and use that in your AT NEW.


DATA: s_bsak LIKE it_bsak.

LOOP AT it_bsak.
  s_bsak = it_bsak.

.....
....
  AT NEW belnr.
    CLEAR: v_usnam, v_ppnam.
    SELECT SINGLE usnam ppnam FROM bkpf
                              INTO (v_usnam, v_ppnam)
                             WHERE bukrs = p_bukrs
                               AND belnr = s_bsak-belnr
                               AND gjahr = s_bsak-gjahr.
  ENDAT.
  it_alv-ppnam = v_ppnam.
  it_alv-usnam = v_usnam.

ENDLOOP. 

Read only

hymavathi_oruganti
Active Contributor
0 Likes
602

ON CHANGE OF IT_BSAK-BELNR.

CLEAR: v_usnam, v_ppnam.

SELECT SINGLE usnam ppnam FROM bkpf

INTO (v_usnam, v_ppnam)

WHERE bukrs = p_bukrs

AND belnr = it_bsak-belnr

AND gjahr = it_bsak-gjahr.

ENDON.

Read only

0 Likes
602

If you don't want to declare an entire addtional structure as I told earlier, you can try this too.


DATA: l_index LIKE sy-tabix.
 
LOOP AT it_bsak.
  l_index = sy-tabix.
 
.....
....
  AT NEW belnr.
    READ TABLE it_bsak INDEX l_index.
    CLEAR: v_usnam, v_ppnam.
    SELECT SINGLE usnam ppnam FROM bkpf
                              INTO (v_usnam, v_ppnam)
                             WHERE bukrs = p_bukrs
                               AND belnr = it_bsak-belnr
                               AND gjahr = it_bsak-gjahr.
  ENDAT.
  it_alv-ppnam = v_ppnam.
  it_alv-usnam = v_usnam.
 
ENDLOOP.