20/02/2016

Dynamic table creation

*&---------------------------------------------------------------------*
*& Report  ZABATCH_ORDER_COMPARE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT  ZABATCH_ORDER_COMPARE LINE-SIZE 300 .
TYPE-POOLS SLIS.
TABLES : RESB,VBAP.
******************SELECTION BEGIN OF **************************************
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETER : P_VBELN TYPE ZRESB-KDAUF,
            P_MENGE TYPE VBAP-ZMENG.
SELECTION-SCREEN END OF BLOCK B1 .
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
SELECT-OPTIONS : C_VBELN FOR VBAP-VBELN.
PARAMETER C_MENGE TYPE VBAP-ZMENG.
SELECTION-SCREEN END OF BLOCK B2 .
******************SELECTION END   OF **************************************
********** STRUCUTURE DECLARATION ********************************
TYPES : BEGIN OF TY_LEG,
        KDAUF TYPE ZRESB-KDAUF,
*        MATNR TYPE ZRESB-MATNR,
*        REQ_QTY TYPE ZRESB-REQ_QTY,
*        BWART TYPE ZRESB-BWART,
        END OF TY_LEG.
 TYPES : BEGIN OF TY_LEGACY2,
         MATNR TYPE ZMSEG-MATNR,
         KDAUF TYPE ZMSEG-KDAUF,
         REQ_QTY TYPE BDMNG,
         BWART TYPE ZMSEG-BWART,
         QTY TYPE ZMSEG-QTY,
         COST TYPE ZMSEG-COST,
         END OF TY_LEGACY2.

TYPES : BEGIN OF TY_ORDER,
        MATNR TYPE MATNR ,
        KDAUF TYPE KDAUF ,
        BWART TYPE BWART,
        BDMNG TYPE BDMNG,
        END OF TY_ORDER ,
        BEGIN OF TY_B_FINAL,
        MATNR  TYPE MATNR,
        ORDER1 TYPE KDAUF,
        REQ_QTY1 TYPE BDMNG,
        ISSUE_QTY1  TYPE BDMNG,
        ISSUE_COST1  TYPE DMBTR,
        RETURN_QTY1 TYPE MENGE_D,
        RETURN_COST1 TYPE DMBTR,
        END OF  TY_B_FINAL,
        BEGIN OF TY_A_FINAL,
        MATNR  TYPE MATNR,
        ORDER1 TYPE KDAUF,
        MAKTX TYPE MAKTX ,
        REQ_QTY1 TYPE BDMNG,
        ISSUE_QTY1  TYPE BDMNG,
        ISSUE_COST1  TYPE DMBTR,
        RETURN_QTY1 TYPE MENGE_D,
        RETURN_COST1 TYPE DMBTR,
        NET_QTY1  TYPE MENGE_D,
        ORDER2 TYPE KDAUF,
*        MATNR2  TYPE MATNR,
        REQ_QTY2 TYPE BDMNG,
        ISSUE_QTY2  TYPE BDMNG,
        ISSUE_COST2  TYPE DMBTR,
        RETURN_QTY2 TYPE MENGE_D,
        RETURN_COST2 TYPE DMBTR,
        NET_QTY2 TYPE MENGE_D,
        REMARK TYPE STRING,
        END OF  TY_A_FINAL,
        BEGIN OF TY_DES,
        MATNR TYPE MATNR ,
        MAKTX TYPE MAKTX,
        END OF   TY_DES,

        BEGIN OF TY_MSEG,
        MATNR TYPE MATNR ,
        BWART TYPE BWART,
        MENGE TYPE MENGE_D,
        DMBTR TYPE DMBTR,
        END OF TY_MSEG.
************* INGTERNAL TABLE DECLARATION AND WORKAAREA , VARIABLE ******************
*           *******PREVIOUS DATA SAP**************
DATA : IT_PREV_SAP TYPE STANDARD TABLE OF TY_ORDER,
       WA_PREV_SAP TYPE                   TY_ORDER,
       WA_PREV_SAP1 TYPE                   TY_ORDER.
DATA: IT_LEGACY TYPE STANDARD TABLE OF    TY_LEG,
      WA_LEGACY TYPE                      TY_LEG.
DATA : IT_MAT_DES TYPE STANDARD TABLE OF  TY_DES,
       WA_MAT_DES TYPE                    TY_DES.
DATA : IT_ISSUE_LEGACY TYPE STANDARD TABLE OF TY_LEGACY2,
       WA_ISSUE_LEGACY TYPE                   TY_LEGACY2.
DATA : IT_RETURN_LEGACY TYPE STANDARD TABLE OF TY_LEGACY2,
       WA_RETURN_LEGACY TYPE                   TY_LEGACY2.
DATA : IT_FINAL_B TYPE STANDARD TABLE OF TY_B_FINAL,
       WA_FINAL_B TYPE                   TY_B_FINAL.
DATA : IT_FINAL_BL TYPE STANDARD TABLE OF TY_B_FINAL,
       WA_FINAL_BL TYPE                   TY_B_FINAL.
DATA : IT_ISSUE_SAP  TYPE STANDARD TABLE OF TY_MSEG,
       IT_RETURN_SAP TYPE STANDARD TABLE OF TY_MSEG,
       WA_ISSUE_SAP  TYPE                   TY_MSEG,
       WA_RETURN_SAP TYPE                   TY_MSEG.

*          *******END PREVIOUS DATA SAP**************
*          *******CURRENT  DATA SAP******************
DATA : IT_CURR_SAP  TYPE STANDARD TABLE OF TY_ORDER,
       WA_CURR_SAP  TYPE                   TY_ORDER,
       WA_CURR_SAP1  TYPE                   TY_ORDER.
DATA : IT_FINAL_C TYPE STANDARD TABLE OF TY_B_FINAL,
       WA_FINAL_C TYPE                   TY_B_FINAL.
************************TEMPORARY TABLE *********************************************
DATA: IT_TEMP_LEGACY TYPE STANDARD TABLE OF    TY_LEG,
      WA_TEMP_LEGACY TYPE                      TY_LEG.
DATA : IT_TISSUE_LEGACY TYPE STANDARD TABLE OF TY_LEGACY2,
       WA_TISSUE_LEGACY TYPE                   TY_LEGACY2.
DATA : IT_TEMP_SAP1 TYPE STANDARD TABLE OF TY_ORDER,
       WA_TEMP_SAP1 TYPE                   TY_ORDER.
DATA : IT_TEMP_ISSUE TYPE STANDARD TABLE OF TY_MSEG,
       WA_TEMP_ISSUE TYPE                   TY_MSEG.
DATA : LV_TABIX TYPE I,
       FM_NAME TYPE RS38L_FNAM,
       TEMP_STR1 TYPE STRING,
       TEMP_STR2 TYPE STRING.
DATA : PLAN_QTY1 TYPE MENGE_D,
       PLAN_QTY2 TYPE MENGE_D,
       PLAN_QTY TYPE MENGE_D,
       DRAWN_QTY TYPE MENGE_D,
       DRAWN_QTY2 TYPE MENGE_D,
       RESULT TYPE MENGE_D,
       RATIO_B TYPE MENGE_D.
*         ****************FINAL***********************************
DATA : IT_FINAL_A TYPE STANDARD TABLE OF ZBORAD_FINAL,
       WA_FINAL_A TYPE                   ZBORAD_FINAL,
       WA_FINAL_A1 TYPE                   ZBORAD_FINAL.
DATA : IT_FIELDCAT1 TYPE  SLIS_T_FIELDCAT_ALV,
       LT_LAYOUT    TYPE  SLIS_LAYOUT_ALV,
       WA_FIELDCAT1 TYPE  SLIS_FIELDCAT_ALV.
DATA: IT_LISTHEADER TYPE SLIS_T_LISTHEADER,
      WA_LISTHEADER TYPE SLIS_LISTHEADER.
* Dynamic Table Declarations
*
DATA : GT_DYN_TABLE  TYPE REF TO DATA,
       GW_LINE       TYPE REF TO DATA,
       GW_LINE1      TYPE REF TO DATA,
       WA_FIELDCAT   TYPE LVC_S_FCAT,
       IT_FIELDCAT   TYPE LVC_T_FCAT.
* Field Symbols Declarations
FIELD-SYMBOLS: <GFS_LINE>,<GFS_LINE1>,
               <GFS_DYN_TABLE> TYPE STANDARD TABLE,
               <FS1>.
DATA : GV_POS TYPE I.
DATA : FNAME TYPE STRING.
**************START-OF-SELECTION.*****************************************************
*****************SELECT DATA FROM LEGACY SYSTEM ******************************************
PERFORM CONVERSION_SALES_NUMBER .
PERFORM SLECT_DATA_LEAGCY.
PERFORM CALCULATE_REQ_LEGACY.
PERFORM ISSUE_QTY_LEGACY.
PERFORM RETURN_QTY_LEGACY.
PERFORM FINAL_LEGACY.
*****************SELECT DATA PREVIOUS SAP SALES ORDER ************************************
PERFORM SELECT_DATA_SAP.
PERFORM CALCULATE_REQ_SAP .
PERFORM ISSUE_QTY_SAP .
PERFORM RETURN_QTY_SAP.
PERFORM FINAL_SAP1.
PERFORM LEGACY_SAP_COMBINE.
*******************END SELECTION PREVIOUS SAP SALES ORDER *********************************
PERFORM SELCT_CURR_DATA_SAP.
PERFORM CALCULATE_CURR_REQ_SAP.
PERFORM ISSUE_CURR_QTY_SAP .
PERFORM RETURN_CURR_QTY_SAP.
PERFORM FINAL_SAP2.
********************************************************************************************
PERFORM FINAL_TABLE_DISPLAY.
PERFORM FILL_FIELDCAT.
PERFORM FILL_FIELDCAT_1.
PERFORM LIST_HEADER .
PERFORM TOP_OF_PAGE.
PERFORM GRID_DISPLAY.


*&---------------------------------------------------------------------*
*&      Form  SELECT_DATA_SAP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SELECT_DATA_SAP .
SELECT MATNR KDAUF  BWART BDMNG INTO TABLE IT_PREV_SAP FROM RESB WHERE KDAUF = P_VBELN .
DELETE IT_PREV_SAP WHERE BWART NE '261' AND BWART NE '202' AND BWART NE '201' AND BWART NE '262'  .
ENDFORM.                    " SELECT_DATA_SAP
*&---------------------------------------------------------------------*
*&      Form  CALCULATE_REQ_SAP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CALCULATE_REQ_SAP .
SORT IT_PREV_SAP BY MATNR ASCENDING.
LOOP AT IT_PREV_SAP INTO WA_PREV_SAP.
  IF IT_TEMP_SAP1 IS NOT INITIAL .
  READ TABLE IT_TEMP_SAP1 INTO WA_TEMP_SAP1 WITH KEY MATNR = WA_PREV_SAP-MATNR KDAUF = WA_PREV_SAP-KDAUF.
  IF SY-SUBRC EQ 0 .
    WA_TEMP_SAP1-BDMNG = WA_TEMP_SAP1-BDMNG + WA_PREV_SAP-BDMNG.
    MODIFY IT_TEMP_SAP1 FROM WA_TEMP_SAP1 TRANSPORTING BDMNG.
  ENDIF.
    WA_TEMP_SAP1-BDMNG = WA_PREV_SAP-BDMNG.
    WA_TEMP_SAP1-KDAUF = WA_PREV_SAP-KDAUF.
    WA_TEMP_SAP1-MATNR = WA_PREV_SAP-MATNR.
    WA_TEMP_SAP1-BWART = WA_PREV_SAP-BWART.
    APPEND WA_TEMP_SAP1 TO IT_TEMP_SAP1.
  ENDIF .
 CLEAR WA_TEMP_SAP1.
 ENDLOOP.
REFRESH IT_PREV_SAP.
IT_PREV_SAP[] = IT_TEMP_SAP1[].
READ TABLE IT_PREV_SAP INTO WA_TEMP_SAP1 INDEX SY-TABIX.
REFRESH IT_TEMP_SAP1.
ENDFORM.                    " CALCULATE_REQ_SAP
*&---------------------------------------------------------------------*
*&      Form  ISSUE_QTY_SAP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ISSUE_QTY_SAP .
SELECT MATNR BWART MENGE DMBTR INTO TABLE IT_ISSUE_SAP  FROM MSEG FOR ALL ENTRIES IN IT_PREV_SAP WHERE MATNR = IT_PREV_SAP-MATNR.
DELETE IT_ISSUE_SAP WHERE BWART NE '261' AND BWART NE '201'.
SORT IT_ISSUE_SAP BY MATNR ASCENDING.
LOOP AT IT_ISSUE_SAP INTO WA_ISSUE_SAP.
  AT END OF MATNR .
  SUM.
  WA_TEMP_ISSUE-MATNR  = WA_ISSUE_SAP-MATNR.
  WA_TEMP_ISSUE-BWART  = WA_ISSUE_SAP-BWART.
  WA_TEMP_ISSUE-MENGE  = WA_ISSUE_SAP-MENGE.
  WA_TEMP_ISSUE-DMBTR  = WA_ISSUE_SAP-DMBTR.
  APPEND WA_TEMP_ISSUE TO IT_TEMP_ISSUE.
  ENDAT.
ENDLOOP.
REFRESH IT_ISSUE_SAP.
IT_ISSUE_SAP[] = IT_TEMP_ISSUE[].
READ TABLE IT_ISSUE_SAP INTO WA_ISSUE_SAP INDEX 1.
REFRESH IT_TEMP_ISSUE.
ENDFORM.                    " ISSUE_QTY_SAP
*&---------------------------------------------------------------------*
*&      Form  RETURN_QTY_SAP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM RETURN_QTY_SAP .
  REFRESH IT_TEMP_ISSUE.
SELECT MATNR BWART MENGE DMBTR INTO TABLE IT_RETURN_SAP  FROM MSEG FOR ALL ENTRIES IN IT_PREV_SAP WHERE MATNR = IT_PREV_SAP-MATNR.
DELETE IT_RETURN_SAP WHERE BWART NE '262' AND BWART NE '202'.
SORT IT_RETURN_SAP BY MATNR ASCENDING.
LOOP AT IT_RETURN_SAP INTO WA_RETURN_SAP.
AT END OF MATNR.
SUM.
  WA_TEMP_ISSUE-MATNR  = WA_ISSUE_SAP-MATNR.
  WA_TEMP_ISSUE-BWART  = WA_ISSUE_SAP-BWART.
  WA_TEMP_ISSUE-MENGE  = WA_ISSUE_SAP-MENGE.
  WA_TEMP_ISSUE-DMBTR  = WA_ISSUE_SAP-DMBTR.
  APPEND WA_TEMP_ISSUE TO IT_TEMP_ISSUE.
  ENDAT.
ENDLOOP.
REFRESH IT_RETURN_SAP.
IT_RETURN_SAP[] = IT_TEMP_ISSUE[].
REFRESH IT_TEMP_ISSUE.

ENDFORM.                    " RETURN_QTY_SAP
*&---------------------------------------------------------------------*
*&      Form  FINAL_SAP1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FINAL_SAP1 .
LOOP AT IT_PREV_SAP INTO WA_PREV_SAP.
 LV_TABIX = SY-TABIX.
WA_FINAL_B-ORDER1     = WA_PREV_SAP-KDAUF.
WA_FINAL_B-MATNR      = WA_PREV_SAP-MATNR.
WA_FINAL_B-REQ_QTY1   = WA_PREV_SAP-BDMNG.
READ TABLE IT_ISSUE_SAP INTO WA_ISSUE_SAP WITH KEY MATNR = WA_PREV_SAP-MATNR.
    IF SY-SUBRC = 0.
      WA_FINAL_B-ISSUE_QTY1  = WA_ISSUE_SAP-MENGE.
      WA_FINAL_B-ISSUE_COST1 = WA_ISSUE_SAP-DMBTR.
     ELSE .
       WA_FINAL_B-ISSUE_QTY1  = 0.
       WA_FINAL_B-ISSUE_COST1 = 0..
    ENDIF .
READ TABLE IT_RETURN_SAP INTO WA_RETURN_SAP WITH KEY MATNR = WA_PREV_SAP-MATNR.
    IF SY-SUBRC = 0.
      WA_FINAL_B-RETURN_QTY1  = WA_RETURN_SAP-MENGE.
      WA_FINAL_B-RETURN_COST1 = WA_RETURN_SAP-DMBTR.
     ELSE.
       WA_FINAL_B-RETURN_QTY1 = 0.
       WA_FINAL_B-RETURN_COST1 = 0.
    ENDIF.
 APPEND WA_FINAL_B TO IT_FINAL_B.
ENDLOOP.
READ TABLE IT_FINAL_B INTO WA_FINAL_B INDEX 1.
REFRESH : IT_ISSUE_SAP,IT_RETURN_SAP.
ENDFORM.                    " FINAL_SAP1
*&---------------------------------------------------------------------*
*&      Form  SELCT_C_DATA_SAP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SELCT_CURR_DATA_SAP .
SELECT  MATNR KDAUF    BWART BDMNG INTO TABLE IT_CURR_SAP FROM RESB WHERE KDAUF IN C_VBELN .
DELETE IT_CURR_SAP WHERE BWART NE '261' AND BWART NE '202' AND BWART NE '201' AND BWART NE '262'  .
ENDFORM.                    " SELCT_C_DATA_SAP
*&---------------------------------------------------------------------*
*&      Form  CALCULATE_CURR_REQ_SAP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CALCULATE_CURR_REQ_SAP .
SORT IT_CURR_SAP BY MATNR ASCENDING.
LOOP AT IT_CURR_SAP INTO WA_CURR_SAP.
IF IT_TEMP_SAP1 IS NOT INITIAL .
  READ TABLE IT_TEMP_SAP1 INTO WA_TEMP_SAP1 WITH KEY MATNR = WA_CURR_SAP-MATNR KDAUF = WA_CURR_SAP-KDAUF.
  IF SY-SUBRC EQ 0 .
    WA_TEMP_SAP1-BDMNG = WA_TEMP_SAP1-BDMNG + WA_CURR_SAP-BDMNG.
    MODIFY TABLE IT_TEMP_SAP1 FROM WA_TEMP_SAP1 TRANSPORTING BDMNG.
  ELSE.
    WA_TEMP_SAP1-BDMNG = WA_CURR_SAP-BDMNG.
    WA_TEMP_SAP1-KDAUF = WA_CURR_SAP-KDAUF.
    WA_TEMP_SAP1-MATNR = WA_CURR_SAP-MATNR.
    WA_TEMP_SAP1-BWART = WA_CURR_SAP-BWART.
    APPEND WA_TEMP_SAP1 TO IT_TEMP_SAP1.
  ENDIF.
