gelöst OO ALV nach mehreren Spalten sortieren


Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV

Moderatoren: Jan, Steff

gelöst OO ALV nach mehreren Spalten sortieren

Beitragvon Legxis » 09.05.2018, 19:58

Ich würde gerne meinen ALV nach mehreren Spalten sortieren und diese ebenfalls groupen, also dass nicht in jeder Zeile dasselbe steht.
Dazu habe ich online verschiedenes gefunden, kann mir aber darauf nichts zusammenbasteln, vielleicht kann mir da jemand helfen?
https://www.stacknoise.com/alv-sortieren-nach-spalten/
https://archive.sap.com/discussions/thread/1736809
http://codezentrale.bplaced.net/dcz/?tag=add_sort

Die wichtigsten Teile meines Codes: Deklarationen
Code: Alles auswählen
TYPES: BEGIN OF ty_filialstamm,
bukrs TYPE bukrs,               " Buchungskreis (ZMM_WERKMAT)
ekorg TYPE ekorg,               " Einkaufsorganisation
vkorg TYPE vkoiv,               " Verkaufsorganisation
werks TYPE werks_d,             " Werk
name1 TYPE name1,               " Name (T001W)
stras TYPE stras,               " Strasse (T001W)
pstlz TYPE pstlz,               " PZL (T001W)
ort01 TYPE ort01,               " Ort (T001W)
land1 TYPE land1,               " Land (T001W)
END OF ty_filialstamm.

* Datentabellen
DATA: gt_filialstamm TYPE STANDARD TABLE OF ty_filialstamm.

* Workareas
DATA: wa_filialstamm TYPE ty_filialstamm.

* alv Listausgabe
DATA: go_alv              TYPE REF TO  cl_salv_table,
      go_column           TYPE REF TO  cl_salv_column_table,
      go_columns          TYPE REF TO  cl_salv_columns_table,
      go_functions        TYPE REF TO  cl_salv_functions_list,      " toolbar
      go_display          TYPE REF TO  cl_salv_display_settings,
      go_layout           TYPE REF TO  cl_salv_layout,
      go_selections       TYPE REF TO  cl_salv_selections,          " multiselect
      go_sort             TYPE REF TO  cl_salv_sorts,               " von Anfang an sortiert ausgeben
      go_events           TYPE REF TO  cl_salv_events_table,        " Events
      go_event_handler    TYPE REF TO  lcl_handle_events,
      gx_salv_msg         TYPE REF TO  cx_salv_msg,                 " exceptions
      gx_salv_not_found   TYPE REF TO  cx_salv_not_found,
      gx_salv_existing    TYPE REF TO  cx_salv_existing,
      gx_salv_data_error  TYPE REF TO  cx_salv_data_error,
      gs_layoutkey        TYPE         salv_s_layout_key.

ALV Aufbau etc.
Code: Alles auswählen
TRY.
      cl_salv_table=>factory(
      IMPORTING
        r_salv_table = go_alv
      CHANGING
        t_table = gt_filialstamm ).
    CATCH cx_salv_msg INTO gx_salv_msg.
      MESSAGE 'Die Listenausgabe konnte nicht generiert werden' TYPE 'E'.
  ENDTRY.

* Eigene Überschriften setzen
  go_columns = go_alv->get_columns( ).
  PERFORM alv_columntitles.

* Zeilen der Liste farblich unterscheiden
  go_display = go_alv->get_display_settings( ).
  go_display->set_striped_pattern( abap_true ).

* Spaltenbreite optimieren
  TRY.
      go_columns->set_optimize( 'X' ).
    CATCH cx_salv_data_error INTO gx_salv_data_error.
  ENDTRY.

* Funktionstasten (Sortieren, Filtern, Excel-Export etc.)
  go_functions = go_alv->get_functions( ).
  go_functions->set_all( abap_true ).

* Dem Benutzer erlauben, eigene Anzeigevarianten zu speichern
  go_layout = go_alv->get_layout( ).
  gs_layoutkey-report = sy-repid.
  go_layout->set_key( gs_layoutkey ).
  go_layout->set_default( abap_true ).
  go_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).

* Dem Benutzer erlauben, mehrere Zellen/Zeilen/Spalten zu selektieren
  go_selections = go_alv->get_selections( ).
  CALL METHOD go_selections->set_selection_mode
    EXPORTING
      value = if_salv_c_selection_mode=>multiple.

* Titel
  go_display = go_alv->get_display_settings( ).
  go_display->set_list_header( 'Stammdaten aller Filialen im selektierten Bereich' ).

* Eigenes Menü (GUI-Status)
  CALL METHOD go_alv->set_screen_status(
  EXPORTING
    report        = sy-repid
    pfstatus      = 'STANDARD'
    set_functions = go_alv->c_functions_all ).

* Tabelle direkt nach mehreren Spalten sortiert ausgeben (damit auch gleiche Spalteninhalte zusammenfügen)
  PERFORM sort_alv.

