Application Development 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: 

Using PF_STATUS and USER_COMMAND in ALV

Former Member
0 Kudos

Hi,

I have a requirement to place two buttons on the application toolbar of the output ALV list display screen.

I have to assign functionality for the two buttons.

How do we do it in ALV?

Is there any thing in ALV which performs the functionality of set pf_status and at user_command?

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi Sandeep,

Following code might be useful for you to achieve your goal.


REPORT  ZSPRENH062.

TYPE-POOLS : SLIS.                            "Global Type for ALV 	

************************************************************************
*    D A T A                                                           *
************************************************************************

* Types declarations
********************

*ALV Header table type
TYPES: BEGIN OF TY_HFINAL,
         WERKS TYPE EWERK,                      "Plant
         MATKL TYPE MATKL,                      "Material Group
       END OF TY_HFINAL,

*ALV Item table type
       BEGIN OF TY_IFINAL,
         WERKS        TYPE EWERK,               "Plant
         MATKL        TYPE MATKL,               "Material Group
         SELECT(1)    TYPE C,                   "Check Box
         MATNR        TYPE MATNR,               "Material No
         LIFNR        TYPE LIFNR,               "Vendor Account No.
         MAKTX        TYPE MAKTX,               "Material Desp.
         BISMT        TYPE BISMT,               "Old material ID
         CPRICE       TYPE KBETR_KOND,          "Contract Price
         FINCONPRI(20) TYPE C,
         INFOREC      TYPE KBETR_KOND,          "Purchase info rec.
         FININFPRI(20) TYPE C,
         MPRICE       TYPE KBETR_KOND,          "Market price
         NREPCOST     TYPE KBETR_KOND,          "Total repl. cost
*-----           Begin of Changes  EXT-SAP-180  13APR2007            ------*
         PRUOM        TYPE BSTME,               "Purchase Unit of Measure
         TRC_BUOM     TYPE KBETR_KOND,          "Total Repl. Cost in Base UOM
         BSUOM        TYPE MEINS,               "Base Unit of Measure
*-----           End   of Changes  EXT-SAP-180  13APR2007            ------*
         PREPCOST     TYPE KBETR_KOND,          "Previous repl cost
         VALCHG       TYPE KBETR_KOND,          "Total value change
         PERCHG       TYPE P LENGTH 5 DECIMALS 2,    "Percentage Change
       END OF TY_IFINAL.

* Internal Table Declarations
*****************************

*ALV Header Internal Table
DATA: T_HFINAL TYPE STANDARD TABLE OF TY_HFINAL INITIAL SIZE 0,

*ALV Item Internal Table
      T_IFINAL TYPE STANDARD TABLE OF TY_IFINAL INITIAL SIZE 0,
      T_FIELDCATALOG  TYPE SLIS_T_FIELDCAT_ALV,      "Fieldcatalog IT
      T_EVENTS        TYPE SLIS_T_EVENT,             "Event IT
      T_HEADER        TYPE SLIS_T_LISTHEADER,        "Header IT

* Work area Declarations
************************

*ALV Header Work Area
      W_HFINAL TYPE TY_HFINAL,

*ALV Item Work Area
      W_IFINAL TYPE TY_IFINAL,
      W_FIELDCATALOG TYPE SLIS_FIELDCAT_ALV,         "Fieldcatalog WA
      W_EVENT        TYPE SLIS_ALV_EVENT,            "Event WA
      W_HEADER       TYPE SLIS_LISTHEADER,           "Header WA
      W_LAYOUT       TYPE SLIS_LAYOUT_ALV,           "Layout WA
      W_KEYINFO      TYPE SLIS_KEYINFO_ALV,          "Key Information WA

* Variable declarations
***********************

      G_REPID  TYPE SY-REPID,                        "Program Name
      G_ANSWER TYPE C,                               "Optional Button
      G_WERKS TYPE EWERK,
      G_MATKL TYPE MATKL,
      G_MATNR TYPE MATNR,
      G_MTART TYPE MTART,
      G_LIFNR TYPE ELIFN,
      L_CPRICE_C(20) TYPE C,
      L_CPRICE_I(20) TYPE C,
      L_UNITPRICE_C(20) TYPE C,
      L_UNITPRICE_I(20) TYPE C.

* Constant declarations
***********************

CONSTANTS: C_A(1) TYPE C VALUE 'A',                     "Constant Value A
           C_E(1) TYPE C VALUE 'E',                     "Constant Value E
           C_H(1) TYPE C VALUE 'H',                     "Constant Value H
           C_M(1) TYPE C VALUE 'M',                     "Constant Value M
           C_S(1) TYPE C VALUE 'S',                     "Constant Value S
           C_X(1) TYPE C VALUE 'X',                     "Constant Value X
           C_0(1) TYPE C VALUE '0',                     "Constant Value 0
           C_R(1) TYPE C VALUE 'R',                     "Constant Value R
           C_2(1) TYPE C VALUE '2',                     "Constant Value 2
           C_LANG(2) TYPE C VALUE 'EN',                 "Language English
           C_ZQTE(4) TYPE C VALUE 'ZQTE',               "Condtion type ZQTE
           C_HTNAME(10) TYPE C VALUE 'T_HFINAL',        "Header table name
           C_ITNAME(10) TYPE C VALUE 'T_IFINAL'.        "Item table name

************************************************************************
*    S E L E C T   O P T I O N S  &  P A R A M E T E R S               *
************************************************************************

* Selection-screen Block 1
SELECTION-SCREEN BEGIN OF BLOCK BLK1
               WITH FRAME TITLE TEXT-001.         "Begin of Block1

PARAMETERS : P_EKORG TYPE EKORG OBLIGATORY.       "Pur.Organization

SELECT-OPTIONS : S_WERKS  FOR G_WERKS OBLIGATORY, "Plant
                 S_MATKL  FOR G_MATKL,            "Material Group
                 S_MATNR  FOR G_MATNR,            "Material No.
                 S_MTART  FOR G_MTART,            "Material Type
                 S_LIFNR  FOR G_LIFNR.            "Vendor

PARAMETERS : P_PERCHG(3)  TYPE C.                 "Percentage Change

SELECTION-SCREEN END OF BLOCK BLK1.               "End of Block 1

* Selection-screen Block 2
SELECTION-SCREEN BEGIN OF BLOCK BLK2
               WITH FRAME TITLE TEXT-002.         "Begin of Block2

PARAMETERS: P_VDATE TYPE DATAM DEFAULT SY-DATUM,  "Valid on date
            P_HDATE TYPE DATAM DEFAULT '29991231'."Horizon date

SELECTION-SCREEN END OF BLOCK BLK2.               "End of Block 2


************************************************************************
*   I N I T I A L I Z A T I O N                                        *
************************************************************************
INITIALIZATION.

  CLEAR : G_REPID.                                   "Program Name

  G_REPID = SY-REPID.                                "Program Name

************************************************************************
*   A T   S E L E C T I O N   S C R E E N                              *
************************************************************************
AT SELECTION-SCREEN.

* Validation for Change of Percentage
  IF P_PERCHG LT 0 OR P_PERCHG GT 100.

    MESSAGE E000(ZS) WITH  TEXT-E01.

  ENDIF.

* Validation for Horizon Date
  IF P_HDATE LE P_VDATE.

    MESSAGE E000(ZS) WITH  TEXT-E02.

  ENDIF.

************************************************************************
*   S T A R T   O F   S E L E C T I O N                                *
************************************************************************
START-OF-SELECTION.

* Data Selection
  PERFORM DATA_RETRIEVAL.

* Build Field Catalog
  PERFORM BUILD_FIELDCATALOG.

* Bulid layout
  PERFORM BUILD_LAYOUT.

* Build Events
  PERFORM BUILD_EVENTS.

************************************************************************
*   E N D   O F   S E L E C T I O N                                    *
************************************************************************
END-OF-SELECTION.

* Build Header for Top-Of-Page
  PERFORM BUILD_TOPOFPAGE.

* Display List
  PERFORM DISPLAY_ALV_REPORT.

************************************************************************
*   F O R M S                                                          *
************************************************************************

*&---------------------------------------------------------------------*
*&      Form  data_retrieval
*&---------------------------------------------------------------------*
*   To fetch data from Database table into ALV final Internal table
*----------------------------------------------------------------------*
FORM DATA_RETRIEVAL.

* Local Types declarations
**************************

*Types of EORD & EKPO table
  TYPES : BEGIN OF TY_MAIN,
            MATNR TYPE MATNR,               "Material No.
            WERKS TYPE EWERK,               "Plant
            ZEORD TYPE DZEORD,               "No.Source List Rec
            LIFNR TYPE ELIFN,               "Vendor Account No.
            EBELN TYPE EVRTN,               "Agreement Number
            EBELP TYPE EVRTP,               "Agreement Item
            EKORG TYPE EKORG,               "Pur. Organization
            AUTET TYPE AUTET,               "S.L. in Mat.Planning
            MATKL TYPE MATKL,               "Material Group
            MTART TYPE MTART,               "Material Type
            INFNR TYPE INFNR,               "No.Pur.Info Record
************************************************************************
*  Begin of Changes  CON-SAP-99  16/01/2007                            *
************************************************************************
            NETPR TYPE BPREI,               "Net Price
************************************************************************
*  End of Changes  CON-SAP-99  16/01/2007                              *
************************************************************************
*-----  Begin of Changes  EXT-SAP-180  13APR2007  ------               *
            MEINS TYPE BSTME,               "Purchase Order Unit of Measure
*-----  End of Changes    EXT-SAP-180  13APR2007  ------               *
*           begin 23APR2007  ------
            PEINH TYPE EPEIN,               "Price Unit
*           end   23APR2007  ------
            PSTYP TYPE PSTYP,               "Item Category
            KONNR TYPE KONNR,               "No.Principal P.A.
            KTPNR TYPE KTPNR,               "Item No.Principal P.A.
          END OF TY_MAIN,

*Types of MARA table
          BEGIN OF TY_MARA,
            MATNR TYPE MATNR,               "Material No.
            MEINS TYPE MEINS,               "Base Unit of Measure " ext-sap-180  13APR2007
          END OF TY_MARA,

*Types of MAKT table
          BEGIN OF TY_MAKT,
            MATNR TYPE MATNR,               "Material No.
            MAKTX TYPE MAKTX,               "Material Desp.
          END OF TY_MAKT,

*Types of MBEW table
          BEGIN OF TY_MBEW,
            MATNR TYPE MATNR,               "Material No.
            BWKEY TYPE BWKEY,               "Valuation Area
*-----  Begin of Changes  EXT-SAP-180  13APR2007  ------               *
            PEINH TYPE PEINH,                    "Price Unit
*-----  End of Changes    EXT-SAP-180  13APR2007  ------               *
            ZPLP3 TYPE DZPLP3,               "Future Planned Price
          END OF TY_MBEW,

*Types of A016_C table
          BEGIN OF TY_A016_C,
            EVRTN  TYPE EBELN,              "Purchasing Doc. No.
            EVRTP  TYPE EBELP,              "Item No.of Pur. Doc.
            KNUMH  TYPE KNUMH,              "Condition rec.no.
          END OF TY_A016_C,

*Types of A017_P table
          BEGIN OF TY_A017_P,
            LIFNR TYPE ELIFN,               "Vendor Account No.
            MATNR TYPE MATNR,               "Material No.
            EKORG TYPE EKORG,               "Pur. Organization
            WERKS TYPE WERKS_D,               "Plant
            KNUMH TYPE KNUMH,               "Condition rec.no.
          END OF TY_A017_P,

*Types of A054_M table
          BEGIN OF TY_A054_M,
            KSCHL TYPE KSCHA,               "Condition type
            EKORG TYPE EKORG,               "Pur. Organization
            MATKL TYPE MATKL,               "Material Group
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
            MATNR TYPE MATNR,               "Material Number
            DATBI TYPE KODATBI,              " Validity end date of the condition record  04APR07
            DATAB TYPE KODATAB,              " Validity start date of the condition record 04APR0
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
            KNUMH TYPE KNUMH,               "Condition rec.no.
          END OF TY_A054_M,

*Types of KONP_P table
          BEGIN OF TY_KONP_P,
            KNUMH TYPE KNUMH,               "Condition rec.no.
            KBETR TYPE KBETR_KOND,          "Rate
            KONWA TYPE KONWA,               "Rate unit
            KPEIN TYPE KPEIN,               "Condition pricing unit
            KMEIN TYPE KMEIN,               "Condition Unit
          END OF TY_KONP_P,

***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
* Types of A049 table
          BEGIN OF TY_A049,
            KSCHL TYPE KSCHA,              " Condition Type
            EKORG TYPE EKORG,              " Purchasing Organization
            MATKL TYPE MATKL,              " Material Group
            MATNR TYPE MATNR,              " Material Number
            DATBI TYPE KODATBI,              " Validity end date of the condition record  04APR07
            DATAB TYPE KODATAB,              " Validity start date of the condition record 04APR07
            KNUMH TYPE KNUMH,              " Condition Record Number
          END OF TY_A049,

* Types of KONP_C table
          BEGIN OF TY_KONP_C,
            KNUMH TYPE KNUMH,               "Condition rec.no.
            KOPOS TYPE KOPOS,
            KSCHL TYPE KSCHA,               "Condition type
            KBETR TYPE KBETR_KOND,               "Rate
            KONWA TYPE KONWA,               "Rate unit
          END OF TY_KONP_C,

*Types of KONM_C table
         BEGIN OF TY_KONM_C,
            KNUMH TYPE KNUMH,               "Condition rec.no.
            KOPOS TYPE KOPOS,               "Seq. no. of the condition
            KSTBM TYPE KSTBM,               "Condition scale quan.
            KBETR TYPE KBETR,               "Rate
          END OF TY_KONM_C,

*Types of KONM_P table
          BEGIN OF TY_KONM_P,
            KNUMH TYPE KNUMH,               "Condition rec.no.
            KSTBM TYPE KSTBM,               "Condition scale quan.
            KBETR TYPE KBETR,               "Rate
          END OF TY_KONM_P,

***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************

*-----  Begin of Changes  EXT-SAP-180  13APR2007  ------*
*Types of EINE table
           BEGIN OF TY_EINE,
             INFNR TYPE INFNR,                     " Number of Purchase Info Record
             EKORG TYPE EKORG,                     " Purchasing Organization
             WERKS TYPE EWERK,                     " Plant
             PEINH TYPE EPEIN,                     " Price Unit
             BPRME TYPE BBPRM,                     " Order Price Unit (Purchasing)
           END   OF TY_EINE,

*Types of MARM table
         BEGIN OF TY_MARM,
             MATNR TYPE MATNR,                     " Material Number
             MEINH TYPE LRMEI,                     " Alternative Unit of Measure
             UMREZ TYPE UMREZ,                     " Numerator for Conversion to Base UOM
             UMREN TYPE UMREN,                     " Denominator for Conversion to Base UOM
          END   OF TY_MARM,

*-----  End   of Changes  EXT-SAP-180  13APR2007  ------*

*Types of EKAB table
          BEGIN OF TY_EKAB,
            KONNR TYPE KONNR,               "No of Principal P.A
            KTPNR TYPE KTPNR,               "Item of Principal P.A
            EBELN TYPE EBELN,               "Purchasing Doc. No.
            MENGE TYPE BSTMG,               "P.O. Quantity
          END OF TY_EKAB,

*Types of EKPO table
         BEGIN OF TY_EKPO,
            INFNR TYPE INFNR,               "No of Pur.Info Rec.
            EBELN TYPE EBELN,               "Purchasing Doc. No.
            MENGE TYPE MENGE_D,             "P.O. Quantity
          END OF TY_EKPO.

* Local Internal table declarations
***********************************
  DATA: T_MAIN    TYPE STANDARD TABLE OF TY_MAIN,
        T_MAIN1   TYPE STANDARD TABLE OF TY_MAIN,
        T_MARA    TYPE STANDARD TABLE OF TY_MARA,
        T_MBEW    TYPE STANDARD TABLE OF TY_MBEW,
        T_MAKT    TYPE STANDARD TABLE OF TY_MAKT,
        T_A016_C  TYPE STANDARD TABLE OF TY_A016_C,
        T_A017_P  TYPE STANDARD TABLE OF TY_A017_P,
        T_A054_M  TYPE STANDARD TABLE OF TY_A054_M,
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
        T_KONP_C  TYPE STANDARD TABLE OF TY_KONP_C,
        T_A049    TYPE STANDARD TABLE OF TY_A049,
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
*-----           Begin of Changes  EXT-SAP-180  13APR2007            ------*
        T_EINE    TYPE STANDARD TABLE OF TY_EINE,
        T_MARM    TYPE STANDARD TABLE OF TY_MARM,
*-----           End   of Changes  EXT-SAP-180  13APR2007            ------*
        T_KONP_P  TYPE STANDARD TABLE OF TY_KONP_P,
        T_KONP_M  TYPE STANDARD TABLE OF TY_KONP_P,
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
        T_KONM_C  TYPE STANDARD TABLE OF TY_KONM_C,
        T_KONM_P  TYPE STANDARD TABLE OF TY_KONM_P,
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
        T_EKAB    TYPE STANDARD TABLE OF TY_EKAB,
        T_EKPO    TYPE STANDARD TABLE OF TY_EKPO,

* Local Work Area declarations
******************************
         W_MAIN    TYPE TY_MAIN,
         W_MARA    TYPE TY_MARA,
         W_MBEW    TYPE TY_MBEW,
         W_A016_C  TYPE TY_A016_C,
         W_A017_P  TYPE TY_A017_P,
         W_A054_M  TYPE TY_A054_M,
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
         W_KONP_C  TYPE TY_KONP_C,
         W_MAIN1_T TYPE TY_MAIN,
         W_A049_T  TYPE TY_A049,
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
*-----           Begin of Changes  EXT-SAP-180  13APR2007            ------*
         W_EINE    TYPE TY_EINE,
         W_MARM    TYPE TY_MARM,
*-----           End   of Changes  EXT-SAP-180  13APR2007            ------*
         W_KONP_P  TYPE TY_KONP_P,
         W_KONP_M  TYPE TY_KONP_P,
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
         W_KONM_C  TYPE TY_KONM_C,
         W_KONM_P  TYPE TY_KONM_P,
         W_KONM1   TYPE TY_KONM_C,
         W_KONM2   TYPE TY_KONM_P,
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
         W_EKAB    TYPE TY_EKAB,
         W_EKPO    TYPE TY_EKPO,
         W_MAKT    TYPE TY_MAKT,

* Local Variable declarations
*****************************

         L_PERPRICE TYPE KBETR_KOND,             "Local Percentage price
         L_PERUNIT  TYPE KPEIN,             "Condition Pricing Unit
         L_MARPRICE TYPE KBETR_KOND,             "Local Market price
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
         L_KBETR    TYPE KBETR,
         L_INDEX    TYPE SY-TABIX,               "Tab Index
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
************************************************************************
*  Begin of Changes  CON-SAP-99  11/12/2006                            *
************************************************************************
         L_STR TYPE STRING.
************************************************************************
*  End of Changes  CON-SAP-99  11/12/2006                              *
************************************************************************

* GET SOURCE LIST
*****************
  SELECT  A~MATNR                                "Material No.
          A~WERKS                                "Plant
          A~ZEORD                                "No.Source List Rec
          A~LIFNR                                "Vendor Account No.
          A~EBELN                                "Agreement Number
          A~EBELP                                "Agreement Item
          A~EKORG                                "Pur. Organization
          A~AUTET                                "S.L. in Mat.Planning
          B~MATKL                                "Material Group
          B~MTART                                "Material Type
          B~INFNR                                "No.Pur.Info Record
************************************************************************
*  Begin of Changes  CON-SAP-99  16/01/2007                            *
************************************************************************
          B~NETPR                                "Net price
************************************************************************
*  End of Changes  CON-SAP-99  16/01/2007                              *
************************************************************************
*-----  Begin of Changes  EXT-SAP-180  13APR2007  ------               *
          B~MEINS                                "Purchase Order Unit of Measure
*-----  End of Changes    EXT-SAP-180  13APR2007  ------               *
*           begin 23APR2007  ------
          B~PEINH                                "Price Unit
*           end   23APR2007  ------
          B~PSTYP                                "Pur. Doc. Category
          B~KONNR                                "No.Principal P.A.
          B~KTPNR                                "Item No.Principal P.A.
             INTO TABLE T_MAIN
             FROM  EORD AS A INNER JOIN EKPO AS B
             ON  ( A~EBELN EQ B~EBELN
             AND   A~EBELP EQ B~EBELP )
             WHERE A~MATNR IN S_MATNR
             AND   A~LIFNR IN S_LIFNR
             AND   A~WERKS IN S_WERKS
             AND   B~MATKL IN S_MATKL
             AND   B~MTART IN S_MTART
             AND   A~EKORG EQ P_EKORG
             AND   A~VDATU LE P_VDATE
             AND   A~BDATU GE P_VDATE
             AND ( A~AUTET EQ 1
             OR    A~AUTET EQ 2 ).
  IF SY-SUBRC = 0.

    SORT T_MAIN BY MATNR WERKS.

    DELETE ADJACENT DUPLICATES FROM T_MAIN
                          COMPARING MATNR
                                    WERKS.
    T_MAIN1[] = T_MAIN[].

    DELETE ADJACENT DUPLICATES FROM T_MAIN1
                          COMPARING MATNR.

* GET MATERIAL DESCRIPTION
    SELECT MATNR                                 "Material No
           MAKTX                                 "Material Desp.
             FROM MAKT
             INTO TABLE T_MAKT
             FOR ALL ENTRIES IN T_MAIN1
             WHERE MATNR EQ T_MAIN1-MATNR
             AND   SPRAS EQ C_LANG.
    IF SY-SUBRC = 0.

      SORT T_MAKT BY MATNR.

    ENDIF.

*-----  Begin of Changes  EXT-SAP-180  13APR2007  ------               *

* GET PURCHASE ORDER UNIT OF MEASURE FOR INFO RECORDS FROM EINE

    SELECT INFNR                            " Number of Purchase Info Record
           EKORG                            " Purchasing Organization
           WERKS                            " Plant
           PEINH                            " Price Unit
           BPRME                            " Order Price Unit
             FROM EINE
             INTO TABLE T_EINE
             FOR ALL ENTRIES IN T_MAIN1
             WHERE INFNR EQ T_MAIN1-INFNR
               AND EKORG EQ T_MAIN1-EKORG
               AND ( ESOKZ EQ C_0 OR ESOKZ EQ C_2 )            "Purchasing Info Record Category = Standard
               AND WERKS EQ T_MAIN1-WERKS.

    IF SY-SUBRC = 0.

      SORT T_EINE BY INFNR EKORG WERKS.

    ENDIF.

    SELECT MATNR                          " Material Number
           MEINH                          " Alternate UOM
           UMREZ                          " Numerator for conversion
           UMREN                          " Denominator for conversion
             FROM MARM
             INTO TABLE T_MARM
             FOR ALL ENTRIES IN T_MAIN1
             WHERE MATNR EQ T_MAIN1-MATNR.

    IF SY-SUBRC = 0.

      SORT T_MARM BY MATNR MEINH.

    ENDIF.

*-----  End of Changes    EXT-SAP-180  13APR2007  ------               *

* GET BASE UNIT OF MEASURE
    SELECT MATNR                                 "Material No.
           MEINS                                 "Base unit of measure " ext-sap-180 13APR2007
             INTO  TABLE T_MARA
             FROM  MARA
             FOR ALL ENTRIES IN T_MAIN1
             WHERE MATNR EQ T_MAIN1-MATNR.
    IF SY-SUBRC = 0.

      SORT T_MARA BY MATNR.

    ENDIF.

* GET CONTRACT PRICE
********************
    REFRESH T_MAIN1[].

    T_MAIN1[] = T_MAIN[].

    SORT T_MAIN1 BY PSTYP.

    DELETE T_MAIN1 WHERE PSTYP = 2.

    IF T_MAIN1 IS NOT INITIAL.

      SORT T_MAIN1 BY EBELN EBELP.

* Get Condition Record Number based on Purchasing Document Number
      SELECT EVRTN                               "Purchasing Doc. No.
             EVRTP                               "Item No.of Pur. Doc.
             KNUMH                               "Condition rec.no.
               FROM A016
               INTO TABLE T_A016_C
               FOR ALL ENTRIES IN  T_MAIN1
               WHERE KAPPL EQ C_M
               AND   EVRTN EQ T_MAIN1-EBELN
               AND   EVRTP EQ T_MAIN1-EBELP
               AND   DATBI GE P_VDATE
               AND   DATAB LE P_VDATE.
      IF SY-SUBRC = 0.

        SORT T_A016_C BY EVRTN EVRTP.

      ENDIF.

      SORT T_MAIN1 BY KONNR KTPNR.

*Get Condition Record No. based on Principal Purchasing Document No
      SELECT EVRTN                               "Purchasing Doc. No.
             EVRTP                               "Item No.of Pur. Doc.
             KNUMH                               "Condition rec.no.
               FROM A016
               APPENDING TABLE T_A016_C
               FOR ALL ENTRIES IN  T_MAIN1
               WHERE KAPPL EQ C_M
               AND   EVRTN EQ T_MAIN1-KONNR
               AND   EVRTP EQ T_MAIN1-KTPNR
               AND   DATBI GE P_VDATE
               AND   DATAB LE P_VDATE.

      IF T_A016_C IS NOT INITIAL.

        SORT T_A016_C BY EVRTN EVRTP.

*Get Rate & unit for all the Condition Record No.(Contract Price)
        SELECT KNUMH                             "Condition rec.no.
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
               KOPOS                             "Seq. No. of the condition
               KSCHL                             "Condition Type
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
               KBETR                             "Rate
               KONWA                             "Rate unit
                 FROM KONP
                 INTO TABLE T_KONP_C
                 FOR ALL ENTRIES IN T_A016_C
                 WHERE KNUMH EQ T_A016_C-KNUMH
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
                 AND LOEVM_KO EQ SPACE.
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
        IF SY-SUBRC = 0.

          SORT T_KONP_C BY KNUMH.

        ENDIF.

* Get Condition scale quantity & Rate for all the Condition Record No.
        SELECT KNUMH                             "Condition rec.no.
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
               KOPOS                             "Seq. No. of the condition
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
               KSTBM                             "Condition scale quan.
               KBETR                             "Rate
                 FROM KONM
                 INTO TABLE T_KONM_C
                 FOR ALL ENTRIES IN T_A016_C
                 WHERE KNUMH EQ T_A016_C-KNUMH.
        IF SY-SUBRC = 0.

          SORT T_KONM_C BY KNUMH
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
                           KOPOS
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
                           KSTBM
                           DESCENDING.

        ENDIF.

* Get PO Doc. No. & Quantity based on Principal Purchasing Doc. No
        SELECT KONNR                             "No of Principal P.A
               KTPNR                             "Item of Principal P.A
               EBELN                             "Purchasing Doc. No.
               MENGE                             "P.O. Quantity
                 FROM EKAB
                 INTO TABLE T_EKAB
                 FOR ALL ENTRIES IN T_A016_C
                 WHERE KONNR EQ T_A016_C-EVRTN
                 AND   KTPNR EQ T_A016_C-EVRTP.
        IF SY-SUBRC = 0.

          SORT T_EKAB BY KONNR KTPNR EBELN DESCENDING.

        ENDIF.

      ENDIF.

    ENDIF.

* GET PURCHASING INFO RECORDS PRICE
***********************************
    REFRESH T_MAIN1[].

    T_MAIN1[] = T_MAIN[].

    DELETE T_MAIN1 WHERE PSTYP <> 2.

    IF T_MAIN1 IS NOT INITIAL.

      SORT T_MAIN1 BY LIFNR MATNR EKORG WERKS.

* Get Condition Record No based on Vendor,Material,Pur.org & Plant
      SELECT LIFNR                               "Vendor Account No.
             MATNR                               "Material No.
             EKORG                               "Pur. Organization
             WERKS                               "Plant
             KNUMH                               "Condition rec.no.
               FROM A017
               INTO TABLE T_A017_P
               FOR ALL ENTRIES IN  T_MAIN1
               WHERE LIFNR EQ T_MAIN1-LIFNR
               AND   MATNR EQ T_MAIN1-MATNR
               AND   EKORG EQ T_MAIN1-EKORG
               AND   WERKS EQ T_MAIN1-WERKS
               AND   DATBI GE P_VDATE
               AND   DATAB LE P_VDATE.

      IF SY-SUBRC = 0.

        SORT T_A017_P BY LIFNR MATNR EKORG WERKS.

*Get Rate & unit for all the Condition Rec.No.(Pur. info Rec Price)
        SELECT KNUMH                             "Condition rec.no.
               KBETR                             "Rate
               KONWA                             "Rate unit
               KPEIN                             "Condition pricing unit
               KMEIN                             "Condition Unit
                 FROM KONP
                 INTO TABLE T_KONP_P
                 FOR ALL ENTRIES IN T_A017_P
                 WHERE KNUMH EQ T_A017_P-KNUMH.
        IF SY-SUBRC = 0.

          SORT T_KONP_P BY KNUMH.

        ENDIF.

* Get Condition scale quantity & Rate for all the Condition Record No.
        SELECT KNUMH                             "Condition rec.no.
               KSTBM                             "Condition scale quan.
               KBETR                             "Rate
                 FROM KONM
                 INTO TABLE T_KONM_P
                 FOR ALL ENTRIES IN T_A017_P
                 WHERE KNUMH EQ T_A017_P-KNUMH.
        IF SY-SUBRC = 0.

          SORT T_KONM_P BY KNUMH KSTBM DESCENDING.

        ENDIF.

      ENDIF.

* Get PO Doc. No. & Quantity based on Principal Purchasing Doc. No

      SORT T_MAIN1 BY INFNR.

      SELECT INFNR                             "No of Pur.Info Rec.
             EBELN                             "Purchasing Doc. No.
             MENGE                             "P.O. Quantity
               FROM EKPO
               INTO TABLE T_EKPO
               FOR ALL ENTRIES IN T_MAIN1
               WHERE INFNR EQ T_MAIN1-INFNR
               AND   WERKS EQ T_MAIN1-WERKS
               AND   BSTYP EQ 'F'.
      IF SY-SUBRC = 0.

        SORT T_EKPO BY INFNR EBELN DESCENDING.

      ENDIF.

    ENDIF.

* GET MARKET PRICE
******************
    REFRESH T_MAIN1[].

    T_MAIN1[] = T_MAIN[].

    DELETE ADJACENT DUPLICATES FROM T_MAIN1 COMPARING EKORG MATKL.

    P_VDATE = P_VDATE + 1.

***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************

* Get Condition Record No based on Material Number
    SELECT KSCHL
           EKORG
           MATNR
           DATBI    "EXT-SAP-180 04Apr07
           DATAB    "EXT-SAP-180 04Apr07
           KNUMH
     FROM  A049
     INTO CORRESPONDING FIELDS OF TABLE T_A049
     FOR ALL ENTRIES IN T_MAIN
     WHERE KSCHL EQ C_ZQTE
       AND EKORG EQ T_MAIN-EKORG
       AND MATNR EQ T_MAIN-MATNR
       AND ESOKZ EQ C_0.

    IF SY-SUBRC EQ 0.                               " if entries exists in t_a049

      SORT T_A049 BY EKORG MATNR
                     DATBI DATAB.                   " EXT-SAP-180 04Apr07


      CLEAR L_INDEX.

      LOOP AT T_A049 INTO W_A049_T.

        L_INDEX = SY-TABIX.

        READ TABLE T_MAIN INTO W_MAIN1_T
                   WITH KEY EKORG = W_A049_T-EKORG
                            MATNR = W_A049_T-MATNR
                   BINARY SEARCH.

        IF SY-SUBRC EQ 0.

          W_A049_T-MATKL = W_MAIN1_T-MATKL.
          MODIFY T_A049 FROM W_A049_T
                        INDEX L_INDEX
                        TRANSPORTING MATKL.

        ENDIF.

        CLEAR: W_A049_T,
               W_MAIN1_T,
               L_INDEX.

      ENDLOOP.

* Get Rate & unit for all the Condition Record No. (Market price)
      SELECT KNUMH                               "Condition rec.no.
             KBETR                               "Rate
             KONWA                               "Rate unit
             KPEIN                               "Condition Pricing Unit
             KMEIN                               "Condition Unit
             FROM KONP
             INTO TABLE T_KONP_M
             FOR ALL ENTRIES IN T_A049
             WHERE KNUMH EQ T_A049-KNUMH.
      IF SY-SUBRC = 0.

        SORT T_KONP_C BY KNUMH.

      ENDIF.

    ENDIF.

***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007           *
***************************************************************

*Get Condition Record No based on Condition type, Pur.Org.,Mat. group
    SELECT KSCHL                                 "Condition type
           EKORG                                 "Pur. Organization
           MATKL                                 "Material Group
           DATBI                                 "Valid to date   EXT-SAP-180 04Apr07
           DATAB                                 "Valid from date EXT-SAP-180 04Apr07
           KNUMH                                 "Condition rec.no.
             FROM A054
             INTO CORRESPONDING FIELDS OF TABLE T_A054_M
             FOR ALL ENTRIES IN  T_MAIN
             WHERE KSCHL EQ  C_ZQTE
             AND   EKORG EQ  T_MAIN-EKORG
             AND   MATKL EQ  T_MAIN-MATKL
             AND   ESOKZ EQ C_0.
    IF SY-SUBRC = 0.

      SORT T_A054_M BY EKORG MATKL
                       DATBI DATAB. " added by SAP-EXT-180 04Apr07

* Get Rate & unit for all the Condition Record No. (Market price)
      SELECT KNUMH                               "Condition rec.no.
             KBETR                               "Rate
             KONWA                               "Rate unit
             KPEIN                               "Condition Pricing Unit
             KMEIN                               "Condition Unit
             FROM KONP
             APPENDING TABLE T_KONP_M
             FOR ALL ENTRIES IN T_A054_M
             WHERE KNUMH EQ T_A054_M-KNUMH.
      IF SY-SUBRC = 0.

        SORT T_KONP_C BY KNUMH KOPOS KSCHL.
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
        SORT T_KONP_M BY KNUMH.
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
      ENDIF.

    ENDIF.

* GET PREVIOUS REPLACEMENT COST
*******************************
    SELECT MATNR                                 "Material No.
           BWKEY                                 "Valuation Area
*-----  Begin of Changes  EXT-SAP-180  13APR2007  ------               *
           PEINH                                 "Price Unit
*-----  End of Changes    EXT-SAP-180  13APR2007  ------               *
           ZPLP3                                 "Future Planned Price
             FROM MBEW
             INTO TABLE T_MBEW
             FOR ALL ENTRIES IN  T_MAIN
             WHERE MATNR EQ T_MAIN-MATNR
             AND   BWKEY EQ T_MAIN-WERKS.
    IF SY-SUBRC = 0.

      SORT  T_MBEW BY MATNR BWKEY.

    ENDIF.

* TRANSFERING DATA INTO FINAL INTERNAL TABLE

    CLEAR : W_MAIN.

    LOOP AT T_MAIN INTO W_MAIN.

* Clear the Work area
      CLEAR : W_MAKT,
              W_MARA,
              W_MBEW,
              W_A016_C,
              W_A017_P,
              W_A054_M,
              W_KONP_C,
              W_KONP_P,
              W_KONP_M,
              W_KONM_C,
              W_KONM_P,
              W_KONM1,
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
              W_KONM2,
              W_A049_T,
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
              W_EKAB,
              W_EKPO.

      CLEAR : W_HFINAL,
              W_IFINAL.

* PLANT, MATERIAL GROUP
      W_HFINAL-WERKS = W_MAIN-WERKS.             "Plant(H)
      W_HFINAL-MATKL = W_MAIN-MATKL.             "Material Group(H)

      W_IFINAL-WERKS = W_MAIN-WERKS.             "Plant(I)
      W_IFINAL-MATKL = W_MAIN-MATKL.             "Material Group(I)

