REPORT ZPPRTR001 NO STANDARD PAGE HEADING MESSAGE-ID MG.
*----------------------------------------------------------------------*
* Program     :  ZPPRTR001                                             *
* Author      :  Patrick,Song                                          *
* Date        :  Aug 20, 2008                                          *
* Code type   :  conversion                                            *
* Version     :  new creation                                          *
* (interface/conversion/on-line transaction/report)                    *
*                                                                      *
*----------------------------------------------------------------------*
* Error handling :                                                     *
*----------------------------------------------------------------------*
* 1.                                                                   *
*                                                                      *
*----------------------------------------------------------------------*
* Change log :                                                         *
*----------------------------------------------------------------------*
* CR#       :                                                          *
* Corr. no. :                                                          *
* Date      :                                                          *
* Author    :                                                          *
* Change    :                                                          *
*                                                                      *
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
* Table declaration
*&---------------------------------------------------------------------*
TABLES: MAST.          " Material to BOM Link
TABLES: MARA.          " General Material Data
TABLES: MAPL.          " Assignment of Task Lists to Materials
TABLES: PLAF.          " Planned order
TABLES: PLAS.          " Task list - selection of operations/activities
TABLES: PLPO.          " Task list - operation/activity
TABLES: CRHD.          " Work Center Header
TABLES: MAKT.          " Material Descriptions
TABLES: ZPP_RTVIEWS .  " Routing Views among Table MAPL, PLAS and PLPO


*&---------------------------------------------------------------------*
* Subrouting declaration
*&---------------------------------------------------------------------*
INCLUDE   : <ICON>.
TYPE-POOLS: SLIS, KCDE..
INCLUDE   : ABAPRETN, ZBCDWI000.


*&---------------------------------------------------------------------*
* Declaration Constant Data
*&---------------------------------------------------------------------*
CONSTANTS : ST_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME
                                   VALUE 'TOP_OF_PAGE-ALV'.


*&---------------------------------------------------------------------*
* selection screen define
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK A1 WITH FRAME TITLE TEXT-SC1 .
SELECT-OPTIONS: S_MATNR FOR MAST-MATNR.
SELECT-OPTIONS: S_MTART FOR MARA-MTART DEFAULT 'FERT' TO 'HALB'.
SELECT-OPTIONS: S_MAKTX FOR MAKT-MAKTX .
SELECTION-SCREEN END OF BLOCK A1 .

SELECTION-SCREEN BEGIN OF BLOCK A3 WITH FRAME TITLE TEXT-SC3 .
PARAMETERS    : P_WERKS LIKE T001W-WERKS DEFAULT '2001'  OBLIGATORY .
PARAMETERS    : P_EMENG LIKE RC29N-EMENG DEFAULT '10000' OBLIGATORY .
SELECTION-SCREEN END OF BLOCK A3 .

SELECTION-SCREEN BEGIN OF BLOCK A2 WITH FRAME TITLE TEXT-SC2 .
PARAMETERS    : P_PLNTY LIKE MAPL-PLNTY OBLIGATORY DEFAULT 'N'.
PARAMETERS    : P_PLNAL LIKE MAPL-PLNAL OBLIGATORY DEFAULT '1'.
SELECT-OPTIONS: S_VORNR FOR PLPO-VORNR .
SELECT-OPTIONS: S_LTXA1 FOR PLPO-LTXA1 .
SELECT-OPTIONS: S_ARBPL FOR CRHD-ARBPL .
SELECT-OPTIONS: S_STEUS FOR PLPO-STEUS .
SELECTION-SCREEN END OF BLOCK A2 .

*&---------------------------------------------------------------------*
* globe parameters declaration
*&---------------------------------------------------------------------*
* define table to store tempoary data
DATA INT_TAB     TYPE KCDE_INTERN_STRUC OCCURS 0 WITH HEADER LINE.

*-> define internal table to store these material number temp.
DATABEGIN OF I_MATNR OCCURS 0  .
DATA: MATNR LIKE MAST-MATNR .
DATA: WERKS LIKE MAST-WERKS .
DATAEND   OF I_MATNR .

DATA: I_PLAS LIKE PLAS OCCURS 0 WITH HEADER LINE .