ELSE.
    WA_TEMP_SAP1-BDMNG = WA_CURR_SAP-BDMNG.
    WA_TEMP_SAP1-KDAUF = WA_CURR_SAP-KDAUF.
    WA_TEMP_SAP1-MATNR = WA_CURR_SAP-MATNR.
    WA_TEMP_SAP1-BWART = WA_CURR_SAP-BWART.
    APPEND WA_TEMP_SAP1 TO IT_TEMP_SAP1.
  ENDIF .
ENDLOOP.
REFRESH IT_CURR_SAP.
IT_CURR_SAP[] = IT_TEMP_SAP1[].
READ TABLE IT_CURR_SAP INTO WA_CURR_SAP INDEX SY-TABIX.
REFRESH IT_TEMP_SAP1.
ENDFORM.                    " CALCULATE_CURR_REQ_SAP
*&---------------------------------------------------------------------*
*&      Form  ISSUE_CURR_QTY_SAP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ISSUE_CURR_QTY_SAP .
SELECT MATNR BWART MENGE DMBTR INTO TABLE IT_ISSUE_SAP  FROM MSEG FOR ALL ENTRIES IN IT_CURR_SAP WHERE MATNR = IT_CURR_SAP-MATNR.
DELETE IT_ISSUE_SAP WHERE BWART NE '261' AND BWART NE '201'.
SORT IT_ISSUE_SAP BY MATNR ASCENDING.
LOOP AT IT_ISSUE_SAP INTO WA_ISSUE_SAP.
  AT END OF MATNR.
  SUM.
  WA_TEMP_ISSUE-MATNR  = WA_ISSUE_SAP-MATNR.
  WA_TEMP_ISSUE-BWART  = WA_ISSUE_SAP-BWART.
  WA_TEMP_ISSUE-MENGE  = WA_ISSUE_SAP-MENGE.
  WA_TEMP_ISSUE-DMBTR  = WA_ISSUE_SAP-DMBTR.
  APPEND WA_TEMP_ISSUE TO IT_TEMP_ISSUE.
  ENDAT.
ENDLOOP.
REFRESH IT_ISSUE_SAP.
IT_ISSUE_SAP[] = IT_TEMP_ISSUE[].
READ TABLE IT_ISSUE_SAP INTO WA_ISSUE_SAP INDEX 1.
ENDFORM.                    " ISSUE_CURR_QTY_SAP
*&---------------------------------------------------------------------*
*&      Form  RETURN_CURR_QTY_SAP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM RETURN_CURR_QTY_SAP .
REFRESH IT_TEMP_ISSUE.
SELECT MATNR BWART MENGE DMBTR INTO TABLE IT_RETURN_SAP  FROM MSEG FOR ALL ENTRIES IN IT_CURR_SAP WHERE MATNR = IT_CURR_SAP-MATNR.
DELETE IT_RETURN_SAP WHERE BWART NE '262' AND BWART NE '202'.
SORT  IT_RETURN_SAP BY MATNR ASCENDING.
LOOP AT IT_RETURN_SAP INTO WA_RETURN_SAP.
AT END OF MATNR.
SUM.
  WA_TEMP_ISSUE-MATNR  = WA_ISSUE_SAP-MATNR.
  WA_TEMP_ISSUE-BWART  = WA_ISSUE_SAP-BWART.
  WA_TEMP_ISSUE-MENGE  = WA_ISSUE_SAP-MENGE.
  WA_TEMP_ISSUE-DMBTR  = WA_ISSUE_SAP-DMBTR.
  APPEND WA_TEMP_ISSUE TO IT_TEMP_ISSUE.
  ENDAT.
ENDLOOP.
REFRESH IT_RETURN_SAP.
IT_RETURN_SAP[] = IT_TEMP_ISSUE[].
REFRESH IT_TEMP_ISSUE.
ENDFORM.                    " RETURN_CURR_QTY_SAP
*&---------------------------------------------------------------------*
*&      Form  FINAL_SAP2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FINAL_SAP2 .
LOOP AT IT_CURR_SAP INTO WA_CURR_SAP.
 LV_TABIX = SY-TABIX.
WA_FINAL_C-ORDER1     = WA_CURR_SAP-KDAUF.
WA_FINAL_C-MATNR      = WA_CURR_SAP-MATNR.
WA_FINAL_C-REQ_QTY1   = WA_CURR_SAP-BDMNG.
READ TABLE IT_ISSUE_SAP INTO WA_ISSUE_SAP WITH KEY MATNR = WA_CURR_SAP-MATNR.
    IF SY-SUBRC = 0.
      WA_FINAL_C-ISSUE_QTY1  = WA_ISSUE_SAP-MENGE.
      WA_FINAL_C-ISSUE_COST1 = WA_ISSUE_SAP-DMBTR.
     ELSE .
       WA_FINAL_C-ISSUE_QTY1  = 0.
       WA_FINAL_C-ISSUE_COST1 = 0..
    ENDIF .
READ TABLE IT_RETURN_SAP INTO WA_RETURN_SAP WITH KEY MATNR = WA_CURR_SAP-MATNR.
    IF SY-SUBRC = 0.
      WA_FINAL_C-RETURN_QTY1  = WA_RETURN_SAP-MENGE.
      WA_FINAL_C-RETURN_COST1 = WA_RETURN_SAP-DMBTR.
     ELSE.
       WA_FINAL_C-RETURN_QTY1 = 0.
       WA_FINAL_C-RETURN_COST1 = 0.
    ENDIF.
 APPEND WA_FINAL_C TO IT_FINAL_C.
ENDLOOP.
READ TABLE IT_FINAL_C INTO WA_FINAL_C INDEX 1.
REFRESH : IT_ISSUE_SAP,IT_RETURN_SAP.
ENDFORM.                    " FINAL_SAP2
*&---------------------------------------------------------------------*
*&      Form  FINAL_TABLE_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FINAL_TABLE_DISPLAY .
LOOP AT IT_FINAL_B INTO WA_FINAL_B.
*AT NEW MATNR .
 READ TABLE IT_FINAL_C INTO WA_FINAL_C WITH KEY MATNR = WA_FINAL_B-MATNR .
  IF SY-SUBRC = 0.
    WA_FINAL_A-ORDER1 = WA_FINAL_B-ORDER1.
    WA_FINAL_A-ORDER2 = WA_FINAL_C-ORDER1.
    WA_FINAL_A-MATNR = WA_FINAL_B-MATNR.
    WA_FINAL_A-REQ_QTY1 = WA_FINAL_B-REQ_QTY1.
    WA_FINAL_A-REQ_QTY2 = WA_FINAL_C-REQ_QTY1.
    WA_FINAL_A-ISSUE_QTY1 = WA_FINAL_B-ISSUE_QTY1.
    WA_FINAL_A-ISSUE_COST1 = WA_FINAL_C-ISSUE_COST1.
    WA_FINAL_A-ISSUE_QTY2  = WA_FINAL_B-ISSUE_QTY1.
    WA_FINAL_A-ISSUE_COST2 = WA_FINAL_C-ISSUE_COST1.
    WA_FINAL_A-RETURN_QTY1 = WA_FINAL_B-RETURN_QTY1.
    WA_FINAL_A-RETURN_QTY2 = WA_FINAL_C-RETURN_QTY1.
    WA_FINAL_A-RETURN_COST1 = WA_FINAL_B-RETURN_COST1.
    WA_FINAL_A-RETURN_COST2 = WA_FINAL_C-RETURN_COST1.
   APPEND WA_FINAL_A TO IT_FINAL_A.
  ENDIF.
*ENDAT.
ENDLOOP.
          .
LOOP AT IT_FINAL_A INTO WA_FINAL_A .
 DELETE IT_FINAL_C WHERE MATNR = WA_FINAL_A-MATNR.
 DELETE IT_FINAL_B WHERE MATNR = WA_FINAL_A-MATNR.
 ENDLOOP.
 LOOP AT IT_FINAL_B INTO WA_FINAL_B.
   WA_FINAL_A-ORDER1 = WA_FINAL_B-ORDER1.
   WA_FINAL_A-MATNR = WA_FINAL_B-MATNR.
   WA_FINAL_A-REQ_QTY1 = WA_FINAL_B-REQ_QTY1.
   WA_FINAL_A-ISSUE_QTY1 = WA_FINAL_B-ISSUE_QTY1.
   WA_FINAL_A-ISSUE_COST1  = WA_FINAL_B-ISSUE_COST1.
   WA_FINAL_A-RETURN_QTY1 = WA_FINAL_B-RETURN_QTY1.
   WA_FINAL_A-RETURN_COST1 = WA_FINAL_B-RETURN_COST1.
   APPEND WA_FINAL_A TO IT_FINAL_A.
 ENDLOOP .
   CLEAR WA_FINAL_A.
 LOOP AT IT_FINAL_C INTO WA_FINAL_C.
    WA_FINAL_A-ORDER2       = WA_FINAL_C-ORDER1.
    WA_FINAL_A-MATNR        = WA_FINAL_C-MATNR.
    WA_FINAL_A-REQ_QTY2     = WA_FINAL_C-REQ_QTY1.
    WA_FINAL_A-ISSUE_QTY2   = WA_FINAL_C-ISSUE_QTY1.
    WA_FINAL_A-ISSUE_COST2  = WA_FINAL_C-ISSUE_COST1.
    WA_FINAL_A-RETURN_QTY2  = WA_FINAL_C-RETURN_QTY1.
    WA_FINAL_A-RETURN_COST2 = WA_FINAL_C-RETURN_COST1.
       APPEND WA_FINAL_A TO IT_FINAL_A.
 ENDLOOP.
 SORT IT_FINAL_A BY MATNR ASCENDING.
SELECT MATNR MAKTX FROM MAKT INTO TABLE IT_MAT_DES FOR ALL ENTRIES IN IT_FINAL_A WHERE MATNR = IT_FINAL_A-MATNR.
 LOOP AT IT_FINAL_A INTO WA_FINAL_A.
   LV_TABIX = SY-TABIX.
  READ TABLE IT_MAT_DES INTO WA_MAT_DES WITH KEY MATNR = WA_FINAL_A-MATNR.
  IF SY-SUBRC = 0.
   WA_FINAL_A-MAKTX = WA_MAT_DES-MAKTX.
  ENDIF.
**PER COACH  VALUE FROM REQUIRE MENT  QUANTITY
  IF P_MENGE IS NOT INITIAL  AND C_MENGE IS NOT INITIAL AND P_MENGE NE 0 AND C_MENGE NE 0.
   WA_FINAL_A-PER_COACH1 =   WA_FINAL_A-REQ_QTY1 / P_MENGE.
   WA_FINAL_A-PER_COACH2 =   WA_FINAL_A-REQ_QTY2 / C_MENGE.
 ENDIF.
****NET QUANITYT ISSUE - RETURN *********
   WA_FINAL_A-NET_QTY1 = ( WA_FINAL_A-ISSUE_QTY1 - WA_FINAL_A-RETURN_QTY1 ).
   WA_FINAL_A-NET_QTY2 = ( WA_FINAL_A-ISSUE_QTY2 - WA_FINAL_A-RETURN_QTY2 ).
****NET COST  ISSUE - RETURN *********
   WA_FINAL_A-NET_COST1 = ( WA_FINAL_A-ISSUE_COST1 - WA_FINAL_A-RETURN_COST1 ).
   WA_FINAL_A-NET_COST2 = ( WA_FINAL_A-ISSUE_COST2 - WA_FINAL_A-RETURN_COST2 ).
   MODIFY IT_FINAL_A FROM WA_FINAL_A INDEX LV_TABIX TRANSPORTING MAKTX NET_QTY1 NET_QTY2 PER_COACH1 PER_COACH2 NET_COST1 NET_COST2  .
 ENDLOOP .

 CLEAR WA_FINAL_A.
ENDFORM.                    " FINAL_TABLE_DISPLAY
*&---------------------------------------------------------------------*
*&      Form  SLECT_DATA_LEAGCY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SLECT_DATA_LEAGCY .
SELECT KDAUF  FROM ZRESB INTO TABLE IT_LEGACY WHERE KDAUF = P_VBELN .
*DELETE IT_LEGACY WHERE BWART NE '261'  AND BWART NE '262' AND BWART NE '201' AND BWART NE'202'.
ENDFORM.                    " SLECT_DATA_LEAGCY
*&---------------------------------------------------------------------*
*&      Form  CALCULATE_REQ_LEGACY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CALCULATE_REQ_LEGACY .
SORT IT_LEGACY BY KDAUF ASCENDING.
*LOOP AT IT_LEGACY INTO WA_LEGACY.
*AT END OF MATNR.
* SUM.
* WA_TEMP_LEGACY-REQ_QTY = WA_LEGACY-REQ_QTY.
* WA_TEMP_LEGACY-KDAUF = WA_LEGACY-KDAUF.
* WA_TEMP_LEGACY-MATNR = WA_LEGACY-MATNR.
* WA_TEMP_LEGACY-BWART = WA_LEGACY-BWART.
*
* APPEND  WA_TEMP_LEGACY TO IT_TEMP_LEGACY.
* ENDAT.
*ENDLOOP.
*REFRESH IT_LEGACY.
*IT_LEGACY[] = IT_TEMP_LEGACY[].
READ TABLE IT_PREV_SAP INTO WA_TEMP_SAP1 INDEX SY-TABIX.
REFRESH IT_TEMP_SAP1.
ENDFORM.                    " CALCULATE_REQ_LEGACY
*&---------------------------------------------------------------------*
*&      Form  ISSUE_QTY_LEGACY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ISSUE_QTY_LEGACY .
SELECT MATNR
       KDAUF
       REQ_QTY
        BWART
        QTY
        COST  INTO TABLE IT_ISSUE_LEGACY  FROM ZMSEG FOR ALL ENTRIES IN IT_LEGACY  WHERE KDAUF = IT_LEGACY-KDAUF.
DELETE IT_ISSUE_LEGACY WHERE BWART NE '261' AND BWART NE '201'.
SORT IT_ISSUE_LEGACY BY MATNR ASCENDING.
LOOP AT IT_ISSUE_LEGACY INTO WA_ISSUE_LEGACY.
  AT END OF MATNR.
  SUM.
  WA_TISSUE_LEGACY-MATNR  = WA_ISSUE_LEGACY-MATNR.
  WA_TISSUE_LEGACY-REQ_QTY = WA_ISSUE_LEGACY-REQ_QTY.
  WA_TISSUE_LEGACY-BWART  = WA_ISSUE_LEGACY-BWART.
  WA_TISSUE_LEGACY-QTY  = WA_ISSUE_LEGACY-QTY.
  WA_TISSUE_LEGACY-COST  = WA_ISSUE_LEGACY-COST.
  APPEND WA_TISSUE_LEGACY TO IT_TISSUE_LEGACY.
  ENDAT.
ENDLOOP.
REFRESH IT_ISSUE_LEGACY.
 IT_ISSUE_LEGACY[] = IT_TISSUE_LEGACY[].
READ TABLE IT_ISSUE_SAP INTO WA_ISSUE_SAP INDEX 1.
REFRESH IT_TISSUE_LEGACY.
ENDFORM.                    " ISSUE_QTY_LEGACY
*&---------------------------------------------------------------------*
*&      Form  RETURN_QTY_LEGACY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM RETURN_QTY_LEGACY .
SELECT  MATNR
        KDAUF
        REQ_QTY
        BWART
        QTY
        COST  INTO TABLE IT_RETURN_LEGACY  FROM  ZMSEG FOR ALL ENTRIES IN IT_LEGACY  WHERE KDAUF = IT_LEGACY-KDAUF .
DELETE IT_RETURN_LEGACY  WHERE BWART NE '262' AND BWART NE '202'.
SORT IT_RETURN_LEGACY  BY MATNR ASCENDING.
LOOP AT IT_RETURN_LEGACY  INTO WA_RETURN_LEGACY .
  AT END OF MATNR.
  SUM.
  WA_TISSUE_LEGACY-REQ_QTY = WA_RETURN_LEGACY-REQ_QTY.
  WA_TISSUE_LEGACY-MATNR  = WA_RETURN_LEGACY-MATNR.
  WA_TISSUE_LEGACY-BWART  = WA_RETURN_LEGACY-BWART.
  WA_TISSUE_LEGACY-QTY  =   WA_RETURN_LEGACY-QTY.
  WA_TISSUE_LEGACY-COST  =  WA_RETURN_LEGACY-COST.
  APPEND WA_TISSUE_LEGACY TO IT_TISSUE_LEGACY.
  ENDAT.
ENDLOOP.
REFRESH IT_RETURN_LEGACY.
 IT_RETURN_LEGACY[] = IT_TISSUE_LEGACY[].
READ TABLE IT_RETURN_LEGACY INTO WA_RETURN_LEGACY INDEX 1.
REFRESH IT_TISSUE_LEGACY.
ENDFORM.                    " RETURN_QTY_LEGACY
*&---------------------------------------------------------------------*
*&      Form  FINAL_LEGACY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FINAL_LEGACY .
LOOP AT IT_LEGACY INTO WA_LEGACY.
 LV_TABIX = SY-TABIX.
WA_FINAL_BL-ORDER1     = WA_LEGACY-KDAUF.
*WA_FINAL_BL-REQ_QTY1   = WA_LEGACY-REQ_QTY.
READ TABLE IT_ISSUE_LEGACY INTO WA_ISSUE_LEGACY WITH KEY KDAUF = WA_LEGACY-KDAUF.
    IF SY-SUBRC = 0.
      WA_FINAL_BL-REQ_QTY1    = WA_ISSUE_LEGACY-REQ_QTY.
      WA_FINAL_BL-ISSUE_QTY1  = WA_ISSUE_LEGACY-QTY.
      WA_FINAL_BL-ISSUE_COST1 = WA_ISSUE_LEGACY-COST.
      WA_FINAL_BL-MATNR       = WA_ISSUE_LEGACY-MATNR.
     ELSE .
       WA_FINAL_BL-MATNR       = WA_ISSUE_LEGACY-MATNR.
       WA_FINAL_BL-REQ_QTY1 = WA_ISSUE_LEGACY-REQ_QTY.
       WA_FINAL_BL-ISSUE_QTY1  = 0.
       WA_FINAL_BL-ISSUE_COST1 = 0.
    ENDIF .
READ TABLE IT_RETURN_LEGACY INTO WA_RETURN_LEGACY  WITH KEY KDAUF = WA_LEGACY-KDAUF.
    IF SY-SUBRC <> 0.
      WA_FINAL_BL-MATNR       = WA_RETURN_LEGACY-MATNR.
      WA_FINAL_BL-REQ_QTY1    = WA_RETURN_LEGACY-REQ_QTY.
      WA_FINAL_BL-RETURN_QTY1  = WA_RETURN_LEGACY-QTY.
      WA_FINAL_BL-RETURN_COST1 = WA_RETURN_LEGACY-COST.
     ELSE.
       WA_FINAL_BL-MATNR       = WA_RETURN_LEGACY-MATNR.
       WA_FINAL_BL-RETURN_QTY1 = 0.
       WA_FINAL_BL-RETURN_COST1 = 0.
       WA_FINAL_BL-REQ_QTY1   = WA_RETURN_LEGACY-REQ_QTY.
    ENDIF.
 APPEND WA_FINAL_BL TO IT_FINAL_BL.
ENDLOOP.
READ TABLE IT_FINAL_BL INTO WA_FINAL_BL INDEX 1.
REFRESH : IT_ISSUE_SAP,IT_RETURN_SAP.
ENDFORM.                    " FINAL_LEGACY
*&---------------------------------------------------------------------*
*&      Form  LEGACY_SAP_COMBINE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM LEGACY_SAP_COMBINE .
  DATA : IT_TEMP_FINAL LIKE IT_FINAL_B,
         WA_TEMP_FINAL LIKE WA_FINAL_B.
IF IT_FINAL_BL IS NOT INITIAL AND IT_FINAL_B IS NOT INITIAL.
  APPEND LINES OF IT_FINAL_BL TO IT_FINAL_B.
  SORT IT_FINAL_B BY MATNR ASCENDING.
  LOOP AT IT_FINAL_B INTO WA_FINAL_B.
   AT END OF MATNR .
    SUM.
    WA_TEMP_FINAL-ORDER1        = WA_FINAL_B-ORDER1.
    WA_TEMP_FINAL-MATNR         = WA_FINAL_B-MATNR.
    WA_TEMP_FINAL-REQ_QTY1      = WA_FINAL_B-REQ_QTY1.
    WA_TEMP_FINAL-ISSUE_QTY1    = WA_FINAL_B-ISSUE_QTY1.
    WA_TEMP_FINAL-ISSUE_COST1   = WA_FINAL_B-ISSUE_COST1.
    WA_TEMP_FINAL-RETURN_QTY1   = WA_FINAL_B-RETURN_QTY1.
    WA_TEMP_FINAL-RETURN_COST1  = WA_FINAL_B-RETURN_COST1.
   APPEND WA_TEMP_FINAL TO IT_TEMP_FINAL.
   ENDAT.
  ENDLOOP.
  REFRESH IT_FINAL_B.
  IT_FINAL_B[] = IT_TEMP_FINAL[].
 ELSEIF IT_FINAL_BL IS NOT INITIAL AND IT_FINAL_B IS INITIAL.
   IT_FINAL_B[] = IT_FINAL_BL[].
 ENDIF.
ENDFORM.                    " LEGACY_SAP_COMBINE
*&---------------------------------------------------------------------*
*&      Form  CONVERSION_SALES_NUMBER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CONVERSION_SALES_NUMBER .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  EXPORTING
    INPUT         = P_VBELN
 IMPORTING
   OUTPUT        = P_VBELN



Declare only Static Columns
Static Columns 

Dynamic Columns on behalf of static columns
Dynamic Columns
ENDFORM.                    " CONVERSION_SALES_NUMBER
*&---------------------------------------------------------------------*
*&      Form  FILL_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*

** Create a dynamic internal table with this structure.
*
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
I_STYLE_TABLE             = 'X'
IT_FIELDCATALOG           = IT_FIELDCAT
IMPORTING
EP_TABLE                  = GT_DYN_TABLE
EXCEPTIONS
GENERATE_SUBPOOL_DIR_FULL = 1
OTHERS                    = 2.
*
IF SY-SUBRC EQ 0.
* Assign the new table to field symbol
ASSIGN GT_DYN_TABLE->* TO <GFS_DYN_TABLE>.
* Create dynamic work area for the dynamic table
CREATE DATA GW_LINE LIKE LINE OF <GFS_DYN_TABLE>.
CREATE DATA GW_LINE1 LIKE LINE OF <GFS_DYN_TABLE>.
ASSIGN GW_LINE->* TO <GFS_LINE>.
ASSIGN GW_LINE1->* TO <GFS_LINE1>.
ENDIF.

*********************
SORT IT_FINAL_A ASCENDING BY ORDER2.
LOOP AT IT_FINAL_A INTO WA_FINAL_A.
IF <GFS_DYN_TABLE> IS NOT INITIAL .
READ TABLE  <GFS_DYN_TABLE>  ASSIGNING <GFS_LINE1> WITH  KEY ('MATNR') = WA_FINAL_A-MATNR  .
IF SY-SUBRC EQ 0 .
CONCATENATE WA_FINAL_A-ORDER2 'REQ_QTY2' INTO FNAME .
ASSIGN COMPONENT FNAME OF STRUCTURE <GFS_LINE1> TO <FS1>.
<FS1> = WA_FINAL_A-REQ_QTY2.
UNASSIGN <FS1>.
CONCATENATE WA_FINAL_A-ORDER2 'NET_QTY2' INTO FNAME .
ASSIGN COMPONENT FNAME OF STRUCTURE <GFS_LINE1> TO <FS1>.
<FS1> = WA_FINAL_A-NET_QTY2.
UNASSIGN <FS1>.
CONCATENATE WA_FINAL_A-ORDER2 'NET_COST2' INTO FNAME .
ASSIGN COMPONENT FNAME OF STRUCTURE <GFS_LINE1> TO <FS1>.
<FS1> = WA_FINAL_A-NET_COST2.
UNASSIGN <FS1>.
CONCATENATE WA_FINAL_A-ORDER2 'PER_COACH2' INTO FNAME .
ASSIGN COMPONENT FNAME OF STRUCTURE <GFS_LINE1> TO <FS1>.
<FS1> = WA_FINAL_A-PER_COACH2.
UNASSIGN <FS1>.
*APPEND <gfs_line> TO <gfs_dyn_table>.
MODIFY  TABLE  <GFS_DYN_TABLE>  FROM <GFS_LINE1>.
CLEAR : <GFS_LINE1>.
ELSE.
  ASSIGN COMPONENT 'MATNR' OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-MATNR .
UNASSIGN <FS1>.
ASSIGN COMPONENT 'MAKTX' OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-MAKTX.
UNASSIGN <FS1>.
ASSIGN COMPONENT 'REQ_QTY1' OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-REQ_QTY1.
UNASSIGN <FS1>.
ASSIGN COMPONENT 'NET_QTY1' OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-NET_QTY1.
UNASSIGN <FS1>.
ASSIGN COMPONENT 'NET_COST1' OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-NET_COST1.
UNASSIGN <FS1>.
ASSIGN COMPONENT 'PER_COACH1' OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-PER_COACH1.
UNASSIGN <FS1>.

CONCATENATE WA_FINAL_A-ORDER2 'REQ_QTY2' INTO FNAME .
ASSIGN COMPONENT FNAME OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-REQ_QTY2.
UNASSIGN <FS1>.
CONCATENATE WA_FINAL_A-ORDER2 'NET_QTY2' INTO FNAME .
ASSIGN COMPONENT FNAME OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-NET_QTY2.
UNASSIGN <FS1>.
CONCATENATE WA_FINAL_A-ORDER2 'NET_COST2' INTO FNAME .
ASSIGN COMPONENT FNAME OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-NET_COST2.
UNASSIGN <FS1>.
CONCATENATE WA_FINAL_A-ORDER2 'PER_COACH2' INTO FNAME .
ASSIGN COMPONENT FNAME OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-PER_COACH2.
UNASSIGN <FS1>.
APPEND <GFS_LINE> TO <GFS_DYN_TABLE>.
ENDIF.
ELSE.
  ASSIGN COMPONENT 'MATNR' OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-MATNR .
UNASSIGN <FS1>.
ASSIGN COMPONENT 'MAKTX' OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-MAKTX.
UNASSIGN <FS1>.
ASSIGN COMPONENT 'REQ_QTY1' OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-REQ_QTY1.
UNASSIGN <FS1>.
ASSIGN COMPONENT 'NET_QTY1' OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-NET_QTY1.
UNASSIGN <FS1>.
ASSIGN COMPONENT 'NET_COST1' OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-NET_COST1.
UNASSIGN <FS1>.
ASSIGN COMPONENT 'PER_COACH1' OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-PER_COACH1.
UNASSIGN <FS1>.

CONCATENATE WA_FINAL_A-ORDER2 'REQ_QTY2' INTO FNAME .
ASSIGN COMPONENT FNAME OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-REQ_QTY2.
UNASSIGN <FS1>.
CONCATENATE WA_FINAL_A-ORDER2 'NET_QTY2' INTO FNAME .
ASSIGN COMPONENT FNAME OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-NET_QTY2.
UNASSIGN <FS1>.
CONCATENATE WA_FINAL_A-ORDER2 'NET_COST2' INTO FNAME .
ASSIGN COMPONENT FNAME OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-NET_COST2.
UNASSIGN <FS1>.
CONCATENATE WA_FINAL_A-ORDER2 'PER_COACH2' INTO FNAME .
ASSIGN COMPONENT FNAME OF STRUCTURE <GFS_LINE> TO <FS1>.
<FS1> = WA_FINAL_A-PER_COACH2.
UNASSIGN <FS1>.
APPEND <GFS_LINE> TO <GFS_DYN_TABLE>.
ENDIF.


*APPEND <gfs_line> TO <gfs_dyn_table>.
UNASSIGN <FS1>.
CLEAR WA_FINAL_A.
ENDLOOP.
*CLEAR: <gfs_line>.
ENDFORM.                    " FILL_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  GRID_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GRID_DISPLAY .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
 EXPORTING
*   I_INTERFACE_CHECK                 = ' '
*   I_BYPASSING_BUFFER                = ' '
*   I_BUFFER_ACTIVE                   = ' '
    I_CALLBACK_PROGRAM                = SY-CPROG
*   I_CALLBACK_PF_STATUS_SET          = ' '
*   I_CALLBACK_USER_COMMAND           = ' '
   I_CALLBACK_TOP_OF_PAGE            = 'TOP_OF_PAGE'
*   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*   I_CALLBACK_HTML_END_OF_LIST       = ' '
*   I_STRUCTURE_NAME                  =
*   I_BACKGROUND_ID                   = ' '
*   I_GRID_TITLE                      =
*   I_GRID_SETTINGS                   =
   IS_LAYOUT                          = LT_LAYOUT
    IT_FIELDCAT                       = IT_FIELDCAT1
*   IT_EXCLUDING                      =
*   IT_SPECIAL_GROUPS                 =
*   IT_SORT                           =
*   IT_FILTER                         =
*   IS_SEL_HIDE                       =
   I_DEFAULT                          = 'X'
   I_SAVE                             = 'A'
*   IS_VARIANT                        =
*   IT_EVENTS                         =
*   IT_EVENT_EXIT                     =
*   IS_PRINT                          =
*   IS_REPREP_ID                      =
*   I_SCREEN_START_COLUMN             = 0
*   I_SCREEN_START_LINE               = 0
*   I_SCREEN_END_COLUMN               = 0
*   I_SCREEN_END_LINE                 = 0
*   I_HTML_HEIGHT_TOP                 = 0
*   I_HTML_HEIGHT_END                 = 0
*   IT_ALV_GRAPHICS                   =
*   IT_HYPERLINK                      =
*   IT_ADD_FIELDCAT                   =
*   IT_EXCEPT_QINFO                   =
*   IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER           =
*   ES_EXIT_CAUSED_BY_USER            =
  TABLES
    T_OUTTAB                          = <GFS_DYN_TABLE>
* 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.                    " GRID_DISPLAY
*&---------------------------------------------------------------------*
*&      Form  LIST_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM LIST_HEADER .
*Type H is used to display headers i.e. big font
  WA_LISTHEADER-TYP  = 'H'.
  WA_LISTHEADER-INFO ='BATCH ORDER COMPARISION '.
  APPEND WA_LISTHEADER TO IT_LISTHEADER.
  CLEAR WA_LISTHEADER.
*  Type S is used to display key and value pairs
  WA_LISTHEADER-TYP = 'S'.
  WA_LISTHEADER-KEY = 'Date :' .
  CONCATENATE  SY-DATUM+6(2)
               SY-DATUM+4(2)
               SY-DATUM(4)
               INTO WA_LISTHEADER-INFO
               SEPARATED BY '/'.
  APPEND WA_LISTHEADER TO IT_LISTHEADER.
  CLEAR WA_LISTHEADER.
*  Type A is used to display italic font
  WA_LISTHEADER-TYP = 'A'.
  WA_LISTHEADER-INFO ='SAP ALV Report'.
  APPEND WA_LISTHEADER TO IT_LISTHEADER.
  CLEAR WA_LISTHEADER.
ENDFORM.                    " LIST_HEADER
*&---------------------------------------------------------------------*
*&      Form  TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM TOP_OF_PAGE .
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
       EXPORTING
            IT_LIST_COMMENTARY = IT_LISTHEADER
            I_LOGO             = 'ICF_LOGO'.
ENDFORM.                    " TOP_OF_PAGE
*&---------------------------------------------------------------------*
*&      Form  FILL_FIELDCAT_1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FILL_FIELDCAT_1 .
  WA_FIELDCAT1-FIELDNAME =  'MATNR'.
  WA_FIELDCAT1-TABNAME   =  'IT_FINAL_A'.
  WA_FIELDCAT1-OUTPUTLEN =   20.
  WA_FIELDCAT1-SELTEXT_L    =   'MATERIAL'.
  WA_FIELDCAT1-COL_POS   =   1.
  APPEND WA_FIELDCAT1 TO IT_FIELDCAT1.
  CLEAR WA_FIELDCAT1.

  WA_FIELDCAT1-FIELDNAME =  'MAKTX'.
  WA_FIELDCAT1-TABNAME   =  'IT_FINAL_A'.
  WA_FIELDCAT1-OUTPUTLEN =   20.
  WA_FIELDCAT1-SELTEXT_L    =  'MATL_DESC.'.
  WA_FIELDCAT1-COL_POS   =   2.
  APPEND WA_FIELDCAT1 TO IT_FIELDCAT1.
  CLEAR WA_FIELDCAT1.

  WA_FIELDCAT1-FIELDNAME =  'REQ_QTY1'.
  WA_FIELDCAT1-TABNAME   =  'IT_FINAL_A'.
  WA_FIELDCAT1-OUTPUTLEN =   12.
  WA_FIELDCAT1-SELTEXT_L  =   'PREV. REQ QTY'.
  WA_FIELDCAT1-COL_POS   =   3.
  WA_FIELDCAT1-DO_SUM    = 'X'.
  APPEND WA_FIELDCAT1 TO IT_FIELDCAT1.
  CLEAR WA_FIELDCAT1.

  WA_FIELDCAT1-FIELDNAME =  'NET_QTY1'.
  WA_FIELDCAT1-TABNAME   =  'IT_FINAL_A'.
  WA_FIELDCAT1-OUTPUTLEN =   12.
  WA_FIELDCAT1-SELTEXT_L  =   'PREV. NET QTY'.
  WA_FIELDCAT1-COL_POS   =   4.
  WA_FIELDCAT1-DO_SUM    = 'X'.
  APPEND WA_FIELDCAT1 TO IT_FIELDCAT1.
  CLEAR WA_FIELDCAT1.

  WA_FIELDCAT1-FIELDNAME =  'NET_COST1'.
  WA_FIELDCAT1-TABNAME   =  'IT_FINAL_A'.
  WA_FIELDCAT1-OUTPUTLEN =   12.
  WA_FIELDCAT1-SELTEXT_L  =   'PREV. NET COST'.
  WA_FIELDCAT1-COL_POS   =   5.
  WA_FIELDCAT1-DO_SUM    = 'X'.
  APPEND WA_FIELDCAT1 TO IT_FIELDCAT1.
  CLEAR WA_FIELDCAT1.

  WA_FIELDCAT1-FIELDNAME =  'PER_COACH1'.
  WA_FIELDCAT1-TABNAME   =  'IT_FINAL_A'.
  WA_FIELDCAT1-OUTPUTLEN =   12.
  WA_FIELDCAT1-SELTEXT_L  =   'PREV. PER COACH '.
  WA_FIELDCAT1-COL_POS   =   6.
  WA_FIELDCAT1-DO_SUM    = 'X'.
  APPEND WA_FIELDCAT1 TO IT_FIELDCAT1.
  CLEAR WA_FIELDCAT1.
  GV_POS = 6.
LOOP AT IT_FINAL_A INTO WA_FINAL_A.
AT NEW ORDER2.
  CONCATENATE WA_FINAL_A-ORDER2 'REQ_QTY2' INTO FNAME .
