function module to get the change doc items
Hi,
I have searched for a function module : CHANGEDOCUMENT_READ_POSITIONS
my problem is that I wld like to read all detail items in PO if there would have some changes made in the delivery address per line then it shd be printed in the header level.
where can I get the change number in function module CHANGEDOCUMENT_READ_POSITIONS
can anyone drop a solution for this. sorry this kind of urgent.
Thanks a lot!
Jing
Use FM CHANGEDOCUMENT_READ_HEADERS for this. I'am just pasting a part of code from my Prog. But this code is for Deliveries. You have to replace OBJECTCLAS and other Variables as per your Own Requirement.
SELECT CDHDR~OBJECTID
CDHDR~CHANGENR
CDHDR~USERNAME
CDHDR~UDATE
INTO TABLE LTAB
FROM CDHDR
WHERE CDHDR~OBJECTCLAS = 'LIEFERUNG'
AND CDHDR~OBJECTID IN GF_VBELN
AND CDHDR~USERNAME IN GF_USER
AND CDHDR~UDATE IN GF_AEDAT.
IF SY-SUBRC <> 0.
MESSAGE I485. "Keine Änderungen protokolliert.
LEAVE LIST-PROCESSING. "Eingabebild bleibt aktiv
ENDIF.
DELETE LTAB WHERE NOT OBJECTID CP '0080*'.
IF NOT DEL IS INITIAL.
PERFORM FILTER_FOR_DELETED.
ENDIF.
LOOP AT LTAB.
REFRESH GT_CDHDR.
CLEAR CDHDR.
CDHDR-OBJECTCLAS = 'LIEFERUNG'.
CDHDR-OBJECTID = LTAB-OBJECTID.
CDHDR-USERNAME = LTAB-USERNAME.
CDHDR-UDATE = LTAB-UDATE.
PERFORM CDHDR_FUELLEN.
CALL FUNCTION 'CHANGEDOCUMENT_READ_HEADERS'
EXPORTING
DATE_OF_CHANGE = CDHDR-UDATE
OBJECTCLASS = CDHDR-OBJECTCLAS
OBJECTID = CDHDR-OBJECTID
TIME_OF_CHANGE = '000000'
USERNAME = CDHDR-USERNAME
TABLES
I_CDHDR = GT_CDHDR
EXCEPTIONS
NO_POSITION_FOUND = 1
WRONG_ACCESS_TO_ARCHIVE = 2
TIME_ZONE_CONVERSION_ERROR = 3
OTHERS = 4.
PERFORM AENDERUNGEN_POS.
ENDLOOP.
.....etc
FORM FILTER_FOR_DELETED.
DATA : BEGIN OF FILTAB OCCURS 0,
CHANGENR LIKE CDPOS-CHANGENR,
END OF FILTAB.
SELECT CDPOS~CHANGENR
INTO TABLE FILTAB
FROM CDPOS
FOR ALL ENTRIES IN LTAB
WHERE CDPOS~OBJECTCLAS = 'LIEFERUNG'
AND CDPOS~OBJECTID = LTAB-OBJECTID
AND CDPOS~CHANGENR = LTAB-CHANGENR
AND CDPOS~TABNAME = 'LIKP'
AND CDPOS~FNAME = 'KEY'
AND CDPOS~CHNGIND = 'D'.
IF SY-SUBRC = 0.
LOOP AT LTAB.
READ TABLE FILTAB WITH KEY CHANGENR = LTAB-CHANGENR.
CHECK NOT SY-SUBRC = 0.
DELETE LTAB.
ENDLOOP.
ELSE.
FREE LTAB.
MESSAGE I485. "Keine Änderungen protokolliert.
LEAVE LIST-PROCESSING. "Eingabebild bleibt aktiv
ENDIF.
ENDFORM.
.....etc
FORM AENDERUNGEN_POS.
LOOP AT GT_CDHDR.
CALL FUNCTION 'CHANGEDOCUMENT_READ_POSITIONS'
EXPORTING
CHANGENUMBER = GT_CDHDR-CHANGENR
IMPORTING
HEADER = CDHDR
TABLES
EDITPOS = GT_CDSHW
EXCEPTIONS
NO_POSITION_FOUND = 1
WRONG_ACCESS_TO_ARCHIVE = 2
OTHERS = 3.
CASE SY-SUBRC.
WHEN '0'.
IF NOT DEL IS INITIAL.
DELETE GT_CDSHW WHERE NOT ( TABNAME = 'LIKP' AND CHNGIND = 'D' ).
ENDIF.
* ----- Ausgabetabelle füllen
LOOP AT GT_CDSHW.
CLEAR GT_AUSGABE.
MOVE-CORRESPONDING GT_CDHDR TO GT_AUSGABE.
MOVE-CORRESPONDING GT_CDSHW TO GT_AUSGABE.
MOVE GT_CDSHW-TABKEY+3(10) TO GT_AUSGABE-VBELN.
MOVE GT_CDSHW-TABKEY+13(6) TO GT_AUSGABE-POSNR.
----- Auswertung nur für evtl. eingegebene Positionsnummer
IF NOT ( GF_POSNR IS INITIAL ).
CHECK GF_POSNR EQ GT_AUSGABE-POSNR.
ENDIF.
APPEND GT_AUSGABE.
ENDLOOP.
WHEN '1'.
MESSAGE I485. "Keine Änderungen protokolliert.
LEAVE LIST-PROCESSING. "Eingabebild bleibt aktiv
WHEN OTHERS.
MESSAGE I486. "Der Änderungsbeleg konnte nicht ermittelt werden.
LEAVE LIST-PROCESSING. "Eingabebild bleibt aktiv
ENDCASE.
ENDLOOP.
----- Ausstieg, wenn Ausgabetabelle leer
DESCRIBE TABLE GT_AUSGABE LINES GF_ZEILENANZ_AUSGABE.
ENFORM.
KRK