Saturday, September 22, 2018

SALV 6 : Add Header (TOP_OF_PAGE) and Footer (END_OF_PAGE)

*&---------------------------------------------------------------------*
*& Report  ZSALV_REPORT_SYMBOL
*&
*&---------------------------------------------------------------------*
*& In This Tutorial i will show you How to display Top of List and
*& End of List in SALV ALV
*&---------------------------------------------------------------------*

REPORT  ZSALV_TOP_END_LIST.

*& Constant Declaration.
DATA LV_EBELN TYPE EKKO-EBELN.

*& Selection Screen
SELECTION-SCREEN BEGIN OF BLOCK A1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS S_EBELN FOR LV_EBELN.
SELECTION-SCREEN END OF BLOCK A1.

CLASS CL_DATA DEFINITION.

  PUBLIC SECTION.

*& Structure for Purchasing Document Header Table
    TYPES BEGIN OF TY_EKKO,
                     EBELN  TYPE EBELN,   "Purchasing Document Number
                     BUKRS  TYPE BUKRS,   "Company Code
                     BSTYP  TYPE EBSTYP,  "Purchasing Document Category
                     BSART  TYPE ESART,   "Purchasing Document Type
                     BEDAT  TYPE EBDAT,   "Purchasing Document Date
                  END OF TY_EKKO,

*& Structure for Purchasing Document Item Table
                 BEGIN OF TY_EKPO,
                    EBELN  TYPE EBELN,   "Purchasing Document Number
                    EBELP  TYPE EBELP,   "Item Number of Purchasing Document
                    MATNR  TYPE MATNR,   "Material Number
                    MENGE  TYPE BSTMG,   "Purchase Order Quantity
                    MEINS  TYPE BSTME,   "Purchase Order Unit of Measure
                    NETPR  TYPE BPREI,   "Net Price in Purchasing Document 
               END OF TY_EKPO.

*& Final Output stucture
    TYPES BEGIN OF TY_FINAL,
                       EBELN  TYPE EBELN,   "Purchasing Document Number
                       BSART  TYPE ESART,   "Purchasing Document Type
                       BEDAT  TYPE EBDAT,   "Purchasing Document Date
                       MATNR  TYPE MATNR,   "Material Number
                       MENGE  TYPE BSTMG,   "Purchase Order Quantity
                       MEINS  TYPE BSTME,   "Purchase Order Unit of Measure
                       NETPR  TYPE BPREI,   "Net Price in Purchasing Document 
                    END OF TY_FINAL.

*& Internal Table Declration
    DATA GT_EKKO  TYPE TABLE OF TY_EKKO INITIAL SIZE 1,
                  GT_EKPO  TYPE TABLE OF TY_EKPO INITIAL SIZE 1,
                  GT_FINAL TYPE TABLE OF TY_FINAL INITIAL SIZE 1.

*& Workarea Declaration.
    DATA GS_FINAL TYPE TY_FINAL,
                  GS_EKKO  TYPE TY_EKKO,
                  GS_EKPO  TYPE TY_EKPO.

*& Declare Variable for Class.
    DATA LO_ALV     TYPE REF TO CL_SALV_TABLE,
                  LO_COLUMNS TYPE REF TO CL_SALV_COLUMNS,
                  LO_COLUMN  TYPE REF TO CL_SALV_COLUMN_LIST,
                  LO_HEADER  TYPE REF TO CL_SALV_FORM_LAYOUT_GRID,
                  LO_FOOTER  TYPE REF TO CL_SALV_FORM_LAYOUT_GRID,
                  LO_LABEL   TYPE REF TO CL_SALV_FORM_LABEL,
                  LO_FLOW    TYPE REF TO CL_SALV_FORM_LAYOUT_FLOW.

    DATA LV_NO TYPE INT4.

*& Declare Methods for Get Data and Display Data
    METHODS GET_DATA,     "Get data from Data base.
              GET_POP_DATA"Populate Final Display Data
              DISPLAY.      "Display Data

ENDCLASS.

*& Start of Selection
START-OF-SELECTION.

*& Refence for Cl_DATA
  DATA LO_CL_DATA TYPE REF TO CL_DATA.

