ALV-Liste: Einzelne Summen-Felder (bzw. Zeilen) ausgeben

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

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

ALV-Liste: Einzelne Summen-Felder (bzw. Zeilen) ausgeben

Beitrag von S.D.E.F. ( / / 0 / 3 ) »
Hi Leutz,

hab da ein kleines Problem, dass ihr bestimmt lösen könnt. Es geht um folgendes:

Es war einmal eine ALV-Liste mit Werks-Nummer, Material, Bestellung, Nettowert und Anzahl.
Die Werksnummer wird gruppiert, Nettowert und Anzahl summiert.

Soweit die Einführung. Mein Problem ist aber, dass ich erstens nur Werks-Nummer, Nettowert und Anzahl anzeigen will und zweitens auch nur immer die Werks-Nummer mit summiertem Nettowert und summierter Anzahl, also halt zusammengefasst.

Manuell bekomm ich das einfach über Einstellungen -> Summenaufriss festlegen... hin. Da wähl ich dann nur Werks-Nummer aus und es fasst mir alles zusammen (nur die Spalten muss ich dann noch entfernen). Wie aber funktioniert das in ABAP?

Zum weiteren Verständnis: Der User kann im Selection-Screen ankreuzen ob er eine Detailausgabe will oder nicht. Bei der Detailausgabe sollen alle einzelnen Datensätze angezeigt werden, ansonsten nur die Zusammenfassung.

Need your help! Hit me back!

Greetz
Esteban

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


Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Hallo Esteban,

Die Steuerung welche Felder angezeigt werden sollen, macht man im Feldkatalog je Feld über die Attribute NO_OUT und ggf. TECH (bitte Doku dazu lesen).

Die Steuerung für Summenzeilen und deren Anzeige wird zum einen über das Layout-Attribut TOTALS_ONLY und über die Sorttabelle (IT_SORT) gemacht.
Im Layout gibt man folgendes an:
ILAYOUT-totals_only = 'X'.
In der Sorttabelle gibt man zu den gewünschten Summenfeldern (in deinem Falle WERK) folgendes an:
SORTINFO-UP = 'X'.
SORTINFO-SUBTOT = 'X'.
SORTINFO-comp = 'X'.
SORTINFO-expa = 'X'.

Eine andere Alternative wäre mit vordefinierten globalen (nicht benutzerspezifischen) Listvarianten zu arbeiten (Parameter IS_VARIANT), die man je nach Bedarf beim Aufruf des ALV mitgibt.

mfg dele

ALV Liste summieren

Beitrag von falk (ForumUser / 42 / 9 / 1 ) »
Hallo Esteban,

ich hatte mit der Erstellung einer Auswertung zur Lieferquote ein ähnliches Problem:
- Verdichtung nach verschieden Kriterien,
- Ausblenden der nicht mehr gefüllten Spalten.

Vielleicht hilfts Dir ja:
http://www.abapforum.com/forum/viewtopi ... 7&start=30

Falk

Beitrag von Gast ( / / 0 / 3 ) »
das mit totals_only hab ich hinbekommen. jetzt passt es wunderbar. nur die überflüssigen spalten hab ich noch nicht rausbekommen... versuch das no_out da gerade irgendwie reinzupacken, aber funktioniert nicht so wie ich will. schauts euch mal an:

Code: Alles auswählen.

  LOOP AT alv_fields INTO wa_feldkatalog.
    IF p_detail NE 'X'.


      IF wa_feldkatalog-fieldname = 'MATNR'.
        wa_feldkatalog-no_out = 'X'.
        MODIFY alv_fields FROM wa_feldkatalog.
      ENDIF.

      IF wa_feldkatalog-fieldname = 'LGORT'.
        wa_feldkatalog-no_out = 'X'.
        MODIFY alv_fields FROM wa_feldkatalog.
      ENDIF.

      IF wa_feldkatalog-fieldname = 'LIFNR'.
        wa_feldkatalog-no_out = 'X'.
        MODIFY alv_fields FROM wa_feldkatalog.
      ENDIF.

      IF wa_feldkatalog-fieldname = 'WEMPF'.
        wa_feldkatalog-no_out = 'X'.
        MODIFY alv_fields FROM wa_feldkatalog.
      ENDIF.
      
    ENDIF.
  ENDLOOP.

muss ich da denn jeden fieldname einzeln angeben? kann ich ihm nicht irgendwie sagen, dass er das immer machen soll, wenn eine spalte keine werte hat?

gruss
esteban

Beitrag von TakerOne (Specialist / 102 / 0 / 3 ) »
Hi,

hast du denn nach der Änderung auch ein

REFRESH_TABLE_DISPLAY

durchgeführt?

Gruß TakerOne
Ich bin eigentlich ein sehr netter Mensch.
Wenn ich Freunde hätte, könnten diese es bestätigen. :-)

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Hallo Esteban,

dein Coding sieht eigentlich gut aus. (Allerdings würde es genügen, wenn du den Modify nur einmal vor dem letzten ENDIF machen würdest.)
Bitte prüfe, ob dein Feldkatalog beim ALV auch so ankommt. Das kannst du wie folgt machen, wenn die Liste angezeigt wird:
- Im ALV-Classic musst du &SOS im OK-Code eingeben
- Im ALV-Grid musst du auf einem freien Bereich in der Anzeige STRG+SHIFT und Doppelklick mit der rechten Maustaste ausführen.
In beiden Fällen kannst du dir dann den Feldkatalog (und andere Informationen) wie er im ALV ankommt, anzeigen lassen.

mfg dele