DATABEGIN OF RTG_LOGS OCCURS 0.
DATA: MATNR LIKE MAPL-MATNR .  " Material Number
DATA: MWERK LIKE MAPL-WERKS .  " Plant
DATA: PLNTY LIKE MAPL-PLNTY .  " Task List Type
DATA: PLNNR LIKE MAPL-PLNNR .  " Key for Task List Group
DATA: PLNAL LIKE MAPL-PLNAL .  " Group Counter
DATA: PLNKN LIKE PLAS-PLNKN .  " Number of the task list node
DATA: ZAEHL LIKE PLAS-ZAEHL .  " Internal counter
DATA: VORNR LIKE PLPO-VORNR .  " Operation\Activity
DATA: STEUS LIKE PLPO-STEUS .  " Control key
DATA: WERKS LIKE PLPO-WERKS .  " Plant of Work Center
DATA: ARBID LIKE PLPO-ARBID .  " Object ID of Work center
DATA: DATUV LIKE PLPO-DATUV .  " Valid-From Date
DATA: ANDAT LIKE PLPO-ANDAT .  " Date record created on
DATA: AEDAT LIKE PLPO-AEDAT .  " Changed On
DATA: AENNR LIKE PLPO-AENNR .  " Change Number
DATA: ARBPL LIKE CRHD-ARBPL .  " Work center
DATA: LTXA1 LIKE PLPO-LTXA1 .  " Operation short text
DATA: BMSCH LIKE PLPO-BMSCH .  " Base Quantity in Operation\Activity
DATA: MEINH LIKE PLPO-MEINH .  " Unit for Base Quantity
DATA: VGE01 LIKE PLPO-VGE01 .  " Unit(Time)
DATA: VGW01 LIKE PLPO-VGW01 .  " Setup Time
DATA: VGE02 LIKE PLPO-VGE02 .  " Unit(Time)
DATA: VGW02 LIKE PLPO-VGW02 .  " Machine Time
DATA: VGE03 LIKE PLPO-VGE03 .  " Unit(Time)
DATA: VGW03 LIKE PLPO-VGW03 .  " Labor Time
DATA: VGE04 LIKE PLPO-VGE04 .  " Unit(Time)
DATA: VGW04 LIKE PLPO-VGW04 .  " Standard value 1
DATA: VGE05 LIKE PLPO-VGE05 .  " Unit(Time)
DATA: VGW05 LIKE PLPO-VGW05 .  " Standard value 2
DATA: VGE06 LIKE PLPO-VGE06 .  " Unit(Time)
DATA: VGW06 LIKE PLPO-VGW06 .  " Standard value 3
DATA: ZWNOR LIKE PLPO-ZWNOR .  " Standard queue time
DATA: ZEIWM LIKE PLPO-ZEIWM .  " Unit for the minumum queue time
DATA: SPMUS LIKE PLPO-SPMUS .  " Required Splitting
DATA: SPLIM LIKE PLPO-SPLIM .  " No. of splits
DATA: VGWTM LIKE PLPO-VGW01 .  " Required Time (H)
DATA: VGW00 LIKE PLPO-VGW01 .  " Required Time (H)
DATA: HMEIN LIKE PLPO-MEINH .  " Time Unit - Hours
DATA: SPLI1 LIKE PLPO-SPLIM .  " Personnel in Calculation
DATA: EMENG LIKE RC29N-EMENG.  " Required quantity
DATA: SELK  TYPE C .
DATAEND   OF RTG_LOGS .

*-> define internal table
DATABEGIN OF ITAB OCCURS 0 .
*Routing Header Data
DATA: MATNR LIKE MAPL-MATNR .  " Material Number
DATA: MWERK LIKE MAPL-WERKS .  " Plant
DATA: MTART LIKE MARA-MTART .  " General Material Data
DATA: PLNTY LIKE MAPL-PLNTY .  " Task List Type
DATA: PLNNR LIKE MAPL-PLNNR .  " Key for Task List Group
DATA: PLNAL LIKE MAPL-PLNAL .  " Group Counter
* Material data & Expected Quantity
DATA: MAKTX LIKE MAKT-MAKTX .  " Material Descriptions
DATA: EMENG LIKE RC29N-EMENG.  " Required quantity
*Operation Assignment located by Group Counter
DATA: PLNKN LIKE PLAS-PLNKN .  " Number of the task list node
DATA: ZAEHL LIKE PLAS-ZAEHL .  " Internal counter
* Operation&Activity
DATA: VERWE LIKE CRHD-VERWE .  " Work center cat.
DATA: OBJTY LIKE CRHD-OBJTY .  " Object types of the CIM resource
DATA: VORNR LIKE PLPO-VORNR .  " Operation\Activity
DATA: STEUS LIKE PLPO-STEUS .  " Control key
DATA: WERKS LIKE PLPO-WERKS .  " Plant of Work Center
DATA: ARBID LIKE PLPO-ARBID .  " Object ID of Work center
DATA: ARBPL LIKE CRHD-ARBPL .  " Work center
DATA: LTXA1 LIKE PLPO-LTXA1 .  " Operation short text
DATA: BMSCH LIKE PLPO-BMSCH .  " Base Quantity in Operation\Activity
DATA: MEINH LIKE PLPO-MEINH .  " Unit for Base Quantity
DATA: VGE01 LIKE PLPO-VGE01 .  " Unit(Time)
DATA: VGW01 LIKE PLPO-VGW01 .  " Setup Time
DATA: VGE02 LIKE PLPO-VGE02 .  " Unit(Time)
DATA: VGW02 LIKE PLPO-VGW02 .  " Machine Time
DATA: VGE03 LIKE PLPO-VGE03 .  " Unit(Time)
DATA: VGW03 LIKE PLPO-VGW03 .  " Labor Time
DATA: VGE04 LIKE PLPO-VGE04 .  " Unit(Time)
DATA: VGW04 LIKE PLPO-VGW04 .  " Standard value 1
DATA: VGE05 LIKE PLPO-VGE05 .  " Unit(Time)
DATA: VGW05 LIKE PLPO-VGW05 .  " Standard value 2
DATA: VGE06 LIKE PLPO-VGE06 .  " Unit(Time)
DATA: VGW06 LIKE PLPO-VGW06 .  " Standard value 3
DATA: ZWNOR LIKE PLPO-ZWNOR .  " Standard queue time
DATA: ZEIWM LIKE PLPO-ZEIWM .  " Unit for the minumum queue time
DATA: SPMUS LIKE PLPO-SPMUS .  " Required Splitting
DATA: SPLIM LIKE PLPO-SPLIM .  " No. of splits
DATA: VGWTM LIKE PLPO-VGW01 .  " Required Time (H)
DATA: VGW00 LIKE PLPO-VGW01 .  " Required Time (H)
DATA: HMEIN LIKE PLPO-MEINH .  " Time Unit - Hours
DATA: SPLI1 LIKE PLPO-SPLIM .  " Personnel in Calculation
DATA: SELK  TYPE C .
DATAEND   OF ITAB .
*-> define internal table to store uploading data
DATABEGIN OF MTAB OCCURS 0 .
DATA: MATNR LIKE MARA-MATNR .  " Material Number
DATA: MAKTX LIKE MAKT-MAKTX .  " Material Descriptions
DATA: MTART LIKE MARA-MTART .  " General Material Data
DATA: WERKS LIKE MARC-WERKS .  " Plant
DATA: PLNTY LIKE AFKO-PLNTY .  " Task List Type
DATA: PLNNR LIKE AFKO-PLNNR .  " Key for Task List Group
DATA: PLNAL LIKE AFKO-PLNAL .  " Group Counter
DATAEND   OF MTAB .

DATA: OPRTAB     LIKE CAPP_OPR OCCURS 0 WITH HEADER LINE .
DATA: TSKTAB     LIKE CAPP_TSK OCCURS 0 WITH HEADER LINE .
DATA: SEQTAB     LIKE CAPP_SEQ OCCURS 0 WITH HEADER LINE .
DATA: PHASETAB   LIKE CAPP_OPR OCCURS 0 WITH HEADER LINE .
DATA: SUBOPRTAB  LIKE CAPP_OPR OCCURS 0 WITH HEADER LINE .
DATA: RELTAB     LIKE CAPP_REL OCCURS 0 WITH HEADER LINE .
DATA: COMTAB     LIKE CAPP_COM OCCURS 0 WITH HEADER LINE .
DATA: REFERRTAB  LIKE CAPP_OPR OCCURS 0 WITH HEADER LINE .
DATA: REFMISTAB  LIKE CAPP_OPR OCCURS 0 WITH HEADER LINE .

*-> define internal table for ALV-Output
DATA: S_REPID LIKE SY-REPID,
      ST_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER."page header
DATA: ST_FIELDCAT    TYPE SLIS_T_FIELDCAT_ALV,   "table col name
      ST_LAYOUT      TYPE SLIS_LAYOUT_ALV,       "layoutsetting
      ST_SP_GROUP    TYPE SLIS_T_SP_GROUP_ALV,
      ST_EVENTS      TYPE SLIS_T_EVENT,          "event header
