Summenbildung & Anteil in %


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

Moderatoren: Jan, Steff

Summenbildung & Anteil in %

Beitragvon xGabriel » 13.09.2018, 09:11

Hallo zusammen!

Ich bin gerade dabei verschiedene Reports zu schreiben, welche dann später in regelmäßigen Abständen per Job auf ein bestimmtes Laufwerk automatisch als Excel abgelegt werden sollen.
Diese Abfragen sind bereits als Query's vorhanden. Mit diesen lässt sich aber die automatische Excel-Ablage per Job nicht realisieren.
Die Reports habe ich soweit, dass die richtigen Ergebnisse über den FuBa "GUI_DOWNLOAD" ausgespuckt und im gewünschten Verzeichnis gespeichert werden.

Jedoch stehe ich vor folgendem Problem:
- Wie bekomme von einer Spalte (Mengen von Verkaufsbelegspositionen) beim Gui-Download die Summe dieser Spalte mit abgespeichert? Über den ALV bekomm ich das ohne Probleme hin (über "do-sum" im Feldkatalog), so dass die Summe beim Aufruf des Reports immer standardmäßig angezeigt wird. Doch dies wird in den Excel-Download nicht mit übernommen. Habs auch nocht mit "AT ... SUM ENDAT" in meinem Loop probiert, aber ohne Erfolg.
Hat hier jemand einen Lösungsansatz für mich?

Folgeproblem beim nächsten Report:

Beim Erstellen von Querys gibt es ja die Möglichkeit sich ganz easy den Anteil in % eines Wertes per Checkbox ausgeben zu lassen. Dies müsste ich jetzt in meinem Report abbilden und hab nicht wirklich einen Plan wie ich vorgehen soll.
Ich habe wieder X Verkaufsbelegspositionen, wo ich mir zuvor zusätzlich bereits einige Werte errechne, welche ich in Z-Felder meiner Z-Struktur schreibe.
Das vorletzte Feld meiner Struktur ist "Menge nach Faktor" und das letzte "Anteil in Prozent". Nun bräuchte ich wieder nach der Auflistung aller Positionen am Schluss eine Zeile mit Gesamtsumme, damit ich mir für jede einzelne Position(Zeile) den Anteil in % errechnen kann (Menge nach Faktor / Gesamtmenge *100). Hier stoße ich mit meinen Fähigkeiten als ABAP-Jüngling an meine Grenzen und ich hoffe ihr Experten könnt mir weiterhelfen! :) :up:

Ich habe jetzt absichtlich kein Coding gepostet, damit ich den ohnehin schon langen Post nicht noch unübersichtlicher mache. Wenn ihr irgendwelche Infos braucht bitte einfach melden. :up:

Vielen Dank schon mal!
Lg Gabriel
xGabriel
ForumUser
 
Beiträge: 11
Registriert: 12.07.2018, 07:28
Dank erhalten: 0 mal
Ich bin: sonstiges

Sponsor

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

Re: Summenbildung & Anteil in %

Beitragvon a-dead-trousers » 13.09.2018, 11:30

Du musst in deiner Ausgabe-Tabelle eine zusätzliche Zeile einfügen und dort die zu berechneden Werte selbst "eintragen".
Code: Alles auswählen
data:
  lt_table type tt_table, "= deine Ausgabetabelle
  ls_summe type line of tt_table.

Field-symbols:
  <ls_line> type line of tt_table.

LOOP AT lt_table ASSIGNING <ls_line>.
  ADD <ls_line>-field1 TO ls_summe-field1. "= Für jedes zu berechnende Feld
ENDLOOP.

APPEND ls_summe TO lt_table.

* Für die Prozentwerte am Ende nochmal durch die Tabelle gehen
LOOP AT lt_table ASSIGNING <ls_line>.
  <ls_line>-percen1 = 100 / ls_summe-field1 * <ls_line>-field1.
ENDLOOP.

EDIT:
Es gibt auch den Befehl COLLECT, aber da muss man vorher die Datenstruktur (Schlüsselfelder usw.) speziell anpassen, was den Aufwand IMHO nicht wert ist, vorallem weil man dann recht schnell Flexibilität in Bezug auf die Austauschbarkeit von Feldern einbüst.
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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3055
Registriert: 07.02.2011, 13:40
Dank erhalten: 756 mal
Ich bin: Entwickler/in

Re: Summenbildung & Anteil in %

Beitragvon deejey » 13.09.2018, 11:44

