ABAP program for Mass Purchase Order History Display

This is a customized ABAP report for mass Purchase Order history display instead of checking one a time.

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

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

TABLES: DD04T,
        CDHDR,
        CDPOS,
        DD03L,
        DD41V,
        T685T,
        VBPA,
        TPART,
        KONVC,
        EKKO.

SELECT-OPTIONS: XUDATE 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.
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.

DATA: INDTEXT(60) TYPE C.

DATA: BEGIN OF ICDHDR OCCURS 50.
        INCLUDE STRUCTURE CDHDR.
DATA: END OF ICDHDR.

DATA: BEGIN OF ICDSHW OCCURS 50.
        INCLUDE STRUCTURE CDSHW.
DATA: END OF ICDSHW.

DATA: BEGIN OF EKKEY,
        EBELN LIKE EKET-EBELN,
        EBELP LIKE EKET-EBELP,
        ETENR LIKE EKET-ETENR,

      END OF EKKEY.

DATA: BEGIN 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.

DATA: OLD_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.
  CLEAR: INDTEXT, EKKEY.
  CASE ITAB-CHNGIND.
    WHEN 'U'.
        INDTEXT(50) = ITAB-FTEXT.
        INDTEXT+51  = TEXT-020.
        CONDENSE INDTEXT.
    WHEN 'D'.
        INDTEXT = TEXT-021.
    WHEN 'E'.
        INDTEXT(5) = ITAB-FTEXT.
        INDTEXT+51 = TEXT-021.
        CONDENSE INDTEXT.
      WHEN 'I'.
        INDTEXT = TEXT-022.
    ENDCASE.
    RESERVE 4 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-OUTLEN) TO <F_OLD>.
        ASSIGN ITAB-F_NEW(ITAB-OUTLEN) TO <F_NEW>.
        WRITE: / TEXT-023  UNDER 'Changes',
                 <F_OLD>.
        WRITE: / TEXT-024 UNDER 'Changes',
                 <F_NEW>.
      WHEN 'E'.
        ASSIGN ITAB-F_OLD(ITAB-OUTLEN) TO <F_OLD>.
        WRITE: TEXT-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
Related SAP Tutorials & References
  1. Source Code for create subscreen in your ABAP Program* Source Code for create subscreen in your ABAP Program * * This report will...
  2. Batch Input with ‘Call Transaction’ – Sample ABAP program CodeRequirement: Choose a transaction and write a Batch Input program with 'Call Transaction'. Do not...
  3. Useful standard Reports used in SAP Financial AccountingThis documentation covers the details of Useful standard Reports used in SAP Financial AccountingGENERAL LEDGERInformation...
  4. SAP BDC interview Questions & Answers1.  What is full form of BDC Session? Batch Data Communication Session. 2.  What are...
  5. SAP SD Transaction codesList of Important and useful Transaction codes used in SAP sales and distribution module.Customer        XD01   ...
  6. Web Dynpro for ABAP | webdynpro samples and tutorialWebDynpro for ABAP (WD4A, WDA) is the SAP standard UI ( user interface) technology for...
  7. SAP ABAP dialog program ( Transactions) Interview questions What is a transaction? -          A transaction is dialog program that change data objects...
  8. SAP Early watch service introductionIntroduction and details about SAP early watch service. Purpose This process identifies potential problems early,...
  9. SAP ABAP Modularization Interview Questions Does every ABAP/4 have a modular structure? Yes.  What is Modularization and its benefits?...
  10. Interview Questions about SAP Logical database Preparation of the data records by the L.D.B and reading of the data records...
Google: Facebook:

Submit your tip or response