*     s_default(001) type c,
*     s_exit(001)    type c,
*     st_variant     like disvariant,
      CODE           LIKE DISVARIANT-HANDLE,
      S_VARIANT      LIKE DISVARIANT,
      S_STATUS       TYPE SLIS_FORMNAME VALUE 'STANDARD_ST01',
      S_STATUS_LOG   TYPE SLIS_FORMNAME VALUE 'STANDARD_ST02',
      S_USER_COMMLOG TYPE SLIS_FORMNAME VALUE 'USER_COMMLOG-ALV',
      S_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND-ALV'.
DATABEGIN OF EXTAB OCCURS 0,
      FCODE LIKE RSMPE-FUNC.
DATAEND OF EXTAB.
DATA: TAB TYPE SLIS_T_EXTAB.

*-> for user downloading operation
DATA: L_FILE  LIKE RLGRAP-FILENAME.   " filename for data downloading
DATABEGIN OF FIELDNAMES OCCURS 0,
      NAME(030),
      END OF FIELDNAMES.

*&---------------------------------------------------------------------*
* initialization.
*&---------------------------------------------------------------------*
INITIALIZATION.
  REFRESH: ITAB .
  CLEAR  : ITAB .


*&---------------------------------------------------------------------*
* at selection-screen
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN .

*&---------------------------------------------------------------------*
* start-of-selection.
*&---------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM PREPARE_ALV_FIELDS .
  PERFORM EXTRACT_ROUTING_DATA .
  PERFORM DISPLAY_ALV_RESULT .

*&---------------------------------------------------------------------*
* end-of-selection.
*&---------------------------------------------------------------------*
END-OF-SELECTION.


*&---------------------------------------------------------------------*
*&      Form  PREPARE_ALV_FIELDS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PREPARE_ALV_FIELDS .

  CLEAR  : G_ALV_FIELDCAT .
  PERFORM SET_ALV_FIELDS USING 'PLNNR'        'ITAB' '' TEXT-C01.
  PERFORM SET_ALV_FIELDS USING 'PLNAL'        'ITAB' '' TEXT-C35.
  PERFORM SET_ALV_FIELDS USING 'MATNR'        'ITAB' '' TEXT-C02.
  PERFORM SET_ALV_FIELDS USING 'MAKTX'        'ITAB' '' TEXT-C03.
  PERFORM SET_ALV_FIELDS USING 'MTART'        'ITAB' '' TEXT-C00.
  PERFORM SET_ALV_FIELDS USING 'MWERK'        'ITAB' '' TEXT-C04.
  PERFORM SET_ALV_FIELDS USING 'VERWE'        'ITAB' '' TEXT-C05.
  PERFORM SET_ALV_FIELDS USING 'ARBPL'        'ITAB' '' TEXT-C07.
  PERFORM SET_ALV_FIELDS USING 'WERKS'        'ITAB' '' TEXT-C11.
  PERFORM SET_ALV_FIELDS USING 'VORNR'        'ITAB' '' TEXT-C08.
  PERFORM SET_ALV_FIELDS USING 'STEUS'        'ITAB' '' TEXT-C09.
  PERFORM SET_ALV_FIELDS USING 'LTXA1'        'ITAB' '' TEXT-C12.
  PERFORM SET_ALV_FIELDS USING 'MEINH'        'ITAB' '' TEXT-C13.
  PERFORM SET_ALV_FIELDS USING 'BMSCH'        'ITAB' '' TEXT-C14.
  PERFORM SET_ALV_FIELDS USING 'VGE01'        'ITAB' '' TEXT-C15.
  PERFORM SET_ALV_FIELDS USING 'VGW01'        'ITAB' '' TEXT-C16.
  PERFORM SET_ALV_FIELDS USING 'VGW02'        'ITAB' '' TEXT-C18.
  PERFORM SET_ALV_FIELDS USING 'VGE02'        'ITAB' '' TEXT-C15.
  PERFORM SET_ALV_FIELDS USING 'VGW03'        'ITAB' '' TEXT-C20.
  PERFORM SET_ALV_FIELDS USING 'VGE03'        'ITAB' '' TEXT-C15.
  PERFORM SET_ALV_FIELDS USING 'ZWNOR'        'ITAB' '' TEXT-C33.
  PERFORM SET_ALV_FIELDS USING 'ZEIWM'        'ITAB' '' TEXT-C29.
  PERFORM SET_ALV_FIELDS USING 'SPMUS'        'ITAB' '' TEXT-C27.
  PERFORM SET_ALV_FIELDS USING 'SPLIM'        'ITAB' '' TEXT-C28.
  PERFORM SET_ALV_FIELDS USING 'EMENG'        'ITAB' '' TEXT-B01.
  PERFORM SET_ALV_FIELDS USING 'VGWTM'        'ITAB' '' TEXT-B02.
  PERFORM SET_ALV_FIELDS USING 'VGW00'        'ITAB' '' TEXT-B05.
  PERFORM SET_ALV_FIELDS USING 'HMEIN'        'ITAB' '' TEXT-B03.
  PERFORM SET_ALV_FIELDS USING 'SPLI1'        'ITAB' '' TEXT-B06.

  PERFORM LAYOUT_BUILD   USING G_ALV_LAYOUT .

ENDFORM.                    " PREPARE_ALV_FIELDS

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV_RESULT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_ALV_RESULT .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    I_CALLBACK_PROGRAM          = SY-CPROG
    IS_LAYOUT                   = G_ALV_LAYOUT
*     i_callback_html_top_of_page = 'ALV_TOP_OF_PAGE'
    I_CALLBACK_PF_STATUS_SET    = S_STATUS
    I_DEFAULT                   = 'X'
    I_SAVE                      = 'X'
    I_CALLBACK_USER_COMMAND     = S_USER_COMMAND
    IT_FIELDCAT                 = G_ALV_FIELDCAT[]
    IT_EVENTS                   = G_ALV_EVENT
  TABLES
    T_OUTTAB                    = ITAB[].

ENDFORM.                    " DISPLAY_ALV_RESULT


*&---------------------------------------------------------------------*
*&      Form  STANDARD_ST01
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->EXTAB      text
*----------------------------------------------------------------------*
FORM STANDARD_ST01 USING EXTAB TYPE SLIS_T_EXTAB.

* contain all fcode from ALV *
  DELETE EXTAB WHERE FCODE = '&RNT_PREV'.
  DELETE EXTAB WHERE FCODE = '&LFO'.
  DELETE EXTAB WHERE FCODE = '&NFO'.
  DELETE EXTAB WHERE FCODE = '&RNT'.
  SET PF-STATUS 'ST01'.
  SET TITLEBAR  'ST01'.

ENDFORM.                    " STANDARD_ST01

*&---------------------------------------------------------------------*
*&      Form  STANDARD_ST02
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->EXTAB      text
*----------------------------------------------------------------------*
FORM STANDARD_ST02 USING EXTAB TYPE SLIS_T_EXTAB.

* contain all fcode from ALV *
  DELETE EXTAB WHERE FCODE = '&RNT_PREV'.
  DELETE EXTAB WHERE FCODE = '&LFO'.
  DELETE EXTAB WHERE FCODE = '&NFO'.
  DELETE EXTAB WHERE FCODE = '&RNT'.
  SET PF-STATUS 'ST02'.
  SET TITLEBAR  'ST02'.

ENDFORM.                    " STANDARD_ST02


*-------------------------------------------------------------------
*       FORM USER_COMMAND-ALV
*-------------------------------------------------------------------
FORM USER_COMMAND-ALV USING R_UCOMM LIKE SY-UCOMM
                  RS_SELFIELD TYPE SLIS_SELFIELD.
  DATA: FELD(10TYPE C.
* table rs_selfield store the information of cursor and table index.
  RS_SELFIELD-REFRESH = 'X'.
  CASE R_UCOMM.
    WHEN 'PICK'.
      READ TABLE ITAB INDEX RS_SELFIELD-TABINDEX.
      CASE RS_SELFIELD-FIELDNAME.
        WHEN 'MATNR'.
          SET PARAMETER ID 'MAT' FIELD ITAB-MATNR.
          CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
        WHEN 'ARBPL'.
          SET PARAMETER ID 'AGR' FIELD ITAB-ARBPL.
          SET PARAMETER ID 'WRK' FIELD ITAB-WERKS.
          CALL TRANSACTION 'CR03' AND SKIP FIRST SCREEN.
        WHEN 'VORNR' OR 'STEUS'.
          PERFORM EXTRACT_RTG_CHANGELOGS.
          PERFORM DISPLAY_CHANGE_LOGS .
        WHEN OTHERS.
          SET PARAMETER ID 'MAT' FIELD ITAB-MATNR.
          SET PARAMETER ID 'WRK' FIELD ITAB-WERKS.
          CALL TRANSACTION 'CA03' AND SKIP FIRST SCREEN.
      ENDCASE .
  ENDCASE .
  CLEAR R_UCOMM.

ENDFORM.                    " USER_COMMAND-ALV


*&---------------------------------------------------------------------*
*&      Form  USER_COMMLOG-ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM USER_COMMLOG-ALV USING R_UCOMM LIKE SY-UCOMM
                  RS_SELFIELD TYPE SLIS_SELFIELD.
  DATA: FELD(10TYPE C.
* table rs_selfield store the information of cursor and table index.
  RS_SELFIELD-REFRESH = 'X'.
  CASE R_UCOMM.
    WHEN 'PICK'.
      READ TABLE RTG_LOGS INDEX RS_SELFIELD-TABINDEX.
      CASE RS_SELFIELD-FIELDNAME.
        WHEN OTHERS.
          IF NOT RTG_LOGS-AENNR IS INITIAL .
            SET PARAMETER ID 'AEN' FIELD RTG_LOGS-AENNR.
            CALL TRANSACTION 'CC03' AND SKIP FIRST SCREEN.
          ENDIF .
      ENDCASE .
  ENDCASE .
  CLEAR R_UCOMM.

ENDFORM.                    " USER_COMMLOG-ALV

*&---------------------------------------------------------------------*
*&      Form  EXTRACT_ROUTING_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM EXTRACT_ROUTING_DATA .

  REFRESH: MTAB, ITAB . CLEAR: MTAB, ITAB .

  SELECT * INTO CORRESPONDING FIELDS OF TABLE MTAB
           FROM MAPL INNER JOIN MAKT ON MAKT~MANDT = MAPL~MANDT
                                    AND MAKT~MATNR = MAPL~MATNR
                     INNER JOIN MARA ON MARA~MANDT = MAPL~MANDT
                                    AND MARA~MATNR = MAPL~MATNR
           CLIENT SPECIFIED
          WHERE MAPL~MANDT EQ SY-MANDT
            AND MAPL~MATNR IN S_MATNR
            AND MAPL~WERKS EQ P_WERKS
            AND MAPL~PLNTY EQ P_PLNTY
            AND MAPL~LOEKZ EQ SPACE
            AND MARA~MTART IN S_MTART
            AND MAKT~MAKTX IN S_MAKTX
            AND MAKT~SPRAS EQ '1' .

  LOOP AT MTAB .
    REFRESH: OPRTAB. CLEAR: OPRTAB .
    PERFORM CARO_ROUTING_READ USING MTAB-PLNTY
                                    MTAB-PLNNR
                                    MTAB-PLNAL
                                    MTAB-MATNR .
    LOOP AT OPRTAB WHERE LTXA1 IN S_LTXA1 AND VORNR IN S_VORNR AND STEUS IN S_STEUS.
      CLEAR: CRHD .
      SELECT SINGLE * FROM CRHD CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
                                               AND OBJTY EQ 'A'
                                               AND OBJID EQ OPRTAB-ARBID
                                               AND ARBPL IN S_ARBPL .
      IF SY-SUBRC = 0 .
        MOVE-CORRESPONDING MTAB   TO ITAB .
        MOVE MTAB-WERKS           TO ITAB-MWERK .
        MOVE CRHD-ARBPL           TO ITAB-ARBPL .
        MOVE CRHD-VERWE           TO ITAB-VERWE .
        MOVE-CORRESPONDING OPRTAB TO ITAB .
        MOVE 'H'                  TO ITAB-ZEIWM .
        MOVE P_EMENG              TO ITAB-EMENG .
        IF OPRTAB-SPLIM NE 0 AND OPRTAB-SPMUS EQ 'X' .
          IF CRHD-VERWE = '0001'.
            ITAB-VGWTM = OPRTAB-VGW02 *   P_EMENG / OPRTAB-BMSCH / OPRTAB-SPLIM / 3600.
            ITAB-VGW00 = CEIL3600 / ( OPRTAB-VGW02 / OPRTAB-BMSCH / OPRTAB-SPLIM ) ).
            IF OPRTAB-VGW02 NE 0 .
              ITAB-SPLI1 = OPRTAB-VGW03 / OPRTAB-VGW02 .
            ENDIF .
          ENDIF .
          IF CRHD-VERWE = '0003'.
            ITAB-VGWTM = OPRTAB-VGW03 *   P_EMENG / OPRTAB-BMSCH / OPRTAB-SPLIM / 3600.
            ITAB-VGW00 = CEIL3600 / ( OPRTAB-VGW03 / OPRTAB-BMSCH / OPRTAB-SPLIM ) ).
            ITAB-SPLI1 = ITAB-SPLIM .
          ENDIF .
          ITAB-SPLIM = OPRTAB-SPLIM.
          ITAB-BMSCH = OPRTAB-BMSCH.
        ENDIF.
        ITAB-HMEIN = 'H'.
      ENDIF .

      APPEND ITAB. CLEAR: ITAB .
    ENDLOOP .
  ENDLOOP .

