Es ist genau so, wie Death Guardian schon beschrieben hat:
Aufruf der Methode SET_VARIANT aus Klasse cl_gui_alv_grid alleine genügt nicht.
Man muß vorher mit der Methode GET_FRONTEND_FIELDCATALOG den aktuellen Feldkatalog des Grids ermitteln und mit diesem per FuBa LVC_VARIANT_SELECT über die Exporting-Parameter et_sort, et_filter und evtl. et_fieldcat die für die NEUE Variante gültige Sortierung und Filter und evtl. den neuen Feldkatalog besorgen. Wichtig: über den Changing-Parameter cs_variant muß man die NEUE Variante mitgeben!
Diese kann man sich etwa mit
data: l_variant type disvariant.
select report variant
into (l_variant-report, l_variant-variant )
from ltdx up to 1 rows
where relid = 'LT'
and report = sy-cprog
and variant = '/VARNAME'.
endselect.
aus der Tabelle LTDX besorgen.
Die Sortierung / Filter der neuen Variante müssen dann mit den Methoden set_filter_criteria / set_sort_criteria gesetzt werden. Ggf. muß auch noch ein neuer variantenspezifischer Feldkatalog ermittelt und mit der Methode set_frontend_fieldcatalog gesetzt werden.
Erst dann "zieht" auch das Setzen der neuen Variante mit der Methode set_variant.
Ein dazu passendes Beispiel findet man im
http://www.tricktresor.deunter Entwicklung/Programmierung/ABAP Objects/ALV-Grid/Variantenschnellzugriff.
Vorsicht: Abweichend zum Tricktresor-Beispiel mußte ich beim Aufruf von LVC_VARIANT_SELECT noch den Tabellenparameter it_data besetzen, da ich Filter-Kriterien in der neuen Variante gesetzt hatte! Man kann die itab mit "Data: i_data type table of string" im Programm deklarieren. Brauchen tut man sie nicht, sie muß nur angefordert sein. Und dann geht's!