Monday, November 18, 2019

Purchase Order Change History Report

          Purchase Order Change History Report                              

Req : We need to have the report of Purchase Order Change .



*
* display or print Purchase Order Change History
*
*  You can request report by :
*  1.  Change date
*  2.  User Name
*  3.  Purchase Order Number
*  4.  Vendor Code

REPORT ZMM_PURCHASE_ORDER_CHANGE LINE-SIZE 132 NO STANDARD PAGE HEADING
                 LINE-COUNT 065(001)
                 MESSAGE-ID VR.

TABLESDD04T,
        CDHDR,
        CDPOS,
        DD03L,
        DD41V,
        T685T,
        VBPA,
        TPART,
        KONVC,
        EKKO.

SELECT-OPTIONSXUDATE FOR CDHDR-UDATE,
                XNAME  FOR CDHDR-USERNAME,
                XEBELN FOR EKKO-EBELN,
                XLIFNR FOR EKKO-LIFNR.

SELECTION-SCREEN SKIP.
* TEXT-001 - Sorting Sequence
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERSSUDATE RADIOBUTTON GROUP R1,
            SNAME  RADIOBUTTON GROUP R1,
            SOBID  RADIOBUTTON GROUP R1.
SELECTION-SCREEN END OF BLOCK BLK1.

DATAWFLAG,
      WCHANGENR LIKE CDHDR-CHANGENR.