ENDFORM.                    " EXTRACT_ROUTING_DATA
*&---------------------------------------------------------------------*
*&      Form  CARO_ROUTING_READ
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_MTAB_PLNTY  text
*      -->P_MTAB_PLNNR  text
*      -->P_MTAB_PLNAL  text
*      -->P_MTAB_MATNR  text
*----------------------------------------------------------------------*
FORM CARO_ROUTING_READ  USING    PLNTY PLNNR PLNAL PLNBEZ.

  CALL FUNCTION 'CARO_ROUTING_READ'
    EXPORTING
      DATE_FROM            = SY-DATUM
      DATE_TO              = '99991231'
      PLNTY                = 'N'
      PLNNR                = PLNNR
      PLNAL                = PLNAL
      MATNR                = PLNBEZ
      BUFFER_DEL_FLG       = 'X'
      DELETE_ALL_CAL_FLG   = 'X'
      ADAPT_FLG            = 'X'
      IV_CREATE_ADD_CHANGE = SPACE
    TABLES
      TSK_TAB              = TSKTAB
      OPR_TAB              = OPRTAB
      SEQ_TAB              = SEQTAB
      PHASE_TAB            = PHASETAB
      SUBOPR_TAB           = SUBOPRTAB
      REL_TAB              = RELTAB
      COM_TAB              = COMTAB
      REFERR_TAB           = REFERRTAB
      REFMIS_TAB           = REFMISTAB
    EXCEPTIONS
      NOT_FOUND            = 01
      REF_NOT_EXP          = 02
      NOT_VALID            = 03
      OTHERS               = 04.

ENDFORM.                    " CARO_ROUTING_READ

*&---------------------------------------------------------------------*
*&      Form  EXTRACT_RTG_CHANGELOGS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM EXTRACT_RTG_CHANGELOGS .

  REFRESH: RTG_LOGS .
  CLEAR  : RTG_LOGS .

  SELECT * INTO CORRESPONDING FIELDS OF TABLE RTG_LOGS
           FROM PLAS INNER JOIN PLPO ON PLPO~MANDT = PLAS~MANDT
                                    AND PLPO~PLNTY = PLAS~PLNTY
                                    AND PLPO~PLNNR = PLAS~PLNNR
                                    AND PLPO~PLNKN = PLAS~PLNKN
           CLIENT SPECIFIED
          WHERE PLAS~MANDT EQ  SY-MANDT
            AND PLAS~PLNTY EQ 'N'
            AND PLAS~PLNNR EQ  ITAB-PLNNR
            AND PLAS~PLNAL EQ  ITAB-PLNAL
            AND PLPO~VORNR EQ  ITAB-VORNR
          ORDER BY PLAS~PLNTY PLAS~PLNNR PLAS~PLNAL PLPO~VORNR.

  LOOP AT RTG_LOGS .
    CLEAR: CRHD .
    SELECT SINGLE * FROM CRHD CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
                                             AND OBJTY EQ 'A'
                                             AND OBJID EQ RTG_LOGS-ARBID .
    IF SY-SUBRC = 0 .
      MOVE CRHD-ARBPL           TO RTG_LOGS-ARBPL .
      MOVE 'H'                  TO RTG_LOGS-ZEIWM .
      MOVE P_EMENG              TO RTG_LOGS-EMENG .
      IF RTG_LOGS-SPLIM NE 0 AND RTG_LOGS-SPMUS EQ 'X' .
        IF CRHD-VERWE = '0001'.
          RTG_LOGS-VGWTM = RTG_LOGS-VGW02    *   P_EMENG / RTG_LOGS-BMSCH / RTG_LOGS-SPLIM / 3600.
          RTG_LOGS-VGW00 = CEIL3600 / ( RTG_LOGS-VGW02 / RTG_LOGS-BMSCH / RTG_LOGS-SPLIM ) ).
          IF RTG_LOGS-VGW02 NE 0 .
            RTG_LOGS-SPLI1 = RTG_LOGS-VGW03 / RTG_LOGS-VGW02 .
          ENDIF .
        ENDIF .
        IF CRHD-VERWE = '0003'.
          RTG_LOGS-VGWTM = RTG_LOGS-VGW03    *   P_EMENG / RTG_LOGS-BMSCH / RTG_LOGS-SPLIM / 3600.
          RTG_LOGS-VGW00 = CEIL3600 / ( RTG_LOGS-VGW03 / RTG_LOGS-BMSCH / RTG_LOGS-SPLIM ) ).
          RTG_LOGS-SPLI1 = RTG_LOGS-SPLIM .
        ENDIF .
        RTG_LOGS-SPLIM = RTG_LOGS-SPLIM.
        RTG_LOGS-BMSCH = RTG_LOGS-BMSCH.
      ENDIF.
      RTG_LOGS-HMEIN = 'H'.
    ENDIF .
    MOVE ITAB-MATNR TO RTG_LOGS-MATNR.

    MODIFY RTG_LOGS.

  ENDLOOP .

  SORT RTG_LOGS BY MATNR PLNNR PLNAL VORNR ANDAT AEDAT AENNR .

