Report Summieren der Werte einer Internen Tabelle

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

Report Summieren der Werte einer Internen Tabelle

Beitrag von ArjenR (ForumUser / 12 / 8 / 0 ) » 03.01.2020 09:02
Hallo Zusammen,

ich beschäftige mich seit kurzem mit dem erstellen von Reports in SAP. Ich habe ein paar Beispiel Mitarbeiter erstellt und mir einen Report erstellt, wo mir monatlich ausgegeben wird, wie viele Tage diese Mitarbeiter Aufgrund von verschiedenen Abwesenheiten, Abwesend waren. Ich hab dies mit Hilfe einer Internen Tabelle und dem collect Befehl umsetzen können.

Ich würde jetzt sehr gern die verschieden Abwesenheiten beispielsweise für Januar summieren, um so zu sehen wie viele Tage die MA insgesamt aufgrund von verschiedenen Abwesenheiten, Abwesend waren. Es sollen also alle Abwesenheitstage der verschiedenen Abwesenheiten summiert werden. In Excel wäre das kein Problem, aber in ABAP bin ich etwas überfragt.

Für einen kleinen Denkanstoß wäre ich sehr dankbar und bedanke mich dafür im Voraus.

Viele Grüße

A. R.


Re: Report Summieren der Werte einer Internen Tabelle

Beitrag von wreichelt (Expert / 810 / 19 / 137 ) » 03.01.2020 10:56
Hallo,

muss es unbedingt ein eigener Report sein, in der Zeitwirtschaft gibt es doch viele Auswertungen:

Personal -> Personalzeitwirtschaft -> Administration -> Infosystem -> Berichtsauswahl

Gruß Wolfgang

Re: Report Summieren der Werte einer Internen Tabelle

Beitrag von DeathAndPain (Top Expert / 1423 / 153 / 325 ) » 03.01.2020 11:23
Ansonsten ist das auch in ABAP leicht zu bewerkstelligen und wäre sicherlich eine gute Programmierübung, wenn Du es noch nicht beherrschst. Aber dazu wäre es extrem hilfreich, wenn Du Deinen bisherigen Code zum besten geben könntest (bitte einschließlich aller Typ- und Felddefinitionen). Dann sehen wir, in welcher Form/in welchen Feldern Du genau die Daten bisher vorzuliegen hast und können Dir konkrete Programmiervorschläge machen.

Re: Report Summieren der Werte einer Internen Tabelle

Beitrag von jocoder (Specialist / 203 / 3 / 55 ) » 03.01.2020 11:40
Ähnlich zu Excel gibt es im SAP das ALV-Grid, das die Datensätze direkt anzeigt, Zwischensummen bildet usw...
Wenn es bereits wie wreichelt erwähnt hatte, einen Report gibt, reicht es die Summation im Layout einzustellen.

Wenn ein eigener Report notwendig ist, findest du im Programm DEMO_GUI_ALV_GRID_EXT ein Beispiel für die Verwendung eines ALV-Grids.

Re: Report Summieren der Werte einer Internen Tabelle

Beitrag von ArjenR (ForumUser / 12 / 8 / 0 ) » 03.01.2020 15:11
DeathAndPain hat geschrieben:
03.01.2020 11:23
Ansonsten ist das auch in ABAP leicht zu bewerkstelligen und wäre sicherlich eine gute Programmierübung, wenn Du es noch nicht beherrschst. Aber dazu wäre es extrem hilfreich, wenn Du Deinen bisherigen Code zum besten geben könntest (bitte einschließlich aller Typ- und Felddefinitionen). Dann sehen wir, in welcher Form/in welchen Feldern Du genau die Daten bisher vorzuliegen hast und können Dir konkrete Programmiervorschläge machen.
Erstmal vielen Dank für die ganzen Antworten. Genau es soll als Programmierübung dienen. Den Quellcode habe ich leider grad nicht zur Hand (hätte ich erst Montag wieder), mich wurmt es aber das ich einfach keinen Lösungsansatz hinbekommen habe.

Wie beschrieben die Ausgabe der Abwesenheiten klappt wunderbar. Von allen MA werden diese zusammenfasst und dann für den jeweiligen Monat ausgegeben.

Ausgabe sieht dann wie folgt aus:

Urlaub 30
Krankheit 10
Sonderurlaub 5


und für mich wäre jetzt interessant, diese Werte zu summieren um die kompletten Abwesenheitstage zu erhalten.

Vielleicht können Sie mir ja einen Tipp geben wie Sie an diese Sache herangehen würden.

Vielen Dank und ein schönes Wochenende gewünscht.

A. R.

Re: Report Summieren der Werte einer Internen Tabelle

Beitrag von DeathAndPain (Top Expert / 1423 / 153 / 325 ) » 06.01.2020 08:06
Na ja, Du wirst ja dann eine interne Tabelle haben, in der die Einzelwerte drinstehen. Sofern Deine interne Tabelle einen geeigneten Schlüssel hat, könntest Du einfach eine LOOP-Schleife darüber machen, z.B. eine, mit der Du die einzelnen Zeilen ausgibst. Am Ende machst Du dann (innerhalb des LOOPs) ein

Code: Alles auswählen.

AT END OF meine_tabelle.
  SUM.
  WRITE: 'Gesamtzahl', meine_tabelle-anzahl.
ENDAT.
Kannst ja Obenstehendes mal in den ABAP Editor eingeben und Dir die F1-Hilfe von SUM durchlesen (Cursor auf SUM setzen und F1 drücken).

Obwohl das einwandfrei funktioniert, sind mir persönlich diese eingebauten Funktionalitäten der AT-Ereignisse innerhalb von LOOPs nicht so sympatisch. Ich programmiere sowas lieber von Hand aus, dann sieht man nach meinem Empfinden deutlicher, was passiert (weil es dann keine Hintergrundwirkung von Tabellenschlüsseln gibt, die in diesem Fall sogar bei Standardtabellen relevant sind). Das ist auch nicht schwer und sähe dann so aus:

Code: Alles auswählen.

TYPES: BEGIN OF meine_tabelle,
  abwesenheitsart(20) TYPE C,
  anzahl TYPE I,
       END OF meine_tabelle.

DATA: meine_tabelle TYPE STANDARD TABLE OF meine_tabelle WITH EMPTY KEY, " SORTED oder HASHED würde mit beliebigem Schlüssel auch funktionieren; spielt für mein Beispiel keine Rolle
      summe TYPE I.

PERFORM fill_table CHANGING meine_tabelle.

LOOP AT meine_tabelle ASSIGNING FIELD-SYMBOL(<meine_tabelle>).
  ADD <meine_tabelle>-anzahl TO summe.
ENDLOOP.

WRITE summe.
Tatsächlich möchte ich wetten, dass es mit ABAP-7.40 Syntax sogar irgendeine Möglichkeit gibt, das komplett ohne LOOP-Schleife zu erledigen, mit FOR oder so. Auf die Schnelle fällt mir aber keine genaue Lösung ein, und in sowas Energie reinzustecken hat ohnehin nur akademischen Wert. Ich wette freilich, dass black_adept die Lösung aus dem Ärmel schütteln könnte. 😁

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
ArjenR


Re: Report Summieren der Werte einer Internen Tabelle

Beitrag von black_adept (Top Expert / 3411 / 66 / 656 ) » 06.01.2020 11:51
Wenn man vom Teufel spricht gibt der natürlich auch gerne einen Kommentar ab.
Das Mittel der Wahl hier wäre der REDUCE-Befehl. Aber da musste ich jetzt doch nachlesen, da ich mich bisher nicht mit dem FOR-Befehl wirklich anfreunden konnte und ich das, was der REDUCE #( FOR... ) kann lieber in eine Methode auslagere, da ich eine FOR-Schleife nicht für wirklich übersichtlicher halte als eine LOOP-Schleife.
Aber hier geht es ja nicht um meine Präferenzen sondern wie SAP sich vorstellt, dass es mit einem Befehl gemacht werden sollte für das Beispiel von D&P