DATAINDTEXT(60TYPE C.

DATABEGIN OF ICDHDR OCCURS 50.
        INCLUDE STRUCTURE CDHDR.
DATAEND OF ICDHDR.

DATABEGIN OF ICDSHW OCCURS 50.
        INCLUDE STRUCTURE CDSHW.
DATAEND OF ICDSHW.

DATABEGIN OF EKKEY,
        EBELN LIKE EKET-EBELN,
        EBELP LIKE EKET-EBELP,
        ETENR LIKE EKET-ETENR,

      END OF EKKEY.

DATABEGIN OF ITAB OCCURS 50,
        BEGIN OF EKKEY,
          EBELN LIKE EKET-EBELN,
          EBELP LIKE EKET-EBELP,

          ETENR LIKE EKET-ETENR,
        END OF EKKEY,
        CHANGENR LIKE CDHDR-CHANGENR,
        UDATE    LIKE CDHDR-UDATE,
        UTIME    LIKE CDHDR-UTIME,
        USERNAME LIKE CDHDR-USERNAME,
        CHNGIND  LIKE CDSHW-CHNGIND,
        FTEXT    LIKE CDSHW-FTEXT,
        OUTLEN   LIKE CDSHW-OUTLEN,
        F_OLD    LIKE CDSHW-F_OLD,
        F_NEW    LIKE CDSHW-F_NEW,
      END OF ITAB.

DATAOLD_OBJECTID LIKE CDHDR-OBJECTID.

FIELD-SYMBOLS<F_OLD><F_NEW>.

SELECT FROM EKKO WHERE EBELN IN XEBELN AND
                         LIFNR IN XLIFNR.
  CLEAR CDHDR.
  CLEAR CDPOS.
  CDHDR-OBJECTCLAS 'EINKBELEG'.
  CDHDR-OBJECTID   EKKO-EBELN.
  PERFORM GETCHGDOCS.
ENDSELECT.

IF SUDATE 'X'.
  SORT ITAB BY UDATE EKKEY-EBELN CHANGENR EKKEY-EBELP
               EKKEY-ETENR.
ELSEIF SNAME 'X'.
  SORT ITAB BY USERNAME EKKEY-EBELN CHANGENR EKKEY-EBELP
               EKKEY-ETENR.
ELSE.
  SORT ITAB BY EKKEY-EBELN CHANGENR EKKEY-EBELP EKKEY-ETENR.
ENDIF.

LOOP AT ITAB.
  CLEARINDTEXTEKKEY.
  CASE ITAB-CHNGIND.
    WHEN 'U'.
        INDTEXT(50ITAB-FTEXT.
        INDTEXT+51  TEXT-020.
        CONDENSE INDTEXT.
    WHEN 'D'.
        INDTEXT TEXT-021.
    WHEN 'E'.
        INDTEXT(5ITAB-FTEXT.
        INDTEXT+51 TEXT-021.
        CONDENSE INDTEXT.
      WHEN 'I'.
        INDTEXT TEXT-022.
    ENDCASE.
    RESERVE LINES.
    IF WCHANGENR NE ITAB-CHANGENR.
      WCHANGENR ITAB-CHANGENR.
      EKKEY ITAB-EKKEY.
      WRITE:/ ITAB-UDATE UNDER 'Change Date',
              ITAB-UTIME UNDER 'TimE',
              ITAB-USERNAME UNDER 'User Name',
              ITAB-EKKEY-EBELN UNDER 'PO No',
              ITAB-EKKEY-EBELP UNDER 'Item',
              ITAB-EKKEY-ETENR UNDER 'Sch No',
              INDTEXT     UNDER 'Changes'.
    ELSEIF ITAB-EKKEY NE EKKEY.
      WRITE:/ ITAB-EKKEY-EBELP UNDER 'Item',
              ITAB-EKKEY-ETENR UNDER 'Sch No',
              INDTEXT     UNDER 'Changes'.

    ENDIF.

    CASE ITAB-CHNGIND.
      WHEN 'U'.
        ASSIGN ITAB-F_OLD(ITAB-OUTLENTO <F_OLD>.
        ASSIGN ITAB-F_NEW(ITAB-OUTLENTO <F_NEW>.
        WRITETEXT-023  UNDER 'Changes',
                 <F_OLD>.
        WRITETEXT-024 UNDER 'Changes',
                 <F_NEW>.
      WHEN 'E'.
        ASSIGN ITAB-F_OLD(ITAB-OUTLENTO <F_OLD>.
        WRITETEXT-023 UNDER 'Changes',
               <F_OLD>.
    ENDCASE.
    SKIP.
ENDLOOP.

TOP-OF-PAGE.
WRITE:/ SY-DATUM,SY-UZEIT,
       50 'P U R C H A S E  O R D E R   H I S T O R Y',
      120 'Page'SY-PAGNO.
WRITE/ SY-REPID,
         60 'Purchase Orders Changes'.
SKIP.
ULINE.
IF SUDATE 'X'.
  WRITE:/001 'Change Date',
         014 'Time',
         024 'User Name',
         038 'PO No',
         050 'Item',
         057 'Sch No',
         065 'Changes'.
ELSEIF SOBID 'X'.
  WRITE:/001 'PO No',
         013 'Item',
         020 'Sch No',
         028 'Change Date',
         041 'Time',
         051 'User Name',
         065 'Changes'.
ELSE.
  WRITE:/001 'User Name',
         015 'Change Date',
         028 'Time',
         038 'PO No',
         050 'Item',
         057 'Sch No',
         065 'Changes'.
ENDIF.
ULINE.

FORM GETCHGDOCS.
  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.

  CHECK SY-SUBRC EQ 0.
  DELETE ICDHDR WHERE CHANGE_IND EQ 'I'.
  CHECK NOT ICDHDR[] IS INITIAL.
  LOOP AT ICDHDR.
    CHECK ICDHDR-UDATE IN XUDATE.
    CHECK ICDHDR-USERNAME IN XNAME.
    CALL FUNCTION 'CHANGEDOCUMENT_READ_POSITIONS'
                 EXPORTING  CHANGENUMBER       ICDHDR-CHANGENR
                 IMPORTING  HEADER             CDHDR
                 TABLES     EDITPOS            ICDSHW
                 EXCEPTIONS NO_POSITION_FOUND  1
                            OTHERS             2.
    CHECK SY-SUBRC EQ 0.
    LOOP AT ICDSHW.
      CHECK ICDSHW-TEXT_CASE EQ SPACE.
      MOVE-CORRESPONDING ICDSHW TO ITAB.
      MOVE-CORRESPONDING ICDHDR TO ITAB.
      MOVE ICDSHW-TABKEY+3 TO ITAB-EKKEY.
      APPEND ITAB.
    ENDLOOP.
  ENDLOOP.
ENDFORM.
*
* END OF PROGRAM