Önceki Sayfa

SAP ABAP Programming, Functional and Basis Component Reference Books

Sales Order Changed History Display

*

* Sales Order Changed History Display

*

* You can execute the report by :

* 1.  Change Date

* 2.  User Name

* 3.  Sales Order Number

*

REPORT ZSDCHANGE LINE-SIZE 132 NO STANDARD PAGE HEADING

LINE-COUNT 065(001)

MESSAGE-ID VR.

TABLES: DD04T,

CDHDR,

CDPOS,

DD03L,

DD41V,

T685T,

VBPA,

TPART,

KONVC,

VBUK.

DATA: BEGIN OF ICDHDR OCCURS 50.

INCLUDE STRUCTURE CDHDR.

DATA: END OF ICDHDR.

SELECT-OPTIONS: XUDATE FOR ICDHDR-UDATE,

XNAME  FOR ICDHDR-USERNAME,

XVBELN FOR VBUK-VBELN.

SELECTION-SCREEN SKIP.

SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.

PARAMETERS: SUDATE RADIOBUTTON GROUP R1,

SNAME  RADIOBUTTON GROUP R1,

SOBID  RADIOBUTTON GROUP R1.

SELECTION-SCREEN END OF BLOCK BLK1.

DATA: WFLAG,

WCHANGENR LIKE CDHDR-CHANGENR,

WUDATE LIKE CDHDR-UDATE,

WNAME  LIKE CDHDR-USERNAME,

WVBELN LIKE VBUK-VBELN,

WDEC1 TYPE P DECIMALS 3,

WDEC2 TYPE P DECIMALS 3,

WDEC3 TYPE P DECIMALS 3,

WDEC4 TYPE P DECIMALS 3.

DATA: UTEXT(16) VALUE 'has been changed',

ITEXT(16) VALUE 'has been created',

DTEXT(16) VALUE 'has been deleted'.

DATA: BEGIN OF ICDSHW OCCURS 50.

INCLUDE STRUCTURE CDSHW.

DATA: END OF ICDSHW.

DATA: BEGIN OF ITAB OCCURS 10.

INCLUDE STRUCTURE CDSHW.

DATA:   UDATE LIKE CDHDR-UDATE,

USERNAME LIKE CDHDR-USERNAME,

CHANGENR LIKE CDHDR-CHANGENR,

VBELN(10),

POSNR(6),

ETENR(4),

INDTEXT(200),

END OF ITAB.

SELECT * FROM VBUK WHERE VBELN IN XVBELN.

CLEAR CDHDR.

CLEAR CDPOS.

CDHDR-OBJECTCLAS = 'VERKBELEG'.

CDHDR-OBJECTID   = VBUK-VBELN.

PERFORM READHEADER.

PERFORM READPOS.

LOOP AT ITAB.

CASE ITAB-TABNAME.

WHEN 'VBPA'.

IF ITAB-FNAME = 'KUNNR' OR

ITAB-FNAME = 'LIFNR' OR

ITAB-FNAME = 'PARNR' OR

ITAB-FNAME = 'PERNR' OR

ITAB-FNAME IS INITIAL.

MOVE ITAB-TABKEY TO VBPA.

SELECT SINGLE * FROM TPART WHERE SPRAS = SY-LANGU

AND   PARVW = VBPA-PARVW.

IF SY-SUBRC = 0.

REPLACE '&' WITH TPART-VTEXT INTO ITAB-INDTEXT.

ENDIF.

ENDIF.

WHEN 'VBAP'.

IF ITAB-FNAME IS INITIAL.

REPLACE '&' WITH 'Item' INTO ITAB-INDTEXT.

ENDIF.

WHEN 'KONVC'.

MOVE ITAB-TABKEY TO KONVC.

SELECT SINGLE * FROM T685T WHERE SPRAS = SY-LANGU

AND   KVEWE = 'A'

AND   KAPPL = 'V'

AND   KSCHL = KONVC-KSCHL.

IF SY-SUBRC = 0.

REPLACE '&' WITH T685T-VTEXT INTO ITAB-INDTEXT.

ENDIF.

ENDCASE.

IF ITAB-INDTEXT(1) EQ '&'.

REPLACE '&' WITH ITAB-FTEXT(40) INTO ITAB-INDTEXT.

ENDIF.

IF ITAB-CHNGIND = 'I'.

REPLACE '%' WITH ITEXT INTO ITAB-INDTEXT.

ELSEIF ITAB-CHNGIND = 'U'.

REPLACE '%' WITH UTEXT INTO ITAB-INDTEXT.

ELSE.

REPLACE '%' WITH DTEXT INTO ITAB-INDTEXT.

ENDIF.

CONDENSE ITAB-INDTEXT.

MODIFY ITAB.

ENDLOOP.

ENDSELECT.

IF SUDATE = 'X'.

SORT ITAB BY UDATE VBELN POSNR ETENR.

ELSEIF SOBID = 'X'.

SORT ITAB BY VBELN POSNR ETENR UDATE.

ELSE.

SORT ITAB BY USERNAME VBELN POSNR ETENR UDATE.

ENDIF.

LOOP AT ITAB.