ENDFORM.                    " EXTRACT_RTG_CHANGELOGS

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_CHANGE_LOGS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_CHANGE_LOGS .

  CLEAR  : G_ALV_FIELDCAT .
  PERFORM SET_ALV_FIELDS USING 'MATNR'        'RTG_LOGS' '' TEXT-C02.
  PERFORM SET_ALV_FIELDS USING 'PLNNR'        'RTG_LOGS' '' TEXT-C01.
  PERFORM SET_ALV_FIELDS USING 'PLNAL'        'RTG_LOGS' '' TEXT-C35.
  PERFORM SET_ALV_FIELDS USING 'VORNR'        'RTG_LOGS' '' TEXT-C08.
  PERFORM SET_ALV_FIELDS USING 'ANDAT'        'RTG_LOGS' '' TEXT-C38.
  PERFORM SET_ALV_FIELDS USING 'AEDAT'        'RTG_LOGS' '' TEXT-C48.
  PERFORM SET_ALV_FIELDS USING 'AENNR'        'RTG_LOGS' '' TEXT-C58.
  PERFORM SET_ALV_FIELDS USING 'STEUS'        'RTG_LOGS' '' TEXT-C09.
  PERFORM SET_ALV_FIELDS USING 'LTXA1'        'RTG_LOGS' '' TEXT-C12.
  PERFORM SET_ALV_FIELDS USING 'BMSCH'        'RTG_LOGS' '' TEXT-C14.
  PERFORM SET_ALV_FIELDS USING 'MEINH'        'RTG_LOGS' '' TEXT-C13.
  PERFORM SET_ALV_FIELDS USING 'VGW02'        'RTG_LOGS' '' TEXT-C18.
  PERFORM SET_ALV_FIELDS USING 'VGW03'        'RTG_LOGS' '' TEXT-C20.
  PERFORM SET_ALV_FIELDS USING 'VGE03'        'RTG_LOGS' '' TEXT-C15.
  PERFORM SET_ALV_FIELDS USING 'SPLIM'        'RTG_LOGS' '' TEXT-C28.
  PERFORM SET_ALV_FIELDS USING 'VGW00'        'RTG_LOGS' '' TEXT-B05.
  PERFORM SET_ALV_FIELDS USING 'VGWTM'        'RTG_LOGS' '' TEXT-B52.

  PERFORM LAYOUT_BUILD   USING G_ALV_LAYOUT .

  SY-TITLE = TEXT-T00 .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    I_CALLBACK_PROGRAM          = SY-CPROG
    IS_LAYOUT                   = G_ALV_LAYOUT
*     i_callback_html_top_of_page = 'ALV_TOP_OF_PAGE'
    I_CALLBACK_PF_STATUS_SET    = S_STATUS_LOG
    I_DEFAULT                   = 'X'
    I_SAVE                      = 'X'
    I_CALLBACK_USER_COMMAND     = S_USER_COMMLOG
    IT_FIELDCAT                 = G_ALV_FIELDCAT[]
    IT_EVENTS                   = G_ALV_EVENT
  TABLES
    T_OUTTAB                    = RTG_LOGS[].

ENDFORM.                    " DISPLAY_CHANGE_LOGS