*  read table IT_FIELDCAT1 into WA_FIELDCAT1 with key fieldname = WA_FINAL_A-ORDER2.
*  IF SY-SUBRC NE 0.
  GV_POS = GV_POS + 1.
  WA_FIELDCAT1-FIELDNAME =  FNAME.
  WA_FIELDCAT1-TABNAME   =  'IT_FINAL_A'.
  WA_FIELDCAT1-OUTPUTLEN =   12.
  WA_FIELDCAT1-SELTEXT_L  =   FNAME.
  WA_FIELDCAT1-DO_SUM    = 'X'.
  WA_FIELDCAT1-COL_POS   =   GV_POS.
  APPEND WA_FIELDCAT1 TO IT_FIELDCAT1.
  CLEAR : WA_FIELDCAT1, FNAME .
CONCATENATE WA_FINAL_A-ORDER2 'NET_QTY2' INTO FNAME .
   GV_POS = GV_POS + 1.
  WA_FIELDCAT1-FIELDNAME =  FNAME.
  WA_FIELDCAT1-TABNAME   =  'IT_FINAL_A'.
  WA_FIELDCAT1-OUTPUTLEN =   12.
  WA_FIELDCAT1-SELTEXT_L  =   FNAME.
  WA_FIELDCAT1-COL_POS   =   GV_POS.
  APPEND WA_FIELDCAT1 TO IT_FIELDCAT1.
  CLEAR :WA_FIELDCAT1,FNAME.
CONCATENATE WA_FINAL_A-ORDER2 'NET_COST2' INTO FNAME .
   GV_POS = GV_POS + 1.
  WA_FIELDCAT1-FIELDNAME =  FNAME.
  WA_FIELDCAT1-TABNAME   =  'IT_FINAL_A'.
  WA_FIELDCAT1-OUTPUTLEN =   12.
  WA_FIELDCAT1-SELTEXT_L  =   FNAME.
  WA_FIELDCAT1-COL_POS   =   GV_POS.
  APPEND WA_FIELDCAT1 TO IT_FIELDCAT1.
  CLEAR : WA_FIELDCAT1, FNAME.
CONCATENATE WA_FINAL_A-ORDER2 'PER_COACH2' INTO FNAME .
  GV_POS = GV_POS + 1.
  WA_FIELDCAT1-FIELDNAME =  FNAME.
  WA_FIELDCAT1-TABNAME   =  'IT_FINAL_A'.
  WA_FIELDCAT1-OUTPUTLEN =   12.
  WA_FIELDCAT1-SELTEXT_L  =   FNAME.
  WA_FIELDCAT1-COL_POS   =   GV_POS.
  APPEND WA_FIELDCAT1 TO IT_FIELDCAT1.
  CLEAR :WA_FIELDCAT1 ,FNAME.
*  ENDIF.
  ENDAT.
  ENDLOOP.
*  LT_LAYOUT-ZEBRA = 'X'.
  LT_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
*
ENDFORM.                    " FILL_FIELDCAT_1

05/02/2016

Display ALV Using Factory Pattern in SAP

Factory Pattern 


When you work with ABAP Objects you always need to create instances of classes. Even if you use "CREATE OBJECT" to create those instances, you probably faced with the problem, that it is not so comfortable as if you have a function for creating objects in the same way. Or, you have a complex logic to create each instance.
For those cases, there is a design-pattern for creating instances. This pattern is called "Factory"-pattern. There is also a pattern called "factory-method", which is different, because it combines the creation and relationship of objects

The factory-pattern is one of the most used design pattern. It creates object instances without exposing the concrete instantiation logic. The instantiated objects will be accessible through an interface, which encapsulate the concrete implementation to the users.

*&---------------------------------------------------------------------*
*& This code snippet will show how to use the CL_SALV_TABLE to
*&   generate the ALV
*&---------------------------------------------------------------------*
REPORT  ztest_oo_alv_main.
*
*----------------------------------------------------------------------*
*       CLASS lcl_report DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_report DEFINITION.
*
  PUBLIC SECTION.
*
*   Final output table
    TYPES: BEGIN OF ty_vbak,
           vbeln TYPE vbak-vbeln,
           erdat TYPE erdat,
           auart TYPE auart,
           kunnr TYPE kunnr,
           END   OF ty_vbak.
*
    DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak.
*
*   ALV reference
    DATA: o_alv TYPE REF TO cl_salv_table.
*
    METHODS:
*     data selection
      get_data,
*
*     Generating output
      generate_output.
*
*$*$*.....CODE_ADD_1 - Begin..................................1..*$*$*
*
*    In this section we will define the private methods which can
*      be implemented to set the properties of the ALV and can be
*      called in the
*
*$*$*.....CODE_ADD_1 - End....................................1..*$*$*
*
ENDCLASS.                    "lcl_report DEFINITION
*
*
START-OF-SELECTION.
  DATA: lo_report TYPE REF TO lcl_report.
*
  CREATE OBJECT lo_report.
*
  lo_report->get_data( ).
*
  lo_report->generate_output( ).
*
*----------------------------------------------------------------------*
*       CLASS lcl_report IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_report IMPLEMENTATION.
*
  METHOD get_data.
*   data selection
    SELECT vbeln erdat auart kunnr
           INTO  TABLE t_vbak
           FROM  vbak
           UP TO 20 ROWS.
*
  ENDMETHOD.                    "get_data
*
*.......................................................................
  METHOD generate_output.
* New ALV instance
*   We are calling the static Factory method which will give back
*   the ALV object reference.
*
* exception class
    DATA: lx_msg TYPE REF TO cx_salv_msg.
    TRY.
        cl_salv_table=>factory(
          IMPORTING
            r_salv_table = o_alv
          CHANGING
            t_table      = t_vbak ).
      CATCH cx_salv_msg INTO lx_msg.
    ENDTRY.
*
*$*$*.....CODE_ADD_2 - Begin..................................2..*$*$*
*
*    In this area we will call the methods which will set the
*      different properties to the ALV
*
*$*$*.....CODE_ADD_2 - End....................................2..*$*$*
*
*
* Displaying the ALV
*   Here we will call the DISPLAY method to get the output on the screen
    o_alv->display( ).
*
  ENDMETHOD.                    "generate_output
*
*$*$*.....CODE_ADD_3 - Begin..................................3..*$*$*
*
*    In this area we will implement the methods which are defined in
*      the class definition
*
*$*$*.....CODE_ADD_3 - End....................................3..*$*$*
*
*
ENDCLASS.                    "lcl_report IMPLEMENTATION

28/03/2015

ALV Tree Using Child and Parent Relationship using OOPs Concept

*-----------------------------------------------------------------------
*                         P R O G R A M
*                     D E S C R I P T I O N
*
*  To view area types the Building structure and  Measurement types are
*   defined for business entity, building, property, rental object
*-----------------------------------------------------------------------
*  Transaction:
*-----------------------------------------------------------------------
*  Author:
*  Date  :  2015-02-25
*-----------------------------------------------------------------------
* Table Types
*-----------------------------------------------------------------------
types: begin of ty_data_st,
    meassum type char4,
       measured type char4,
       end of   ty_data_st,
       gt_data_tt  type standard table of  ty_data_st,


       begin of ty_text_st,
       meas    type rebdmeas,
       text    type rebdxmmeas,
       end of   Ty_text_st,
       GT_text_tt type standard  table of  Ty_text_st.



*-----------------------------------------------------------------------
* Global variables
*-----------------------------------------------------------------------
data:  gt_hier  type gt_data_tt, " Tree hierarchy
       gt_text  type gt_text_tt,  " Text table
       gt_mesr type gt_data_tt,
       gt_tree type gt_data_tt,
       go_alv_tree         type ref to cl_gui_alv_tree,
       go_custom_container type ref to cl_gui_custom_container,
       gv_flag  type i value 1.

*-----------------------------------------------------------------------
* Selection screen.
*-----------------------------------------------------------------------
"Source Measurement Type for Transformation
parameters p_msrc type char4 obligatory.

*-----------------------------------------------------------------------
* INITIALIZATION
*-----------------------------------------------------------------------
initialization.
  perform get_data changing gt_mesr
                            gt_text .

*-----------------------------------------------------------------------
* AT SELECTION SCREEN
*-----------------------------------------------------------------------
  " Perform execute when User not taking any F4 help
  " get the master data and text table data

at selection-screen on value-request for p_msrc.
  perform get_data changing   gt_mesr
                              gt_text.
  " F4 help function module
  perform f4_help .

end-of-selection.

  if gt_text is not initial and gt_mesr is not initial.
    call screen 100.
  else.
    if gv_flag eq 0.
     clear p_msrc.

    leave list-processing.
      return.
      endif.
  endif.

*&---------------------------------------------------------------------*
*&      Module  PBO  OUTPUT
*&---------------------------------------------------------------------*
*       process before output
*----------------------------------------------------------------------*
module pbo output.
  data gv_title type string .
  "set pf status
  set pf-status 'MAIN100'.
  " Set Dynamic Title of the screen
  read table gt_text into data(gs_text) with key meas = p_msrc .
  if sy-subrc eq 0.
    concatenate p_msrc '-' gs_text-text ')' into gv_title separated by space.
  endif.

  set titlebar 'YRER1300' with gv_title.

  if go_alv_tree is initial.
    perform init_tree .

    call method cl_gui_cfw=>flush
      exceptions
        cntl_system_error = 1
        cntl_error        = 2.
    if sy-subrc ne 0.
      call function 'POPUP_TO_INFORM'
        exporting
          titel = 'Automation Queue failure'(004)
          txt1  = 'Internal error:'(003)
          txt2  = 'A method in the automation queue'(005)
          txt3  = 'caused a failure.'(006).
    endif.
  endif.

endmodule.                             " PBO  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  PAI  INPUT
*&---------------------------------------------------------------------*
*       process after input
*----------------------------------------------------------------------*
module pai input.

  case sy-ucomm.
    when 'EXIT' or 'BACK' or 'CANC'.
      perform exit_program.
    when others.
      " Call dispatch to process toolbar functions
      call method cl_gui_cfw=>dispatch.
  endcase.

  call method cl_gui_cfw=>flush.
endmodule.                             " PAI  INPUT

*&---------------------------------------------------------------------*
*&      Form  init_tree
*&---------------------------------------------------------------------*

form init_tree.


  data :   ls_hierarchy_header type treev_hhdr,
           lt_fieldcatalog type lvc_t_fcat,
           ls_fieldcatlog type lvc_s_fcat. "Fieldcatalog
  "create container for alv-tree
  data: lv_tree_container_name(30) type c.

  lv_tree_container_name = 'CCONTAINER1'.

  create object go_custom_container
    exporting
      container_name              = lv_tree_container_name
    exceptions
      cntl_error                  = 1
      cntl_system_error           = 2
      create_error                = 3
      lifetime_error              = 4
      lifetime_dynpro_dynpro_link = 5.
  if sy-subrc <> 0.
    message x208(00) with 'ERROR'(007).
  endif.

  "create tree control
  create object go_alv_tree
    exporting
      parent                      = go_custom_container
      node_selection_mode         = cl_gui_column_tree=>node_sel_mode_single
      item_selection              = 'X'
      no_html_header              = 'X'
      no_toolbar                  = ''
    exceptions
      cntl_error                  = 1
      cntl_system_error           = 2
      create_error                = 3
      lifetime_error              = 4
      illegal_node_selection_mode = 5
      failed                      = 6
      illegal_column_name         = 7.
  if sy-subrc <> 0.
    message x208(00) with 'ERROR'(007).                     "#EC NOTEXT
  endif.


  "perpare for fieldcatlog table
  ls_fieldcatlog-tabname   = 'GT_MESR'.
  ls_fieldcatlog-fieldname = 'MEASSUM'.
  ls_fieldcatlog-coltext   = 'Measurement Source'(002).
  ls_fieldcatlog-col_opt   = 'X'.
  ls_fieldcatlog-emphasize = 'X'.
  ls_fieldcatlog-seltext   = 'Measurement Source'(002).
  append ls_fieldcatlog to lt_fieldcatalog.

  "Header information

  perform build_hierarchy_header changing ls_hierarchy_header.

  call method go_alv_tree->set_table_for_first_display
    exporting
      is_hierarchy_header = ls_hierarchy_header
    changing
      it_outtab           = gt_tree
      it_fieldcatalog     = lt_fieldcatalog.

  call method go_alv_tree->column_optimize.


  " Create hierarchy (nodes and leaves)
  perform create_hierarchy .

  "Send data to frontend.
  call method go_alv_tree->frontend_update.


endform.                               " init_tree
*&---------------------------------------------------------------------*
*&      Form  build_hierarchy_header
*&---------------------------------------------------------------------*

form build_hierarchy_header changing  cs_hierarchy_header type treev_hhdr.

  cs_hierarchy_header-heading = '         Measurement Types Description'(001).
  cs_hierarchy_header-tooltip = 'Measurement Types'(009).
  cs_hierarchy_header-width = 1000.
  cs_hierarchy_header-width_pix = ' '.

endform.                               " build_hierarchy_header
*&---------------------------------------------------------------------*
*&      Form  exit_program
*&---------------------------------------------------------------------*
*       free object and leave program
*----------------------------------------------------------------------*
form exit_program.

  call method go_custom_container->free.
  leave to screen 0.

endform.                               " exit_program
*&---------------------------------------------------------------------*
*&      Form  create_hierarchy
*&---------------------------------------------------------------------*

form create_hierarchy .


  data: lv_parent type lvc_nkey,
        lt_hier  type gt_data_tt .
  "perpaare the tree with hierarchy
  perform  perpare_chain using p_msrc    changing gt_hier.

  if gt_hier is not initial .
    lt_hier = gt_hier.
    sort lt_hier ascending by meassum  ascending meassrc .
    delete lt_hier where meassum ne p_msrc .
    loop at lt_hier  into data(ls_hier).
      at new meassrc.
        "add siblling or branch
        perform add_siblling  using   ls_hier
                                        ''
                             changing lv_parent.
      endat.
      " add child or leaf
      perform add_child  using ls_hier lv_parent.

    endloop.
  else.
    gv_flag = 0.
    leave to screen 0.
  endif.
endform.                               " create_hierarchy

*&---------------------------------------------------------------------*
*&      Form  Add_siblling
*&---------------------------------------------------------------------*
form add_siblling   using     ps_hier      type ty_data_st
                              pv_relat_key type lvc_nkey
                changing      cv_node_key  type lvc_nkey.


  data: lv_node_text type lvc_value.

  " read the text of the branch
  read table gt_text into data(ls_text) with key meas = ps_hier-meassrc.
  if sy-subrc eq 0.

    lv_node_text =  ls_text-text..
  endif.

  call method go_alv_tree->add_node
    exporting
      i_relat_node_key = pv_relat_key
      i_relationship   = cl_gui_column_tree=>relat_last_child
      i_node_text      = lv_node_text
      is_outtab_line   = ps_hier-meassrc
    importing
      e_new_node_key   = cv_node_key.

endform.                               " Add_siblling
*--------------------------------------------------------------------
form add_sub_sibbling  using     ps_hier       type ty_data_st
                                 pv_relat_key  type lvc_nkey
                     changing    cv_node_key   type lvc_nkey.

  data: lv_node_text type lvc_value.

  read table gt_text into data(ls_text) with key meas = ps_hier-meassrc.
  if sy-subrc eq 0.
    lv_node_text = ls_text-text.
  endif.


  call method go_alv_tree->add_node
    exporting
      i_relat_node_key = pv_relat_key
      i_relationship   = cl_gui_column_tree=>relat_last_child
      i_node_text      = lv_node_text
      is_outtab_line   = ps_hier-meassrc
    importing
      e_new_node_key   = cv_node_key.

endform.                               " Add_sub_sibbling



*&---------------------------------------------------------------------*
*&      Form  PERPARE_CHAIN
*&---------------------------------------------------------------------*

form perpare_chain  using    pv_parent type  char4
                    changing ct_hier  type  gt_data_tt.



  loop at gt_mesr into data(ls_data) where   meassum = pv_parent.

    append ls_data to ct_hier.

    perform perpare_chain using ls_data-meassrc  changing ct_hier.
  endloop.

endform.                    " PERPARE_CHAIN
*&---------------------------------------------------------------------*
*&      Form  Add_Child
*&---------------------------------------------------------------------*

form add_child   using    ps_hier    type ty_data_st
                          pv_parent  type lvc_nkey .

  data lv_child type lvc_nkey.

  " loop the table reach to leaf node .
  loop at gt_hier into data(ls_hier) Where meassum = ps_hier-meassrc .
    perform add_sub_sibbling  using    ls_hier
                                       pv_parent
                            changing   lv_child.
    perform add_child  using ls_hier lv_child.
  endloop.

endform.                    " Add_Child
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*

form get_data  changing ct_mesr type gt_data_tt
                        ct_text type gt_text_tt.

  if gt_mesr is initial.
    " Get data
    select meassum
           meassrc
    from   tivbdmeassum
    into  table ct_mesr.
  endif.

  if ct_mesr is not initial.
    " Get text
    select meas
           xmmeas
    from   tivbdmeast
    into table ct_text
    for all entries in ct_mesr
    where ( meas = ct_mesr-meassrc
    or      meas = ct_mesr-meassum ) .
     if sy-subrc ne 0.

      endif.
  endif.

endform.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  F4_HELP
*&---------------------------------------------------------------------*

form f4_help .
  if gt_text is not initial.
    " Sort  table befor display in F4 help .
    sort gt_text ascending by meas.
    call function 'F4IF_INT_TABLE_VALUE_REQUEST'
      exporting
        retfield        = 'MEAS'
        dynpprog        = sy-repid
        dynpnr          = sy-dynnr
        dynprofield     = 'P_MSRC'
        value_org       = 'S'
      tables
        value_tab       = gt_text
      exceptions
        parameter_error = 1
        no_values_found = 2
        others          = 3.

  endif.

endform.                    " F4_HELP