Beitrag von Flo (Specialist / 161 / 0 / 0 ) »
Ein Modify immer durchzuführen würde bei grossen Feldkatalogen unter Umständen für Performanceverluste sorgen. Man will ja nur die Zeilen des Kataloges verändern in denen sich Daten geändert haben. Die Feldnamen dynamisch durchzugehen und zu prüfen ob die Spalte leer ist ist schon möglich, allerdings könnte das Performance kosten.
anbei mal kleiner code wie es funktionieren kann. Der Code ist natürlich nicht vollständig und durchgetestet. tab ist die Datentabelle.:

Code: Alles auswählen.

      LOOP AT catalog INTO catalog_wa.
        CASE catalog_wa-fieldname.
          WHEN OTHERS.
            READ TABLE tab WITH KEY (catalog_wa-fieldname) = space
 TRANSPORTING NO FIELDS.
            IF sy-subrc = 0.
              catalog_wa-no_out = 'X'.
              MODIFY catalog FROM catalog_wa.
            ELSE.
              CONTINUE.
            ENDIF.
        ENDCASE.

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Hallo Flo,

==> zur Performance mit Modify:
im Prinzip hast du recht. Aber bei einer Routine, die im Programm nur wenige Male ausgeführt wird, spielt das faktisch keine Rolle. Ich behaupte, dass du noch nicht einmal bei einem Feldkatalog mit 10.000 Einträgen einen spürbaren Unterschied merkst (Kannst es ja einfach einmal testen).

==> zur Ermittlung der Spalten mit initialem Inhalt:
Dein Coding, um Spalten zu ermitteln, die in der Datentabelle nicht gefüllt sind, scheint mir nicht ganz korrekt. Denn wenn du einen Eintrag findest, der den Inhalt Space hat, heisst das ja nicht, das alle Zeilen den Inhalt Space haben. Ausserdem ist Space nicht unbedingt der Initialwert eines numerischen Feldes.
Ich würde folgende Lösung vorschlagen:

Code: Alles auswählen.


FIELD-SYMBOLS:
          <field>    TYPE  ANY,
          <itdata>   TYPE  itdata,
          <ltfdcat>  TYPE  slis_fieldcat_alv,
          <itfdcat>  TYPE  slis_fieldcat_alv.
DATA:     wafdcat    TYPE  slis_fieldcat_alv.
DATA:     ltfdcat    TYPE  slis_t_fieldcat_alv.

MOVE           itfdcat[]         TO     ltfdcat[].

LOOP AT itdata      ?dataentabelle  
     assigning      <itdata>.
     LOOP AT ltfdcat
          assigning      <ltfdcat>.
          ASSIGN         COMPONENT         <ltfdcat>-fieldname
              OF         STRUCTURE         <itdata>
              TO         <field>.
          CHECK   NOT    <field>           IS     INITIAL.
          DELETE         ltfdcat.
     ENDLOOP.
     IF   ltfdcat[] IS INITIAL.
          EXIT.
     ENDIF.
ENDLOOP.

LOOP AT ltfdcat
     assigning      <ltfdcat>.
     READ TABLE     itfdcat
          ASSIGNING <itfdcat>
          FROM      <ltfdcat>.
     MOVE           c_true            TO     <itfdcat>-no_out.
ENDLOOP.
mfg dele

Beitrag von Flo (Specialist / 161 / 0 / 0 ) »
Ups ja das Coding war bischen vorschnell gepostet :oops:

zu dem Modify noch was ( ist geschmackssache ) 8)

Code: Alles auswählen.

loop at catalog into catalog_wa.
case catalog_wa-fieldname.
when 'FELD1'.
...
when 'FELD2'.
...
WHEN others.
continue.
endcase.
modify catalog from catalog_wa.
endloop.
So finde ich es am übersichtlichsten und der Modify wird nur durchgeführt wenn bei dem Feld Änderungen passiert sind da continue in den nächsten Schleifendurchlauf springt. Feldsymbole sind natürlich auch gut, aber man (bzw ich )muss immer noch paar Sekunden länger nachdenken. :wink:

Seite 1 von 1

Vergleichbare Themen

2
Antw.
2468
Views
ALV: Einzelne Zeilen nicht löschbar
von Verzettelt » 08.06.2006 08:47 • Verfasst in ABAP Objects®
10
Antw.
4949
Views
TableControl: einzelne Zeilen der Ausgabe löschen?
von ChrizB » 16.01.2006 08:28 • Verfasst in ABAP® für Anfänger
2
Antw.
5387
Views
Einzelne Zeilen im ALV auf nicht editierbar setzen nur wie?
von GAST » 07.12.2004 15:26 • Verfasst in ABAP Objects®
4
Antw.
3604
Views
Table Control: Einzelne Zeilen sperren? Eilt etwas... :(
von Spaulding » 27.04.2005 12:56 • Verfasst in Dialogprogrammierung
1
Antw.
2712
Views
WD ALV einzelne Felder zeilenweise sperren
von Thanatos82 » 04.01.2013 12:57 • Verfasst in ABAP® Core

Ü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

Aktuelle Forenbeiträge

Eclipse - warum/wann verwendet ihr es [nicht]
vor einer Stunde von tar 21 / 1392
Dialog-Container mit Toolbar/Status
vor 3 Stunden von DeathAndPain gelöst 22 / 2794
Daten an Tabelle binden
vor 8 Stunden von Lukas Sanders 2 / 872
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 428

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 einer Stunde von tar 21 / 1392
Dialog-Container mit Toolbar/Status
vor 3 Stunden von DeathAndPain gelöst 22 / 2794
Daten an Tabelle binden
vor 8 Stunden von Lukas Sanders 2 / 872
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 428

Unbeantwortete Forenbeiträge

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