*& Object for CL_DATA Class.
  CREATE OBJECT LO_CL_DATA.

*& Call the GET_DATA Method.
  LO_CL_DATA->GET_DATA).

*& Call the GET_POP_DATA Method.
  LO_CL_DATA->GET_POP_DATA).

*& Call the DISPLAY Method.
  LO_CL_DATA->DISPLAY).


CLASS CL_DATA IMPLEMENTATION.

*&This Method is used to Get data from Data base
  METHOD GET_DATA.

    SELECT EBELN
                  BUKRS
                  BSTYP
                  BSART
                  BEDAT
       FROM EKKO INTO TABLE GT_EKKO WHERE EBELN IN S_EBELN.

    IF GT_EKKO[] IS NOT INITIAL.
      SORT GT_EKKO BY EBELN.
    ELSE.
      MESSAGE 'Data not Found' TYPE 'E'.
    ENDIF.

    IF GT_EKKO[] IS NOT INITIAL.

      SELECT EBELN
                    EBELP
                    MATNR
                    MENGE
                    MEINS
                    NETPR
        FROM EKPO INTO TABLE GT_EKPO FOR ALL ENTRIES IN GT_EKKO
        WHERE EBELN EQ GT_EKKO-EBELN.

    ENDIF.

  ENDMETHOD.

*& This Method is used to Populate final display Data
  METHOD GET_POP_DATA.

    "Not Require
    INCLUDE<icon>.

    SORT GT_EKKO BY EBELN.
    SORT GT_EKPO BY EBELN.

    LOOP AT GT_EKKO INTO GS_EKKO.

      GS_FINAL-BSART GS_EKKO-BSART.
      GS_FINAL-BEDAT GS_EKKO-BEDAT.

      CLEAR GS_EKPOLV_NO.
      READ TABLE GT_EKPO INTO GS_EKPO WITH KEY EBELN GS_EKKO-EBELN BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        LV_NO SY-TABIX.
      ENDIF.

      LOOP AT GT_EKPO INTO GS_EKPO FROM LV_NO.

        IF GS_EKPO-EBELN NE GS_EKKO-EBELN.
          EXIT.
        ENDIF.

        GS_FINAL-EBELN GS_EKPO-EBELN.
        GS_FINAL-MATNR GS_EKPO-MATNR.
        GS_FINAL-MENGE GS_FINAL-MENGE + GS_EKPO-MENGE.
        GS_FINAL-MEINS GS_EKPO-MEINS.
        GS_FINAL-NETPR GS_FINAL-NETPR + GS_EKPO-NETPR.

      ENDLOOP.

      APPEND GS_FINAL TO GT_FINAL.
      CLEAR GS_FINAL.

    ENDLOOP.

  ENDMETHOD.

*& This Method is used to Display Data
  METHOD DISPLAY.

*& We call the Factory Method to get the instance of the ALV.

    TRY.
        CALL METHOD CL_SALV_TABLE=>FACTORY
*      EXPORTING
*        LIST_DISPLAY   = IF_SALV_C_BOOL_SAP=>FALSE
*        R_CONTAINER    =
*        CONTAINER_NAME =
      IMPORTING
        R_SALV_TABLE    LO_ALV
          CHANGING
            T_TABLE     GT_FINAL
            .
      CATCH CX_SALV_MSG .
    ENDTRY.

*& Get the all columns
    LO_COLUMNS LO_ALV->GET_COLUMNS).

*& Set Column Optimization.
    LO_COLUMNS->SET_OPTIMIZE'X' ).

*& Displaying toolbar on alv
    LO_ALV->GET_FUNCTIONS)->SET_ALL).

*& Change the Column Heading.
    TRY.

        LO_COLUMN ?= LO_COLUMNS->GET_COLUMN'STATUS' ).
        LO_COLUMN->SET_LONG_TEXT'Status' ).
        LO_COLUMN->SET_MEDIUM_TEXT'Status' ).
        LO_COLUMN->SET_SHORT_TEXT'Status' ).
        LO_COLUMN->SET_ICON'X' ).
        LO_COLUMN->SET_OUTPUT_LENGTH10 ).

        LO_COLUMN ?= LO_COLUMNS->GET_COLUMN'EBELN' ).
        LO_COLUMN->SET_LONG_TEXT'Purchase Number' ).
        LO_COLUMN->SET_MEDIUM_TEXT'Pur. Number' ).
        LO_COLUMN->SET_SHORT_TEXT'PO Number' ).

        LO_COLUMN ?= LO_COLUMNS->GET_COLUMN'MATNR' ).
        LO_COLUMN->SET_LONG_TEXT'Material Code' ).
        LO_COLUMN->SET_MEDIUM_TEXT'Material Number' ).
        LO_COLUMN->SET_SHORT_TEXT'Material' ).

        LO_COLUMN ?= LO_COLUMNS->GET_COLUMN'BSART' ).
        LO_COLUMN->SET_LONG_TEXT'Document Type' ).
        LO_COLUMN->SET_MEDIUM_TEXT'Document Type' ).
        LO_COLUMN->SET_SHORT_TEXT'Doc.Type' ).

        LO_COLUMN ?= LO_COLUMNS->GET_COLUMN'BEDAT' ).
        LO_COLUMN->SET_LONG_TEXT'Document Date' ).
        LO_COLUMN->SET_MEDIUM_TEXT'Document Date' ).
        LO_COLUMN->SET_SHORT_TEXT'Doc. Date' ).

        LO_COLUMN ?= LO_COLUMNS->GET_COLUMN'MEINS' ).
        LO_COLUMN->SET_LONG_TEXT'Unit of Mesure' ).
        LO_COLUMN->SET_MEDIUM_TEXT'UOM' ).
        LO_COLUMN->SET_SHORT_TEXT'UOM' ).

        LO_COLUMN ?= LO_COLUMNS->GET_COLUMN'MENGE' ).
        LO_COLUMN->SET_LONG_TEXT'Po Quantity' ).
        LO_COLUMN->SET_MEDIUM_TEXT'Quantity' ).
        LO_COLUMN->SET_SHORT_TEXT'Qty' ).

        LO_COLUMN ?= LO_COLUMNS->GET_COLUMN'NETPR' ).
        LO_COLUMN->SET_LONG_TEXT'PO Price' ).
        LO_COLUMN->SET_MEDIUM_TEXT'Price' ).
        LO_COLUMN->SET_SHORT_TEXT'Price' ).

      CATCH CX_SALV_NOT_FOUND.
    ENDTRY.

*& Create Object for Header.
    CREATE OBJECT LO_HEADER
*     EXPORTING
*       COLUMNS =
        .

*   To create a Lable or Flow we have to specify the target
*     row and column number where we need to set up the output
*     text.
    LO_LABEL LO_HEADER->CREATE_LABELROW COLUMN ).
    LO_LABEL->SET_TEXT'This is Po Header Details' ).

    LO_LABEL LO_HEADER->CREATE_LABELROW COLUMN ).
    LO_LABEL->SET_TEXT'This is Top of List Header' ).

    LO_FLOW LO_HEADER->CREATE_FLOWROW COLUMN ).
    LO_FLOW->CREATE_TEXTtext 'This is Header Information' ).

*   set the top of list using the header
    LO_ALV->SET_TOP_OF_LISTLO_HEADER ).

*& Create Object for Footer.
    CREATE OBJECT LO_FOOTER
*     EXPORTING
*       COLUMNS =
        .

    LO_LABEL LO_FOOTER->CREATE_LABELROW COLUMN ).
    LO_LABEL->SET_TEXT'Footer' ).

    LO_FLOW LO_FOOTER->CREATE_FLOWROW COLUMN ).
    LO_FLOW->CREATE_TEXTtext 'This is Footer Information' ).

    LO_FLOW LO_FOOTER->CREATE_FLOWROW COLUMN ).
    LO_FLOW->CREATE_TEXTtext 'Footer Number' ).

    LO_ALV->SET_END_OF_LISTLO_FOOTER ).


*& Here we will call the display method to get the output on the screen
    LO_ALV->DISPLAY).

  ENDMETHOD.

ENDCLASS.


Output: 












































Download Source code in PDF format.

Download Source Code in Text Format.







No comments:

Post a Comment