Code: Alles auswählen.

summe = REDUCE #( INIT my_sum = 0 FOR tab_line IN meine_tabelle NEXT my_sum = my_sum + tab_line-anzahl ).

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
DeathAndPain

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Report Summieren der Werte einer Internen Tabelle

Beitrag von DeathAndPain (Top Expert / 1423 / 153 / 325 ) » 06.01.2020 12:56
Bei der Einführung von 7.40 war mir FOR auch erst sehr suspekt, aber inzwischen verwende ich es ganz gerne, um interne Tabellen mit VALUE und darin enthaltenem FOR aufzubauen. Solange die Vorschrift dafür übersichtlich ist (insbesondere nicht mehr als ein FOR), halte ich das inzwischen für schöner als eine LOOP-Schleife. In vielen Fällen kann man das allerdings auch mit CORRESPONDING #() lösen.

An den REDUCE habe ich mich bislang nicht herangetraut, weil er irgendwie nicht intuitiv auf mich wirkt. Die Namensgebung mag hier eine Rolle spielen; "Reduzierung" finde ich einen wenig anschaulichen Begriff für das, was da passiert. Aber eigentlich ist Deine Lösung recht überzeugend. Vielleicht finde ich ja doch mal eine Verwendungsmöglichkeit dafür, die ich auch unter praktischen Gesichtspunkten vertreten kann.
und ich das, was der REDUCE #( FOR... ) kann lieber in eine Methode auslagere, da ich eine FOR-Schleife nicht für wirklich übersichtlicher halte als eine LOOP-Schleife.
Alle Modularisierung in Ehren, aber eine eigene Methode nur für

Code: Alles auswählen.

LOOP AT meine_tabelle ASSIGNING FIELD-SYMBOL(<meine_tabelle>).
  ADD <meine_tabelle>-anzahl TO summe.
ENDLOOP.
wäre mir zu dämlich. Das käme bei mir so in den Quelltext, auch auf die Gefahr hin, dass ich die Schleife fünf Bildschirmseiten später ein zweites Mal brauche.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
ArjenR


Re: Report Summieren der Werte einer Internen Tabelle

Beitrag von nickname8 (Specialist / 124 / 16 / 19 ) » 06.01.2020 13:48
Ab ABAP 7.52 geht folgendes:

Code: Alles auswählen.

    SELECT SUM( anzahl )
      FROM @lt_data AS l
      INTO @DATA(lv_data).
https://help.sap.com/doc/abapdocu_752_i ... t_itab.htm

Ob es sinnvoll ist, steht auf einem anderen Blatt.

Folgende Benutzer bedankten sich beim Autor nickname8 für den Beitrag (Insgesamt 2):
ArjenRblack_adept


Re: Report Summieren der Werte einer Internen Tabelle

Beitrag von black_adept (Top Expert / 3411 / 66 / 656 ) » 06.01.2020 13:55
Moin und schönes neues Jahr D&P: So was Triviales würde ich auch nicht in eine Merthode auslagern, sondern halt als LOOP stehen lassen ohne das FOR zu verwenden.
Und wenn ich mir "deinen" 3-Zeiler und "meinen" 1-Zeiler anschauen.
Für mich ist der 3-Zeiler mindestens so gut lesbar wie der Einzeiler und er ist sogar kürzer ( Anzahl verwendeter Buchstaben wenn man Variablen gleich benennt ), wobei die Alternative mit "SUM" noch mal kürzer wäre, sofern man nicht auf einem sehr neuen System wäre wo man statt "ADD...TO" das neue "+=" verwenden könnte.

An dich und auch an die anderen Rätselfreunde hier: Es gibt ein Konstrukt welches noch ein wenig kürzer ist als alle bisher genannten( Anzahl Buchstaben ) um die Summe über die Tabellenspalte zu bilden. 😲
Edit: Aber nicht ganz so kurz wie der 7.52-Select über interne Tabellen.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
ArjenR

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Report Summieren der Werte einer Internen Tabelle

