Gruppenstufen mittel ALV

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

Gruppenstufen mittel ALV

Beitrag von Rabea1103 (ForumUser / 66 / 0 / 1 ) »
Hallo,
ich habe eine interne Tabelle.
Die gruppiere ich mittel Group by nach z.B stadt.
Jetzt möchte ich in der Liste pro neue Gruppierung eine Überschrift mit der
Gruppierung ausgeben, und z.B die Anzahl pro Gruppierung.
Mit einer Write Anweisung geht es einfach geht es auch mit dem ALV.

Z.B.

Stadt: Hamburg 3 Eintrage -> das soll inn der Überschrift

Name1
Name2
Name3

---------------------------------

Stadt; München 2 Einträge
Name1
Name2
----------------------------------
Mit der Tabelle sort kann ichj im ALV gruppieren.
Aber wie mach ich es mit der Übeschrifz zwischen den Blöcken.

Gruß
Rabea

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


Re: Gruppenstufen mittel ALV

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Im ALV ist das über die Sortierung und Zwischensummen gelöst. Die "Überschrift" ist dabei fix über den Feldinhalt der sortierten Spalte(n) vorgegeben und kann nicht geändert werden.

Einfach für eine oder mehere Spalte(n) im Feldkatalog DO_SUM und in der Sortierung SUBTOT aktivieren. Wenn die Zwischensumme "oben" sein soll noch zusätzlich im Layout TOTALS_BEF aktivieren.
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: Gruppenstufen mittel ALV

Beitrag von ewx (Top Expert / 4846 / 311 / 642 ) »
a-dead-trousers hat geschrieben:
22.02.2023 18:26
Im ALV ist das über die Sortierung und Zwischensummen gelöst. Die "Überschrift" ist dabei fix über den Feldinhalt der sortierten Spalte(n) vorgegeben und kann nicht geändert werden.
Das kann ich so nicht stehen lassen... 😉

Siehe hier:
SNAG-0582.png
Leider lässt sich das Summenfeld selbst nicht ausblenden, sonst funktioniert die gesamte Gruppenstufenverarbeitung nicht mehr. Ich habe es auf Ausgabelänge "1" gesetzt.

So sieht die Originaltabelle aus:
SNAG-0583.png

Code: Alles auswählen.

REPORT zdemo_alv_summenzeilen.

*----------------------------------------------------------------------*
*       CLASS lcl_helper DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_helper DEFINITION FINAL.
  PUBLIC SECTION.

    TYPES:
      BEGIN OF ts_data,
        city   TYPE string,
        member TYPE string,
        count  TYPE i,
      END OF ts_data,
      tt_data TYPE STANDARD TABLE OF ts_data WITH DEFAULT KEY.


    CLASS-METHODS: read_data,
      display,
      handle_after_user_command FOR EVENT after_user_command OF cl_gui_alv_grid,
      summenzeilen_anpassen.

    CLASS-DATA: mo_grid TYPE REF TO cl_gui_alv_grid,
                mt_data TYPE tt_data.
ENDCLASS.                    "lcl_helper DEFINITION


START-OF-SELECTION.
  lcl_helper=>read_data( ).

END-OF-SELECTION.
  lcl_helper=>display( ).


*----------------------------------------------------------------------*
*       CLASS lcl_helper IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_helper IMPLEMENTATION.

  METHOD read_data.

    mt_data = VALUE #( count = 1
     ( city = 'München' member = 'Hans'       )
     ( city = 'Hamburg' member = 'Friedhelm'  )
     ( city = 'Hamburg' member = 'Maria'      )
     ( city = 'München' member = 'John'       )
     ( city = 'Kiel'    member = 'Alexandra'  )
     ( city = 'Kiel'    member = 'Wayne'      )
     ( city = 'Dresden' member = 'Martina'    )
     ( city = 'München' member = 'Volker   '  )
     ( city = 'Hamburg' member = 'Sylvia'     )
    ).

  ENDMETHOD.                    "read_data

  METHOD display.

    DATA: ls_variant TYPE disvariant.
    WRITE:/ 'Wenn man das hier liest, ist ein interner Fehler aufgetreten'. "#EC NOTEXT

*--------------------------------------------------------------------*
* ALV erzeugen
*--------------------------------------------------------------------*
    mo_grid = NEW #( i_parent = cl_gui_container=>screen0 ).

*--------------------------------------------------------------------*
* Event AFTER_USER_COMMAND nutzbar machen
* Da sehr viele Usercommands ( auch SAP-Usercommands ) implizit einen
* full-refresh des Grid durchführen, müssen wir uns stets dahinter klemmen
* um unsere eigene Zwischensummenzeilengenerierung zu erhalten
*--------------------------------------------------------------------*
    SET HANDLER handle_after_user_command FOR mo_grid.

*--------------------------------------------------------------------*
* Defaultlayouts ermöglichen, um Zwischensummen ohne Userinteraktion zu demonstrieren
*--------------------------------------------------------------------*
    ls_variant-handle = '0001'.
    ls_variant-report = sy-repid.

*--------------------------------------------------------------------*
* Anzeigen des grid
*--------------------------------------------------------------------*
    DATA(lt_fcat) = VALUE lvc_t_fcat(
      ( fieldname = 'CITY'   rollname = 'AD_CITY1' outputlen = 20 )
      ( fieldname = 'MEMBER' rollname = 'TEXT20'   coltext = 'Name'    outputlen = 20 )
      ( fieldname = 'COUNT'  rollname = 'INT4'     coltext = 'Counter' outputlen = 1 do_sum = abap_true )
      ).

    DATA(lt_sort) = VALUE lvc_t_sort(
      ( spos      = 1
        fieldname = 'CITY'
        up        = abap_true
        group     = abap_true
        subtot    = abap_true
        expa      = abap_true
        level     = 1 )
        ).

    mo_grid->set_table_for_first_display(
      EXPORTING
        is_variant      = ls_variant
        i_save          = 'A'
        i_default       = 'X'
      CHANGING
        it_outtab       = mt_data
        it_fieldcatalog = lt_fcat
        it_sort         = lt_sort
      EXCEPTIONS
        OTHERS          = 1 ).

*--------------------------------------------------------------------*
* Summen- oder Zwischensummenzeilen manipulieren
*--------------------------------------------------------------------*
    summenzeilen_anpassen( ).

  ENDMETHOD.                    "display

  METHOD handle_after_user_command.
*--------------------------------------------------------------------*
* SAP hat evtl. noch keinen Refresh gemacht.
* Daher würden Änderungen, die in der Methode   summenzeilen_anpassen
* gemacht und dann mit soft-refresh an den Grid gereicht würden im
* Nachgang durch den ausstehenden full-refresh zunichte gemacht, da
* der Grid beim full refresh auch die Summen- und Zwischensummenzeilen
* neu generiert
* Daher wird der full-refresh jetzt explizit vor unserer Anpassung
* ausgeführt und der nachfolgende soft_refresh lässt unsere
* Summenzeilen stehen.
*--------------------------------------------------------------------*
    mo_grid->refresh_table_display( i_soft_refresh =  ' ' ).


*--------------------------------------------------------------------*
* Summen- oder Zwischensummenzeilen manipulieren
*--------------------------------------------------------------------*
    summenzeilen_anpassen( ).

  ENDMETHOD.                    "handle_AFTER_USER_COMMAND

  METHOD summenzeilen_anpassen.

    DATA: lr_data_summe         TYPE REF TO data,
          lr_data_zwischensumme TYPE REF TO data,
          lt_grouplevels        TYPE lvc_t_grpl, "#EC NEEDED  Normalerweise braucht man das um gezielt die Zwischensummen zu manipulieren
          lv_tabix              TYPE numc2.

    FIELD-SYMBOLS: <lt_data> TYPE tt_data,
                   <ls_data> TYPE ts_data.
*--------------------------------------------------------------------*
* Zwischensummenzeilen holen -
*--------------------------------------------------------------------*
    mo_grid->get_subtotals( IMPORTING
                              ep_collect00   = lr_data_summe           " Summenzeile
                              ep_collect01   = lr_data_zwischensumme   " Zwischensummenzeile - Stufe 1
*                             EP_COLLECT02 - EP_COLLECT09                Zwischensummenzeilen - Stufe 2-9
                              et_grouplevels = lt_grouplevels ).       " Informationen welche Zwischensummenzeile(n) zu welchen Gridzeilen gehören

*--------------------------------------------------------------------*
* Hier kann das jetzt hinreichend komplex werden
* Zur Demo werde ich in alle Summen und Zwischensummen im Feld
* "CITY" etwas einfüllen
*--------------------------------------------------------------------*
    IF lr_data_summe IS BOUND.
      ASSIGN lr_data_summe->* TO <lt_data>.
      LOOP AT <lt_data> ASSIGNING <ls_data>.
        lv_tabix = sy-tabix.
        <ls_data>-city   = 'Total'.
        <ls_data>-member = |{ <ls_data>-count } member{ cond #( when <ls_Data>-count > 1 then 's' ) }|.   "#EC NOTEXT
      ENDLOOP.
    ENDIF.

    IF lr_data_zwischensumme IS BOUND.
      ASSIGN lr_data_zwischensumme->* TO <lt_data>.
      LOOP AT <lt_data> ASSIGNING <ls_data>.
        lv_tabix = sy-tabix.
        <ls_data>-member = |{ <ls_data>-count } member{ cond #( when <ls_Data>-count > 1 then 's' ) }|.   "#EC NOTEXT
      ENDLOOP.
    ENDIF.

*--------------------------------------------------------------------*
* ALV-Anzeige neu aufbauen lassen, ohne Zwischensummen vom ALV generieren zu lassen
*--------------------------------------------------------------------*
    mo_grid->refresh_table_display( i_soft_refresh =  'X' ).

  ENDMETHOD.                    "summenzeilen_anpassen
ENDCLASS.                    "lcl_helper IMPLEMENTATION

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag (Insgesamt 2):
a-dead-trousersLukas Sanders


Re: Gruppenstufen mittel ALV

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Danke, jetzt weiß ich das auch ... 😅
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

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1046
Views
REUSE_ALV_LIST_DISPLAY Gruppenstufen Wechsel
von Betze82 » 05.12.2005 08:56 • Verfasst in ABAP® für Anfänger
1
Antw.
1413
Views
GOS zur Faktur prüfen mittel ABAP
von wreichelt » 13.07.2015 08:29 • Verfasst in Sales and Distribution

Aktuelle Forenbeiträge

Eclipse - warum/wann verwendet ihr es [nicht]
vor 10 Stunden von tar 21 / 1724
Dialog-Container mit Toolbar/Status
vor 12 Stunden von DeathAndPain gelöst 22 / 3141
Daten an Tabelle binden
vor 17 Stunden von Lukas Sanders 2 / 1029
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 602

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.

Aktuelle Forenbeiträge

Eclipse - warum/wann verwendet ihr es [nicht]
vor 10 Stunden von tar 21 / 1724
Dialog-Container mit Toolbar/Status
vor 12 Stunden von DeathAndPain gelöst 22 / 3141
Daten an Tabelle binden
vor 17 Stunden von Lukas Sanders 2 / 1029
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 602

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2602
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9188