CLEAR WFLAG.

IF SUDATE = 'X'.

IF WUDATE NE ITAB-UDATE.

SKIP.

WRITE:/001 ITAB-UDATE,

023 ITAB-USERNAME,

037(10) ITAB-VBELN.

WFLAG = 'X'.

WUDATE = ITAB-UDATE.

WCHANGENR = ITAB-CHANGENR.

ENDIF.

ELSEIF SOBID NE 'X'.

IF WVBELN NE ITAB-VBELN.

SKIP.

WRITE:/001 ITAB-VBELN.

WVBELN = ITAB-VBELN.

ENDIF.

ELSE.

IF WNAME NE ITAB-USERNAME.

SKIP.

WRITE:/001 ITAB-USERNAME.

WNAME = ITAB-USERNAME.

ENDIF.

ENDIF.

IF WCHANGENR NE ITAB-CHANGENR.

WRITE:/023 ITAB-USERNAME,

037(10) ITAB-VBELN.

WFLAG = 'X'.

WCHANGENR = ITAB-CHANGENR.

ENDIF.

IF WFLAG = 'X'.

WRITE: 013 ITAB-CHNGIND,

049 ITAB-POSNR,

057 ITAB-ETENR,

065 ITAB-INDTEXT(60).

ELSE.

WRITE: /013 ITAB-CHNGIND,

049 ITAB-POSNR,

057 ITAB-ETENR,

065 ITAB-INDTEXT(60).

ENDIF.

WRITE:/065 ITAB-F_OLD.

WRITE:/065 ITAB-F_NEW.

ENDLOOP.

FORM READHEADER.

CALL FUNCTION 'CHANGEDOCUMENT_READ_HEADERS'

EXPORTING

DATE_OF_CHANGE    = CDHDR-UDATE

OBJECTCLASS       = CDHDR-OBJECTCLAS

OBJECTID          = CDHDR-OBJECTID

TIME_OF_CHANGE    = CDHDR-UTIME

USERNAME          = CDHDR-USERNAME

TABLES

I_CDHDR           = ICDHDR

EXCEPTIONS

NO_POSITION_FOUND = 1

OTHERS            = 2.

CASE SY-SUBRC.

WHEN '0000'.

WHEN '0001'.

MESSAGE S311.

LEAVE.

WHEN '0002'.

MESSAGE S311.

LEAVE.

ENDCASE.

ENDFORM.

FORM READPOS.

LOOP AT ICDHDR.

CHECK ICDHDR-UDATE

IN XUDATE.

CHECK ICDHDR-USERNAME

IN XNAME.

CALL FUNCTION 'CHANGEDOCUMENT_READ_POSITIONS'

EXPORTING

CHANGENUMBER      = ICDHDR-CHANGENR

TABLEKEY          = CDPOS-TABKEY

TABLENAME         = CDPOS-TABNAME

IMPORTING

HEADER            = CDHDR

TABLES

EDITPOS           = ICDSHW

EXCEPTIONS

NO_POSITION_FOUND = 1

OTHERS            = 2.

CASE SY-SUBRC.

WHEN '0000'.

LOOP AT ICDSHW.

CHECK ICDSHW-CHNGIND NE 'E'.

CLEAR ITAB.

MOVE-CORRESPONDING ICDHDR TO ITAB.

MOVE-CORRESPONDING ICDSHW TO ITAB.

CASE ITAB-TABNAME.

WHEN 'KONVC'.

MOVE ICDHDR-OBJECTID TO ITAB-VBELN.

MOVE ICDSHW-TABKEY(6) TO ITAB-POSNR.

WHEN OTHERS.

MOVE ICDSHW-TABKEY+3(10)  TO ITAB-VBELN.

MOVE ICDSHW-TABKEY+13(6)  TO ITAB-POSNR.

MOVE ICDSHW-TABKEY+19(4)  TO ITAB-ETENR.

ENDCASE.

MOVE '& %' TO ITAB-INDTEXT.

APPEND ITAB.

CLEAR ITAB.

ENDLOOP.

WHEN OTHERS.

MESSAGE S311.

LEAVE.

ENDCASE.

ENDLOOP.

ENDFORM.

TOP-OF-PAGE.

WRITE:/ SY-DATUM,SY-UZEIT,

50 'SALES ORDER CHANGE HISTORY',

120 'Page', SY-PAGNO.

WRITE: / SY-REPID,

60 'SALES ORDERS STATISTICS'.

SKIP.

ULINE.

IF SUDATE = 'X'.

WRITE:/001 'Change Date',

013 'Time',

023 'User Name',

037 'Sale Order',

049 'Line',

057 'Sch No',

065 'Changes'.

ELSEIF SOBID = 'X'.

WRITE:/001 'Sale Order',

013 'Line',

021 'Sch No',

029 'Change Date',

041 'Time',

051 'User Name',

065 'Comment'.

ELSE.

WRITE:/001 'User Name',

015 'Time',

025 'Change Date',

037 'Sale Order',

049 'Line',

057 'Sch No',

065 'Changes'.

ENDIF.

ULINE.

*--- End of Program

Copyright © 2010. KM Group. All Rights Reserved.