Application Development and Automation 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: 
Read only

View for CDPOS & CDHDR tables

Former Member
0 Likes
11,657

Hi all,

I am developing a report for which I am fetching fields from CDPOS & CDHDR tables (both r cluster tables). when i run st05, it fetches values from a cluster table CDCLS which takes most of the database time.

Is there any view for CDPOS & CDHDR tables?

How to find the views for cluster tables?

Thanx in advance.

Vijay.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
4,624

I agree that we can use these Changedocument function modules. But I prefer to use select statements for CDHDR and again a FOR ALL ENTRIES for CDPOS, Provide if you have the atleast few key fields.

Why I suggest this because, these function modules also uses the<b> SAME</b> select statment for picking data from both tables. Also this will do some additional tasks also.

Believe me, If you are only interested picking up the values from these tables, I suggest you to use SELECT statements for better performance.

rgds,

TM

Hi all,

I am developing a report for which I am fetching fields from CDPOS & CDHDR tables (both r cluster tables). when i run st05, it fetches values from a cluster table CDCLS which takes most of the database time.

Is there any view for CDPOS & CDHDR tables?

How to find the views for cluster tables?

Thanx in advance.

Vijay.

9 REPLIES 9
Read only

Former Member
0 Likes
4,624

Hi ,

Use FM

CHANGEDOCUMENT_READ_HEADERS

CHANGEDOCUMENT_READ_POSITIONS

I think view can,t be created on cluster tables

Regards,

Amole

Read only

Former Member
0 Likes
4,624

I don't think we have views for CDHDR and CDPOS tables, this is a general issue in most of the cases where these tables are involved. You need to be careful in accessing these tables and make sure you have the right keys to fetch the data or use the CHANGE_DOCUMENT_READ* functions.

Regards,

Ravi

Note : Please mark all the helpful answers

Read only

Former Member
0 Likes
4,625

I agree that we can use these Changedocument function modules. But I prefer to use select statements for CDHDR and again a FOR ALL ENTRIES for CDPOS, Provide if you have the atleast few key fields.

Why I suggest this because, these function modules also uses the<b> SAME</b> select statment for picking data from both tables. Also this will do some additional tasks also.

Believe me, If you are only interested picking up the values from these tables, I suggest you to use SELECT statements for better performance.

rgds,

TM

Read only

Former Member
0 Likes
4,624

Hi vijaykumar,

"CHANGE DOCUMENTS" in SAP Terminology

1 The same thing which u are asking

we had developed here. For Eg : Any change

in the material master will be detected

and a mail will be sent to the concerned

employee.

THIS WILL ALSO DETECT WHICH FILEDS HAVE CHANGED.

IT CAN ALSO GIVE, The Old Value, And The New Value.

2. This Mechanism is called CHANGE DOCUMENTS in

SAP Terminology

3. 2 Fuction Modules are Required.

(They will fetch necessary data from CDHDR,CDPOS)

CHANGEDOCUMENT_READ_HEADERS

CHANGEDOCUMENT_READ_POSITIONS

4. The First FM gives list of all

records ( with change no) which have changed.

5. Loop at the above and the second FM will

provide the details (old-val, new-val) for

each record.

6. While using 1st Fm, i used docclass as 'MATERIAL'.

BCOS

the concept of change documents is applicable

to other type of documents also (depends upon

customization)

regards,

amit m.

Read only

0 Likes
4,624

Hi Amit

I have one doubt in CDPOS and CDHDR , I want to display field name so that i will know what field name the document have been changed any idea will be appriciable.

regards

Piroz

Read only

Former Member
0 Likes
4,624

hi,

check this code,

here i used function module to get details of cdhdr,cdpos.

TABLES : MARC.

DATA :BEGIN OF GI_MARC OCCURS 0,

MATNR LIKE MARC-MATNR,

WERKS LIKE MARC-WERKS,

DISPO LIKE MARC-DISPO,

END OF GI_MARC.

DATA : CHAR TYPE I,

COUNT TYPE I,

VAR TYPE I.

DATA : BEGIN OF GI_FINAL OCCURS 2000,

MATNR LIKE MARC-MATNR,

DISPO LIKE MARC-DISPO,

USERNAME LIKE CDHDR-USERNAME,

UDATE LIKE CDHDR-UDATE,

UTIME LIKE CDHDR-UTIME,

TCODE LIKE CDHDR-TCODE,

TABNAME LIKE CDPOS-TABNAME,

TABKEY LIKE CDPOS-TABKEY,

FNAME LIKE CDPOS-FNAME,

VALUE_NEW LIKE CDPOS-VALUE_NEW,

VALUE_OLD LIKE CDPOS-VALUE_OLD,

CHANGENR LIKE CDHDR-CHANGENR,

END OF GI_FINAL.

DATA : MATNR LIKE MARC-MATNR,

DISPO LIKE MARC-DISPO,

USERNAME1 LIKE CDHDR-USERNAME,

UDATE1 LIKE CDHDR-UDATE,

UTIME LIKE CDHDR-UTIME,

TCODE LIKE CDHDR-TCODE,

CHANGENR LIKE CDHDR-CHANGENR.

DATA : GI_CDHDR LIKE CDHDR OCCURS 0 WITH HEADER LINE.

DATA : GI_CDPOS LIKE CDPOS OCCURS 0 WITH HEADER LINE.

DATA : OBJECTCLAS LIKE CDHDR-OBJECTCLAS VALUE 'MATERIAL',

OBJECTID LIKE CDHDR-OBJECTID,

USERNAME LIKE CDHDR-USERNAME VALUE 'RSS-SPE',

UDATE LIKE CDHDR-UDATE VALUE '20070101',

CHANGE_IND LIKE CDHDR-CHANGE_IND VALUE 'U'.

type-pools: slis.

data: gt_slis_fcat type slis_t_fieldcat_alv.

data: gt_fieldcat type slis_t_fieldcat_alv.

*data: gt_fieldcatall type slis_t_fieldcat_alv.

data: g_repid like sy-repid.

data: gs_layout type slis_layout_alv.

gs_layout-zebra = 'X'.

gs_layout-colwidth_optimize = 'X'.

SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-110.

SELECT-OPTIONS : P_DISPO FOR MARC-DISPO.

SELECT-OPTIONS : RECORDS FOR CHAR.

SELECTION-SCREEN : END OF BLOCK B1.

START-OF-SELECTION.

perform process_data.

perform f_fieldcat_init using gt_fieldcat[].

perform alv_display tables gi_final using gt_fieldcat[].

form process_data.

SELECT MATNR WERKS DISPO FROM MARC INTO TABLE GI_MARC

WHERE DISPO IN P_DISPO

AND WERKS = '1011'." Becoz we hav to chk the

  • the changes made in the material while extendin tht matrl frm 1011 to

*other plant.

IF NOT GI_MARC[] IS INITIAL.

IF NOT RECORDS-LOW IS INITIAL .

IF NOT RECORDS-HIGH IS INITIAL.

DESCRIBE TABLE GI_MARC LINES COUNT.

IF RECORDS-HIGH < COUNT.

DELETE GI_MARC FROM RECORDS-HIGH TO COUNT.

ENDIF.

IF RECORDS-LOW <> 1.

IF RECORDS-LOW <> 0.

DELETE GI_MARC FROM 1 TO RECORDS-LOW.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

LOOP AT GI_MARC.

CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'

EXPORTING

INPUT = GI_MARC-MATNR

IMPORTING

OUTPUT = GI_MARC-MATNR

  • EXCEPTIONS

  • LENGTH_ERROR = 1

  • OTHERS = 2

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

OBJECTID = GI_MARC-MATNR .

*

CALL FUNCTION 'CHANGEDOCUMENT_READ_HEADERS'

EXPORTING

  • ARCHIVE_HANDLE = 0

DATE_OF_CHANGE = UDATE

OBJECTCLASS = OBJECTCLAS

OBJECTID = OBJECTID

  • TIME_OF_CHANGE = '000000'

USERNAME = USERNAME

  • LOCAL_TIME = ' '

  • DATE_UNTIL = '99991231'

  • TIME_UNTIL = '235959'

TABLES

I_CDHDR = GI_CDHDR

EXCEPTIONS

NO_POSITION_FOUND = 1

WRONG_ACCESS_TO_ARCHIVE = 2

TIME_ZONE_CONVERSION_ERROR = 3

OTHERS = 4

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

CALL FUNCTION 'ARCH_ANA_PROGRESS_INDICATOR'

EXPORTING

TEXT = 'Processing'.

IF NOT GI_CDHDR[] IS INITIAL.

LOOP AT GI_CDHDR.

MOVE GI_MARC-MATNR TO GI_FINAL-MATNR.

MOVE GI_MARC-DISPO TO GI_FINAL-DISPO.

MOVE GI_CDHDR-USERNAME TO GI_FINAL-USERNAME.

MOVE GI_CDHDR-UDATE TO GI_FINAL-UDATE.

MOVE GI_CDHDR-TCODE TO GI_FINAL-TCODE.

MOVE GI_CDHDR-CHANGENR TO GI_FINAL-CHANGENR.

VAR = 1.

CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'

EXPORTING

INPUT = GI_FINAL-MATNR

IMPORTING

OUTPUT = GI_FINAL-MATNR

EXCEPTIONS

LENGTH_ERROR = 1

OTHERS = 2

.

IF SY-SUBRC <> 0.

ENDIF.

OBJECTID = GI_FINAL-MATNR ."to ensure that objid is in proper

*format

SELECT *

FROM CDPOS

INTO TABLE GI_CDPOS

  • PACKAGE SIZE 100

  • FOR ALL ENTRIES IN GI_cdhdr

WHERE OBJECTID = OBJECTID

AND CHANGENR = GI_CDHDR-CHANGENR

AND OBJECTCLAS = OBJECTCLAS

AND CHNGIND = CHANGE_IND." only those values will b

*takn which have been modified nd nt created

IF SY-SUBRC = 0.

LOOP AT GI_CDPOS.

MOVE GI_MARC-MATNR TO GI_FINAL-MATNR.

MOVE GI_MARC-DISPO TO GI_FINAL-DISPO.

MOVE GI_CDHDR-USERNAME TO GI_FINAL-USERNAME.

MOVE GI_CDHDR-UDATE TO GI_FINAL-UDATE.

MOVE GI_CDHDR-TCODE TO GI_FINAL-TCODE.

MOVE GI_CDHDR-CHANGENR TO GI_FINAL-CHANGENR.

MOVE GI_CDPOS-TABNAME TO GI_FINAL-TABNAME.

MOVE GI_CDPOS-TABKEY TO GI_FINAL-TABKEY.

MOVE GI_CDPOS-FNAME TO GI_FINAL-FNAME.

MOVE GI_CDPOS-VALUE_NEW TO GI_FINAL-VALUE_NEW.

MOVE GI_CDPOS-VALUE_OLD TO GI_FINAL-VALUE_OLD.

APPEND GI_FINAL.

CLEAR GI_FINAL.

  • ENDIF.

VAR = VAR + 1.

  • ENDSELECT.

ENDLOOP.

ENDIF.

ENDLOOP.

CALL FUNCTION 'ARCH_ANA_PROGRESS_INDICATOR'

EXPORTING

TEXT = 'Processing'.

ENDIF.

ENDLOOP.

endform.

form f_fieldcat_init using lt_fieldcat type slis_t_fieldcat_alv.

data: ls_fieldcat type slis_fieldcat_alv.

clear ls_fieldcat.

ls_fieldcat-fieldname = 'MATNR'.

ls_fieldcat-seltext_l = 'Material number'.

  • ls_fieldcat-tabname = 'GI_final'.

append ls_fieldcat to lt_fieldcat.

clear ls_fieldcat.

ls_fieldcat-fieldname = 'DISPO'.

ls_fieldcat-seltext_l = 'mrp controller'.

append ls_fieldcat to lt_fieldcat.

clear ls_fieldcat.

ls_fieldcat-fieldname = 'USERNAME'.

ls_fieldcat-seltext_l = 'Username'.

append ls_fieldcat to lt_fieldcat.

clear ls_fieldcat.

ls_fieldcat-fieldname = 'CHANGENR'.

ls_fieldcat-seltext_l = 'Change Number'.

append ls_fieldcat to lt_fieldcat.

clear ls_fieldcat.

ls_fieldcat-fieldname = 'UDATE'.

ls_fieldcat-seltext_l = 'modified date'.

append ls_fieldcat to lt_fieldcat.

clear ls_fieldcat.

ls_fieldcat-fieldname = 'UTIME'.

ls_fieldcat-seltext_l = 'MODIFIED TIME'.

append ls_fieldcat to lt_fieldcat.

  • clear ls_fieldcat.

  • ls_fieldcat-fieldname = 'UDATE'.

  • ls_fieldcat-seltext_l = 'MODIFIED DATE'.

  • append ls_fieldcat to lt_fieldcat.

*

clear ls_fieldcat.

ls_fieldcat-fieldname = 'TCODE'.

ls_fieldcat-seltext_l = 'TRANSACTION CODE'.

append ls_fieldcat to lt_fieldcat.

clear ls_fieldcat.

ls_fieldcat-fieldname = 'TABNAME'.

ls_fieldcat-seltext_l = 'TABLE NAME'.

append ls_fieldcat to lt_fieldcat.

clear ls_fieldcat.

ls_fieldcat-fieldname = 'TABKEY'.

ls_fieldcat-seltext_l = 'TABLE KEY'.

append ls_fieldcat to lt_fieldcat.

clear ls_fieldcat.

ls_fieldcat-fieldname = 'FNAME'.

ls_fieldcat-seltext_l = 'FNAME'.

append ls_fieldcat to lt_fieldcat.

clear ls_fieldcat.

ls_fieldcat-fieldname = 'FVALUE'.

ls_fieldcat-seltext_l = 'FVALUE'.

append ls_fieldcat to lt_fieldcat.

clear ls_fieldcat.

ls_fieldcat-fieldname = 'VALUE_NEW'.

ls_fieldcat-seltext_l = 'NEW VALUE'.

append ls_fieldcat to lt_fieldcat.

clear ls_fieldcat.

ls_fieldcat-fieldname = 'VALUE_OLD'.

ls_fieldcat-seltext_l = 'OLD VALUE'.

append ls_fieldcat to lt_fieldcat.

endform. " f_fieldcat_init

form alv_display tables gi_final using gt_fieldcat .

call function 'REUSE_ALV_LIST_DISPLAY'

exporting

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE = ' '

I_CALLBACK_PROGRAM = ' Material list '

  • I_CALLBACK_PF_STATUS_SET = ' '

  • I_CALLBACK_USER_COMMAND = ' '

  • I_STRUCTURE_NAME =

is_layout = gs_layout

it_fieldcat = gt_fieldcat

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

  • IT_SORT =

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_DEFAULT = 'X'

  • I_SAVE = ' '

  • IS_VARIANT =

  • IT_EVENTS =

  • IT_EVENT_EXIT =

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

tables

t_outtab = gi_final

  • EXCEPTIONS

  • PROGRAM_ERROR = 1

  • OTHERS = 2

.

if sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

endif.

endform.

regards

siva

Read only

0 Likes
4,624

Hi Siva

How can I fetch all the data from vbak-vkbur (sales office) belong to cdhdr and cdpos

I want to select all the records from cdhdr and cdpos by sales office (vbak-vkbur)

objectclas = 'VERKBELEG' and the sales office

Appriciate if comment on this issue

Read only

0 Likes
4,624

hi,

in cdhdr table pass object id as ur vkbur field and object class as VERKBELEG'

give in cdpos table name vbak, hope it works for u,

regards

siva

Message was edited by:

siva prasad

Read only

Former Member
0 Likes
4,624

Hi

If you developed the report for document changes kindly send me as a sample I am doing the same for fetching data from cdhdr and cdpos by different plants

regards

piroz