Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Change Subtotal Value with Function Module REUSE_ALV_GRID_DISPLAY

alejandro_lpez
Contributor
0 Likes
1,931

Hi,

How can i change the value of subtotal in ALV created with REUSE_ALV_GRID_DISPLAY in a specific column? I have tried with the event grouplevel_change, but this event does not works and never is called, on the contrary the event TOP_OF_PAGE is called correctly and the declaration is the same.

Please provide me an example of implementation of GROUPLEVEL_CHANGE.

where can i find documentation about REUSE_ALV_GRID_DISPLAY events?

Thanks in advance.

Alejandro.

Message was edited by:

Alejandro López

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,143

Hi

GROUPLEVEL_CHANGE works only for ALV list, not grid.

For the GRID 00, there's the event SUBTOTAL_TEXT, so I suppose it's triggered by REUSE_ALV_GRID_DISPLAY, but it should be only change the text.

I solved your problem using REUSE_ALV_LIST_DISPLAY and the event GROUPLEVEL_CHANGE.

Max

Hi,

I only add the next code to example given by Max, and finally the example works:

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

i_program_name = gt_repid

i_internal_tabname = 'ITAB'

i_inclname = gt_repid

  • I_STRUCTURE_NAME = 'LFA1'

CHANGING

ct_fieldcat = gt_fieldcat[].

      • Add by Alejandro

LOOP AT gt_fieldcat INTO LS_fieldcat.

ls_fieldcat-do_sum = 'X'.

MODIFY gt_fieldcat FROM ls_fieldcat.

ENDLOOP.

      • Add by Alejandro

Thanks for your answers.

Alejandro.

9 REPLIES 9
Read only

Former Member
0 Likes
1,143

Hi,

use layout.

layout-EDIT = 'X'.

and pass this layout while calling FM

1. First of all declare one EXTRA field

in your internal table

flag type c,

2. in alvlayout,

alvly-box_fieldname = 'FLAG'.

3. Pass this alvlayout

while calling the FM.

4. Selection is now possible.

5. To detect ,

Loop at ITAB where Flag = 'X'.

endloop.

>> Flag will contain 'X'.

whichever row the user selects

and also refer this...

http://help.sap.com/saphelp_erp2005/helpdata/en/ef/a2e9eff88311d2b48d006094192fe3/frameset.htm

I hope it helps u..

Reagrds,

Kumar

Read only

Former Member
0 Likes
1,144

Hi

GROUPLEVEL_CHANGE works only for ALV list, not grid.

For the GRID 00, there's the event SUBTOTAL_TEXT, so I suppose it's triggered by REUSE_ALV_GRID_DISPLAY, but it should be only change the text.

I solved your problem using REUSE_ALV_LIST_DISPLAY and the event GROUPLEVEL_CHANGE.

Max

Read only

0 Likes
1,143

Hi,

Now i am using FM REUSE_ALV_LIST_DISPLAY but how should i implement the event GROUPLEVEL_CHANGE, which are the parameters needed?

Thanks,

Alejandro.

Read only

0 Likes
1,143

That event is triggered when a group is changing, the group are defined by sorting criteria.

The form has to have an interface like this:

FORM GROUPLEVEL_CHANGE USING LINFO   TYPE kkblo_lineinfo
                                                            GROUP TYPE kkblo_grouplevels.
  WRITE: 'The group level is changed'.

ENDFORM.

Just a little problem: you can't change the subtotal calculated by the system, u can only replace them with new subtotal calculated by yourself.

So you have to prevent the subtotal of the system.

Max

Read only

0 Likes
1,143

How can i change a group, to trigger the event?

I have defined a sorting criteria and passed it to FM REUSE_ALV_LIST_DISPLAY in sortcat parameter, then when the list is displayed i change the sort criteria with the function buttons, but the event is not triggered.

Thanks.

Alejandro.

Read only

0 Likes
1,143

Have you transfered this event in the event table?

Try this report: it works fine:

TYPE-POOLS: SLIS, KKBLO.
* ALV
DATA: GT_FIELDCAT   TYPE SLIS_T_FIELDCAT_ALV,
      GT_SORT       TYPE SLIS_T_SORTINFO_ALV,
      GT_EVENTS     TYPE SLIS_T_EVENT,
      GT_REPID      TYPE SY-REPID.

DATA: BEGIN OF ITAB OCCURS 0,
        LIFNR LIKE LFA1-LIFNR,
        COUNT TYPE I,
      END   OF ITAB.


START-OF-SELECTION.

  PERFORM APPEND_ITAB USING 5  'A'.
  PERFORM APPEND_ITAB USING 10 'B'.
  PERFORM APPEND_ITAB USING 11 'C'.
  PERFORM APPEND_ITAB USING 6  'D'.

  GT_REPID = SY-REPID.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
       EXPORTING
            I_PROGRAM_NAME     = GT_REPID
            I_INTERNAL_TABNAME = 'ITAB'
            I_INCLNAME         = GT_REPID
*            I_STRUCTURE_NAME   = 'LFA1'
       CHANGING
            CT_FIELDCAT        = GT_FIELDCAT[].

  DATA: LS_SORT TYPE SLIS_SORTINFO_ALV.

  LS_SORT-SPOS  = 1.
  LS_SORT-GROUP = '*'.
  LS_SORT-FIELDNAME = 'LIFNR'.
  LS_SORT-UP   = 'X'.
  APPEND LS_SORT TO GT_SORT.

  DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
  LS_EVENT-NAME = 'GROUPLEVEL_CHANGE'.
  LS_EVENT-FORM  = 'GROUPLEVEL_CHANGE'.
  APPEND LS_EVENT TO GT_EVENTS.



  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
       EXPORTING
            I_CALLBACK_PROGRAM = GT_REPID
            IT_FIELDCAT        = GT_FIELDCAT
            IT_SORT            = GT_SORT
            IT_EVENTS          = GT_EVENTS
       TABLES
            T_OUTTAB           = ITAB.





*---------------------------------------------------------------------*
*       FORM GROUPLEVEL_CHANGE                                        *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  LINFO                                                         *
*  -->  GROUP                                                         *
*---------------------------------------------------------------------*
FORM GROUPLEVEL_CHANGE USING LINFO TYPE KKBLO_LINEINFO
                             GROUP TYPE KKBLO_GROUPLEVELS.
  WRITE: / 'The group level is changed'.

ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  APPEND_ITAB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_TIMES  text
*      -->P_CODE  text
*----------------------------------------------------------------------*
FORM APPEND_ITAB USING    P_TIMES TYPE I
                          P_CODE.
  DO P_TIMES TIMES.
    MOVE: P_CODE   TO ITAB-LIFNR,
          SY-INDEX TO ITAB-COUNT.
    APPEND ITAB.
  ENDDO.
ENDFORM.                    " APPEND_ITAB

Max

Read only

0 Likes
1,143

Hi,

The code works fine and now the event GROUPLEVEL_CHANGE is reached, but someone knows which are the next step to modify a specific Subtotal?.

Thanks.

Alejandro.

Read only

0 Likes
1,143

Hi

U've to get all information by fm REUSE_ALV_LIST_LAYOUT_INFO_GET

TYPE-POOLS: SLIS, KKBLO.
* ALV
DATA: GT_FIELDCAT         TYPE SLIS_T_FIELDCAT_ALV,
      ET_FIELDCAT         TYPE SLIS_T_FIELDCAT_ALV,
      ET_FILTERED_ENTRIES TYPE KKBLO_T_SFINFO,
      GT_SORT       TYPE SLIS_T_SORTINFO_ALV,
      ET_SORT       TYPE SLIS_T_SORTINFO_ALV,
      GT_EVENTS     TYPE SLIS_T_EVENT,
      GT_REPID      TYPE SY-REPID.

DATA: LS_SORT     TYPE SLIS_SORTINFO_ALV,
      LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.

DATA: BEGIN OF ITAB OCCURS 0,
        LIFNR LIKE LFA1-LIFNR,
        KUNNR LIKE KNA1-KUNNR,
        COUNT_L TYPE I,
        COUNT_K TYPE I,
      END   OF ITAB.


START-OF-SELECTION.

  PERFORM APPEND_ITAB USING 5  'A' 'C'.
  PERFORM APPEND_ITAB USING 10 'A' 'D'.
  PERFORM APPEND_ITAB USING 11 'B' 'E'.
  PERFORM APPEND_ITAB USING 6  'B' 'F'.

  GT_REPID = SY-REPID.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
       EXPORTING
            I_PROGRAM_NAME     = GT_REPID
            I_INTERNAL_TABNAME = 'ITAB'
            I_INCLNAME         = GT_REPID
*            I_STRUCTURE_NAME   = 'LFA1'
       CHANGING
            CT_FIELDCAT        = GT_FIELDCAT[].



  LS_SORT-SPOS  = 1.
  LS_SORT-GROUP = '*'.
  LS_SORT-FIELDNAME = 'LIFNR'.
  LS_SORT-UP   = 'X'.
  APPEND LS_SORT TO GT_SORT.
  LS_SORT-SPOS  = 2.
  LS_SORT-GROUP = 'UL'.
  LS_SORT-FIELDNAME = 'KUNNR'.
  LS_SORT-UP   = 'X'.
  APPEND LS_SORT TO GT_SORT.

  DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
  LS_EVENT-NAME = 'GROUPLEVEL_CHANGE'.
  LS_EVENT-FORM  = 'GROUPLEVEL_CHANGE'.
  APPEND LS_EVENT TO GT_EVENTS.

  LS_EVENT-NAME = 'TOP_OF_LIST'.
  LS_EVENT-FORM  = 'TOP_OF_LIST'.
  APPEND LS_EVENT TO GT_EVENTS.



  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
       EXPORTING
            I_CALLBACK_PROGRAM = GT_REPID
            IT_FIELDCAT        = GT_FIELDCAT
            IT_SORT            = GT_SORT
            IT_EVENTS          = GT_EVENTS
       TABLES
            T_OUTTAB           = ITAB.



