2014 Apr 18 11:37 AM
I have two internal table for bkpf and bseg.But when i merge these two internal tables in third one it works correctly and gives output but problem is it takes very large time to give result.
The code is as follow:
SELECT-OPTIONS:s_docnum FOR bkpf-belnr,
s_cmpcde FOR bkpf-bukrs OBLIGATORY.
PARAMETERS: p_fysyr TYPE bkpf-gjahr matchcode object Z_GZAHR OBLIGATORY.
SELECT-OPTIONS : s_accnt FOR bseg-koart.
*1st intrnal table
TYPES: BEGIN OF ty_bkpf,
docno TYPE bkpf-belnr,
comcode TYPE bkpf-bukrs,
year TYPE bkpf-gjahr,
END OF ty_bkpf.
*2nd internal table
TYPES: BEGIN OF ty_bseg,
litmno TYPE bseg-buzei,
acctyp TYPE bseg-koart,
cust TYPE bseg-kunnr,
vendor TYPE bseg-lifnr,
indicator TYPE bseg-shkzg,
amt TYPE bseg-dmbtr,
END OF ty_bseg.
*final internal table
TYPES : BEGIN OF ty_ftab,
docno TYPE bkpf-belnr,
comcode TYPE bkpf-bukrs,
year TYPE bkpf-gjahr,
litmno TYPE bseg-buzei,
acctyp TYPE bseg-koart,
cust TYPE bseg-kunnr,
vendor TYPE bseg-lifnr,
indicator TYPE bseg-shkzg,
amt TYPE bseg-dmbtr,
END OF ty_ftab.
DATA: it_bseg TYPE TABLE OF ty_bseg,
wa_bseg TYPE ty_bseg,
it_bkpf TYPE TABLE OF ty_bkpf,
wa_bkpf TYPE ty_bkpf,
it_ftab TYPE TABLE OF ty_ftab,
wa_ftab TYPE ty_ftab.
START-OF-SELECTION.
SELECT belnr bukrs gjahr
FROM bkpf
INTO TABLE it_bkpf
WHERE belnr IN s_docnum and bukrs IN s_cmpcde AND gjahr = p_fysyr.
SELECT buzei koart kunnr lifnr shkzg dmbtr
FROM bseg
INTO TABLE it_bseg
WHERE koart in s_accnt.
LOOP AT it_bseg INTO wa_bseg.
read table it_bkpf into wa_bkpf index sy-tabix.
wa_ftab-docno = wa_bkpf-docno.
wa_ftab-comcode = wa_bkpf-comcode.
wa_ftab-year = wa_bkpf-year.
wa_ftab-litmno = wa_bseg-litmno.
wa_ftab-acctyp = wa_bseg-acctyp.
wa_ftab-cust = wa_bseg-cust.
wa_ftab-vendor = wa_bseg-vendor.
wa_ftab-indicator = wa_bseg-indicator.
wa_ftab-amt = wa_bseg-amt.
APPEND wa_ftab TO it_ftab.
CLEAR wa_ftab.
ENDLOOP.
*so when i try to display final internal table it_ftab in grid alv then it is taking very large time.
so need some help to optimize performance.
I have two internal table for bkpf and bseg.But when i merge these two internal tables in third one it works correctly and gives output but problem is it takes very large time to give result.
The code is as follow:
SELECT-OPTIONS:s_docnum FOR bkpf-belnr,
s_cmpcde FOR bkpf-bukrs OBLIGATORY.
PARAMETERS: p_fysyr TYPE bkpf-gjahr matchcode object Z_GZAHR OBLIGATORY.
SELECT-OPTIONS : s_accnt FOR bseg-koart.
*1st intrnal table
TYPES: BEGIN OF ty_bkpf,
docno TYPE bkpf-belnr,
comcode TYPE bkpf-bukrs,
year TYPE bkpf-gjahr,
END OF ty_bkpf.
*2nd internal table
TYPES: BEGIN OF ty_bseg,
litmno TYPE bseg-buzei,
acctyp TYPE bseg-koart,
cust TYPE bseg-kunnr,
vendor TYPE bseg-lifnr,
indicator TYPE bseg-shkzg,
amt TYPE bseg-dmbtr,
END OF ty_bseg.
*final internal table
TYPES : BEGIN OF ty_ftab,
docno TYPE bkpf-belnr,
comcode TYPE bkpf-bukrs,
year TYPE bkpf-gjahr,
litmno TYPE bseg-buzei,
acctyp TYPE bseg-koart,
cust TYPE bseg-kunnr,
vendor TYPE bseg-lifnr,
indicator TYPE bseg-shkzg,
amt TYPE bseg-dmbtr,
END OF ty_ftab.
DATA: it_bseg TYPE TABLE OF ty_bseg,
wa_bseg TYPE ty_bseg,
it_bkpf TYPE TABLE OF ty_bkpf,
wa_bkpf TYPE ty_bkpf,
it_ftab TYPE TABLE OF ty_ftab,
wa_ftab TYPE ty_ftab.
START-OF-SELECTION.
SELECT belnr bukrs gjahr
FROM bkpf
INTO TABLE it_bkpf
WHERE belnr IN s_docnum and bukrs IN s_cmpcde AND gjahr = p_fysyr.
SELECT buzei koart kunnr lifnr shkzg dmbtr
FROM bseg
INTO TABLE it_bseg
WHERE koart in s_accnt.
LOOP AT it_bseg INTO wa_bseg.
read table it_bkpf into wa_bkpf index sy-tabix.
wa_ftab-docno = wa_bkpf-docno.
wa_ftab-comcode = wa_bkpf-comcode.
wa_ftab-year = wa_bkpf-year.
wa_ftab-litmno = wa_bseg-litmno.
wa_ftab-acctyp = wa_bseg-acctyp.
wa_ftab-cust = wa_bseg-cust.
wa_ftab-vendor = wa_bseg-vendor.
wa_ftab-indicator = wa_bseg-indicator.
wa_ftab-amt = wa_bseg-amt.
APPEND wa_ftab TO it_ftab.
CLEAR wa_ftab.
ENDLOOP.
*so when i try to display final internal table it_ftab in grid alv then it is taking very large time.
so need some help to optimize performance.
2014 Apr 18 11:47 AM
hi Tushar,
Just change the select query on bseg table as below:
SELECT buzei koart kunnr lifnr shkzg dmbtr
FROM bseg
FOR ALL ENTRIES IN it_bkpf
INTO TABLE it_bseg
WHERE belnr = it_bkpf-docno and
bukrs = it_bkpf-comcode and
gjahr = it_bkpf-year and
koart in s_accnt.
thanks,
Sachin
2014 Apr 18 11:57 AM
when we are using this for all enteries in this way we are not getting the proper output. I mean only few records are displaying on output. so we want something through which the output should not be effected
2014 Apr 18 11:59 AM
1) Use a fully qualified primary key for BSEG, you can not query BSEG like that, you will run into performance issues.
2) Your read statement does not make any sense, read bkpf with a key from bseg, if using standard internal tables, always use read with binary search after sorting the keys you are using for search, in this case, since you are only using bkpf to read, i suggest loop at bkpf and read it_bseg, and declare it_bseg as a hashed table for better result (if your data is huge)
Thanks
Sameer
2014 Apr 18 12:04 PM
hi tushar,
declare it_bseg as:
TYPES: BEGIN OF ty_bseg,
docno TYPE bkpf-belnr,
comcode TYPE bkpf-bukrs,
year TYPE bkpf-gjahr,
litmno TYPE bseg-buzei,
acctyp TYPE bseg-koart,
cust TYPE bseg-kunnr,
vendor TYPE bseg-lifnr,
indicator TYPE bseg-shkzg,
amt TYPE bseg-dmbtr,
END OF ty_bseg.
And below code after bkpf query:
SELECT buzei koart kunnr lifnr shkzg dmbtr
FROM bseg
FOR ALL ENTRIES IN it_bkpf
INTO TABLE it_bseg
WHERE belnr = it_bkpf-docno and
bukrs = it_bkpf-comcode and
gjahr = it_bkpf-year and
koart in s_accnt.
LOOP AT it_bseg INTO wa_bseg.
read table it_bkpf into wa_bkpf with key docno = wa_bseg-docno
comcode = wa_bseg-comcode year = it_bseg-year.
wa_ftab-docno = wa_bkpf-docno.
wa_ftab-comcode = wa_bkpf-comcode.
wa_ftab-year = wa_bkpf-year.
wa_ftab-litmno = wa_bseg-litmno.
wa_ftab-acctyp = wa_bseg-acctyp.
wa_ftab-cust = wa_bseg-cust.
wa_ftab-vendor = wa_bseg-vendor.
wa_ftab-indicator = wa_bseg-indicator.
wa_ftab-amt = wa_bseg-amt.
APPEND wa_ftab TO it_ftab.
CLEAR wa_ftab.
ENDLOOP.
2014 Apr 18 12:05 PM
thanks for the reply sameer can you please make the necessary changes in the code that i have pasted here. I got your point but i am unable to do the necessary changes.
2014 Apr 18 12:30 PM
Hi,
As suggested , use for all entries. Before for all entries, check it_bkpf is not initial.
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |