*&---------------------------------------------------------------------*
*& 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
*&---------------------------------------------------------------------*
DATA: gv_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
TYPES: BEGIN 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
*&---------------------------------------------------------------------*
DATA: gt_data TYPE TABLE OF ty_data.
DATA: grf_alv TYPE REF TO cl_salv_table.
"&... Public Method for display data
METHODS: get_data,
display_data.
PRIVATE SECTION.
"&... Method for fetch the data
METHODS: get_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
DATA: lrf_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
DATA: lv_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.
DATA: lrf_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.
DATA: lrf_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.
DATA: lo_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:
No comments:
Post a Comment