*---------------------------------------------------------------------*
*       FORM TOP_OF_LIST                                              *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM TOP_OF_LIST.
  CALL FUNCTION 'REUSE_ALV_LIST_LAYOUT_INFO_GET'
       IMPORTING
            ET_FIELDCAT         = ET_FIELDCAT
            ET_SORT             = ET_SORT.

  CALL FUNCTION 'K_KKB_LIST_LAYOUT_INFO_GET'
       IMPORTING
            ET_FILTERED_ENTRIES = ET_FILTERED_ENTRIES.


ENDFORM.

*---------------------------------------------------------------------*
*       FORM GROUPLEVEL_CHANGE                                        *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  LINFO                                                         *
*  -->  GROUP                                                         *
*---------------------------------------------------------------------*
FORM GROUPLEVEL_CHANGE USING LINFO TYPE KKBLO_LINEINFO
                             GROUP TYPE KKBLO_GROUPLEVELS.

  DATA: WA_ITAB LIKE ITAB.

  FIELD-SYMBOLS: <TOT>   TYPE ANY,
                 <VALUE> TYPE ANY.


  DATA: _FIRST  TYPE C VALUE 'X',
        _OFFSET TYPE I,
        _LEN    TYPE I.
* Calculate total
  LOOP AT ET_FIELDCAT INTO LS_FIELDCAT WHERE DO_SUM = 'X'.
    ASSIGN COMPONENT LS_FIELDCAT-FIELDNAME
                                          OF STRUCTURE WA_ITAB TO <TOT>.
    LOOP AT ITAB FROM GROUP-INDEX_FROM
                   TO GROUP-INDEX_TO.

      READ TABLE ET_FILTERED_ENTRIES WITH KEY INDEX = SY-TABIX
                                                TRANSPORTING NO FIELDS.
      IF SY-SUBRC <> 0.
        ASSIGN COMPONENT LS_FIELDCAT-FIELDNAME
                                           OF STRUCTURE ITAB TO <VALUE>.
        <TOT> = <TOT> + <VALUE>.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
  IF SY-SUBRC = 0.
    _OFFSET = 1.
  ELSE.
    _OFFSET = 0.
  ENDIF.

  SORT ET_FIELDCAT BY COL_POS.

* Print total

  LOOP AT ET_FIELDCAT INTO LS_FIELDCAT WHERE NO_OUT <> 'X'.

    ASSIGN COMPONENT LS_FIELDCAT-FIELDNAME
                                      OF STRUCTURE WA_ITAB TO <VALUE>.

    IF _FIRST = 'X'.

      FORMAT COLOR COL_TOTAL INTENSIFIED OFF.

      WRITE: / SY-VLINE NO-GAP.
      CLEAR _FIRST.
      LS_FIELDCAT-OUTPUTLEN = LS_FIELDCAT-OUTPUTLEN + _OFFSET.
    ENDIF.

    WRITE: AT (LS_FIELDCAT-OUTPUTLEN) <VALUE> NO-GAP.

    WRITE SY-VLINE NO-GAP.

  ENDLOOP.

  _LEN = SY-COLNO - 1.

  WRITE: / SY-ULINE(_LEN).

  FORMAT COLOR OFF INTENSIFIED ON.
  SKIP.

* Get level:

  READ TABLE ET_SORT INTO LS_SORT WITH KEY SPOS = GROUP-LEVEL.

  READ TABLE ET_FIELDCAT
              INTO LS_FIELDCAT WITH KEY FIELDNAME = LS_SORT-FIELDNAME.

  SKIP.
  WRITE: 'The group level changed is:', LS_FIELDCAT-SELTEXT_L.
  SKIP.

ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  APPEND_ITAB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_TIMES  text
*      -->P_CODE  text
*----------------------------------------------------------------------*
FORM APPEND_ITAB USING    P_TIMES TYPE I
                          P_CODE
                          P_CODE2.
  DO P_TIMES TIMES.
    MOVE: P_CODE   TO ITAB-LIFNR,
          P_CODE2  TO ITAB-KUNNR,
          SY-INDEX TO ITAB-COUNT_L.

    ITAB-COUNT_K = ITAB-COUNT_L * 2.
    APPEND ITAB.
  ENDDO.
ENDFORM.                    " APPEND_ITAB

Max

Read only

0 Likes
1,143

Hi,

I only add the next code to example given by Max, and finally the example works:

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

i_program_name = gt_repid

i_internal_tabname = 'ITAB'

i_inclname = gt_repid

  • I_STRUCTURE_NAME = 'LFA1'

CHANGING

ct_fieldcat = gt_fieldcat[].

      • Add by Alejandro

LOOP AT gt_fieldcat INTO LS_fieldcat.

ls_fieldcat-do_sum = 'X'.

MODIFY gt_fieldcat FROM ls_fieldcat.

ENDLOOP.

      • Add by Alejandro

Thanks for your answers.

Alejandro.