12-12-2013 11:49 AM
Dear Friends,
i have one requirement,
i am retrieving data from BKPF and BSEG tables and appending in final table, right now i am getting two rows in final itab but i want only one row
please check below snap shots and also my code, could any one please give me the soloution
Advance Thanks
Vijaya
my final out put should be like 2nd row of final internal table
types : begin of ty_bkpf,
belnr type BELNR_D,
bldat type bldat,
budat type budat,
xblnr type XBLNR1,
bktxt type BKTXT,
waers type waers,
end of ty_bkpf.
data : lt_bkpf type TABLE OF ty_bkpf,
ls_bkpf type ty_bkpf.
TYPES : begin of ty_bseg,
belnr TYPE belnr_d,
fistl type fistl,
wrbtr type wrbtr,
lifnr type lifnr,
end of ty_bseg.
data : lt_bseg type table of ty_bseg,
ls_bseg type ty_bseg.
types : begin of ty_final,
belnr type BELNR_D,
bldat type bldat,
budat type budat,
xblnr type XBLNR1,
bktxt type BKTXT,
waers type waers,
fistl type fistl,
wrbtr type wrbtr,
lifnr type lifnr,
end of ty_final.
data : lt_final type table of ty_final,
ls_final type ty_final.
START-OF-SELECTION.
perform get_data.
PERFORM process_data.
perform disp_data.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA .
select belnr
bldat
budat
xblnr
bktxt
waers
from bkpf into table lt_bkpf WHERE belnr = '6000000079'.
if lt_bkpf is NOT INITIAL.
select belnr
fistl
wrbtr
lifnr from bseg into table lt_bseg FOR ALL ENTRIES IN lt_bkpf where belnr = lt_bkpf-belnr and lifnr = 'ACHPT9065K'.
endif.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form DISP_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISP_DATA .
loop at lt_final into ls_final.
write : / ls_final-bldat, ls_final-belnr, ls_final-budat, ls_final-waers, ls_final-xblnr, ls_final-bktxt, ls_final-lifnr, ls_final-fistl, ls_final-wrbtr.
ENDLOOP.
ENDFORM. " DISP_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PROCESS_DATA .
loop at lt_bseg into ls_bseg.
ls_final-belnr = ls_bseg-belnr.
ls_final-wrbtr = ls_bseg-wrbtr.
ls_final-fistl = ls_bseg-fistl.
ls_final-lifnr = ls_bseg-lifnr.
append ls_final to lt_final.
READ TABLE lt_bkpf into ls_bkpf with key belnr = ls_bseg-belnr.
ls_final-bldat = ls_bkpf-bldat.
ls_final-budat = ls_bkpf-budat.
ls_final-xblnr = ls_bkpf-xblnr.
ls_final-bktxt = ls_bkpf-bktxt.
ls_final-waers = ls_bkpf-waers.
append ls_final to lt_final.
clear : ls_bkpf , ls_bseg, ls_final.
ENDLOOP.
ENDFORM.
12-12-2013 12:03 PM
Only one append statement is enough
loop at lt_bseg into ls_bseg.
ls_final-belnr = ls_bseg-belnr.
ls_final-wrbtr = ls_bseg-wrbtr.
ls_final-fistl = ls_bseg-fistl.
ls_final-lifnr = ls_bseg-lifnr.
append ls_final to lt_final.
READ TABLE lt_bkpf into ls_bkpf with key belnr = ls_bseg-belnr.
ls_final-bldat = ls_bkpf-bldat.
ls_final-budat = ls_bkpf-budat.
ls_final-xblnr = ls_bkpf-xblnr.
ls_final-bktxt = ls_bkpf-bktxt.
ls_final-waers = ls_bkpf-waers.
append ls_final to lt_final.
clear : ls_bkpf , ls_bseg, ls_final.
ENDLOOP.
12-12-2013 11:57 AM
Hi,
When you are looping, use this.
loop at lt_bseg into ls_bseg.
READ TABLE lt_bkpf into ls_bkpf with key belnr = ls_bseg-belnr.
ls_final-belnr = ls_bseg-belnr.
ls_final-wrbtr = ls_bseg-wrbtr.
ls_final-fistl = ls_bseg-fistl.
ls_final-lifnr = ls_bseg-lifnr.
ls_final-bldat = ls_bkpf-bldat.
ls_final-budat = ls_bkpf-budat.
ls_final-xblnr = ls_bkpf-xblnr.
ls_final-bktxt = ls_bkpf-bktxt.
ls_final-waers = ls_bkpf-waers.
append ls_final to lt_final.
clear : ls_bkpf , ls_bseg, ls_final.
ENDLOOP.
Regards
12-12-2013 12:00 PM
Hi Vijaya,
in the sub routine process_data,
please put a check for sy-subrc after READ statement.
as
Read from table DDIC_TABLE into lwa
if sy-subrc = 0.
fill the data to work area.
append the work area to final table
endif.
let us know if in case of any issues.
Thanks
bhaskar
12-12-2013 12:03 PM
Only one append statement is enough
loop at lt_bseg into ls_bseg.
ls_final-belnr = ls_bseg-belnr.
ls_final-wrbtr = ls_bseg-wrbtr.
ls_final-fistl = ls_bseg-fistl.
ls_final-lifnr = ls_bseg-lifnr.
append ls_final to lt_final.
READ TABLE lt_bkpf into ls_bkpf with key belnr = ls_bseg-belnr.
ls_final-bldat = ls_bkpf-bldat.
ls_final-budat = ls_bkpf-budat.
ls_final-xblnr = ls_bkpf-xblnr.
ls_final-bktxt = ls_bkpf-bktxt.
ls_final-waers = ls_bkpf-waers.
append ls_final to lt_final.
clear : ls_bkpf , ls_bseg, ls_final.
ENDLOOP.
12-12-2013 12:07 PM
Hi,
Check ur form PROCESS_DATA ....You are using 2 appends for the same data...delete the first append as Susmitha Susan Thomas said.
Regards
Miguel
12-12-2013 12:13 PM
12-12-2013 12:21 PM
Hi Laxmi,
As you are appending data to the same table for two times in a loop obviously there will be two records in your output.
As above Developer's suggestion please remove 'append' statement before 'Read' statement.
FORM PROCESS_DATA .
loop at lt_bseg into ls_bseg.
ls_final-belnr = ls_bseg-belnr.
ls_final-wrbtr = ls_bseg-wrbtr.
ls_final-fistl = ls_bseg-fistl.
ls_final-lifnr = ls_bseg-lifnr.
append ls_final to lt_final.
READ TABLE lt_bkpf into ls_bkpf with key belnr = ls_bseg-belnr.
ls_final-bldat = ls_bkpf-bldat.
ls_final-budat = ls_bkpf-budat.
ls_final-xblnr = ls_bkpf-xblnr.
ls_final-bktxt = ls_bkpf-bktxt.
ls_final-waers = ls_bkpf-waers.
append ls_final to lt_final.
clear : ls_bkpf , ls_bseg, ls_final.
ENDLOOP.
ENDFORM.
Thanks & Regards,
Vijay