‎2008 Apr 04 2:44 AM
Hi
I need to create one new ALV report.
I need to extract BUDAT, MONAT, SAKNR, AUFNR, SGTXT, BLART, WAERS fields in one internal table, and display these in to ALV format.
main table is : BKPF & BSEG.
i extracted budat belnr monat blart waers into it_bkpf &
saknr aufnr dmbtr sgtxt belnr into it_bseg
i need to combain both tables into it_detail table.
pls help me .Following is my code.
-
REPORT z_cost_analyzer
TABLES: bkpf, " Accounting Document Header
bseg. " Accounting Document Segment
DATA : BEGIN OF it_bkpf OCCURS 0,
budat LIKE bkpf-budat, "posting date
belnr LIKE bkpf-belnr,
monat LIKE bkpf-monat, "posting period
saknr LIKE bseg-saknr, " G/L Account
aufnr LIKE bseg-aufnr, " Internal order No
sgtxt LIKE BSEG-SGTXT, " JOB (Item Text)
blart LIKE bkpf-blart, " Document Type
dmbtr LIKE bseg-dmbtr, " amount in local currency
waers LIKE bkpf-waers, " currency Key
END OF it_bkpf.
DATA : BEGIN OF it_bseg OCCURS 0,
saknr LIKE bseg-saknr, " G/L Account
aufnr LIKE bseg-aufnr, " Internal order No
dmbtr LIKE bseg-dmbtr, " amount in local currency
sgtxt LIKE BSEG-SGTXT, " JOB (Item Text)
belnr LIKE bkpf-belnr,
END OF it_bseg.
DATA : BEGIN OF it_detail OCCURS 0,
budat LIKE bkpf-budat, "posting date
monat LIKE bkpf-monat, "posting period
saknr LIKE bseg-saknr, " G/L Account
aufnr LIKE bseg-aufnr, " Internal order No
sgtxt LIKE BSEG-SGTXT, " JOB (Item Text)
blart LIKE bkpf-blart, " Document Type
dmbtr LIKE bseg-dmbtr, " amount in local currency
waers LIKE bkpf-waers, " currency Key
END OF it_detail.
SELECTION-SCREEN BEGIN OF BLOCK sel1 WITH FRAME TITLE text-001.
PARAMETERS: p_bukrs LIKE bkpf-bukrs OBLIGATORY DEFAULT '027',
p_werks LIKE bseg-werks OBLIGATORY DEFAULT '2703'.
SELECT-OPTIONS: s_saknr FOR bseg-saknr DEFAULT '461100',
s_aufnr FOR bseg-aufnr,
s_blart FOR bkpf-blart,
s_budat FOR bkpf-budat,
s_waers FOR bkpf-waers.
SELECTION-SCREEN END OF BLOCK sel1.
SELECTION-SCREEN BEGIN OF BLOCK sel2 WITH FRAME TITLE text-002.
PARAMETERS: p_detail RADIOBUTTON GROUP rad1 DEFAULT 'X',
p_sum RADIOBUTTON GROUP rad1.
SELECTION-SCREEN END OF BLOCK sel2.
START-OF-SELECTION.
*get data
START-OF-SELECTION.
IF p_detail = 'X'.
PERFORM get_data.
ELSE.
ENDIF.
FORM get_data.
SELECT budat belnr monat blart waers
INTO TABLE it_bkpf
FROM bkpf
WHERE bukrs = '027'
AND blart IN s_blart
AND budat IN s_budat
AND waers IN s_waers.
SELECT saknr aufnr dmbtr sgtxt belnr INTO TABLE it_bseg
FROM bseg
WHERE bukrs = '027'.
LOOP AT it_bkpf.
READ TABLE it_bseg WITH KEY
belnr = it_bkpf-belnr.
IF sy-subrc = 0.
ENDIF.
ENDLOOP.
ENDFORM. " get_data
‎2008 Apr 04 3:05 AM
SELECT budat belnr monat blart waers
INTO TABLE it_details
( " not it_bkpf, not use of structer bkpf, directly attech your final iternal table, after read the final itab then append bseg fileds to that ")
FROM bkpf
WHERE bukrs = '027'
AND blart IN s_blart
AND budat IN s_budat
AND waers IN s_waers.
SELECT saknr aufnr dmbtr sgtxt belnr INTO TABLE it_bseg
FROM bseg for all entries in it_bkpf
WHERE bukrs = it_bkpf-bukrs.
if not it_details initial.
loop at it_detail.
read table it_bkpf with key bukrs = it_detail-bukrs.
if sy-subrc eq 0.
lw_detail -saknr = lw_bseg-saknr.
lw_detail-sgtxt = lw_bseg-sgtxt.
modify it_detail.
endif.
endloop.
endif.
‎2008 Apr 04 3:05 AM
SELECT budat belnr monat blart waers
INTO TABLE it_details
( " not it_bkpf, not use of structer bkpf, directly attech your final iternal table, after read the final itab then append bseg fileds to that ")
FROM bkpf
WHERE bukrs = '027'
AND blart IN s_blart
AND budat IN s_budat
AND waers IN s_waers.
SELECT saknr aufnr dmbtr sgtxt belnr INTO TABLE it_bseg
FROM bseg for all entries in it_bkpf
WHERE bukrs = it_bkpf-bukrs.
if not it_details initial.
loop at it_detail.
read table it_bkpf with key bukrs = it_detail-bukrs.
if sy-subrc eq 0.
lw_detail -saknr = lw_bseg-saknr.
lw_detail-sgtxt = lw_bseg-sgtxt.
modify it_detail.
endif.
endloop.
endif.
‎2008 Apr 04 5:28 AM
hiii try to use join condition its more simpler..
select bkpfbudat bkpfbelnr bkpfmonat bkpfblart bkpfwaers bsegsaknr bsegaufnr bsegdmbtr bseg~sgtxt
from bkpf
inner join bseg
on bkpfbelnr = bsegbelnr
and bkpfbukrs = bsegbukrs
and bkpfgjahr = bseggjahr
into table it_detail.
use where condition if you want only a few fields.
think this solves the problem
reward if helpful
regards
prasanth.
‎2008 Apr 04 6:12 AM
i tried the following statement. i got error message
"For pooled tables, cluster tables and projection views, JOIN is not allowed: "BSEG". "
SELECT bkpf~budat
bkpf~belnr
bkpf~monat
bseg~saknr
bseg~aufnr
bseg~sgtxt
bkpf~blart
bkpf~waers
bseg~dmbtr
FROM bkpf
INNER JOIN bseg
ON bkpfbelnr = bsegbelnr
AND bkpfbukrs = bsegbukrs
AND bkpfgjahr = bseggjahr
where bukrs = '027'.
INTO TABLE it_detail.
‎2008 Apr 04 5:59 AM
Try this,
LOOP AT it_bkpf.
READ TABLE it_bseg WITH KEY
belnr = it_bkpf-belnr.
IF sy-subrc = 0.
MOVE-CORRESPONDING it_bkpf TO it_detail.
MOVE-CORRESPONDING it_bseg TO it_detail.
APPEND it_detail.
ENDIF.
ENDLOOP.
‎2008 Apr 04 6:11 AM
SELECT budat belnr monat blart waers
INTO TABLE it_bkpf
FROM bkpf
WHERE bukrs = '027'
AND blart IN s_blart
AND budat IN s_budat
AND waers IN s_waers.
IF not it_bkpf [] is intial
SELECT saknr aufnr dmbtr sgtxt belnr INTO TABLE it_bseg
FROM bseg
for all entries in it_bkpf
WHERE bukrs = it_bkpf-bukrs
and belnr = it_bkpf-belnr.
LOOP AT it_bkpf.
READ TABLE it_bseg WITH KEY
belnr = it_bkpf-belnr.
IF sy-subrc = 0.
it_detail -saknr = it_bseg-saknr.
lt_detail-sgtxt = lt_bseg-sgtxt........
ENDIF.
it_detail -budat =it_bkpf-budat
it_detail -budat =it_bkpf-belnr, monat blart waers
modify it_detail.
ENDLOOP.
ENDFORM. " get_data