Beitrag von ArjenR (ForumUser / 12 / 8 / 0 ) » 06.01.2020 16:57
Vielen Dank für Eure Denkanstöße und Vorschläge.

Hab mein Problem durch Euch lösen können. Im Endeffekt musste ich nur innerhalb des loops der internen Tabelle

Code: Alles auswählen.

add itab-anzahl to summe. 
write:/ summe.

hinzufügen und schon kam das gewünschte Ergebnis raus :-). Die ADD-Anweisung war mir so noch nicht bekannt gewesen.

Was mich sehr beeindruckt sind die verschiedenen Ansätze, welche ihr hier beschrieben habt. Also nochmals vielen Dank.

Re: Report Summieren der Werte einer Internen Tabelle

Beitrag von DeathAndPain (Top Expert / 1423 / 153 / 325 ) » 07.01.2020 11:03
Vielleicht sollte man noch erwähnen, dass der Befehl ADD ... TO ebenso wie seine Schwesterbefehle SUBTRACT ... FROM, DIVIDE ... BY usw. aus der alten Zeit stammen und von der SAP stilistisch nicht mehr empfohlen werden. Ich nutze sie aber ganz bewusst weiter, weil ich

Code: Alles auswählen.

ADD 1 to summe.
aussagekräftiger (und damit besser verständlich) finde als das von der SAP empfohlene

Code: Alles auswählen.

summe = summe + 1.
Aber es ist sicherlich nicht verkehrt zu wissen, dass die untere Lösung auch eine Option ist.
An dich und auch an die anderen Rätselfreunde hier: Es gibt ein Konstrukt welches noch ein wenig kürzer ist als alle bisher genannten( Anzahl Buchstaben ) um die Summe über die Tabellenspalte zu bilden. 😲
Ja, wenn ich die interne Tabelle meine_tabelle mit Kopfzeile deklariere und dann den LOOP ohne INTO mache. 😜

Re: Report Summieren der Werte einer Internen Tabelle

Beitrag von black_adept (Top Expert / 3411 / 66 / 656 ) » 07.01.2020 14:11
DeathAndPain hat geschrieben:
07.01.2020 11:03
Vielleicht sollte man noch erwähnen, dass der Befehl ADD ... TO ebenso wie seine Schwesterbefehle SUBTRACT ... FROM, DIVIDE ... BY usw. aus der alten Zeit stammen und von der SAP stilistisch nicht mehr empfohlen werden. Ich nutze sie aber ganz bewusst weiter, weil ich
ADD 1 to summe.
aussagekräftiger (und damit besser verständlich) finde als das von der SAP empfohlene
summe = summe + 1.
Release 7.54
Unbenannt2.png
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Report Summieren der Werte einer Internen Tabelle

Beitrag von black_adept (Top Expert / 3411 / 66 / 656 ) » 07.01.2020 14:18
DeathAndPain hat geschrieben:
07.01.2020 11:03
Ja, wenn ich die interne Tabelle meine_tabelle mit Kopfzeile deklariere und dann den LOOP ohne INTO mache. 😜
Nö - geh mal von einer ohne Kopfzeile definierten Tabelle aus. Es geht tatsächlich kürzer, wahrscheinlich aber erst ab Release 7.40, SP02
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Seite 1 von 1

Vergleichbare Themen

Summieren von Zeilen in einer internen Tabelle
von kaim77 » 21.01.2020 13:03
Übergabe einer internen Tabelle von Report zu Report
von Maleika » 01.09.2004 12:17
Werte einer internen Tabelle in sap script form
von Gast » 16.02.2006 17:06
Werte einer internen Tabelle gruppieren und auslesen
von bohne » 07.03.2006 21:01
Gruppieren / Summieren in internen Tabellen
von eddi12 » 19.02.2008 12:10