* MATERIAL NUMBER, VENDER NUMBER
      W_IFINAL-MATNR = W_MAIN-MATNR.             "Material No.
      W_IFINAL-LIFNR = W_MAIN-LIFNR.             "Vendor

* MATERIAL DESCRIPTION
      READ TABLE T_MAKT INTO W_MAKT
                        WITH KEY MATNR = W_MAIN-MATNR
                        BINARY SEARCH.
      IF SY-SUBRC = 0.

        W_IFINAL-MAKTX = W_MAKT-MAKTX.           "Material Desp.

      ENDIF.

* BASE UNIT OF MEASURE
      READ TABLE T_MARA INTO W_MARA
                        WITH KEY MATNR = W_MAIN-MATNR
                        BINARY SEARCH.
      IF SY-SUBRC = 0.

*-----           Begin of Changes  EXT-SAP-180  13APR2007            ------*
        W_IFINAL-BSUOM = W_MARA-MEINS.
*-----           End   of Changes  EXT-SAP-180  13APR2007            ------*
      ENDIF.

* CONTRACT PRICE
      IF W_MAIN-PSTYP <> 2.

* Assigning Scheduling agreement reference no. into agreement no.
        IF W_MAIN-AUTET EQ 2.

          W_MAIN-EBELN = W_MAIN-KONNR.
          W_MAIN-EBELP = W_MAIN-KTPNR.

        ENDIF.

*-----           Begin of Changes  EXT-SAP-180  13APR2007            ------*

* Assigning Purchase Order Unit of Measure
        W_IFINAL-PRUOM = W_MAIN-MEINS.

*-----           Begin of Changes  EXT-SAP-180  13APR2007            ------*

* Read conditon no. for agreement no.
        READ TABLE T_A016_C INTO W_A016_C
                            WITH KEY EVRTN = W_MAIN-EBELN
                                     EVRTP = W_MAIN-EBELP
                            BINARY SEARCH.
        IF SY-SUBRC = 0.

*    Begin of insertion    EXT-SAP-180    02APR2007          *
          LOOP AT T_KONP_C INTO W_KONP_C
                           WHERE KNUMH = W_A016_C-KNUMH.
*    End of insertion      EXT-SAP-180    02APR2007          *

* to check scales
            READ TABLE T_KONM_C INTO W_KONM_C
                              WITH KEY KNUMH = W_A016_C-KNUMH
*    Begin of Changes      EXT-SAP-180    02APR2007          *
                                       KOPOS = W_KONP_C-KOPOS
*    End of Changes        EXT-SAP-180    02APR2007          *
                              BINARY SEARCH.
            IF SY-SUBRC = 0.

* Check Purchase order for Contract Price with scales
              READ TABLE T_EKAB INTO W_EKAB
                                WITH KEY KONNR = W_A016_C-EVRTN
                                         KTPNR = W_A016_C-EVRTP
                                BINARY SEARCH.
              IF SY-SUBRC = 0.

                SORT T_KONM_C BY KNUMH KSTBM.

* Get the Contract price, if Purchase order exist
                LOOP AT T_KONM_C INTO W_KONM1
                               WHERE KNUMH EQ W_A016_C-KNUMH
                               AND   KSTBM LE W_EKAB-MENGE.

                  CLEAR L_KBETR.

                  IF SY-SUBRC = 0.

                    L_KBETR = W_KONM1-KBETR.
                    CONTINUE.

                  ENDIF.

                ENDLOOP.
* the above looping is done to get the right scale & stop, then add
* the scale amount to the existing contract price in the below step.
                W_IFINAL-CPRICE = W_IFINAL-CPRICE + L_KBETR.
                CLEAR : W_KONM1,
                        L_KBETR.

***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
                SORT T_KONM_C BY KNUMH
                   KOPOS
                   KSTBM
                   DESCENDING.
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
              ELSE.

* Get the Contract price, if doesnot Purchase order exist
                W_IFINAL-CPRICE = W_IFINAL-CPRICE + W_KONM_C-KBETR. "Changed EXT-SAP-180 02APR2007

              ENDIF.
              CLEAR W_EKAB.

            ELSE.

* Contract Price with out scales
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
              READ TABLE T_KONP_C INTO W_KONP_C
                                  WITH KEY KNUMH = W_A016_C-KNUMH
                                           KSCHL = W_KONP_C-KSCHL
                                  BINARY SEARCH.
              IF SY-SUBRC = 0.

                W_IFINAL-CPRICE = W_IFINAL-CPRICE + W_KONP_C-KBETR.

              ENDIF.

              CLEAR W_KONP_C.
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************

            ENDIF.
            CLEAR W_KONM_C.

***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
          ENDLOOP.
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************

*----BEGIN OF CHANGE EXT-SAP-180  23rd April 2007

          L_CPRICE_C = W_IFINAL-CPRICE.
          CONDENSE L_CPRICE_C. "NO-GAPS.

          IF W_MAIN-PEINH IS INITIAL.

            W_IFINAL-FINCONPRI = L_CPRICE_C.

          ELSE.

            L_UNITPRICE_C = W_MAIN-PEINH.
            CONDENSE L_UNITPRICE_C. " NO-GAPS.
            CONCATENATE L_CPRICE_C '/' L_UNITPRICE_C W_MAIN-MEINS INTO W_IFINAL-FINCONPRI.

          ENDIF.

          CLEAR: L_CPRICE_C,
                 L_UNITPRICE_C.
*----END   OF CHANGE EXT-SAP-180  23rd April 2007

        ENDIF.
        CLEAR W_A016_C.

      ENDIF.

* PURCHASE INFO RECORD
      IF W_MAIN-PSTYP = 2.

*-----           Begin of Changes  EXT-SAP-180  13APR2007            ------*
        READ TABLE T_EINE INTO W_EINE
                          WITH KEY INFNR = W_MAIN-INFNR
                                   EKORG = W_MAIN-EKORG
                                   WERKS = W_MAIN-WERKS
                          BINARY SEARCH.
        IF SY-SUBRC = 0.

          W_IFINAL-PRUOM = W_EINE-BPRME.

        ENDIF.


*-----           End   of Changes  EXT-SAP-180  13APR2007            ------*

        READ TABLE T_A017_P INTO W_A017_P
                            WITH  KEY LIFNR = W_MAIN-LIFNR
                                      MATNR = W_MAIN-MATNR
                                      EKORG = W_MAIN-EKORG
                                      WERKS = W_MAIN-WERKS
                            BINARY SEARCH.
        IF SY-SUBRC = 0.

* To check scales
          READ TABLE T_KONM_P INTO W_KONM_P
                            WITH KEY KNUMH = W_A017_P-KNUMH
                            BINARY SEARCH.
          IF SY-SUBRC = 0.

* Check Purchase order for Purchase info record Price with scales
            READ TABLE T_EKPO INTO W_EKPO
                              WITH KEY INFNR = W_MAIN-INFNR
                              BINARY SEARCH.
            IF SY-SUBRC = 0.

              SORT T_KONM_P BY KNUMH KSTBM.

* Get the Pur.info rec. , if Purchase order exist
              LOOP AT T_KONM_P INTO W_KONM2
                             WHERE KNUMH EQ W_A017_P-KNUMH
                             AND   KSTBM LE W_EKPO-MENGE.

                W_IFINAL-INFOREC =  W_KONM2-KBETR.       "Pur.Info rec.

              ENDLOOP.

            ELSE.

* Get the Pur.info rec. price, if doesnot Purchase order exist
              W_IFINAL-INFOREC = W_KONM_P-KBETR.         "Pur.Info rec.

            ENDIF.

          ELSE.

* Get Pur.info rec. price,with out scales
            READ TABLE T_KONP_P INTO W_KONP_P
                                WITH KEY KNUMH = W_A017_P-KNUMH
                                BINARY SEARCH.
            IF SY-SUBRC = 0.

              W_IFINAL-INFOREC = W_KONP_P-KBETR.         "Pur.Info rec.

            ENDIF.

          ENDIF.

        ENDIF.
*----BEGIN OF CHANGE EXT-SAP-180  23rd April 2007
        L_CPRICE_I = W_IFINAL-INFOREC.
        CONDENSE L_CPRICE_I.

        IF W_EINE-PEINH IS INITIAL.

          W_IFINAL-FININFPRI = L_CPRICE_I.

        ELSE.

          L_UNITPRICE_I = W_EINE-PEINH.
          CONDENSE L_UNITPRICE_I. " NO-GAPS.
          CONCATENATE L_CPRICE_I '/' L_UNITPRICE_I W_EINE-BPRME INTO W_IFINAL-FININFPRI.

        ENDIF.

        W_MAIN-PEINH = W_EINE-PEINH.

        CLEAR: L_CPRICE_I,
               L_UNITPRICE_I,
               W_EINE,
               W_KONM2,
               W_KONP_P,
               W_EKPO,
               W_KONM_P,
               W_A017_P.
*--------End of Change EXT-SAP-180 23rd April 2007

      ENDIF.

* MARKET PRICE
************************************************************************
*  Begin of Changes  CON-SAP-99  11/12/2006                            *
************************************************************************
*clear
      CLEAR : L_PERPRICE.
************************************************************************
*  End of Changes  CON-SAP-99  11/12/2006                              *
************************************************************************
      IF W_IFINAL-CPRICE IS NOT INITIAL.

        L_PERPRICE = W_IFINAL-CPRICE.

      ELSE.

        L_PERPRICE = W_IFINAL-INFOREC.

      ENDIF.

      L_PERUNIT  = W_MAIN-PEINH. " fetching the unit at contract/inforecord price level

************************************************************************
*  Begin of Changes  CON-SAP-99  11/12/2006                            *
************************************************************************

      W_IFINAL-MPRICE = L_PERPRICE.

***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************

      CLEAR W_A049_T.
      SORT T_A049 BY EKORG MATNR.
      READ TABLE T_A049 INTO W_A049_T
                     WITH KEY EKORG = W_MAIN-EKORG
                              MATNR = W_MAIN-MATNR
                     BINARY SEARCH.
      IF SY-SUBRC EQ 0.

        CLEAR: W_A049_T.
*
        SORT T_KONP_M BY KNUMH.

        LOOP AT T_A049 INTO W_A049_T                        "03APR07
                       WHERE EKORG = W_MAIN-EKORG
                       AND   MATNR = W_MAIN-MATNR.

* Following IF condition is to check whether the dates given in the selection criteria
* are falling into the date ranges of the records of A049.

          IF ( W_A049_T-DATBI GE P_VDATE AND W_A049_T-DATAB LE P_VDATE )
            OR ( W_A049_T-DATBI GE P_HDATE AND W_A049_T-DATAB LE P_HDATE )
            OR ( W_A049_T-DATBI LE P_HDATE AND W_A049_T-DATAB GE P_VDATE ).

            CLEAR W_KONP_M.
            READ TABLE T_KONP_M INTO W_KONP_M
                                WITH KEY KNUMH = W_A049_T-KNUMH
                                BINARY SEARCH.
            IF SY-SUBRC = 0.
              L_STR = W_KONP_M-KBETR.

*-------------- Begin of changes EXT-SAP-180  24APR07---------------------------------
              IF NOT W_KONP_M-KMEIN IS INITIAL AND W_KONP_M-KMEIN NE W_MAIN-MEINS.

                IF W_MARA-MEINS NE W_MAIN-MEINS.

                  CLEAR W_MARM.
                  READ TABLE T_MARM INTO W_MARM
                                    WITH KEY MATNR = W_IFINAL-MATNR
                                             MEINH = W_MAIN-MEINS
                                    BINARY SEARCH.

                  W_KONP_M-KBETR = ( W_MARM-UMREZ / W_MARM-UMREN ) * W_KONP_M-KBETR.
                  CLEAR W_MARM.

                ELSEIF W_MARA-MEINS EQ W_MAIN-MEINS.

                  CLEAR W_MARM.
                  READ TABLE T_MARM INTO W_MARM
                                    WITH KEY MATNR = W_IFINAL-MATNR
                                             MEINH = W_KONP_M-KMEIN
                                    BINARY SEARCH.

                  W_KONP_M-KBETR = ( W_MARM-UMREN / W_MARM-UMREZ ) * W_KONP_M-KBETR.
                  CLEAR W_MARM.

                ENDIF.

              ENDIF.
*-------------- End   of changes EXT-SAP-180  24APR07---------------------------------

              IF W_KONP_M-KONWA EQ '%'.

                CLEAR : L_MARPRICE.
                W_KONP_M-KBETR = ABS( W_KONP_M-KBETR ).
                L_MARPRICE = ( L_PERPRICE * W_KONP_M-KBETR ) / 1000.
                IF L_STR CS '-'.
                  L_PERPRICE = L_PERPRICE - L_MARPRICE.
                ELSE.
                  L_PERPRICE = L_PERPRICE + L_MARPRICE.
                ENDIF.
              ELSEIF L_STR CS '-'.
                W_KONP_M-KBETR = ABS( W_KONP_M-KBETR ).
                L_PERPRICE  = L_PERPRICE - ( ( W_KONP_M-KBETR / W_KONP_M-KPEIN ) * L_PERUNIT ).

              ELSE.

                L_PERPRICE  = L_PERPRICE + ( ( W_KONP_M-KBETR / W_KONP_M-KPEIN ) * L_PERUNIT ).

              ENDIF.

            ENDIF.

          ENDIF.

          CLEAR : W_KONP_M,L_STR.
        ENDLOOP.
      ELSE.

***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************

        LOOP AT T_A054_M INTO  W_A054_M
                         WHERE EKORG = W_MAIN-EKORG
                         AND   MATKL = W_MAIN-MATKL.
*---------begin of change EXT-SAP-180   9APR2007--------------
          IF ( W_A054_M-DATBI GE P_VDATE AND W_A054_M-DATAB LE P_VDATE )
            OR ( W_A054_M-DATBI GE P_HDATE AND W_A054_M-DATAB LE P_HDATE )
            OR ( W_A054_M-DATBI LE P_HDATE AND W_A054_M-DATAB GE P_VDATE ).

            CLEAR W_KONP_M.
*---------end   of change EXT-SAP-180   9APR2007--------------
            READ TABLE T_KONP_M INTO W_KONP_M
                                WITH KEY KNUMH = W_A054_M-KNUMH
                                BINARY SEARCH.
            IF SY-SUBRC = 0.
              L_STR = W_KONP_M-KBETR.

*-------------- Begin of changes EXT-SAP-180  24APR07---------------------------------
              IF NOT W_KONP_M-KMEIN IS INITIAL AND W_KONP_M-KMEIN NE W_MAIN-MEINS.

                IF W_MARA-MEINS NE W_MAIN-MEINS.

                  CLEAR W_MARM.
                  READ TABLE T_MARM INTO W_MARM
                                    WITH KEY MATNR = W_IFINAL-MATNR
                                             MEINH = W_MAIN-MEINS
                                    BINARY SEARCH.

                  W_KONP_M-KBETR = ( W_MARM-UMREZ / W_MARM-UMREN ) * W_KONP_M-KBETR.
                  CLEAR W_MARM.

                ELSEIF W_MARA-MEINS EQ W_MAIN-MEINS.

                  CLEAR W_MARM.
                  READ TABLE T_MARM INTO W_MARM
                                    WITH KEY MATNR = W_IFINAL-MATNR
                                             MEINH = W_KONP_M-KMEIN
                                    BINARY SEARCH.

                  W_KONP_M-KBETR = ( W_MARM-UMREN / W_MARM-UMREZ ) * W_KONP_M-KBETR.
                  CLEAR W_MARM.

                ENDIF.

              ENDIF.
*-------------- End   of changes EXT-SAP-180  24APR07---------------------------------

              IF W_KONP_M-KONWA EQ '%'.

                CLEAR : L_MARPRICE.
                W_KONP_M-KBETR = ABS( W_KONP_M-KBETR ).
                L_MARPRICE = ( L_PERPRICE * W_KONP_M-KBETR ) / 1000.
                IF L_STR CS '-'.
                  L_PERPRICE = L_PERPRICE - L_MARPRICE.
                ELSE.
                  L_PERPRICE = L_PERPRICE + L_MARPRICE.
                ENDIF.
              ELSEIF L_STR CS '-'.
                W_KONP_M-KBETR = ABS( W_KONP_M-KBETR ).
*-------------- Begin of changes EXT-SAP-180  24APR07---------------------------------
                L_PERPRICE  = L_PERPRICE - ( ( W_KONP_M-KBETR / W_KONP_M-KPEIN ) * L_PERUNIT ).

              ELSE.
                L_PERPRICE  = L_PERPRICE + ( ( W_KONP_M-KBETR / W_KONP_M-KPEIN ) * L_PERUNIT ).
*-------------- End   of changes EXT-SAP-180  24APR07---------------------------------
              ENDIF.

            ENDIF.

*---------begin of change EXT-SAP-180   9APR2007--------------
          ENDIF.
*---------end   of change EXT-SAP-180   9APR2007--------------

          CLEAR : W_KONP_M,L_STR,W_A054_M.
        ENDLOOP.

***************************************************************
*    Begin of Changes      EXT-SAP-180    03APR2007          *
***************************************************************
      ENDIF.

***************************************************************
*    End of Changes        EXT-SAP-180    03APR2007          *
***************************************************************
      W_IFINAL-MPRICE = L_PERPRICE - W_IFINAL-MPRICE.

************************************************************************
*  End of Changes  CON-SAP-99  11/12/2006                              *
************************************************************************
* TOTAL REPLACEMENT COSTS
      IF W_IFINAL-CPRICE IS NOT INITIAL.

        W_IFINAL-NREPCOST = W_IFINAL-CPRICE + W_IFINAL-MPRICE.

      ELSE.

        W_IFINAL-NREPCOST = W_IFINAL-INFOREC + W_IFINAL-MPRICE.

      ENDIF.

*-------------- Begin of changes EXT-SAP-180  24APR07
* To show the total replacemnt cost per 1000 units

      IF NOT L_PERUNIT IS INITIAL.

        W_IFINAL-NREPCOST = ( W_IFINAL-NREPCOST / L_PERUNIT ) * 1000.

      ELSE.
* to make sure that tot rep / 1000 incase of absence of perunit for contract/inforec
        W_IFINAL-NREPCOST = W_IFINAL-NREPCOST * 1000.

      ENDIF.

      CLEAR L_PERUNIT.
*-------------- End   of changes EXT-SAP-180  24APR07
*---------begin of change EXT-SAP-180   13APR2007--------------
* Calculation of total replacement according to the base UOM
      CLEAR W_MARM.
      READ TABLE T_MARM INTO W_MARM
                        WITH KEY MATNR = W_IFINAL-MATNR
                                 MEINH = W_IFINAL-PRUOM
                                 BINARY SEARCH.
      W_IFINAL-TRC_BUOM = ( W_MARM-UMREN / W_MARM-UMREZ ) * W_IFINAL-NREPCOST.

*---------end   of change EXT-SAP-180   13APR2007--------------

* PREVIOUS REPLACEMENT COSTS
      READ TABLE T_MBEW INTO W_MBEW
                        WITH KEY MATNR = W_MAIN-MATNR
                                 BWKEY = W_MAIN-WERKS
                        BINARY SEARCH.
      IF SY-SUBRC = 0.

        W_IFINAL-PREPCOST = W_MBEW-ZPLP3.
*---------begin of change EXT-SAP-180   13APR2007--------------

        W_IFINAL-TRC_BUOM = W_IFINAL-TRC_BUOM * ( W_MBEW-PEINH / 1000 ).

*---------end   of change EXT-SAP-180   13APR2007--------------

      ENDIF.

* TOTAL VALUE CHANGE
*---------begin of change EXT-SAP-180   13APR2007--------------
      W_IFINAL-VALCHG = W_IFINAL-TRC_BUOM - W_IFINAL-PREPCOST.
*---------end   of change EXT-SAP-180   13APR2007--------------

* PERCENTAGE OF CHANGE
      IF W_MBEW-ZPLP3 IS NOT INITIAL.

        W_IFINAL-PERCHG = ABS( W_IFINAL-VALCHG / W_IFINAL-PREPCOST ).
        W_IFINAL-PERCHG = W_IFINAL-PERCHG * 100.
*------Begin of Changes      EXT-SAP-180    11APR2007----------*
        IF W_IFINAL-VALCHG LT 0.
          W_IFINAL-PERCHG = W_IFINAL-PERCHG * -1.
        ENDIF.
*------End of Changes        EXT-SAP-180    11APR2007----------*

      ELSE.


*---------begin of change EXT-SAP-180   13APR2007--------------
        W_IFINAL-PERCHG = ABS( W_IFINAL-VALCHG / W_IFINAL-TRC_BUOM ).
*---------end   of change EXT-SAP-180   13APR2007--------------
        W_IFINAL-PERCHG = W_IFINAL-PERCHG * 100.
*------Begin of Changes      EXT-SAP-180    11APR2007----------*
        IF W_IFINAL-VALCHG LT 0.
          W_IFINAL-PERCHG = W_IFINAL-PERCHG * -1.
        ENDIF.
*------End of Changes        EXT-SAP-180    11APR2007----------*

      ENDIF.

      IF ABS( W_IFINAL-PERCHG ) GE P_PERCHG.    " Changed by EXT-SAP-180  11APR2007

        APPEND W_IFINAL TO T_IFINAL.
        APPEND W_HFINAL TO T_HFINAL.

      ENDIF.

***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
      CLEAR: W_MAIN,
             W_IFINAL,
             W_HFINAL.
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************

    ENDLOOP.

  ENDIF.

  IF T_IFINAL IS INITIAL.

    MESSAGE I000(ZS) WITH TEXT-M01.
    LEAVE LIST-PROCESSING.

  ELSE.

    SORT T_HFINAL BY WERKS MATKL.
    SORT T_IFINAL BY WERKS MATKL MATNR.

    DELETE ADJACENT DUPLICATES FROM T_HFINAL
                          COMPARING WERKS
                                    MATKL.
  ENDIF.

ENDFORM.                    "data_retrieval

*&---------------------------------------------------------------------*
*&      Form  build_fieldcatalog
*&---------------------------------------------------------------------*
*     To build ALV field catalog
*----------------------------------------------------------------------*
FORM BUILD_FIELDCATALOG.

  DATA: L_COUNT TYPE I VALUE 0.

  CLEAR : W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_HTNAME.
  W_FIELDCATALOG-FIELDNAME   = 'WERKS'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C13.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR : W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_HTNAME.
  W_FIELDCATALOG-FIELDNAME   = 'MATKL'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C14.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  L_COUNT = 0.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'SELECT'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C01.
  W_FIELDCATALOG-CHECKBOX    =  C_X.
  W_FIELDCATALOG-EDIT        =  C_X.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'MATNR'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C02.
  W_FIELDCATALOG-KEY         =  C_X.   "Fixes the column for no-scroll EXT-SAP-180 5Apr07
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'LIFNR'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C03.
  W_FIELDCATALOG-KEY         =  C_X.   "Fixes the column for no-scroll EXT-SAP-180 5Apr07
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'MAKTX'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C04.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
* Begin of changes EXT-SAP-180  24APR07
  W_FIELDCATALOG-FIELDNAME   = 'FINCONPRI'.
* End   of changes EXT-SAP-180  24APR07
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C06.
  W_FIELDCATALOG-NO_ZERO     =  C_X.
  W_FIELDCATALOG-JUST        =  C_R.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
* Begin of changes EXT-SAP-180  24APR07
  W_FIELDCATALOG-FIELDNAME   = 'FININFPRI'.
* End   of changes EXT-SAP-180  24APR07
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C07.
  W_FIELDCATALOG-NO_ZERO     =  C_X.
  W_FIELDCATALOG-JUST        =  C_R.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'MPRICE'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C08.
  W_FIELDCATALOG-NO_ZERO     =  C_X.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'NREPCOST'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C09.
  W_FIELDCATALOG-NO_ZERO     =  C_X.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

*-----           Begin of Changes  EXT-SAP-180  13APR2007            ------*

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'PRUOM'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C15.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'TRC_BUOM'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C16.
  W_FIELDCATALOG-NO_ZERO     =  C_X.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'BSUOM'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C17.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

*-----           End   of Changes  EXT-SAP-180  13APR2007            ------*

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'PREPCOST'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C10.
  W_FIELDCATALOG-NO_ZERO     =  C_X.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'VALCHG'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C11.
  W_FIELDCATALOG-NO_ZERO     =  C_X.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'PERCHG'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C12.
  W_FIELDCATALOG-NO_ZERO     =  C_X.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.

ENDFORM.                                      "build_fieldcatalog

*&---------------------------------------------------------------------*
*&      Form  build_layout
*&---------------------------------------------------------------------*
*   To build ALV Layout
*----------------------------------------------------------------------*
FORM BUILD_LAYOUT.

  CLEAR  : W_LAYOUT.

  W_LAYOUT-ZEBRA             = C_X.           "striped pattern
  W_LAYOUT-NO_VLINE          = C_X.           "columns separated space
  W_LAYOUT-COLWIDTH_OPTIMIZE = C_X.           "columns width optimize
  W_LAYOUT-BOX_TABNAME       = C_ITNAME.      "tabname for checkbox
  W_LAYOUT-BOX_FIELDNAME     = 'SELECT'.      "fieldname for checkbox

  CLEAR  : W_KEYINFO.

  W_KEYINFO-HEADER01 = 'WERKS'.               "Header1 key information
  W_KEYINFO-ITEM01   = 'WERKS'.               "Item1 key information
  W_KEYINFO-HEADER02 = 'MATKL'.               "Header2 key information
  W_KEYINFO-ITEM02   = 'MATKL'.               "Item2 key information

ENDFORM.                                      "build_layout

*&---------------------------------------------------------------------*
*&      Form  build_events
*&---------------------------------------------------------------------*
*   To build ALV Events
*----------------------------------------------------------------------*
FORM BUILD_EVENTS.

  CONSTANTS: C_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      I_LIST_TYPE     = 0
    IMPORTING
      ET_EVENTS       = T_EVENTS[]
    EXCEPTIONS
      LIST_TYPE_WRONG = 1
      OTHERS          = 2.

  IF SY-SUBRC = 0.

    READ TABLE T_EVENTS INTO W_EVENT
                        WITH KEY NAME = C_TOP_OF_PAGE
                        BINARY SEARCH.
    IF SY-SUBRC = 0.

      MOVE C_TOP_OF_PAGE TO W_EVENT-FORM.

      MODIFY T_EVENTS INDEX SY-TABIX
                      FROM  W_EVENT
                      TRANSPORTING FORM.
    ENDIF.

  ELSE.

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

  ENDIF.

ENDFORM.                                      "build_events

*&---------------------------------------------------------------------*
*&      Form  build_topofpage
*&---------------------------------------------------------------------*
*       To build ALV Top of page
*----------------------------------------------------------------------*
FORM BUILD_TOPOFPAGE.

* Title
  CLEAR W_HEADER.
  W_HEADER-TYP  = C_H.
  W_HEADER-INFO = TEXT-001.
  APPEND W_HEADER TO T_HEADER.

* Plant
  CLEAR W_HEADER.
  W_HEADER-TYP  = C_S.
  W_HEADER-KEY = TEXT-T05.

  IF S_WERKS-HIGH IS NOT INITIAL.

    CONCATENATE ':'
                S_WERKS-LOW
                TEXT-T07
                S_WERKS-HIGH
           INTO W_HEADER-INFO
           SEPARATED BY SPACE.

  ELSEIF S_WERKS-LOW IS NOT INITIAL.

    CONCATENATE ':'
                S_WERKS-LOW
           INTO W_HEADER-INFO
           SEPARATED BY SPACE.
  ELSE.

    CLEAR: W_HEADER.

  ENDIF.

  APPEND W_HEADER TO T_HEADER.


* Material Group
  CLEAR: W_HEADER.
  W_HEADER-TYP  = C_S.
  W_HEADER-KEY = TEXT-T06.

  IF S_MATKL-HIGH IS NOT INITIAL.

    CONCATENATE ':'
                S_MATKL-LOW
                TEXT-T07
                S_MATKL-HIGH
           INTO W_HEADER-INFO
           SEPARATED BY SPACE.

  ELSEIF S_MATKL-LOW IS NOT INITIAL.

    CONCATENATE ':'
                S_MATKL-LOW
           INTO W_HEADER-INFO
           SEPARATED BY SPACE.
  ELSE.

    CLEAR: W_HEADER.

  ENDIF.

  APPEND W_HEADER TO T_HEADER.

ENDFORM.                                      "build_topofpage

*&---------------------------------------------------------------------*
*&      Form  top_of_page
*&---------------------------------------------------------------------*
*    To display top of page in ALV Report
*----------------------------------------------------------------------*
FORM TOP_OF_PAGE.                                           "#EC CALLED

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY = T_HEADER.

ENDFORM.                                      "top_of_page

*&---------------------------------------------------------------------*
*&      Form  pf_status
*&---------------------------------------------------------------------*
*   To set PF-Status (user interface)
*----------------------------------------------------------------------*
*      -->EXTAB     The excluding table (function codes)
*----------------------------------------------------------------------*
FORM PF_STATUS                                              "#EC CALLED
          USING T_EXTAB TYPE SLIS_T_EXTAB.                  "#EC NEEDED
  SET PF-STATUS 'ZSTANDARD_FULLSCREEN'.

ENDFORM.                                      "pf_status

*&---------------------------------------------------------------------*
*&      Form  display_alv_report
*&---------------------------------------------------------------------*
*    To display ALV report
*----------------------------------------------------------------------*
FORM DISPLAY_ALV_REPORT.

  CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = G_REPID
      I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
      IS_LAYOUT                = W_LAYOUT
      IT_FIELDCAT              = T_FIELDCATALOG
      I_DEFAULT                = C_X
      I_SAVE                   = C_A
      IT_EVENTS                = T_EVENTS[]
      I_TABNAME_HEADER         = 'T_HFINAL'
      I_TABNAME_ITEM           = 'T_IFINAL'
      IS_KEYINFO               = W_KEYINFO
    TABLES
      T_OUTTAB_HEADER          = T_HFINAL
      T_OUTTAB_ITEM            = T_IFINAL
    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.                                      "display_alv_report

*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*    EXIT routine for command handling
*----------------------------------------------------------------------*
*      -->R_UCOMM      Function code that PAI triggered
*      -->RS_SELFIELD  Information cursor position ALV
*----------------------------------------------------------------------*
FORM USER_COMMAND USING L_UCOMM    LIKE SY-UCOMM             "#EC CALLED
                         W_SELFIELD TYPE SLIS_SELFIELD.      "#EC NEEDED

* Check function code
  CASE L_UCOMM.

    WHEN 'UPDATE'.

      READ TABLE T_IFINAL INTO W_IFINAL
                          WITH KEY SELECT = C_X
                          BINARY SEARCH.
      IF SY-SUBRC <> 0.

        MESSAGE I000(ZS) WITH TEXT-M02.

      ELSE.

        CLEAR : G_ANSWER.

* Dialog box for save prompts
        CALL FUNCTION 'POPUP_TO_CONFIRM'
          EXPORTING
            TEXT_QUESTION  = TEXT-OP1
          IMPORTING
            ANSWER         = G_ANSWER
          EXCEPTIONS
            TEXT_NOT_FOUND = 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.

        ELSE.

          IF G_ANSWER = 1.

            SET PF-STATUS 'ZSTANDARD_SCREEN'.

            PERFORM UPDATE_TABLE.

          ENDIF.

        ENDIF.

      ENDIF.

  ENDCASE.

ENDFORM.                                      "user_command

*&---------------------------------------------------------------------*
*&      Form  update_table
*&---------------------------------------------------------------------*
*   To update Future Planned Price3 (ZPLP3) in MBEW table through BAPI
*----------------------------------------------------------------------*
FORM UPDATE_TABLE .

  DATA : W_BAPIMATHEAD TYPE BAPIMATHEAD,            "headdata
         W_BAPI_MBEW   TYPE BAPI_MBEW,              "valuationdata
         W_BAPI_MBEWX  TYPE BAPI_MBEWX.             "valuationdatax

* Structure for Return Parameter BAPIRET2
  DATA : W_MATRET TYPE BAPI_MATRETURN2.

* Internal Table for Return Parameter BAPIRET2
  DATA : T_MATRET TYPE STANDARD TABLE OF BAPI_MATRETURN2.

  CLEAR W_IFINAL.

  WRITE :  /15 TEXT-T08 COLOR 4.
  ULINE AT /15(42).

  LOOP AT T_IFINAL INTO W_IFINAL WHERE SELECT = C_X.

    CLEAR : W_BAPIMATHEAD,
            W_BAPI_MBEW,
            W_BAPI_MBEWX.

    REFRESH : T_MATRET.

* Transporting data to  headdata
    W_BAPIMATHEAD-MATERIAL  = W_IFINAL-MATNR.       "Material No.
    W_BAPIMATHEAD-COST_VIEW = C_X.                  "View selection

* Transporting data to valuationdata
    W_BAPI_MBEW-VAL_AREA    = W_IFINAL-WERKS.       "Plant
*---------Begin of change EXT-SAP-180   13APR2007--------------
    W_BAPI_MBEW-PLNDPRICE3  = W_IFINAL-TRC_BUOM.
*---------end   of change EXT-SAP-180   13APR2007--------------
    W_BAPI_MBEW-PLNDPRDATE3 = P_VDATE.              "Horizon date (from)

* Transporting data to valuationdatax
    W_BAPI_MBEWX-VAL_AREA    = W_IFINAL-WERKS.      "Plant selection
    W_BAPI_MBEWX-PLNDPRICE3  = C_X.                 "Future Planed Cost
    W_BAPI_MBEWX-PLNDPRDATE3 = C_X.                 "Horizon date

*BAPIs for Creating / Changing Material Master Data
    CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
      EXPORTING
        HEADDATA       = W_BAPIMATHEAD
        VALUATIONDATA  = W_BAPI_MBEW
        VALUATIONDATAX = W_BAPI_MBEWX
      TABLES
        RETURNMESSAGES = T_MATRET.

* Deleting the message of Creating Material Master Data
    IF T_MATRET IS NOT INITIAL.

      DELETE T_MATRET INDEX 1.
      DELETE T_MATRET INDEX 1.

    ENDIF.                                    "t_matret IS NOT INITIAL

    IF T_MATRET IS NOT INITIAL.

      LOOP AT T_MATRET INTO W_MATRET.

        CASE W_MATRET-TYPE.

          WHEN C_S.

            FORMAT COLOR 5.
            AT NEW TYPE.

              WRITE : /5 TEXT-T01, W_IFINAL-MATNR,
                         TEXT-T02, W_IFINAL-WERKS,
                         TEXT-T03.
            ENDAT.

            WRITE : / W_MATRET-MESSAGE.
            FORMAT COLOR 5 OFF.

          WHEN C_E.

            FORMAT COLOR 6.
            AT NEW TYPE.

              WRITE : /5 TEXT-T01, W_IFINAL-MATNR,
                         TEXT-T02, W_IFINAL-WERKS,
                         TEXT-T04.
            ENDAT.

            WRITE : / W_MATRET-MESSAGE .
            FORMAT COLOR 5 OFF.

        ENDCASE.                              "w_matret-type

      ENDLOOP.                                "t_matret IS NOT INITIAL

      SKIP.

    ENDIF.                                    "t_matret IS NOT INITIAL

  ENDLOOP.                                    "t_ifinal INTO w_ifinal

ENDFORM.                                      "update_table
*----------------------------------------------------------------------*

Regards,

Kiran

6 REPLIES 6

Former Member
0 Kudos

Hi Sandeep,

Following code might be useful for you to achieve your goal.


REPORT  ZSPRENH062.

TYPE-POOLS : SLIS.                            "Global Type for ALV 	

************************************************************************
*    D A T A                                                           *
************************************************************************

* Types declarations
********************

*ALV Header table type
TYPES: BEGIN OF TY_HFINAL,
         WERKS TYPE EWERK,                      "Plant
         MATKL TYPE MATKL,                      "Material Group
       END OF TY_HFINAL,

*ALV Item table type
       BEGIN OF TY_IFINAL,
         WERKS        TYPE EWERK,               "Plant
         MATKL        TYPE MATKL,               "Material Group
         SELECT(1)    TYPE C,                   "Check Box
         MATNR        TYPE MATNR,               "Material No
         LIFNR        TYPE LIFNR,               "Vendor Account No.
         MAKTX        TYPE MAKTX,               "Material Desp.
         BISMT        TYPE BISMT,               "Old material ID
         CPRICE       TYPE KBETR_KOND,          "Contract Price
         FINCONPRI(20) TYPE C,
         INFOREC      TYPE KBETR_KOND,          "Purchase info rec.
         FININFPRI(20) TYPE C,
         MPRICE       TYPE KBETR_KOND,          "Market price
         NREPCOST     TYPE KBETR_KOND,          "Total repl. cost
*-----           Begin of Changes  EXT-SAP-180  13APR2007            ------*
         PRUOM        TYPE BSTME,               "Purchase Unit of Measure
         TRC_BUOM     TYPE KBETR_KOND,          "Total Repl. Cost in Base UOM
         BSUOM        TYPE MEINS,               "Base Unit of Measure
*-----           End   of Changes  EXT-SAP-180  13APR2007            ------*
         PREPCOST     TYPE KBETR_KOND,          "Previous repl cost
         VALCHG       TYPE KBETR_KOND,          "Total value change
         PERCHG       TYPE P LENGTH 5 DECIMALS 2,    "Percentage Change
       END OF TY_IFINAL.

* Internal Table Declarations
*****************************

*ALV Header Internal Table
DATA: T_HFINAL TYPE STANDARD TABLE OF TY_HFINAL INITIAL SIZE 0,

*ALV Item Internal Table
      T_IFINAL TYPE STANDARD TABLE OF TY_IFINAL INITIAL SIZE 0,
      T_FIELDCATALOG  TYPE SLIS_T_FIELDCAT_ALV,      "Fieldcatalog IT
      T_EVENTS        TYPE SLIS_T_EVENT,             "Event IT
      T_HEADER        TYPE SLIS_T_LISTHEADER,        "Header IT

* Work area Declarations
************************

*ALV Header Work Area
      W_HFINAL TYPE TY_HFINAL,

*ALV Item Work Area
      W_IFINAL TYPE TY_IFINAL,
      W_FIELDCATALOG TYPE SLIS_FIELDCAT_ALV,         "Fieldcatalog WA
      W_EVENT        TYPE SLIS_ALV_EVENT,            "Event WA
      W_HEADER       TYPE SLIS_LISTHEADER,           "Header WA
      W_LAYOUT       TYPE SLIS_LAYOUT_ALV,           "Layout WA
      W_KEYINFO      TYPE SLIS_KEYINFO_ALV,          "Key Information WA

* Variable declarations
***********************

      G_REPID  TYPE SY-REPID,                        "Program Name
      G_ANSWER TYPE C,                               "Optional Button
      G_WERKS TYPE EWERK,
      G_MATKL TYPE MATKL,
      G_MATNR TYPE MATNR,
      G_MTART TYPE MTART,
      G_LIFNR TYPE ELIFN,
      L_CPRICE_C(20) TYPE C,
      L_CPRICE_I(20) TYPE C,
      L_UNITPRICE_C(20) TYPE C,
      L_UNITPRICE_I(20) TYPE C.

* Constant declarations
***********************

CONSTANTS: C_A(1) TYPE C VALUE 'A',                     "Constant Value A
           C_E(1) TYPE C VALUE 'E',                     "Constant Value E
           C_H(1) TYPE C VALUE 'H',                     "Constant Value H
           C_M(1) TYPE C VALUE 'M',                     "Constant Value M
           C_S(1) TYPE C VALUE 'S',                     "Constant Value S
           C_X(1) TYPE C VALUE 'X',                     "Constant Value X
           C_0(1) TYPE C VALUE '0',                     "Constant Value 0
           C_R(1) TYPE C VALUE 'R',                     "Constant Value R
           C_2(1) TYPE C VALUE '2',                     "Constant Value 2
           C_LANG(2) TYPE C VALUE 'EN',                 "Language English
           C_ZQTE(4) TYPE C VALUE 'ZQTE',               "Condtion type ZQTE
           C_HTNAME(10) TYPE C VALUE 'T_HFINAL',        "Header table name
           C_ITNAME(10) TYPE C VALUE 'T_IFINAL'.        "Item table name

************************************************************************
*    S E L E C T   O P T I O N S  &  P A R A M E T E R S               *
************************************************************************

* Selection-screen Block 1
SELECTION-SCREEN BEGIN OF BLOCK BLK1
               WITH FRAME TITLE TEXT-001.         "Begin of Block1

PARAMETERS : P_EKORG TYPE EKORG OBLIGATORY.       "Pur.Organization

SELECT-OPTIONS : S_WERKS  FOR G_WERKS OBLIGATORY, "Plant
                 S_MATKL  FOR G_MATKL,            "Material Group
                 S_MATNR  FOR G_MATNR,            "Material No.
                 S_MTART  FOR G_MTART,            "Material Type
                 S_LIFNR  FOR G_LIFNR.            "Vendor

PARAMETERS : P_PERCHG(3)  TYPE C.                 "Percentage Change

SELECTION-SCREEN END OF BLOCK BLK1.               "End of Block 1

* Selection-screen Block 2
SELECTION-SCREEN BEGIN OF BLOCK BLK2
               WITH FRAME TITLE TEXT-002.         "Begin of Block2

PARAMETERS: P_VDATE TYPE DATAM DEFAULT SY-DATUM,  "Valid on date
            P_HDATE TYPE DATAM DEFAULT '29991231'."Horizon date

SELECTION-SCREEN END OF BLOCK BLK2.               "End of Block 2


************************************************************************
*   I N I T I A L I Z A T I O N                                        *
************************************************************************
INITIALIZATION.

  CLEAR : G_REPID.                                   "Program Name

  G_REPID = SY-REPID.                                "Program Name

************************************************************************
*   A T   S E L E C T I O N   S C R E E N                              *
************************************************************************
AT SELECTION-SCREEN.

* Validation for Change of Percentage
  IF P_PERCHG LT 0 OR P_PERCHG GT 100.

    MESSAGE E000(ZS) WITH  TEXT-E01.

  ENDIF.

* Validation for Horizon Date
  IF P_HDATE LE P_VDATE.

    MESSAGE E000(ZS) WITH  TEXT-E02.

  ENDIF.

************************************************************************
*   S T A R T   O F   S E L E C T I O N                                *
************************************************************************
START-OF-SELECTION.

* Data Selection
  PERFORM DATA_RETRIEVAL.

* Build Field Catalog
  PERFORM BUILD_FIELDCATALOG.

* Bulid layout
  PERFORM BUILD_LAYOUT.

* Build Events
  PERFORM BUILD_EVENTS.

************************************************************************
*   E N D   O F   S E L E C T I O N                                    *
************************************************************************
END-OF-SELECTION.

* Build Header for Top-Of-Page
  PERFORM BUILD_TOPOFPAGE.

* Display List
  PERFORM DISPLAY_ALV_REPORT.

************************************************************************
*   F O R M S                                                          *
************************************************************************

*&---------------------------------------------------------------------*
*&      Form  data_retrieval
*&---------------------------------------------------------------------*
*   To fetch data from Database table into ALV final Internal table
*----------------------------------------------------------------------*
FORM DATA_RETRIEVAL.

* Local Types declarations
**************************

*Types of EORD & EKPO table
  TYPES : BEGIN OF TY_MAIN,
            MATNR TYPE MATNR,               "Material No.
            WERKS TYPE EWERK,               "Plant
            ZEORD TYPE DZEORD,               "No.Source List Rec
            LIFNR TYPE ELIFN,               "Vendor Account No.
            EBELN TYPE EVRTN,               "Agreement Number
            EBELP TYPE EVRTP,               "Agreement Item
            EKORG TYPE EKORG,               "Pur. Organization
            AUTET TYPE AUTET,               "S.L. in Mat.Planning
            MATKL TYPE MATKL,               "Material Group
            MTART TYPE MTART,               "Material Type
            INFNR TYPE INFNR,               "No.Pur.Info Record
************************************************************************
*  Begin of Changes  CON-SAP-99  16/01/2007                            *
************************************************************************
            NETPR TYPE BPREI,               "Net Price
************************************************************************
*  End of Changes  CON-SAP-99  16/01/2007                              *
************************************************************************
*-----  Begin of Changes  EXT-SAP-180  13APR2007  ------               *
            MEINS TYPE BSTME,               "Purchase Order Unit of Measure
*-----  End of Changes    EXT-SAP-180  13APR2007  ------               *
*           begin 23APR2007  ------
            PEINH TYPE EPEIN,               "Price Unit
*           end   23APR2007  ------
            PSTYP TYPE PSTYP,               "Item Category
            KONNR TYPE KONNR,               "No.Principal P.A.
            KTPNR TYPE KTPNR,               "Item No.Principal P.A.
          END OF TY_MAIN,

*Types of MARA table
          BEGIN OF TY_MARA,
            MATNR TYPE MATNR,               "Material No.
            MEINS TYPE MEINS,               "Base Unit of Measure " ext-sap-180  13APR2007
          END OF TY_MARA,

*Types of MAKT table
          BEGIN OF TY_MAKT,
            MATNR TYPE MATNR,               "Material No.
            MAKTX TYPE MAKTX,               "Material Desp.
          END OF TY_MAKT,

*Types of MBEW table
          BEGIN OF TY_MBEW,
            MATNR TYPE MATNR,               "Material No.
            BWKEY TYPE BWKEY,               "Valuation Area
*-----  Begin of Changes  EXT-SAP-180  13APR2007  ------               *
            PEINH TYPE PEINH,                    "Price Unit
*-----  End of Changes    EXT-SAP-180  13APR2007  ------               *
            ZPLP3 TYPE DZPLP3,               "Future Planned Price
          END OF TY_MBEW,

*Types of A016_C table
          BEGIN OF TY_A016_C,
            EVRTN  TYPE EBELN,              "Purchasing Doc. No.
            EVRTP  TYPE EBELP,              "Item No.of Pur. Doc.
            KNUMH  TYPE KNUMH,              "Condition rec.no.
          END OF TY_A016_C,

*Types of A017_P table
          BEGIN OF TY_A017_P,
            LIFNR TYPE ELIFN,               "Vendor Account No.
            MATNR TYPE MATNR,               "Material No.
            EKORG TYPE EKORG,               "Pur. Organization
            WERKS TYPE WERKS_D,               "Plant
            KNUMH TYPE KNUMH,               "Condition rec.no.
          END OF TY_A017_P,

*Types of A054_M table
          BEGIN OF TY_A054_M,
            KSCHL TYPE KSCHA,               "Condition type
            EKORG TYPE EKORG,               "Pur. Organization
            MATKL TYPE MATKL,               "Material Group
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
            MATNR TYPE MATNR,               "Material Number
            DATBI TYPE KODATBI,              " Validity end date of the condition record  04APR07
            DATAB TYPE KODATAB,              " Validity start date of the condition record 04APR0
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
            KNUMH TYPE KNUMH,               "Condition rec.no.
          END OF TY_A054_M,

*Types of KONP_P table
          BEGIN OF TY_KONP_P,
            KNUMH TYPE KNUMH,               "Condition rec.no.
            KBETR TYPE KBETR_KOND,          "Rate
            KONWA TYPE KONWA,               "Rate unit
            KPEIN TYPE KPEIN,               "Condition pricing unit
            KMEIN TYPE KMEIN,               "Condition Unit
          END OF TY_KONP_P,

***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
* Types of A049 table
          BEGIN OF TY_A049,
            KSCHL TYPE KSCHA,              " Condition Type
            EKORG TYPE EKORG,              " Purchasing Organization
            MATKL TYPE MATKL,              " Material Group
            MATNR TYPE MATNR,              " Material Number
            DATBI TYPE KODATBI,              " Validity end date of the condition record  04APR07
            DATAB TYPE KODATAB,              " Validity start date of the condition record 04APR07
            KNUMH TYPE KNUMH,              " Condition Record Number
          END OF TY_A049,

* Types of KONP_C table
          BEGIN OF TY_KONP_C,
            KNUMH TYPE KNUMH,               "Condition rec.no.
            KOPOS TYPE KOPOS,
            KSCHL TYPE KSCHA,               "Condition type
            KBETR TYPE KBETR_KOND,               "Rate
            KONWA TYPE KONWA,               "Rate unit
          END OF TY_KONP_C,

*Types of KONM_C table
         BEGIN OF TY_KONM_C,
            KNUMH TYPE KNUMH,               "Condition rec.no.
            KOPOS TYPE KOPOS,               "Seq. no. of the condition
            KSTBM TYPE KSTBM,               "Condition scale quan.
            KBETR TYPE KBETR,               "Rate
          END OF TY_KONM_C,

*Types of KONM_P table
          BEGIN OF TY_KONM_P,
            KNUMH TYPE KNUMH,               "Condition rec.no.
            KSTBM TYPE KSTBM,               "Condition scale quan.
            KBETR TYPE KBETR,               "Rate
          END OF TY_KONM_P,

***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************

*-----  Begin of Changes  EXT-SAP-180  13APR2007  ------*
*Types of EINE table
           BEGIN OF TY_EINE,
             INFNR TYPE INFNR,                     " Number of Purchase Info Record
             EKORG TYPE EKORG,                     " Purchasing Organization
             WERKS TYPE EWERK,                     " Plant
             PEINH TYPE EPEIN,                     " Price Unit
             BPRME TYPE BBPRM,                     " Order Price Unit (Purchasing)
           END   OF TY_EINE,

*Types of MARM table
         BEGIN OF TY_MARM,
             MATNR TYPE MATNR,                     " Material Number
             MEINH TYPE LRMEI,                     " Alternative Unit of Measure
             UMREZ TYPE UMREZ,                     " Numerator for Conversion to Base UOM
             UMREN TYPE UMREN,                     " Denominator for Conversion to Base UOM
          END   OF TY_MARM,

*-----  End   of Changes  EXT-SAP-180  13APR2007  ------*

*Types of EKAB table
          BEGIN OF TY_EKAB,
            KONNR TYPE KONNR,               "No of Principal P.A
            KTPNR TYPE KTPNR,               "Item of Principal P.A
            EBELN TYPE EBELN,               "Purchasing Doc. No.
            MENGE TYPE BSTMG,               "P.O. Quantity
          END OF TY_EKAB,

*Types of EKPO table
         BEGIN OF TY_EKPO,
            INFNR TYPE INFNR,               "No of Pur.Info Rec.
            EBELN TYPE EBELN,               "Purchasing Doc. No.
            MENGE TYPE MENGE_D,             "P.O. Quantity
          END OF TY_EKPO.

* Local Internal table declarations
***********************************
  DATA: T_MAIN    TYPE STANDARD TABLE OF TY_MAIN,
        T_MAIN1   TYPE STANDARD TABLE OF TY_MAIN,
        T_MARA    TYPE STANDARD TABLE OF TY_MARA,
        T_MBEW    TYPE STANDARD TABLE OF TY_MBEW,
        T_MAKT    TYPE STANDARD TABLE OF TY_MAKT,
        T_A016_C  TYPE STANDARD TABLE OF TY_A016_C,
        T_A017_P  TYPE STANDARD TABLE OF TY_A017_P,
        T_A054_M  TYPE STANDARD TABLE OF TY_A054_M,
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
        T_KONP_C  TYPE STANDARD TABLE OF TY_KONP_C,
        T_A049    TYPE STANDARD TABLE OF TY_A049,
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
*-----           Begin of Changes  EXT-SAP-180  13APR2007            ------*
        T_EINE    TYPE STANDARD TABLE OF TY_EINE,
        T_MARM    TYPE STANDARD TABLE OF TY_MARM,
*-----           End   of Changes  EXT-SAP-180  13APR2007            ------*
        T_KONP_P  TYPE STANDARD TABLE OF TY_KONP_P,
        T_KONP_M  TYPE STANDARD TABLE OF TY_KONP_P,
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
        T_KONM_C  TYPE STANDARD TABLE OF TY_KONM_C,
        T_KONM_P  TYPE STANDARD TABLE OF TY_KONM_P,
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
        T_EKAB    TYPE STANDARD TABLE OF TY_EKAB,
        T_EKPO    TYPE STANDARD TABLE OF TY_EKPO,

* Local Work Area declarations
******************************
         W_MAIN    TYPE TY_MAIN,
         W_MARA    TYPE TY_MARA,
         W_MBEW    TYPE TY_MBEW,
         W_A016_C  TYPE TY_A016_C,
         W_A017_P  TYPE TY_A017_P,
         W_A054_M  TYPE TY_A054_M,
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
         W_KONP_C  TYPE TY_KONP_C,
         W_MAIN1_T TYPE TY_MAIN,
         W_A049_T  TYPE TY_A049,
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
*-----           Begin of Changes  EXT-SAP-180  13APR2007            ------*
         W_EINE    TYPE TY_EINE,
         W_MARM    TYPE TY_MARM,
*-----           End   of Changes  EXT-SAP-180  13APR2007            ------*
         W_KONP_P  TYPE TY_KONP_P,
         W_KONP_M  TYPE TY_KONP_P,
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
         W_KONM_C  TYPE TY_KONM_C,
         W_KONM_P  TYPE TY_KONM_P,
         W_KONM1   TYPE TY_KONM_C,
         W_KONM2   TYPE TY_KONM_P,
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
         W_EKAB    TYPE TY_EKAB,
         W_EKPO    TYPE TY_EKPO,
         W_MAKT    TYPE TY_MAKT,

* Local Variable declarations
*****************************

         L_PERPRICE TYPE KBETR_KOND,             "Local Percentage price
         L_PERUNIT  TYPE KPEIN,             "Condition Pricing Unit
         L_MARPRICE TYPE KBETR_KOND,             "Local Market price
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
         L_KBETR    TYPE KBETR,
         L_INDEX    TYPE SY-TABIX,               "Tab Index
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
************************************************************************
*  Begin of Changes  CON-SAP-99  11/12/2006                            *
************************************************************************
         L_STR TYPE STRING.
************************************************************************
*  End of Changes  CON-SAP-99  11/12/2006                              *
************************************************************************

* GET SOURCE LIST
*****************
  SELECT  A~MATNR                                "Material No.
          A~WERKS                                "Plant
          A~ZEORD                                "No.Source List Rec
          A~LIFNR                                "Vendor Account No.
          A~EBELN                                "Agreement Number
          A~EBELP                                "Agreement Item
          A~EKORG                                "Pur. Organization
          A~AUTET                                "S.L. in Mat.Planning
          B~MATKL                                "Material Group
          B~MTART                                "Material Type
          B~INFNR                                "No.Pur.Info Record
************************************************************************
*  Begin of Changes  CON-SAP-99  16/01/2007                            *
************************************************************************
          B~NETPR                                "Net price
************************************************************************
*  End of Changes  CON-SAP-99  16/01/2007                              *
************************************************************************
*-----  Begin of Changes  EXT-SAP-180  13APR2007  ------               *
          B~MEINS                                "Purchase Order Unit of Measure
*-----  End of Changes    EXT-SAP-180  13APR2007  ------               *
*           begin 23APR2007  ------
          B~PEINH                                "Price Unit
*           end   23APR2007  ------
          B~PSTYP                                "Pur. Doc. Category
          B~KONNR                                "No.Principal P.A.
          B~KTPNR                                "Item No.Principal P.A.
             INTO TABLE T_MAIN
             FROM  EORD AS A INNER JOIN EKPO AS B
             ON  ( A~EBELN EQ B~EBELN
             AND   A~EBELP EQ B~EBELP )
             WHERE A~MATNR IN S_MATNR
             AND   A~LIFNR IN S_LIFNR
             AND   A~WERKS IN S_WERKS
             AND   B~MATKL IN S_MATKL
             AND   B~MTART IN S_MTART
             AND   A~EKORG EQ P_EKORG
             AND   A~VDATU LE P_VDATE
             AND   A~BDATU GE P_VDATE
             AND ( A~AUTET EQ 1
             OR    A~AUTET EQ 2 ).
  IF SY-SUBRC = 0.

    SORT T_MAIN BY MATNR WERKS.

    DELETE ADJACENT DUPLICATES FROM T_MAIN
                          COMPARING MATNR
                                    WERKS.
    T_MAIN1[] = T_MAIN[].

    DELETE ADJACENT DUPLICATES FROM T_MAIN1
                          COMPARING MATNR.

* GET MATERIAL DESCRIPTION
    SELECT MATNR                                 "Material No
           MAKTX                                 "Material Desp.
             FROM MAKT
             INTO TABLE T_MAKT
             FOR ALL ENTRIES IN T_MAIN1
             WHERE MATNR EQ T_MAIN1-MATNR
             AND   SPRAS EQ C_LANG.
    IF SY-SUBRC = 0.

      SORT T_MAKT BY MATNR.

    ENDIF.

*-----  Begin of Changes  EXT-SAP-180  13APR2007  ------               *

* GET PURCHASE ORDER UNIT OF MEASURE FOR INFO RECORDS FROM EINE

    SELECT INFNR                            " Number of Purchase Info Record
           EKORG                            " Purchasing Organization
           WERKS                            " Plant
           PEINH                            " Price Unit
           BPRME                            " Order Price Unit
             FROM EINE
             INTO TABLE T_EINE
             FOR ALL ENTRIES IN T_MAIN1
             WHERE INFNR EQ T_MAIN1-INFNR
               AND EKORG EQ T_MAIN1-EKORG
               AND ( ESOKZ EQ C_0 OR ESOKZ EQ C_2 )            "Purchasing Info Record Category = Standard
               AND WERKS EQ T_MAIN1-WERKS.

    IF SY-SUBRC = 0.

      SORT T_EINE BY INFNR EKORG WERKS.

    ENDIF.

    SELECT MATNR                          " Material Number
           MEINH                          " Alternate UOM
           UMREZ                          " Numerator for conversion
           UMREN                          " Denominator for conversion
             FROM MARM
             INTO TABLE T_MARM
             FOR ALL ENTRIES IN T_MAIN1
             WHERE MATNR EQ T_MAIN1-MATNR.

    IF SY-SUBRC = 0.

      SORT T_MARM BY MATNR MEINH.

    ENDIF.

*-----  End of Changes    EXT-SAP-180  13APR2007  ------               *

* GET BASE UNIT OF MEASURE
    SELECT MATNR                                 "Material No.
           MEINS                                 "Base unit of measure " ext-sap-180 13APR2007
             INTO  TABLE T_MARA
             FROM  MARA
             FOR ALL ENTRIES IN T_MAIN1
             WHERE MATNR EQ T_MAIN1-MATNR.
    IF SY-SUBRC = 0.

      SORT T_MARA BY MATNR.

    ENDIF.

* GET CONTRACT PRICE
********************
    REFRESH T_MAIN1[].

    T_MAIN1[] = T_MAIN[].

    SORT T_MAIN1 BY PSTYP.

    DELETE T_MAIN1 WHERE PSTYP = 2.

    IF T_MAIN1 IS NOT INITIAL.

      SORT T_MAIN1 BY EBELN EBELP.

* Get Condition Record Number based on Purchasing Document Number
      SELECT EVRTN                               "Purchasing Doc. No.
             EVRTP                               "Item No.of Pur. Doc.
             KNUMH                               "Condition rec.no.
               FROM A016
               INTO TABLE T_A016_C
               FOR ALL ENTRIES IN  T_MAIN1
               WHERE KAPPL EQ C_M
               AND   EVRTN EQ T_MAIN1-EBELN
               AND   EVRTP EQ T_MAIN1-EBELP
               AND   DATBI GE P_VDATE
               AND   DATAB LE P_VDATE.
      IF SY-SUBRC = 0.

        SORT T_A016_C BY EVRTN EVRTP.

      ENDIF.

      SORT T_MAIN1 BY KONNR KTPNR.

*Get Condition Record No. based on Principal Purchasing Document No
      SELECT EVRTN                               "Purchasing Doc. No.
             EVRTP                               "Item No.of Pur. Doc.
             KNUMH                               "Condition rec.no.
               FROM A016
               APPENDING TABLE T_A016_C
               FOR ALL ENTRIES IN  T_MAIN1
               WHERE KAPPL EQ C_M
               AND   EVRTN EQ T_MAIN1-KONNR
               AND   EVRTP EQ T_MAIN1-KTPNR
               AND   DATBI GE P_VDATE
               AND   DATAB LE P_VDATE.

      IF T_A016_C IS NOT INITIAL.

        SORT T_A016_C BY EVRTN EVRTP.

*Get Rate & unit for all the Condition Record No.(Contract Price)
        SELECT KNUMH                             "Condition rec.no.
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
               KOPOS                             "Seq. No. of the condition
               KSCHL                             "Condition Type
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
               KBETR                             "Rate
               KONWA                             "Rate unit
                 FROM KONP
                 INTO TABLE T_KONP_C
                 FOR ALL ENTRIES IN T_A016_C
                 WHERE KNUMH EQ T_A016_C-KNUMH
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
                 AND LOEVM_KO EQ SPACE.
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
        IF SY-SUBRC = 0.

          SORT T_KONP_C BY KNUMH.

        ENDIF.

* Get Condition scale quantity & Rate for all the Condition Record No.
        SELECT KNUMH                             "Condition rec.no.
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
               KOPOS                             "Seq. No. of the condition
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
               KSTBM                             "Condition scale quan.
               KBETR                             "Rate
                 FROM KONM
                 INTO TABLE T_KONM_C
                 FOR ALL ENTRIES IN T_A016_C
                 WHERE KNUMH EQ T_A016_C-KNUMH.
        IF SY-SUBRC = 0.

          SORT T_KONM_C BY KNUMH
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
                           KOPOS
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
                           KSTBM
                           DESCENDING.

        ENDIF.

* Get PO Doc. No. & Quantity based on Principal Purchasing Doc. No
        SELECT KONNR                             "No of Principal P.A
               KTPNR                             "Item of Principal P.A
               EBELN                             "Purchasing Doc. No.
               MENGE                             "P.O. Quantity
                 FROM EKAB
                 INTO TABLE T_EKAB
                 FOR ALL ENTRIES IN T_A016_C
                 WHERE KONNR EQ T_A016_C-EVRTN
                 AND   KTPNR EQ T_A016_C-EVRTP.
        IF SY-SUBRC = 0.

          SORT T_EKAB BY KONNR KTPNR EBELN DESCENDING.

        ENDIF.

      ENDIF.

    ENDIF.

* GET PURCHASING INFO RECORDS PRICE
***********************************
    REFRESH T_MAIN1[].

    T_MAIN1[] = T_MAIN[].

    DELETE T_MAIN1 WHERE PSTYP <> 2.

    IF T_MAIN1 IS NOT INITIAL.

      SORT T_MAIN1 BY LIFNR MATNR EKORG WERKS.

* Get Condition Record No based on Vendor,Material,Pur.org & Plant
      SELECT LIFNR                               "Vendor Account No.
             MATNR                               "Material No.
             EKORG                               "Pur. Organization
             WERKS                               "Plant
             KNUMH                               "Condition rec.no.
               FROM A017
               INTO TABLE T_A017_P
               FOR ALL ENTRIES IN  T_MAIN1
               WHERE LIFNR EQ T_MAIN1-LIFNR
               AND   MATNR EQ T_MAIN1-MATNR
               AND   EKORG EQ T_MAIN1-EKORG
               AND   WERKS EQ T_MAIN1-WERKS
               AND   DATBI GE P_VDATE
               AND   DATAB LE P_VDATE.

      IF SY-SUBRC = 0.

        SORT T_A017_P BY LIFNR MATNR EKORG WERKS.

*Get Rate & unit for all the Condition Rec.No.(Pur. info Rec Price)
        SELECT KNUMH                             "Condition rec.no.
               KBETR                             "Rate
               KONWA                             "Rate unit
               KPEIN                             "Condition pricing unit
               KMEIN                             "Condition Unit
                 FROM KONP
                 INTO TABLE T_KONP_P
                 FOR ALL ENTRIES IN T_A017_P
                 WHERE KNUMH EQ T_A017_P-KNUMH.
        IF SY-SUBRC = 0.

          SORT T_KONP_P BY KNUMH.

        ENDIF.

* Get Condition scale quantity & Rate for all the Condition Record No.
        SELECT KNUMH                             "Condition rec.no.
               KSTBM                             "Condition scale quan.
               KBETR                             "Rate
                 FROM KONM
                 INTO TABLE T_KONM_P
                 FOR ALL ENTRIES IN T_A017_P
                 WHERE KNUMH EQ T_A017_P-KNUMH.
        IF SY-SUBRC = 0.

          SORT T_KONM_P BY KNUMH KSTBM DESCENDING.

        ENDIF.

      ENDIF.

* Get PO Doc. No. & Quantity based on Principal Purchasing Doc. No

      SORT T_MAIN1 BY INFNR.

      SELECT INFNR                             "No of Pur.Info Rec.
             EBELN                             "Purchasing Doc. No.
             MENGE                             "P.O. Quantity
               FROM EKPO
               INTO TABLE T_EKPO
               FOR ALL ENTRIES IN T_MAIN1
               WHERE INFNR EQ T_MAIN1-INFNR
               AND   WERKS EQ T_MAIN1-WERKS
               AND   BSTYP EQ 'F'.
      IF SY-SUBRC = 0.

        SORT T_EKPO BY INFNR EBELN DESCENDING.

      ENDIF.

    ENDIF.

* GET MARKET PRICE
******************
    REFRESH T_MAIN1[].

    T_MAIN1[] = T_MAIN[].

    DELETE ADJACENT DUPLICATES FROM T_MAIN1 COMPARING EKORG MATKL.

    P_VDATE = P_VDATE + 1.

***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************

* Get Condition Record No based on Material Number
    SELECT KSCHL
           EKORG
           MATNR
           DATBI    "EXT-SAP-180 04Apr07
           DATAB    "EXT-SAP-180 04Apr07
           KNUMH
     FROM  A049
     INTO CORRESPONDING FIELDS OF TABLE T_A049
     FOR ALL ENTRIES IN T_MAIN
     WHERE KSCHL EQ C_ZQTE
       AND EKORG EQ T_MAIN-EKORG
       AND MATNR EQ T_MAIN-MATNR
       AND ESOKZ EQ C_0.

    IF SY-SUBRC EQ 0.                               " if entries exists in t_a049

      SORT T_A049 BY EKORG MATNR
                     DATBI DATAB.                   " EXT-SAP-180 04Apr07


      CLEAR L_INDEX.

      LOOP AT T_A049 INTO W_A049_T.

        L_INDEX = SY-TABIX.

        READ TABLE T_MAIN INTO W_MAIN1_T
                   WITH KEY EKORG = W_A049_T-EKORG
                            MATNR = W_A049_T-MATNR
                   BINARY SEARCH.

        IF SY-SUBRC EQ 0.

          W_A049_T-MATKL = W_MAIN1_T-MATKL.
          MODIFY T_A049 FROM W_A049_T
                        INDEX L_INDEX
                        TRANSPORTING MATKL.

        ENDIF.

        CLEAR: W_A049_T,
               W_MAIN1_T,
               L_INDEX.

      ENDLOOP.

* Get Rate & unit for all the Condition Record No. (Market price)
      SELECT KNUMH                               "Condition rec.no.
             KBETR                               "Rate
             KONWA                               "Rate unit
             KPEIN                               "Condition Pricing Unit
             KMEIN                               "Condition Unit
             FROM KONP
             INTO TABLE T_KONP_M
             FOR ALL ENTRIES IN T_A049
             WHERE KNUMH EQ T_A049-KNUMH.
      IF SY-SUBRC = 0.

        SORT T_KONP_C BY KNUMH.

      ENDIF.

    ENDIF.

***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007           *
***************************************************************

*Get Condition Record No based on Condition type, Pur.Org.,Mat. group
    SELECT KSCHL                                 "Condition type
           EKORG                                 "Pur. Organization
           MATKL                                 "Material Group
           DATBI                                 "Valid to date   EXT-SAP-180 04Apr07
           DATAB                                 "Valid from date EXT-SAP-180 04Apr07
           KNUMH                                 "Condition rec.no.
             FROM A054
             INTO CORRESPONDING FIELDS OF TABLE T_A054_M
             FOR ALL ENTRIES IN  T_MAIN
             WHERE KSCHL EQ  C_ZQTE
             AND   EKORG EQ  T_MAIN-EKORG
             AND   MATKL EQ  T_MAIN-MATKL
             AND   ESOKZ EQ C_0.
    IF SY-SUBRC = 0.

      SORT T_A054_M BY EKORG MATKL
                       DATBI DATAB. " added by SAP-EXT-180 04Apr07

* Get Rate & unit for all the Condition Record No. (Market price)
      SELECT KNUMH                               "Condition rec.no.
             KBETR                               "Rate
             KONWA                               "Rate unit
             KPEIN                               "Condition Pricing Unit
             KMEIN                               "Condition Unit
             FROM KONP
             APPENDING TABLE T_KONP_M
             FOR ALL ENTRIES IN T_A054_M
             WHERE KNUMH EQ T_A054_M-KNUMH.
      IF SY-SUBRC = 0.

        SORT T_KONP_C BY KNUMH KOPOS KSCHL.
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
        SORT T_KONP_M BY KNUMH.
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
      ENDIF.

    ENDIF.

* GET PREVIOUS REPLACEMENT COST
*******************************
    SELECT MATNR                                 "Material No.
           BWKEY                                 "Valuation Area
*-----  Begin of Changes  EXT-SAP-180  13APR2007  ------               *
           PEINH                                 "Price Unit
*-----  End of Changes    EXT-SAP-180  13APR2007  ------               *
           ZPLP3                                 "Future Planned Price
             FROM MBEW
             INTO TABLE T_MBEW
             FOR ALL ENTRIES IN  T_MAIN
             WHERE MATNR EQ T_MAIN-MATNR
             AND   BWKEY EQ T_MAIN-WERKS.
    IF SY-SUBRC = 0.

      SORT  T_MBEW BY MATNR BWKEY.

    ENDIF.

* TRANSFERING DATA INTO FINAL INTERNAL TABLE

    CLEAR : W_MAIN.

    LOOP AT T_MAIN INTO W_MAIN.

* Clear the Work area
      CLEAR : W_MAKT,
              W_MARA,
              W_MBEW,
              W_A016_C,
              W_A017_P,
              W_A054_M,
              W_KONP_C,
              W_KONP_P,
              W_KONP_M,
              W_KONM_C,
              W_KONM_P,
              W_KONM1,
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
              W_KONM2,
              W_A049_T,
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
              W_EKAB,
              W_EKPO.

      CLEAR : W_HFINAL,
              W_IFINAL.

* PLANT, MATERIAL GROUP
      W_HFINAL-WERKS = W_MAIN-WERKS.             "Plant(H)
      W_HFINAL-MATKL = W_MAIN-MATKL.             "Material Group(H)

      W_IFINAL-WERKS = W_MAIN-WERKS.             "Plant(I)
      W_IFINAL-MATKL = W_MAIN-MATKL.             "Material Group(I)

* MATERIAL NUMBER, VENDER NUMBER
      W_IFINAL-MATNR = W_MAIN-MATNR.             "Material No.
      W_IFINAL-LIFNR = W_MAIN-LIFNR.             "Vendor

* MATERIAL DESCRIPTION
      READ TABLE T_MAKT INTO W_MAKT
                        WITH KEY MATNR = W_MAIN-MATNR
                        BINARY SEARCH.
      IF SY-SUBRC = 0.

        W_IFINAL-MAKTX = W_MAKT-MAKTX.           "Material Desp.

      ENDIF.

* BASE UNIT OF MEASURE
      READ TABLE T_MARA INTO W_MARA
                        WITH KEY MATNR = W_MAIN-MATNR
                        BINARY SEARCH.
      IF SY-SUBRC = 0.

*-----           Begin of Changes  EXT-SAP-180  13APR2007            ------*
        W_IFINAL-BSUOM = W_MARA-MEINS.
*-----           End   of Changes  EXT-SAP-180  13APR2007            ------*
      ENDIF.

* CONTRACT PRICE
      IF W_MAIN-PSTYP <> 2.

* Assigning Scheduling agreement reference no. into agreement no.
        IF W_MAIN-AUTET EQ 2.

          W_MAIN-EBELN = W_MAIN-KONNR.
          W_MAIN-EBELP = W_MAIN-KTPNR.

        ENDIF.

*-----           Begin of Changes  EXT-SAP-180  13APR2007            ------*

* Assigning Purchase Order Unit of Measure
        W_IFINAL-PRUOM = W_MAIN-MEINS.

*-----           Begin of Changes  EXT-SAP-180  13APR2007            ------*

* Read conditon no. for agreement no.
        READ TABLE T_A016_C INTO W_A016_C
                            WITH KEY EVRTN = W_MAIN-EBELN
                                     EVRTP = W_MAIN-EBELP
                            BINARY SEARCH.
        IF SY-SUBRC = 0.

*    Begin of insertion    EXT-SAP-180    02APR2007          *
          LOOP AT T_KONP_C INTO W_KONP_C
                           WHERE KNUMH = W_A016_C-KNUMH.
*    End of insertion      EXT-SAP-180    02APR2007          *

* to check scales
            READ TABLE T_KONM_C INTO W_KONM_C
                              WITH KEY KNUMH = W_A016_C-KNUMH
*    Begin of Changes      EXT-SAP-180    02APR2007          *
                                       KOPOS = W_KONP_C-KOPOS
*    End of Changes        EXT-SAP-180    02APR2007          *
                              BINARY SEARCH.
            IF SY-SUBRC = 0.

* Check Purchase order for Contract Price with scales
              READ TABLE T_EKAB INTO W_EKAB
                                WITH KEY KONNR = W_A016_C-EVRTN
                                         KTPNR = W_A016_C-EVRTP
                                BINARY SEARCH.
              IF SY-SUBRC = 0.

                SORT T_KONM_C BY KNUMH KSTBM.

* Get the Contract price, if Purchase order exist
                LOOP AT T_KONM_C INTO W_KONM1
                               WHERE KNUMH EQ W_A016_C-KNUMH
                               AND   KSTBM LE W_EKAB-MENGE.

                  CLEAR L_KBETR.

                  IF SY-SUBRC = 0.

                    L_KBETR = W_KONM1-KBETR.
                    CONTINUE.

                  ENDIF.

                ENDLOOP.
* the above looping is done to get the right scale & stop, then add
* the scale amount to the existing contract price in the below step.
                W_IFINAL-CPRICE = W_IFINAL-CPRICE + L_KBETR.
                CLEAR : W_KONM1,
                        L_KBETR.

***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
                SORT T_KONM_C BY KNUMH
                   KOPOS
                   KSTBM
                   DESCENDING.
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************
              ELSE.

* Get the Contract price, if doesnot Purchase order exist
                W_IFINAL-CPRICE = W_IFINAL-CPRICE + W_KONM_C-KBETR. "Changed EXT-SAP-180 02APR2007

              ENDIF.
              CLEAR W_EKAB.

            ELSE.

* Contract Price with out scales
***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
              READ TABLE T_KONP_C INTO W_KONP_C
                                  WITH KEY KNUMH = W_A016_C-KNUMH
                                           KSCHL = W_KONP_C-KSCHL
                                  BINARY SEARCH.
              IF SY-SUBRC = 0.

                W_IFINAL-CPRICE = W_IFINAL-CPRICE + W_KONP_C-KBETR.

              ENDIF.

              CLEAR W_KONP_C.
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************

            ENDIF.
            CLEAR W_KONM_C.

***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
          ENDLOOP.
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************

*----BEGIN OF CHANGE EXT-SAP-180  23rd April 2007

          L_CPRICE_C = W_IFINAL-CPRICE.
          CONDENSE L_CPRICE_C. "NO-GAPS.

          IF W_MAIN-PEINH IS INITIAL.

            W_IFINAL-FINCONPRI = L_CPRICE_C.

          ELSE.

            L_UNITPRICE_C = W_MAIN-PEINH.
            CONDENSE L_UNITPRICE_C. " NO-GAPS.
            CONCATENATE L_CPRICE_C '/' L_UNITPRICE_C W_MAIN-MEINS INTO W_IFINAL-FINCONPRI.

          ENDIF.

          CLEAR: L_CPRICE_C,
                 L_UNITPRICE_C.
*----END   OF CHANGE EXT-SAP-180  23rd April 2007

        ENDIF.
        CLEAR W_A016_C.

      ENDIF.

* PURCHASE INFO RECORD
      IF W_MAIN-PSTYP = 2.

*-----           Begin of Changes  EXT-SAP-180  13APR2007            ------*
        READ TABLE T_EINE INTO W_EINE
                          WITH KEY INFNR = W_MAIN-INFNR
                                   EKORG = W_MAIN-EKORG
                                   WERKS = W_MAIN-WERKS
                          BINARY SEARCH.
        IF SY-SUBRC = 0.

          W_IFINAL-PRUOM = W_EINE-BPRME.

        ENDIF.


*-----           End   of Changes  EXT-SAP-180  13APR2007            ------*

        READ TABLE T_A017_P INTO W_A017_P
                            WITH  KEY LIFNR = W_MAIN-LIFNR
                                      MATNR = W_MAIN-MATNR
                                      EKORG = W_MAIN-EKORG
                                      WERKS = W_MAIN-WERKS
                            BINARY SEARCH.
        IF SY-SUBRC = 0.

* To check scales
          READ TABLE T_KONM_P INTO W_KONM_P
                            WITH KEY KNUMH = W_A017_P-KNUMH
                            BINARY SEARCH.
          IF SY-SUBRC = 0.

* Check Purchase order for Purchase info record Price with scales
            READ TABLE T_EKPO INTO W_EKPO
                              WITH KEY INFNR = W_MAIN-INFNR
                              BINARY SEARCH.
            IF SY-SUBRC = 0.

              SORT T_KONM_P BY KNUMH KSTBM.

* Get the Pur.info rec. , if Purchase order exist
              LOOP AT T_KONM_P INTO W_KONM2
                             WHERE KNUMH EQ W_A017_P-KNUMH
                             AND   KSTBM LE W_EKPO-MENGE.

                W_IFINAL-INFOREC =  W_KONM2-KBETR.       "Pur.Info rec.

              ENDLOOP.

            ELSE.

* Get the Pur.info rec. price, if doesnot Purchase order exist
              W_IFINAL-INFOREC = W_KONM_P-KBETR.         "Pur.Info rec.

            ENDIF.

          ELSE.

* Get Pur.info rec. price,with out scales
            READ TABLE T_KONP_P INTO W_KONP_P
                                WITH KEY KNUMH = W_A017_P-KNUMH
                                BINARY SEARCH.
            IF SY-SUBRC = 0.

              W_IFINAL-INFOREC = W_KONP_P-KBETR.         "Pur.Info rec.

            ENDIF.

          ENDIF.

        ENDIF.
*----BEGIN OF CHANGE EXT-SAP-180  23rd April 2007
        L_CPRICE_I = W_IFINAL-INFOREC.
        CONDENSE L_CPRICE_I.

        IF W_EINE-PEINH IS INITIAL.

          W_IFINAL-FININFPRI = L_CPRICE_I.

        ELSE.

          L_UNITPRICE_I = W_EINE-PEINH.
          CONDENSE L_UNITPRICE_I. " NO-GAPS.
          CONCATENATE L_CPRICE_I '/' L_UNITPRICE_I W_EINE-BPRME INTO W_IFINAL-FININFPRI.

        ENDIF.

        W_MAIN-PEINH = W_EINE-PEINH.

        CLEAR: L_CPRICE_I,
               L_UNITPRICE_I,
               W_EINE,
               W_KONM2,
               W_KONP_P,
               W_EKPO,
               W_KONM_P,
               W_A017_P.
*--------End of Change EXT-SAP-180 23rd April 2007

      ENDIF.

* MARKET PRICE
************************************************************************
*  Begin of Changes  CON-SAP-99  11/12/2006                            *
************************************************************************
*clear
      CLEAR : L_PERPRICE.
************************************************************************
*  End of Changes  CON-SAP-99  11/12/2006                              *
************************************************************************
      IF W_IFINAL-CPRICE IS NOT INITIAL.

        L_PERPRICE = W_IFINAL-CPRICE.

      ELSE.

        L_PERPRICE = W_IFINAL-INFOREC.

      ENDIF.

      L_PERUNIT  = W_MAIN-PEINH. " fetching the unit at contract/inforecord price level

************************************************************************
*  Begin of Changes  CON-SAP-99  11/12/2006                            *
************************************************************************

      W_IFINAL-MPRICE = L_PERPRICE.

***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************

      CLEAR W_A049_T.
      SORT T_A049 BY EKORG MATNR.
      READ TABLE T_A049 INTO W_A049_T
                     WITH KEY EKORG = W_MAIN-EKORG
                              MATNR = W_MAIN-MATNR
                     BINARY SEARCH.
      IF SY-SUBRC EQ 0.

        CLEAR: W_A049_T.
*
        SORT T_KONP_M BY KNUMH.

        LOOP AT T_A049 INTO W_A049_T                        "03APR07
                       WHERE EKORG = W_MAIN-EKORG
                       AND   MATNR = W_MAIN-MATNR.

* Following IF condition is to check whether the dates given in the selection criteria
* are falling into the date ranges of the records of A049.

          IF ( W_A049_T-DATBI GE P_VDATE AND W_A049_T-DATAB LE P_VDATE )
            OR ( W_A049_T-DATBI GE P_HDATE AND W_A049_T-DATAB LE P_HDATE )
            OR ( W_A049_T-DATBI LE P_HDATE AND W_A049_T-DATAB GE P_VDATE ).

            CLEAR W_KONP_M.
            READ TABLE T_KONP_M INTO W_KONP_M
                                WITH KEY KNUMH = W_A049_T-KNUMH
                                BINARY SEARCH.
            IF SY-SUBRC = 0.
              L_STR = W_KONP_M-KBETR.

*-------------- Begin of changes EXT-SAP-180  24APR07---------------------------------
              IF NOT W_KONP_M-KMEIN IS INITIAL AND W_KONP_M-KMEIN NE W_MAIN-MEINS.

                IF W_MARA-MEINS NE W_MAIN-MEINS.

                  CLEAR W_MARM.
                  READ TABLE T_MARM INTO W_MARM
                                    WITH KEY MATNR = W_IFINAL-MATNR
                                             MEINH = W_MAIN-MEINS
                                    BINARY SEARCH.

                  W_KONP_M-KBETR = ( W_MARM-UMREZ / W_MARM-UMREN ) * W_KONP_M-KBETR.
                  CLEAR W_MARM.

                ELSEIF W_MARA-MEINS EQ W_MAIN-MEINS.

                  CLEAR W_MARM.
                  READ TABLE T_MARM INTO W_MARM
                                    WITH KEY MATNR = W_IFINAL-MATNR
                                             MEINH = W_KONP_M-KMEIN
                                    BINARY SEARCH.

                  W_KONP_M-KBETR = ( W_MARM-UMREN / W_MARM-UMREZ ) * W_KONP_M-KBETR.
                  CLEAR W_MARM.

                ENDIF.

              ENDIF.
*-------------- End   of changes EXT-SAP-180  24APR07---------------------------------

              IF W_KONP_M-KONWA EQ '%'.

                CLEAR : L_MARPRICE.
                W_KONP_M-KBETR = ABS( W_KONP_M-KBETR ).
                L_MARPRICE = ( L_PERPRICE * W_KONP_M-KBETR ) / 1000.
                IF L_STR CS '-'.
                  L_PERPRICE = L_PERPRICE - L_MARPRICE.
                ELSE.
                  L_PERPRICE = L_PERPRICE + L_MARPRICE.
                ENDIF.
              ELSEIF L_STR CS '-'.
                W_KONP_M-KBETR = ABS( W_KONP_M-KBETR ).
                L_PERPRICE  = L_PERPRICE - ( ( W_KONP_M-KBETR / W_KONP_M-KPEIN ) * L_PERUNIT ).

              ELSE.

                L_PERPRICE  = L_PERPRICE + ( ( W_KONP_M-KBETR / W_KONP_M-KPEIN ) * L_PERUNIT ).

              ENDIF.

            ENDIF.

          ENDIF.

          CLEAR : W_KONP_M,L_STR.
        ENDLOOP.
      ELSE.

***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************

        LOOP AT T_A054_M INTO  W_A054_M
                         WHERE EKORG = W_MAIN-EKORG
                         AND   MATKL = W_MAIN-MATKL.
*---------begin of change EXT-SAP-180   9APR2007--------------
          IF ( W_A054_M-DATBI GE P_VDATE AND W_A054_M-DATAB LE P_VDATE )
            OR ( W_A054_M-DATBI GE P_HDATE AND W_A054_M-DATAB LE P_HDATE )
            OR ( W_A054_M-DATBI LE P_HDATE AND W_A054_M-DATAB GE P_VDATE ).

            CLEAR W_KONP_M.
*---------end   of change EXT-SAP-180   9APR2007--------------
            READ TABLE T_KONP_M INTO W_KONP_M
                                WITH KEY KNUMH = W_A054_M-KNUMH
                                BINARY SEARCH.
            IF SY-SUBRC = 0.
              L_STR = W_KONP_M-KBETR.

*-------------- Begin of changes EXT-SAP-180  24APR07---------------------------------
              IF NOT W_KONP_M-KMEIN IS INITIAL AND W_KONP_M-KMEIN NE W_MAIN-MEINS.

                IF W_MARA-MEINS NE W_MAIN-MEINS.

                  CLEAR W_MARM.
                  READ TABLE T_MARM INTO W_MARM
                                    WITH KEY MATNR = W_IFINAL-MATNR
                                             MEINH = W_MAIN-MEINS
                                    BINARY SEARCH.

                  W_KONP_M-KBETR = ( W_MARM-UMREZ / W_MARM-UMREN ) * W_KONP_M-KBETR.
                  CLEAR W_MARM.

                ELSEIF W_MARA-MEINS EQ W_MAIN-MEINS.

                  CLEAR W_MARM.
                  READ TABLE T_MARM INTO W_MARM
                                    WITH KEY MATNR = W_IFINAL-MATNR
                                             MEINH = W_KONP_M-KMEIN
                                    BINARY SEARCH.

                  W_KONP_M-KBETR = ( W_MARM-UMREN / W_MARM-UMREZ ) * W_KONP_M-KBETR.
                  CLEAR W_MARM.

                ENDIF.

              ENDIF.
*-------------- End   of changes EXT-SAP-180  24APR07---------------------------------

              IF W_KONP_M-KONWA EQ '%'.

                CLEAR : L_MARPRICE.
                W_KONP_M-KBETR = ABS( W_KONP_M-KBETR ).
                L_MARPRICE = ( L_PERPRICE * W_KONP_M-KBETR ) / 1000.
                IF L_STR CS '-'.
                  L_PERPRICE = L_PERPRICE - L_MARPRICE.
                ELSE.
                  L_PERPRICE = L_PERPRICE + L_MARPRICE.
                ENDIF.
              ELSEIF L_STR CS '-'.
                W_KONP_M-KBETR = ABS( W_KONP_M-KBETR ).
*-------------- Begin of changes EXT-SAP-180  24APR07---------------------------------
                L_PERPRICE  = L_PERPRICE - ( ( W_KONP_M-KBETR / W_KONP_M-KPEIN ) * L_PERUNIT ).

              ELSE.
                L_PERPRICE  = L_PERPRICE + ( ( W_KONP_M-KBETR / W_KONP_M-KPEIN ) * L_PERUNIT ).
*-------------- End   of changes EXT-SAP-180  24APR07---------------------------------
              ENDIF.

            ENDIF.

*---------begin of change EXT-SAP-180   9APR2007--------------
          ENDIF.
*---------end   of change EXT-SAP-180   9APR2007--------------

          CLEAR : W_KONP_M,L_STR,W_A054_M.
        ENDLOOP.

***************************************************************
*    Begin of Changes      EXT-SAP-180    03APR2007          *
***************************************************************
      ENDIF.

***************************************************************
*    End of Changes        EXT-SAP-180    03APR2007          *
***************************************************************
      W_IFINAL-MPRICE = L_PERPRICE - W_IFINAL-MPRICE.

************************************************************************
*  End of Changes  CON-SAP-99  11/12/2006                              *
************************************************************************
* TOTAL REPLACEMENT COSTS
      IF W_IFINAL-CPRICE IS NOT INITIAL.

        W_IFINAL-NREPCOST = W_IFINAL-CPRICE + W_IFINAL-MPRICE.

      ELSE.

        W_IFINAL-NREPCOST = W_IFINAL-INFOREC + W_IFINAL-MPRICE.

      ENDIF.

*-------------- Begin of changes EXT-SAP-180  24APR07
* To show the total replacemnt cost per 1000 units

      IF NOT L_PERUNIT IS INITIAL.

        W_IFINAL-NREPCOST = ( W_IFINAL-NREPCOST / L_PERUNIT ) * 1000.

      ELSE.
* to make sure that tot rep / 1000 incase of absence of perunit for contract/inforec
        W_IFINAL-NREPCOST = W_IFINAL-NREPCOST * 1000.

      ENDIF.

      CLEAR L_PERUNIT.
*-------------- End   of changes EXT-SAP-180  24APR07
*---------begin of change EXT-SAP-180   13APR2007--------------
* Calculation of total replacement according to the base UOM
      CLEAR W_MARM.
      READ TABLE T_MARM INTO W_MARM
                        WITH KEY MATNR = W_IFINAL-MATNR
                                 MEINH = W_IFINAL-PRUOM
                                 BINARY SEARCH.
      W_IFINAL-TRC_BUOM = ( W_MARM-UMREN / W_MARM-UMREZ ) * W_IFINAL-NREPCOST.

*---------end   of change EXT-SAP-180   13APR2007--------------

* PREVIOUS REPLACEMENT COSTS
      READ TABLE T_MBEW INTO W_MBEW
                        WITH KEY MATNR = W_MAIN-MATNR
                                 BWKEY = W_MAIN-WERKS
                        BINARY SEARCH.
      IF SY-SUBRC = 0.

        W_IFINAL-PREPCOST = W_MBEW-ZPLP3.
*---------begin of change EXT-SAP-180   13APR2007--------------

        W_IFINAL-TRC_BUOM = W_IFINAL-TRC_BUOM * ( W_MBEW-PEINH / 1000 ).

*---------end   of change EXT-SAP-180   13APR2007--------------

      ENDIF.

* TOTAL VALUE CHANGE
*---------begin of change EXT-SAP-180   13APR2007--------------
      W_IFINAL-VALCHG = W_IFINAL-TRC_BUOM - W_IFINAL-PREPCOST.
*---------end   of change EXT-SAP-180   13APR2007--------------

* PERCENTAGE OF CHANGE
      IF W_MBEW-ZPLP3 IS NOT INITIAL.

        W_IFINAL-PERCHG = ABS( W_IFINAL-VALCHG / W_IFINAL-PREPCOST ).
        W_IFINAL-PERCHG = W_IFINAL-PERCHG * 100.
*------Begin of Changes      EXT-SAP-180    11APR2007----------*
        IF W_IFINAL-VALCHG LT 0.
          W_IFINAL-PERCHG = W_IFINAL-PERCHG * -1.
        ENDIF.
*------End of Changes        EXT-SAP-180    11APR2007----------*

      ELSE.


*---------begin of change EXT-SAP-180   13APR2007--------------
        W_IFINAL-PERCHG = ABS( W_IFINAL-VALCHG / W_IFINAL-TRC_BUOM ).
*---------end   of change EXT-SAP-180   13APR2007--------------
        W_IFINAL-PERCHG = W_IFINAL-PERCHG * 100.
*------Begin of Changes      EXT-SAP-180    11APR2007----------*
        IF W_IFINAL-VALCHG LT 0.
          W_IFINAL-PERCHG = W_IFINAL-PERCHG * -1.
        ENDIF.
*------End of Changes        EXT-SAP-180    11APR2007----------*

      ENDIF.

      IF ABS( W_IFINAL-PERCHG ) GE P_PERCHG.    " Changed by EXT-SAP-180  11APR2007

        APPEND W_IFINAL TO T_IFINAL.
        APPEND W_HFINAL TO T_HFINAL.

      ENDIF.

***************************************************************
*    Begin of Changes      EXT-SAP-180    02APR2007          *
***************************************************************
      CLEAR: W_MAIN,
             W_IFINAL,
             W_HFINAL.
***************************************************************
*    End of Changes        EXT-SAP-180    02APR2007          *
***************************************************************

    ENDLOOP.

  ENDIF.

  IF T_IFINAL IS INITIAL.

    MESSAGE I000(ZS) WITH TEXT-M01.
    LEAVE LIST-PROCESSING.

  ELSE.

    SORT T_HFINAL BY WERKS MATKL.
    SORT T_IFINAL BY WERKS MATKL MATNR.

    DELETE ADJACENT DUPLICATES FROM T_HFINAL
                          COMPARING WERKS
                                    MATKL.
  ENDIF.

ENDFORM.                    "data_retrieval

*&---------------------------------------------------------------------*
*&      Form  build_fieldcatalog
*&---------------------------------------------------------------------*
*     To build ALV field catalog
*----------------------------------------------------------------------*
FORM BUILD_FIELDCATALOG.

  DATA: L_COUNT TYPE I VALUE 0.

  CLEAR : W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_HTNAME.
  W_FIELDCATALOG-FIELDNAME   = 'WERKS'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C13.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR : W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_HTNAME.
  W_FIELDCATALOG-FIELDNAME   = 'MATKL'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C14.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  L_COUNT = 0.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'SELECT'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C01.
  W_FIELDCATALOG-CHECKBOX    =  C_X.
  W_FIELDCATALOG-EDIT        =  C_X.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'MATNR'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C02.
  W_FIELDCATALOG-KEY         =  C_X.   "Fixes the column for no-scroll EXT-SAP-180 5Apr07
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'LIFNR'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C03.
  W_FIELDCATALOG-KEY         =  C_X.   "Fixes the column for no-scroll EXT-SAP-180 5Apr07
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'MAKTX'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C04.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
* Begin of changes EXT-SAP-180  24APR07
  W_FIELDCATALOG-FIELDNAME   = 'FINCONPRI'.
* End   of changes EXT-SAP-180  24APR07
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C06.
  W_FIELDCATALOG-NO_ZERO     =  C_X.
  W_FIELDCATALOG-JUST        =  C_R.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
* Begin of changes EXT-SAP-180  24APR07
  W_FIELDCATALOG-FIELDNAME   = 'FININFPRI'.
* End   of changes EXT-SAP-180  24APR07
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C07.
  W_FIELDCATALOG-NO_ZERO     =  C_X.
  W_FIELDCATALOG-JUST        =  C_R.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'MPRICE'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C08.
  W_FIELDCATALOG-NO_ZERO     =  C_X.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'NREPCOST'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C09.
  W_FIELDCATALOG-NO_ZERO     =  C_X.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

*-----           Begin of Changes  EXT-SAP-180  13APR2007            ------*

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'PRUOM'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C15.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'TRC_BUOM'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C16.
  W_FIELDCATALOG-NO_ZERO     =  C_X.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'BSUOM'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C17.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

*-----           End   of Changes  EXT-SAP-180  13APR2007            ------*

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'PREPCOST'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C10.
  W_FIELDCATALOG-NO_ZERO     =  C_X.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'VALCHG'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C11.
  W_FIELDCATALOG-NO_ZERO     =  C_X.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'PERCHG'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C12.
  W_FIELDCATALOG-NO_ZERO     =  C_X.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

  CLEAR  W_FIELDCATALOG.

ENDFORM.                                      "build_fieldcatalog

*&---------------------------------------------------------------------*
*&      Form  build_layout
*&---------------------------------------------------------------------*
*   To build ALV Layout
*----------------------------------------------------------------------*
FORM BUILD_LAYOUT.

  CLEAR  : W_LAYOUT.

  W_LAYOUT-ZEBRA             = C_X.           "striped pattern
  W_LAYOUT-NO_VLINE          = C_X.           "columns separated space
  W_LAYOUT-COLWIDTH_OPTIMIZE = C_X.           "columns width optimize
  W_LAYOUT-BOX_TABNAME       = C_ITNAME.      "tabname for checkbox
  W_LAYOUT-BOX_FIELDNAME     = 'SELECT'.      "fieldname for checkbox

  CLEAR  : W_KEYINFO.

  W_KEYINFO-HEADER01 = 'WERKS'.               "Header1 key information
  W_KEYINFO-ITEM01   = 'WERKS'.               "Item1 key information
  W_KEYINFO-HEADER02 = 'MATKL'.               "Header2 key information
  W_KEYINFO-ITEM02   = 'MATKL'.               "Item2 key information

ENDFORM.                                      "build_layout

*&---------------------------------------------------------------------*
*&      Form  build_events
*&---------------------------------------------------------------------*
*   To build ALV Events
*----------------------------------------------------------------------*
FORM BUILD_EVENTS.

  CONSTANTS: C_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      I_LIST_TYPE     = 0
    IMPORTING
      ET_EVENTS       = T_EVENTS[]
    EXCEPTIONS
      LIST_TYPE_WRONG = 1
      OTHERS          = 2.

  IF SY-SUBRC = 0.

    READ TABLE T_EVENTS INTO W_EVENT
                        WITH KEY NAME = C_TOP_OF_PAGE
                        BINARY SEARCH.
    IF SY-SUBRC = 0.

      MOVE C_TOP_OF_PAGE TO W_EVENT-FORM.

      MODIFY T_EVENTS INDEX SY-TABIX
                      FROM  W_EVENT
                      TRANSPORTING FORM.
    ENDIF.

  ELSE.

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

  ENDIF.

ENDFORM.                                      "build_events

*&---------------------------------------------------------------------*
*&      Form  build_topofpage
*&---------------------------------------------------------------------*
*       To build ALV Top of page
*----------------------------------------------------------------------*
FORM BUILD_TOPOFPAGE.

* Title
  CLEAR W_HEADER.
  W_HEADER-TYP  = C_H.
  W_HEADER-INFO = TEXT-001.
  APPEND W_HEADER TO T_HEADER.

* Plant
  CLEAR W_HEADER.
  W_HEADER-TYP  = C_S.
  W_HEADER-KEY = TEXT-T05.

  IF S_WERKS-HIGH IS NOT INITIAL.

    CONCATENATE ':'
                S_WERKS-LOW
                TEXT-T07
                S_WERKS-HIGH
           INTO W_HEADER-INFO
           SEPARATED BY SPACE.

  ELSEIF S_WERKS-LOW IS NOT INITIAL.

    CONCATENATE ':'
                S_WERKS-LOW
           INTO W_HEADER-INFO
           SEPARATED BY SPACE.
  ELSE.

    CLEAR: W_HEADER.

  ENDIF.

  APPEND W_HEADER TO T_HEADER.


* Material Group
  CLEAR: W_HEADER.
  W_HEADER-TYP  = C_S.
  W_HEADER-KEY = TEXT-T06.

  IF S_MATKL-HIGH IS NOT INITIAL.

    CONCATENATE ':'
                S_MATKL-LOW
                TEXT-T07
                S_MATKL-HIGH
           INTO W_HEADER-INFO
           SEPARATED BY SPACE.

  ELSEIF S_MATKL-LOW IS NOT INITIAL.

    CONCATENATE ':'
                S_MATKL-LOW
           INTO W_HEADER-INFO
           SEPARATED BY SPACE.
  ELSE.

    CLEAR: W_HEADER.

  ENDIF.

  APPEND W_HEADER TO T_HEADER.

ENDFORM.                                      "build_topofpage

*&---------------------------------------------------------------------*
*&      Form  top_of_page
*&---------------------------------------------------------------------*
*    To display top of page in ALV Report
*----------------------------------------------------------------------*
FORM TOP_OF_PAGE.                                           "#EC CALLED

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY = T_HEADER.

ENDFORM.                                      "top_of_page

*&---------------------------------------------------------------------*
*&      Form  pf_status
*&---------------------------------------------------------------------*
*   To set PF-Status (user interface)
*----------------------------------------------------------------------*
*      -->EXTAB     The excluding table (function codes)
*----------------------------------------------------------------------*
FORM PF_STATUS                                              "#EC CALLED
          USING T_EXTAB TYPE SLIS_T_EXTAB.                  "#EC NEEDED
  SET PF-STATUS 'ZSTANDARD_FULLSCREEN'.

ENDFORM.                                      "pf_status

*&---------------------------------------------------------------------*
*&      Form  display_alv_report
*&---------------------------------------------------------------------*
*    To display ALV report
*----------------------------------------------------------------------*
FORM DISPLAY_ALV_REPORT.

  CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = G_REPID
      I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
      IS_LAYOUT                = W_LAYOUT
      IT_FIELDCAT              = T_FIELDCATALOG
      I_DEFAULT                = C_X
      I_SAVE                   = C_A
      IT_EVENTS                = T_EVENTS[]
      I_TABNAME_HEADER         = 'T_HFINAL'
      I_TABNAME_ITEM           = 'T_IFINAL'
      IS_KEYINFO               = W_KEYINFO
    TABLES
      T_OUTTAB_HEADER          = T_HFINAL
      T_OUTTAB_ITEM            = T_IFINAL
    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.                                      "display_alv_report

*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*    EXIT routine for command handling
*----------------------------------------------------------------------*
*      -->R_UCOMM      Function code that PAI triggered
*      -->RS_SELFIELD  Information cursor position ALV
*----------------------------------------------------------------------*
FORM USER_COMMAND USING L_UCOMM    LIKE SY-UCOMM             "#EC CALLED
                         W_SELFIELD TYPE SLIS_SELFIELD.      "#EC NEEDED

* Check function code
  CASE L_UCOMM.

    WHEN 'UPDATE'.

      READ TABLE T_IFINAL INTO W_IFINAL
                          WITH KEY SELECT = C_X
                          BINARY SEARCH.
      IF SY-SUBRC <> 0.

        MESSAGE I000(ZS) WITH TEXT-M02.

      ELSE.

        CLEAR : G_ANSWER.

* Dialog box for save prompts
        CALL FUNCTION 'POPUP_TO_CONFIRM'
          EXPORTING
            TEXT_QUESTION  = TEXT-OP1
          IMPORTING
            ANSWER         = G_ANSWER
          EXCEPTIONS
            TEXT_NOT_FOUND = 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.

        ELSE.

          IF G_ANSWER = 1.

            SET PF-STATUS 'ZSTANDARD_SCREEN'.

            PERFORM UPDATE_TABLE.

          ENDIF.

        ENDIF.

      ENDIF.

  ENDCASE.

ENDFORM.                                      "user_command

*&---------------------------------------------------------------------*
*&      Form  update_table
*&---------------------------------------------------------------------*
*   To update Future Planned Price3 (ZPLP3) in MBEW table through BAPI
*----------------------------------------------------------------------*
FORM UPDATE_TABLE .

  DATA : W_BAPIMATHEAD TYPE BAPIMATHEAD,            "headdata
         W_BAPI_MBEW   TYPE BAPI_MBEW,              "valuationdata
         W_BAPI_MBEWX  TYPE BAPI_MBEWX.             "valuationdatax

* Structure for Return Parameter BAPIRET2
  DATA : W_MATRET TYPE BAPI_MATRETURN2.

* Internal Table for Return Parameter BAPIRET2
  DATA : T_MATRET TYPE STANDARD TABLE OF BAPI_MATRETURN2.

  CLEAR W_IFINAL.

  WRITE :  /15 TEXT-T08 COLOR 4.
  ULINE AT /15(42).

  LOOP AT T_IFINAL INTO W_IFINAL WHERE SELECT = C_X.

    CLEAR : W_BAPIMATHEAD,
            W_BAPI_MBEW,
            W_BAPI_MBEWX.

    REFRESH : T_MATRET.

* Transporting data to  headdata
    W_BAPIMATHEAD-MATERIAL  = W_IFINAL-MATNR.       "Material No.
    W_BAPIMATHEAD-COST_VIEW = C_X.                  "View selection

* Transporting data to valuationdata
    W_BAPI_MBEW-VAL_AREA    = W_IFINAL-WERKS.       "Plant
*---------Begin of change EXT-SAP-180   13APR2007--------------
    W_BAPI_MBEW-PLNDPRICE3  = W_IFINAL-TRC_BUOM.
*---------end   of change EXT-SAP-180   13APR2007--------------
    W_BAPI_MBEW-PLNDPRDATE3 = P_VDATE.              "Horizon date (from)

* Transporting data to valuationdatax
    W_BAPI_MBEWX-VAL_AREA    = W_IFINAL-WERKS.      "Plant selection
    W_BAPI_MBEWX-PLNDPRICE3  = C_X.                 "Future Planed Cost
    W_BAPI_MBEWX-PLNDPRDATE3 = C_X.                 "Horizon date

*BAPIs for Creating / Changing Material Master Data
    CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
      EXPORTING
        HEADDATA       = W_BAPIMATHEAD
        VALUATIONDATA  = W_BAPI_MBEW
        VALUATIONDATAX = W_BAPI_MBEWX
      TABLES
        RETURNMESSAGES = T_MATRET.

* Deleting the message of Creating Material Master Data
    IF T_MATRET IS NOT INITIAL.

      DELETE T_MATRET INDEX 1.
      DELETE T_MATRET INDEX 1.

    ENDIF.                                    "t_matret IS NOT INITIAL

    IF T_MATRET IS NOT INITIAL.

      LOOP AT T_MATRET INTO W_MATRET.

        CASE W_MATRET-TYPE.

          WHEN C_S.

            FORMAT COLOR 5.
            AT NEW TYPE.

              WRITE : /5 TEXT-T01, W_IFINAL-MATNR,
                         TEXT-T02, W_IFINAL-WERKS,
                         TEXT-T03.
            ENDAT.

            WRITE : / W_MATRET-MESSAGE.
            FORMAT COLOR 5 OFF.

          WHEN C_E.

            FORMAT COLOR 6.
            AT NEW TYPE.

              WRITE : /5 TEXT-T01, W_IFINAL-MATNR,
                         TEXT-T02, W_IFINAL-WERKS,
                         TEXT-T04.
            ENDAT.

            WRITE : / W_MATRET-MESSAGE .
            FORMAT COLOR 5 OFF.

        ENDCASE.                              "w_matret-type

      ENDLOOP.                                "t_matret IS NOT INITIAL

      SKIP.

    ENDIF.                                    "t_matret IS NOT INITIAL

  ENDLOOP.                                    "t_ifinal INTO w_ifinal

ENDFORM.                                      "update_table
*----------------------------------------------------------------------*

Regards,

Kiran

Former Member
0 Kudos

Welcome to SDN..

Pls SEARCH SDN BEFORE POSTING ANY QUESTION.

HAPPY SURFING..

Edited by: Padmashree RamMaghenthar on Oct 6, 2008 2:25 PM

Former Member
0 Kudos

Write the code at the event AT USER-COMMAND.

Hope you know the procedure how to create the push buttons right.

In that event you need to take the case statement and go for the check

CASE SY-UCOMM.

WHEN 'FC01'.

PERFORM SOME_ACTION.

ENDCASE.

hope this will help you.

Regards,

Madan moHan.

Former Member
0 Kudos

Hi

- U need to set a your own status by routine PF_STATUS so u should copy a standard ALV status (STANDARD for example) and then insert your new button;

- U need to use the routine USER_COMMAND in order to manage your new buttons

Max

praveen_kumar132
Participant
0 Kudos

HI ,

You can use SET PF-STATUS. ... In ALV list display itself u will get standard tool bar. if u don't want u can deactivate it .

praveen_kumar132
Participant
0 Kudos

HI ,

You can use SET PF-STATUS. ... In ALV list display itself u will get standard tool bar. if u don't want u can deactivate it .