2006 Nov 24 2:21 PM
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
2006 Nov 24 4:08 PM
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,
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
2006 Nov 24 4:06 PM
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
2006 Nov 24 4:08 PM
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
2006 Nov 24 4:16 PM
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.
2006 Nov 24 4:32 PM
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
2006 Nov 24 4:52 PM
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.
2006 Nov 24 4:56 PM
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_ITABMax
2006 Nov 24 6:23 PM
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.
2006 Nov 25 6:27 PM
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_ITABMax
2006 Dec 07 4:41 PM
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.
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |