ALV Grid Sortierung - Doppelte Werte gruppieren

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
11 Beiträge • Seite 1 von 1
11 Beiträge Seite 1 von 1

ALV Grid Sortierung - Doppelte Werte gruppieren

Beitrag von der_neuling (ForumUser / 89 / 18 / 3 ) »
Hallo,

ich komme lieber direkt zur Sache:
Ich lasse mir ein Warenlager anzeigen mit einer Sortierung auf die Materialnummer, was bisher bedeutet hatte dass alle mehrfachen Werte gruppiert wurde, siehe dazu das Bild:
grouped_values.png
Nun hatte ich eine neue Anforderung, es soll eine Checkbox am Anfang installiert werden, gesagt getan, neues Field hinzugefügt und den Feldkatalog so aufgebaut:

Code: Alles auswählen.

TYPES: begin of ty_material_bmo_lager,
        checkbox type c LENGTh 1,  "field for checkbox
        include TYPE zle_bmo_material,
       end of ty_material_bmo_lager.
***************************************
 CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
      EXPORTING
        i_structure_name = 'ZLE_BMO_MATERIAL'
      CHANGING
        ct_fieldcat      = gt_fieldcat.

    gt_fieldcat = VALUE #( BASE gt_fieldcat ( fieldname = 'CHECKBOX' checkbox = 'X' edit = 'X' coltext = 'TEXT1' tooltip = 'Tooltip' seltext = 'SELTEXT'  ) ).

    gt_sort = VALUE #( ( fieldname = 'IDNRK'  spos = 1 up = 'X') ).

    gs_layout-no_toolbar = ''.
    gs_layout-cwidth_opt = 'X'. "Optimized Col Width

    " Display itab in ALV-Grid
    go_alv->set_table_for_first_display(
    EXPORTING
      i_structure_name = 'ZLE_BMO_MATERIAL'  " if active the FieldCatalogue is generated automatically
      is_layout = gs_layout "Layout-Settings, above defined
*      is_variant                    = gs_variant
*      i_save                        = 'U'  "Only User-sepcific , A would be Default too
    CHANGING
      it_fieldcatalog               = gt_fieldcat
      it_outtab                     = go_bom_stock_comp->mt_material_bmo_lager "Output table
      it_sort                       = gt_sort
    EXCEPTIONS
      OTHERS                        = 1
      ).
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
Nun allerdings verschwindet diese Gruppierung bei den Materialnummern:
duplicates_visible.png
Hat da jemand eine Idee wie ich beides unter einen Hut bekomme?

Viele Grüße

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: ALV Grid Sortierung - Doppelte Werte gruppieren

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Die Key-Spalten sind (soweit ich das an den Screenshots erkennen kann) auch irgendwie "verschwunden". Zumindest haben sie eine andere Farbe bekommen.
Vermutlich musst du den Feldkatalog noch etwas mehr anpassen müssen, da eine neue Spalte vor den bestehenden Key-Spalten eingefügt wurde. Versuch daher mal das KEY-Flag in allen Spalten zu entfernen oder für die neue Spalte ebenfalls zu setzen.

EDIT:
Diese Art der "Gruppierung" basierend auf der Sotrierung lässt sich grundsätzlich über das LAYOUT steuern. Mit NO_MERGING kann man es aber nur abschalten, wenn man nicht möchte. Den Rest verwaltet das ALV-Grid selbst. Alternativ gibt es in der Sortierung auch die Möglichkeit mit GROUP eigene Gruppenstufen zu definieren. Das sieht dann aber etwas anders aus.
Hier ein Beispiel (Screenshot) dazu: https://sgstocks.tripod.com/alvgrid_control.htm
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV Grid Sortierung - Doppelte Werte gruppieren

Beitrag von der_neuling (ForumUser / 89 / 18 / 3 ) »
a-dead-trousers hat geschrieben:
06.05.2022 07:52
Alternativ gibt es in der Sortierung auch die Möglichkeit mit GROUP eigene Gruppenstufen zu definieren. Das sieht dann aber etwas anders aus.
Hier ein Beispiel (Screenshot) dazu: https://sgstocks.tripod.com/alvgrid_control.htm
Hi, also alle Versuche mit dem Feldkatalog sind gescheitert, weder Löschen aller Keys, noch Hinzufügen der Checkbox als Key noch verschieben der Checkbox hinter die Schlüssel haben zum Erfolg geführt.

Wie funktioniert das Gruppieren über die sort Tabelle? In deinem verlinkten Beispiel ist zwar das Musterbild mit Sortierung, im Quellcode fehlt es dann aber 😊

Re: ALV Grid Sortierung - Doppelte Werte gruppieren

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Mist.
Denkfehler auf meiner Seite, Sorry.
Wenn man das ALV auf "Editierbar" schaltet und dafür reicht, glaube ich, nur eine Spalte, war es das mit der Gruppierung.
Ob es mit den Gruppenstufen klappt, wage ich damit auch zu bezweifeln. Nichtsdestotrotz, die Gruppenstufen wie im Screenshot erreicht man indem man SUBTOT in der Sortierung aktiviert. (Hab grad nochmal nachgeschaut, das Feld GROUP wird für irgendwas anderes verwendet)
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV Grid Sortierung - Doppelte Werte gruppieren

Beitrag von der_neuling (ForumUser / 89 / 18 / 3 ) »
a-dead-trousers hat geschrieben:
06.05.2022 13:04
Wenn man das ALV auf "Editierbar" schaltet und dafür reicht, glaube ich, nur eine Spalte, war es das mit der Gruppierung.
Alles klar, danke dir für die Hilfe, das ist zwar per Definiton nicht die Lösung, aber zumindest die richtige Antwort auf meine Frage 😊

Re: ALV Grid Sortierung - Doppelte Werte gruppieren

Beitrag von der_neuling (ForumUser / 89 / 18 / 3 ) »
Falls noch mal jemand so ein Thema aufgreifen möchte: Um die gesetzten Häkchen aus der GUI im PAI zu sehen müssen die Daten erst explizit geholt werden:

Code: Alles auswählen.

"go_alv type ref to cl_gui_alv_grid 

      "Otherwise no filled Checkboxes are visible
      IF NOT go_alv IS INITIAL.
        CALL METHOD go_alv->check_changed_data .
      ENDIF.

Re: ALV Grid Sortierung - Doppelte Werte gruppieren

Beitrag von black_adept (Top Expert / 4086 / 126 / 940 ) »
der_neuling hat geschrieben:
05.05.2022 16:56
Nun allerdings verschwindet diese Gruppierung bei den Materialnummern:
Hat da jemand eine Idee wie ich beides unter einen Hut bekomme?
Du könntest die Gruppierung quasi selbst programmieren, wenn du die OK-Codes, die die Ausgabe beeinflussen abfängst . Da fallen mir z.B. die beiden Sortierbuttons und die Filter direkt ein.
Entweder diese Buttons ausblenden oder nach Klick auf den Button selber tätig werden.
Und mit "selbst programmieren" meine ich die Trennlinien zwischen 2 Zellen in angrenzenden Zeilen mit gleichem Zelleneninhalt über die Cellstyles auszublenden.

Aber ob das den Aufwand wert ist wage ich zu bezweifeln.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: ALV Grid Sortierung - Doppelte Werte gruppieren

Beitrag von der_neuling (ForumUser / 89 / 18 / 3 ) »
black_adept hat geschrieben:
09.05.2022 12:51
Aber ob das den Aufwand wert ist wage ich zu bezweifeln.
Nein der Aufwand wäre vermutlich tatsächlich zu hoch.
Ich habe es nun folgendermaßen gelößt:
Die Checkbox ist standardmäßig auf Read-Only gestezt (Edit = ' '), damit bleibt die Gruppierung erhalten.

Über einen Button in der GUI setze ich dann bei Bedarf das Feld auf Edit = 'X', und ich kann die Checkboxen auswählen.

Ist jetzt vielleicht nicht die optimalste Lösung, aber die Gruppierung dient ja hauptsächlich der Übersichtlichkeit beim Anzeigen. Deswegen ist dieser Workaround für meine Umstände ausreichend.

Re: ALV Grid Sortierung - Doppelte Werte gruppieren

Beitrag von black_adept (Top Expert / 4086 / 126 / 940 ) »
Könntest du bitte mal das Wort "optimalst" definieren?
Klingt stark nach "einzigst".
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: ALV Grid Sortierung - Doppelte Werte gruppieren

Beitrag von black_adept (Top Expert / 4086 / 126 / 940 ) »
Hmm - wenn es "nur" um das Ankreuzfeld geht. Da kann man auch mit wenig Aufwand was schickes mit den Styles basteln.
Minibeispiel was wohl das macht was du suchst ( bitte nach der Nicht-Ankreuzspalte sortieren ).

Code: Alles auswählen.

REPORT zknobel_xstring.

INCLUDE <cl_alv_control>.

CLASS lcl DEFINITION FINAL.
  PUBLIC SECTION.
    TYPES: BEGIN OF mts_data,
             box     TYPE char1,
             line    TYPE text10,
             t_style TYPE lvc_t_styl,
           END OF mts_data.
    METHODS:
      main,
      get_fcat RETURNING VALUE(rt_fcat) TYPE lvc_t_fcat,
      handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid IMPORTING es_row_no sender.
    DATA: mt_data TYPE STANDARD TABLE OF mts_data WITH NON-UNIQUE DEFAULT KEY.
ENDCLASS.

END-OF-SELECTION.

  NEW lcl( )->main( ).

CLASS lcl IMPLEMENTATION.
  METHOD main.
    DO 10 TIMES.
      APPEND VALUE #( line = sy-index DIV 3 ) TO me->mt_data ASSIGNING FIELD-SYMBOL(<ls_data>).
      APPEND VALUE #( fieldname = 'BOX'
                      style    = alv_style_checkbox_not_checked
                    ) TO <ls_data>-t_style.
    ENDDO.


    DATA(lt_fcat) = me->get_fcat( ).
    DATA(lo_grid) = NEW cl_gui_alv_grid( i_parent = cl_gui_container=>screen0 ).
    SET HANDLER me->handle_hotspot_click FOR lo_grid.
    lo_grid->set_table_for_first_display(
      EXPORTING
        is_layout                     = VALUE #( stylefname = 'T_STYLE'
                                               )
      CHANGING
        it_outtab                     = me->mt_data
        it_fieldcatalog               = lt_fcat      " Field Catalog
      EXCEPTIONS
        invalid_parameter_combination = 1                    " Wrong Parameter
        program_error                 = 2                    " Program Errors
        too_many_lines                = 3                    " Too many Rows in Ready for Input Grid
        OTHERS                        = 4
    ).
    ASSERT sy-subrc = 0.
    WRITE '.'.
  ENDMETHOD.

  METHOD get_fcat.
    APPEND VALUE #( fieldname = 'BOX'
                    hotspot   = 'X'
                  ) TO rt_fcat.
    APPEND VALUE #( fieldname = 'LINE'
                  ) TO rt_fcat.
  ENDMETHOD.

  METHOD handle_hotspot_click.
    READ TABLE me->mt_data ASSIGNING FIELD-SYMBOL(<ls_data>) INDEX es_row_no-row_id.
    CHECK sy-subrc = 0.
    CLEAR <ls_data>-t_style.
    IF <ls_data>-box = 'X'.
      <ls_data>-box = space.
      APPEND VALUE #( fieldname = 'BOX'
                      style    = alv_style_checkbox_not_checked
                    ) TO <ls_data>-t_style.
    ELSE.
      <ls_data>-box = 'X'.
      APPEND VALUE #( fieldname = 'BOX'
                      style    = alv_style_checkbox_checked
                    ) TO <ls_data>-t_style.
    ENDIF.
    sender->refresh_table_display( EXPORTING
                                      is_stable      = VALUE #( row = 'X' col = 'X' )
*                                      i_soft_refresh = i_soft_refresh " Without Sort, Filter, etc.
                                    EXCEPTIONS
                                      finished       = 1              " Display was Ended (by Export)
                                      OTHERS         = 2
                                  ).
  ENDMETHOD.
ENDCLASS.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: ALV Grid Sortierung - Doppelte Werte gruppieren

Beitrag von ewx (Top Expert / 4843 / 311 / 638 ) »
Mich würde ja irritieren, dass es nun zwei Checkboxen gibt...
SNAG-0663.png
Die würde ich noch ausschalten (LAYOUT-NO_ROWMARK = 'X').

Im Quartz-Theme werden die Markierspalten als Checkbox dargestellt.
Irritierenderweise verhalten sich diese allerdings genau so, wie Markierspalten: Um mehrere Zeilen auszuwählen, muss man die STRG-Taste gedrückt halten.

Aber zu deinem "Problem": Ich würde da nichts weiter machen. Finde ich zwar seltsam, dass in dem Fall, dass die Checkbox mit angezeigt wird, keine automatische Gruppierung mehr passiert, aber das ist dann eben so.

Ich persönlich finde das Verhalten sogar gut, denn wenn eine ganze Bildschirmseite gruppierte Materialnummern enthält, dann ist erstmal nicht direkt ersichtlich, welche Materialnummer ich unten anklicke.

Seite 1 von 1

Vergleichbare Themen

30
Antw.
11191
Views
Werte einer internen Tabelle gruppieren und auslesen
von bohne » 07.03.2006 21:01 • Verfasst in ABAP® für Anfänger
6
Antw.
4303
Views
doppelte Werte in ALV Ausgabe
von robin1at » 27.04.2006 13:16 • Verfasst in ABAP® für Anfänger
1
Antw.
1824
Views
nicht doppelte Werte filtern und in interne Tabelle schreibe
von thomasxy » 12.03.2008 13:06 • Verfasst in ABAP® für Anfänger
4
Antw.
5062
Views
ALV Grid Sortierung aktualisieren im grid 1 und grid 2
von c oco » 06.02.2012 10:09 • Verfasst in ABAP Objects®
6
Antw.
6481
Views
Sortierung und Editierbarkeit im ALV(OO)-Grid
von ralle » 03.03.2006 13:52 • Verfasst in ABAP Objects®

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 4 Stunden von Bright4.5 1 / 71
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1718
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8323