Friday, September 2, 2022

SALV 5: Apply Aggregations (Subtotal and Total)

 *&---------------------------------------------------------------------*

*& Report ZSALV_ALV5
*&---------------------------------------------------------------------*
*& In this example will show you how to do Subtotal and Total
*& on Amount and Quantity column
*&---------------------------------------------------------------------*
REPORT zsalv_alv.
*&---------------------------------------------------------------------*
*&  Data declaration
*&---------------------------------------------------------------------*
DATAgv_vbeln TYPE vbak-vbeln.

*&---------------------------------------------------------------------*
*&  Selection Screen
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-001.
SELECT-OPTIONS s_vbeln FOR gv_vbeln.
SELECTION-SCREEN END OF BLOCK a1.

*&---------------------------------------------------------------------*
*&  Class Defination
*&---------------------------------------------------------------------*
CLASS lcl_data DEFINITION.

  "&... Visibility Section
  PUBLIC SECTION.

    "&... Type Declaration for data
    TYPESBEGIN OF ty_data,
             vbeln  TYPE vbeln,
             posnr  TYPE posnr,
             audat  TYPE audat,
             auart  TYPE auart,
             matnr  TYPE matnr,
             arktx  TYPE arktx,
             netwr  TYPE netwr,
             waerk  TYPE waerk,
             kwmeng TYPE kwmeng,
             meins  TYPE meins,
           END OF ty_data.

*&---------------------------------------------------------------------*
*&  Internal Table Declaration
*&---------------------------------------------------------------------*
    DATAgt_data TYPE TABLE OF ty_data.

    DATAgrf_alv TYPE REF TO cl_salv_table.

    "&... Public Method for display data
    METHODSget_data,
             display_data.

  PRIVATE SECTION.

    "&... Method for fetch the data
    METHODSget_sorts
                CHANGING ch_alv TYPE REF TO cl_salv_table,
             get_aggregations
                CHANGING ch_alv TYPE REF TO cl_salv_table.

ENDCLASS.

*&---------------------------------------------------------------------*
*&  Class Implementation
*&---------------------------------------------------------------------*
CLASS lcl_data IMPLEMENTATION.

  METHOD get_data.

    SELECT a~vbeln
           b~posnr
           a~audat
           a~auart
           b~matnr
           b~arktx
           b~netwr
           b~waerk
           b~kwmeng
           b~meins
      FROM vbak AS a INNER JOIN vbap AS b
      ON a~vbeln EQ b~vbeln INTO TABLE gt_data
      WHERE a~vbeln IN s_vbeln.
    IF sy-subrc NE 0.
      MESSAGE 'Data not found for given input' TYPE 'E'.
    ENDIF.

  ENDMETHOD.

  METHOD display_data.

    "&... Local Reference variable declaration
    DATAlrf_function TYPE REF TO cl_salv_functions_list,
          lrf_layout   TYPE REF TO cl_salv_layout,
          lrf_columns  TYPE REF TO cl_salv_columns,
          lrf_column   TYPE REF TO cl_salv_column.

    "&... Local variable declaration
    DATAlv_key TYPE salv_s_layout_key.

    "&... FACTORY Method instantiating the ALV of the Class CL_SALV_TABLE
    TRY.

        cl_salv_table=>factory(
*      EXPORTING
*        list_display   = IF_SALV_C_BOOL_SAP=>FALSE
*        r_container    = r_container
*        container_name = container_name
          IMPORTING
            r_salv_table   grf_alv
          CHANGING
            t_table        gt_data ).
      CATCH cx_salv_msg .

    ENDTRY.

    "&... GET_FUNCTIONS method provides access to the ALV's functions' objects
    lrf_function grf_alv->get_functions).

    "&... SET_ALL method set all the function
    lrf_function->set_all).

    "&... GET_COLUMNS - Method get the columns object for the ALV.
    lrf_columns grf_alv->get_columns).

    "&... SET_OPTIMIZE - Method used to optimize the column width
    lrf_columns->set_optimize'X' ).

*&---------------------------------------------------------------------*
*& Key Concept Start
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*& Call method for Applied Subtotal
*&---------------------------------------------------------------------*
    CALL METHOD get_sorts
      CHANGING
        ch_alv grf_alv.

*&---------------------------------------------------------------------*
*& Call method for Applied total
*&---------------------------------------------------------------------*
    CALL METHOD get_aggregations
      CHANGING
        ch_alv grf_alv.

*&---------------------------------------------------------------------*
*& Key Concept End
*&---------------------------------------------------------------------*

    "&... DISPLAY Method display the data in ALV
    grf_alv->display).

  ENDMETHOD.

  METHOD get_sorts.

    DATAlrf_sort TYPE REF TO cl_salv_sorts.

    CHECK grf_alv IS NOT INITIAL.
    lrf_sort grf_alv->get_sorts).

    TRY.

*&---------------------------------------------------------------------*
*& COLUMNNAME = Provide Column name based on which column you want do the
*&              Subtotal.
*& POSITION = Specified Sorting of column sequence
*&---------------------------------------------------------------------*
        CALL METHOD lrf_sort->add_sort
          EXPORTING
            columnname 'VBELN' "
            position   1
            sequence   if_salv_c_sort=>sort_up
            subtotal   if_salv_c_bool_sap=>true.

        CALL METHOD lrf_sort->add_sort
          EXPORTING
            columnname 'POSNR'
            position   2
            sequence   if_salv_c_sort=>sort_up.

      CATCH cx_salv_not_found.
      CATCH cx_salv_existing.
      CATCH cx_salv_data_error.

    ENDTRY.

  ENDMETHOD.

  METHOD get_aggregations.

    DATAlrf_aggrs TYPE REF TO cl_salv_aggregations.

    CHECK grf_alv IS NOT INITIAL.

    lrf_aggrs grf_alv->get_aggregations).

    TRY.

*&---------------------------------------------------------------------*
*& COLUMNNAME = Provide Column name based on which column you want do the
*&              Total.
*& AGGREGATION = IF_SALV_C_AGGREGATION=>TOTAL, AVERAGE, MAXIMUM, MINIMUM
*&---------------------------------------------------------------------*
        CALL METHOD lrf_aggrs->add_aggregation
          EXPORTING
            columnname  'NETWR'
            aggregation if_salv_c_aggregation=>total.

        CALL METHOD lrf_aggrs->add_aggregation
          EXPORTING
            columnname  'KWMENG'
            aggregation if_salv_c_aggregation=>total.

      CATCH cx_salv_data_error.
      CATCH cx_salv_not_found.
      CATCH cx_salv_existing.
    ENDTRY.

  ENDMETHOD.

ENDCLASS.

*&---------------------------------------------------------------------*
*&  START-OF-SELECTION Events
*&---------------------------------------------------------------------*
START-OF-SELECTION.

  DATAlo_data TYPE REF TO lcl_data.

  "&... Create Object for class LCL_SALV_DATA.
  CREATE OBJECT lo_data.

  "&... Call method for Fetch data from DB
  lo_data->get_data).

  "&... Call Display Method for display data.
  lo_data->display_data).


Output:



If you want to download Code please click on Below options:

Download Code in PDF:-  Click
Download Code in Notepad:-  Click

SALV 8: Adding Custom PF STATUS in ALV

Note: First create Custom PF Status using below Link: https://sapabapc.blogspot.com/2022/08/create-custom-pf-status.html *&-------------...