Ist im Grunde normal dass das nicht an Excel übergeben wird, denn Excel rechnet ja selbst :D Angenommen man übergibt die Zwischensummen/Summen, wenn man nicht dran denkt könnte man sie versehentlich in Excel erneut mitsummieren
deejey
ForumUser
 
Beiträge: 84
Registriert: 31.07.2016, 11:20
Dank erhalten: 6 mal
Ich bin: Entwickler/in

Re: Summenbildung & Anteil in %

Beitragvon xGabriel » 13.09.2018, 12:22

@ a-dead-trousers:

Vielen Dank für die schnelle Antwort.
Aber leider bekomm ichs nicht hin, bin wie gesagt noch ziemlich unerfahren...

Also ich habe eine Struktur (ZSD_ESFC_ROH), mit meinen ganzen Spalten.
Meine interne Tabelle in die ich die Ergebnisse schreibe deklariere ich wie folgt:

gt_data TYPE STANDARD TABLE OF zsd_esfc_roh,
gs_data LIKE LINE OF gt_data.

In meinem LOOP schreibe ich dann die Daten (welche auch schon richtig ankommen) wie folgt in die gt_data:
Code: Alles auswählen
   
    gs_data-zsd_wmeng = ls_vbap-awahr / 100 * ls_vbap-klmeng.
    gs_data-zsd_fak = p_brutto / p_wag. "die beiden Werte werden in der Selektion eingegeben um einen Faktor zu errechnen
    gs_data-zsd_fmeng = gs_data-zsd_fak * gs_data-zsd_wmeng.
*   gs_data-ZSD_PROZ =  Summe von: gs_data-zsd_fmeng / gs_data-zsd_fak.

 APPEND gs_data TO gt_data.


Bei deinem Code kann ich für tt_table nun aber weder gt_data (Typ ist unbekannt) noch zsd_esfc_roh (da eine Struktur) eingeben.

Ich bräuchte jetzt in meinem Fall die Summe von allen ZSD_FMENG - Werten um den Anteil in % (mit der oben aufgeführten Formel) zu errechnen und in ZSD_PROZ zu schreiben.

Ich wäre dir echt dankbar wenn du dein coding nochmal anpassen würdest mit meinen Daten!


@deejey: mir ist schon klar das Excel rechnen kann :D Aber in meinem Fall wird das Excel nach dem Download nicht versehentlich erneut summiert, darum hätte ich gerne, dass die Summen mit übergeben werden. Das sollte doch eg kein all zu großes Problem sein, denn wenn ich im ALV sortiere/Summen/Zwischensummen bilde und mir ein Excel-File manuell downloade übernimmt er auch alles mit :wink: Auch hier wäre es möglich, dass man danach diese Funktionen noch "versehntlich" im Excel erneut ausführt :wink:
xGabriel
ForumUser
 
Beiträge: 11
Registriert: 12.07.2018, 07:28
Dank erhalten: 0 mal
Ich bin: sonstiges

Re: Summenbildung & Anteil in %

Beitragvon a-dead-trousers » 13.09.2018, 12:47

Code: Alles auswählen
field-symbols:
  <ls_data> type zsd_esfc_roh.

* Hier kommt der Befüllungscode rein

CLEAR gs_data. "Missbrauch als Summenzeile

LOOP AT gt_data ASSIGNING <ls_data>.
  ADD <ls_line>-field1 TO gs_data-field1. "= Für jedes zu berechnende Feld
ENDLOOP.

APPEND gs_data TO gt_data. "Summenzeile anhängen

LOOP AT gt_data ASSIGNING <ls_data>.
  <ls_data>-percen1 = 100 / gs_data-field1 * <ls_data>-field1. "= Für jedes zu summierende Feld
ENDLOOP.
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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3055
Registriert: 07.02.2011, 13:40
Dank erhalten: 756 mal
Ich bin: Entwickler/in

Re: Summenbildung & Anteil in %

Beitragvon xGabriel » 13.09.2018, 14:58

Maaaaann eyy ich bin anscheinend einfach zu doof :cry: :x :cry:


Hier nochmal mein ganzer LOOP mit den READ TABLES:

Code: Alles auswählen
  LOOP AT lt_vbap INTO ls_vbap.

    READ TABLE lt_vbep INTO ls_vbep
    WITH KEY vbeln = ls_vbap-vbeln
    BINARY SEARCH.

    READ TABLE lt_vbuk INTO ls_vbuk
    WITH KEY vbeln = ls_vbap-vbeln
    BINARY SEARCH.

    READ TABLE lt_vbak INTO ls_vbak
    WITH KEY vbeln = ls_vbap-vbeln
    BINARY SEARCH.

    READ TABLE lt_vbup INTO ls_vbup
    WITH KEY vbeln = ls_vbap-vbeln
    BINARY SEARCH.

    READ TABLE lt_makt INTO ls_makt
    WITH KEY matnr = ls_vbap-matnr
    BINARY SEARCH.

    READ TABLE lt_mara INTO ls_mara
    WITH KEY matnr = ls_vbap-matnr
    BINARY SEARCH.

*folgende gs_data- Felder sind gleichzeitig alle Felder meiner Struktur:

    gs_data-posnr = ls_vbap-posnr.
    gs_data-mfrpn = ls_mara-mfrpn.
    gs_data-awahr = ls_vbap-awahr.
    gs_data-edatu = ls_vbep-edatu.
    gs_data-vbtyp = ls_vbak-vbtyp.
    gs_data-vbeln = ls_vbap-vbeln.
    gs_data-matnr = ls_vbap-matnr.
    gs_data-maktx = ls_makt-maktx.
    gs_data-edatu = ls_vbep-edatu.
    gs_data-zsd_wmeng = ls_vbap-awahr / 100 * ls_vbap-klmeng.
    gs_data-zsd_fak = p_brutto / p_wag.
    gs_data-zsd_fmeng = gs_data-zsd_fak * gs_data-zsd_wmeng.  "von diesem Feld wird die Summe benötigt
*   gs_data-ZSD_PROZ = gs_data-zsd_fmeng /  Summe von:  gs_data-zsd_fmeng

    APPEND gs_data TO gt_data.

    CLEAR ls_vbap.
    CLEAR ls_vbep.
    CLEAR ls_vbup.
    CLEAR ls_vbuk.
    CLEAR ls_vbak.
    CLEAR ls_mara.
    CLEAR ls_makt.


  ENDLOOP.
 


Bei dem coding von deinem letzten Post definiere ich das FS: <ls-data> mit meiner Struktur.
Mit LOOP AT gt_data ASSIGNING <ls_data>. habe ich nun in die Daten meiner Ausgabetabelle gt_data in der ls_data.

Doch hierbei tritt bei mir schon das erste Problem auf:
ADD <ls_line>-field1 TO gs_data-field1. "= Für jedes zu berechnende Feld

- Ich denke hierzu benötige ich ein weiteres Field-Symbol <ls_line> ? Wenn ja mit welcher Deklaration?
- Was wäre dann für mich field1? Ich kann hier ja nur bestehende Felder angeben, aber eg bräuchte ich ja ein "neues/freies" in welches ich die Summe schreiben kann?? Muss ich noch ein weiteres Feld in meiner Struktur anlegen?

Beim 2. LOOP deines codings steht als Kommentar "für jedes zu summierende Feld":
- doch wie sage ich dem Programm: "Zähle alle Werte aus allen ZSD_FMENG - Feldern zusammen"


Sorry nochmal für meine Unfähigkeit :oops:
xGabriel
ForumUser
 
Beiträge: 11
Registriert: 12.07.2018, 07:28
Dank erhalten: 0 mal
Ich bin: sonstiges

Re: Summenbildung & Anteil in %

Beitragvon a-dead-trousers » 13.09.2018, 17:27

Das <ls_line> sollte eigentlich ein <ls_data> sein. Klassicher CopyPasta-Fehler.
Die Felder FIELD1 und PERCENT1 sind nur PLATZHALTER. Hier musst du selbst Hand anlegen. Ich werd dir doch nicht deine ganze Arbeit abnehmen. :wink:
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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3055
Registriert: 07.02.2011, 13:40
Dank erhalten: 756 mal
Ich bin: Entwickler/in


Zurück zu ABAP® Core

  Aktuelle Beiträge   
Java & Bildbearbeitung
vor 19 Stunden von Madredure 0 Antw.
Call Transaction WE20 mit Werteübergabe
vor 18 Stunden von ewx 1 Antw.
gelöst Vergleich Customizing Tabellen auf zwei Systemen
vor 23 Minuten von hausi 3 Antw.
Empfehlung Antiviren-Programm?
vor 21 Stunden von Madredure 2 Antw.
BADI im Customizing finden
Gestern von Romaniac 0 Antw.

  Ähnliche Beiträge beta
gelöst Summenbildung ALV
06.03.2014, 14:55 von a-dead-trousers 5 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder