‎2006 Mar 10 2:56 AM
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.
‎2006 Mar 10 3:00 AM
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.
‎2006 Mar 10 3:00 AM
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.
‎2006 Mar 10 3:06 AM
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
‎2006 Mar 10 3:13 AM
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.
‎2006 Mar 10 3:43 AM
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.
‎2006 Mar 10 3:49 AM
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.