Application Development 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: 

performance issue cdpos table

Former Member
0 Kudos

Hi All

I am facing performance issue with cdpos table.cdhr table is fine.

SELECT objectclas objectid udate changenr FROM cdhdr INTO TABLE gt_cdhdr

    WHERE objectclas = c_objclas AND udate = sy-datum.

  IF gt_cdhdr[] IS NOT INITIAL.

    SELECT objectid value_new  value_old changenr FROM cdpos INTO TABLE gt_cdpos

                         FOR ALL ENTRIES IN

                         gt_cdhdr WHERE

                         objectclas = c_objclas AND

                         tabname = c_tabname AND

                         fname = c_fname AND

                         changenr = gt_cdhdr-changenr.

c_objclass of cdhdr,cdpos are equal.

Please help on this.

Thanks

Vamsi

1 ACCEPTED SOLUTION

rosenberg_eitan
Active Contributor
0 Kudos

Hi,

If CDHDR is known then use OBJECTID  .

DATA: it_cdhdr TYPE TABLE OF cdhdr .

SELECT * INTO TABLE it_cdhdr
FROM cdhdr
WHERE
objectclas IN s_class AND
udate      IN s_udate AND
tcode      IN s_tcode .

CHECK it_cdhdr IS NOT INITIAL .

DATA: it_cdpos TYPE TABLE OF cdpos .

SELECT * INTO TABLE it_cdpos
FROM cdpos
FOR ALL ENTRIES IN it_cdhdr
WHERE
objectclas EQ it_cdhdr-objectclas AND
objectid   EQ it_cdhdr-objectid   AND
changenr   EQ it_cdhdr-changenr   AND
tabname    IN s_tabnm  AND
chngind    IN s_chngi  .

regards.

4 REPLIES 4

Former Member
0 Kudos

Hi,

The performance issue on read from Change History Tables is something that we cant avoid. Try to restrict your input to a lesser date range. Also refer to the below threads,

http://scn.sap.com/thread/1833925

http://scn.sap.com/people/erwan.lebrun/blog/2007/03/09/documents-how-to-track-changes-through-abap

Mohamed_Mukhtar
Active Contributor
0 Kudos

Hello Mohan,

Can you try with below modified piece of code.


SELECT objectclas objectid udate changenr FROM cdhdr INTO TABLE gt_cdhdr

    WHERE objectclas = c_objclas .

Delete gt_cdhdr where udate NE sy-datum.

  IF gt_cdhdr[] IS NOT INITIAL.

  sort gt_cdhdr by objectcla changenr.

    SELECT objectid value_new  value_old changenr FROM cdpos INTO TABLE gt_cdpos

                         FOR ALL ENTRIES IN

                         gt_cdhdr WHERE

                         objectclas = c_objclas AND

                         tabname = c_tabname AND

                         fname = c_fname AND

                         changenr = gt_cdhdr-changenr.

endif.

Thanks

rosenberg_eitan
Active Contributor
0 Kudos

Hi,

If CDHDR is known then use OBJECTID  .

DATA: it_cdhdr TYPE TABLE OF cdhdr .

SELECT * INTO TABLE it_cdhdr
FROM cdhdr
WHERE
objectclas IN s_class AND
udate      IN s_udate AND
tcode      IN s_tcode .

CHECK it_cdhdr IS NOT INITIAL .

DATA: it_cdpos TYPE TABLE OF cdpos .

SELECT * INTO TABLE it_cdpos
FROM cdpos
FOR ALL ENTRIES IN it_cdhdr
WHERE
objectclas EQ it_cdhdr-objectclas AND
objectid   EQ it_cdhdr-objectid   AND
changenr   EQ it_cdhdr-changenr   AND
tabname    IN s_tabnm  AND
chngind    IN s_chngi  .

regards.

Former Member
0 Kudos

Hi Mohan,

Use FM CHANGEDOCUMENT_READ_HDRS_ONLY to get data from CDHDR and

Inside loop and endloop.use FM CHANGEDOCUMENT_READ  to get data from CDPOS.

it will resolve your issue .

Regards,

Manoj Rawat