We recently had a requests in a report to offer sorting options at selection time (not in the ALV Grid later).
So basically what you do is offer Parameters for Sortorder or even
better a restricted Select-Option if you have a Domain of the Columns.
Then you have a iTab representing the Sort Order in the ata Definition.
TYPES: BEGIN OF SORT_HELP,
POS TYPE N LENGTH 2,
TABNAME TYPE YI_BDSCOLS. TYPES: END OF SORT_HELP.
DATA: IT_SORTLIST TYPE TABLE OF SORT_HELP,
VAR_SORTITEM TYPE SORT_HELP.
You can write a Function to add Columns to the sorting
*&---------------------------------------------------------------------* *& Form ADD_SORTITEM *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->F_POS Position of Col in Sorting * -->F_TABNAME Col Name *----------------------------------------------------------------------* FORM CUST_ADD_SORTITEM USING F_POS TYPE N
F_TABNAME TYPE CHAR20.
IF F_POS > 0 . CLEAR VAR_SORTITEM. READ TABLE IT_SORTLIST WITH KEY POS = F_POS TRANSPORTING NO FIELDS. "Wenn Schlüssel schon vorhanden haben wir eine doppelte Zeile IF SY-SUBRC = 0. MESSAGE E685(yb). ELSE.
VAR_SORTITEM-TABNAME = F_TABNAME.
VAR_SORTITEM-POS = F_POS. APPEND VAR_SORTITEM TO IT_SORTLIST. SORT IT_SORTLIST BY POS ASCENDING. ENDIF.
ENDIF.
ENDFORM. " ADD_SORTITEM
And wherever you fill your ALV Grid you generate the Sorting upfront:
The neat thing now is, that you also are able to redo the Fieldcat of the ALV Grid in Order of the Sorting upfront.
I did it like this, there may be a better way. Comments are welcome.
DATA: L_IT_FIELDCAT_NEW TYPE LVC_T_FCAT,
L_VAR_COL_POS_CNT TYPE I VALUE 1.
FIELD-SYMBOLS <L_WA_FIELDCAT_COL> TYPE LVC_S_FCAT.
"Copy all FieldCat Fields not associated with viewable Cols LOOP AT C_T_FIELDCAT ASSIGNING <L_WA_FIELDCAT_COL> WHERE TABNAME EQ ''. APPEND <L_WA_FIELDCAT_COL> TO L_IT_FIELDCAT_NEW. DELETE C_T_FIELDCAT. ENDLOOP.
"Insert Cols from the SortList and remove them from the initial Fieldcat LOOP AT IT_SORTLIST INTO VAR_SORTITEM. READ TABLE C_T_FIELDCAT WITH KEY FIELDNAME = VAR_SORTITEM-TABNAME INTO L_WA_FIELDCAT. IF SY-SUBRC = 0. DELETE C_T_FIELDCAT WHERE FIELDNAME = VAR_SORTITEM-TABNAME. ENDIF. APPEND L_WA_FIELDCAT TO L_IT_FIELDCAT_NEW. ENDLOOP.
"Now add all Cols from the Initial Fieldcat after Sorted Ones LOOP AT C_T_FIELDCAT ASSIGNING <L_WA_FIELDCAT_COL> . APPEND <L_WA_FIELDCAT_COL> TO L_IT_FIELDCAT_NEW. ENDLOOP.
"At last you have to assign new Col_Positions for all Entriew in the FieldCat LOOP AT L_IT_FIELDCAT_NEW ASSIGNING <L_WA_FIELDCAT_COL> WHERE TABNAME NE ''.
<L_WA_FIELDCAT_COL>-COL_POS = L_VAR_COL_POS_CNT.
L_VAR_COL_POS_CNT = L_VAR_COL_POS_CNT + 1. ENDLOOP.
C_T_FIELDCAT = L_IT_FIELDCAT_NEW.
Serkan AKKAVAK Computer Engineer SAP Department Deputy Manager Contact : serkurumsal@yandex.com
Social Plugin