Voici les étapes à suivre :
1. Utiliser le module fonction GET_GLOBALS_FROM_SLVC_FULLSCR pour obtenir l’objet de la grille ALV.
2. Utiliser la méthode GET_SUBTOTALS de l’objet ALV déterminé précédemment pour obtenir le sous-total partiel de premier niveau par le paramètre EP_COLLECT01 (ou le sous-total partiel de second niveau par le paramètre EP_COLLECT02, etc…)
3. Modifier le sous-total par la valeur calculée spécifiquement en utilisation un field-symbol faisant référence à EP_COLLECT01.
4. Rafraîchissement de la grille ALV en utilisant la méthode REFRESH_TABLE_DISPLAY.
IMPORTANT : le module fonction GET_GLOBALS_FROM_SLVC_FULLSCR (étape 1) doit être appelé avant l’affichage réel de la grille ALV. Pour cette raison, l’implémentation d’un évènement TOP_OF_PAGE est nécessaire. C’est dans la routine du TOP_OF_PAGE que le code de modification du sous-total sera utilisé.
Ci-dessous, un extrait de code. Notez le paramètre « i_callback_top_of_page = 'TOP_OF_PAGE' » dans les paramètres du module fonction 'REUSE_ALV_GRID_DISPLAY' ainsi que le form du même nom dans lequel la modification proprement dite du sous-total s’effectue, conformément aux étapes mentionnées.
- Code: Tout sélectionner
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = l_repid
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout = l_layout
is_print = l_print
it_sort = it_sort
it_filter = it_filter
it_fieldcat = t_fieldcat[]
it_event_exit = it_event_exit
TABLES
t_outtab = it_bkpf
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.
*---------------------------------------------------------------------*
* Form TOP_OF_PAGE
*---------------------------------------------------------------------*
FORM top_of_page.
DATA: lo_grid TYPE REF TO cl_gui_alv_grid.
DATA: it_01 TYPE REF TO data.
FIELD-SYMBOLS: <ft_tab> TYPE ANY TABLE,
<fs_tab> TYPE ANY,
<ff_field> TYPE ANY.
* Récupération de la référence de la grille ALV
*-------------------------------------------------------------
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lo_grid.
* Récupération du sous-total de niveau 1
*-------------------------------------------------------------
CALL METHOD lo_grid->get_subtotals
IMPORTING
ep_collect01 = it_01.
* Assignation de la table des sous-totaux au field symbol
*-------------------------------------------------------------
ASSIGN it_01->* TO <ft_tab>.
* Modification du sous-total par une valeur imposée (ici 100)
*-------------------------------------------------------------
LOOP AT <ft_tab> ASSIGNING <fs_tab>.
ASSIGN COMPONENT 'PER' OF STRUCTURE <fs_tab> TO <ff_field>.
<ff_field> = '100'.
ENDLOOP.
* Rafraîchissement de la grille ALV
*-------------------------------------------------------------
CALL METHOD lo_grid->refresh_table_display
EXPORTING
i_soft_refresh = 'X'.
ENDFORM. " top_of_page


News