go_alv->display( ).
Ich bin Neuling und für jede Hilfe, Kritik, diverse Programmverbesserungen/-optimierung und schöne Codebeispiele dankbar^^
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )
Legxis
ForumUser
 
Beiträge: 71
Registriert: 12.01.2018, 08:59
Wohnort: Köln
Dank erhalten: 15 mal
Ich bin: Student/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: OO ALV nach mehreren Spalten sortieren

Beitragvon Thomas R. » 11.05.2018, 06:38

Hallo Legxis,
da nichts so variable ist wie die Wünsche der Anwender arbeite ich soweit als möglich mit Layouts und nicht mit programmbeeinflussten Feldkatalogen.
D.h. Generiere Dir ein Layout, dass die Wünsche des Anwenders abbildet und gib das dem ALV mit.
Sollte sich dann die Anforderung ändern musst Du nur das ALV-Layout ändern und fertig.

MfG
Thomas R.
Thomas R.
Expert
 
Beiträge: 659
Registriert: 11.12.2002, 08:04
Dank erhalten: 24 mal

Re: OO ALV nach mehreren Spalten sortieren

Beitragvon Legxis » 11.05.2018, 09:59

Dank dieser Seite habe ich es nun endlich herausgefunden: https://gist.github.com/prakash13t/3f6ab732050bd29c7d23#file-sort_salv-abap

Code: Alles auswählen
*----------------------------------------------------------------------*
*      Form  sort_alv
*----------------------------------------------------------------------*
*       ALV nach mehreren Spalten sortieren und diese gruppieren
*----------------------------------------------------------------------*

FORM sort_alv.

  CALL METHOD go_alv->get_sorts
    RECEIVING
      value = go_sort.

  TRY.
      CALL METHOD go_sort->add_sort
      EXPORTING
        columnname = 'BUKRS'
        position   = '1'
        sequence   = if_salv_c_sort=>sort_up.
*        subtotal   = IF_SALV_C_BOOL_SAP=>FALSE
*        group      = IF_SALV_C_SORT=>GROUP_NONE
*        obligatory = IF_SALV_C_BOOL_SAP=>FALSE.
    CATCH cx_salv_not_found.
    CATCH cx_salv_existing.
    CATCH cx_salv_data_error.
  ENDTRY.

  TRY.
      CALL METHOD go_sort->add_sort
      EXPORTING
        columnname = 'EKORG'
        position   = '2'
        sequence   = if_salv_c_sort=>sort_up.
*        subtotal   = IF_SALV_C_BOOL_SAP=>FALSE
*        group      = IF_SALV_C_SORT=>GROUP_NONE
*        obligatory = IF_SALV_C_BOOL_SAP=>FALSE.
    CATCH cx_salv_not_found.
    CATCH cx_salv_existing.
    CATCH cx_salv_data_error.
  ENDTRY.

  TRY.
      CALL METHOD go_sort->add_sort
      EXPORTING
        columnname = 'VKORG'
        position   = '3'
        sequence   = if_salv_c_sort=>sort_up.
*        subtotal   = IF_SALV_C_BOOL_SAP=>FALSE
*        group      = IF_SALV_C_SORT=>GROUP_NONE
*        obligatory = IF_SALV_C_BOOL_SAP=>FALSE.
    CATCH cx_salv_not_found.
    CATCH cx_salv_existing.
    CATCH cx_salv_data_error.
  ENDTRY.

ENDFORM.                    "sort_alv
Ich bin Neuling und für jede Hilfe, Kritik, diverse Programmverbesserungen/-optimierung und schöne Codebeispiele dankbar^^
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )
Legxis
ForumUser
 
Beiträge: 71
Registriert: 12.01.2018, 08:59
Wohnort: Köln
Dank erhalten: 15 mal
Ich bin: Student/in


Zurück zu ABAP® Core

  Aktuelle Beiträge   
cl_salv_table und Docking Container
vor 4 Stunden von black_adept 1 Antw.
Wasserzeichnen in Smartform
vor 2 Tagen von 4byte 1 Antw.
Struktur Feld vom Typen Type ref to
Gestern von a-dead-trousers 1 Antw.
execute procedure
vor 2 Tagen von Legxis 1 Antw.
leere Felder im IDoc übertragen
vor 2 Tagen von wreichelt 1 Antw.

  Ähnliche Beiträge beta
Pfelgeview anders als nach dem schlüssel sortieren
23.03.2007, 19:05 von ewx 1 Antw.
Sortieren aufheben
09.02.2006, 10:02 von Kojak 2 Antw.
ALV: sortieren mit ADD_SORT( )
13.03.2008, 18:03 von babap 2 Antw.
Interne Tabelle Sortieren: Ein Phänomen!!
28.06.2004, 19:41 von hwalter 5 Antw.
dynamische interne Tabelle dynamisch sortieren
15.10.2004, 10:15 von Gast 11 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder