ALV: subtotals manipulieren


Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).

Moderatoren: Jan, Steff

ALV: subtotals manipulieren

Beitragvon doeme » 18.07.2012, 15:05

Hallo!

ich arbeite mit der KLasse cl_gui_alv_grid und möchte mir in dem ALV daten anzeigen lassen. bevor ich meinen table an den ALV schicke, erweitere ich diesen um 3 Felder zum Berechnen von Daten, die ich dann aggregieren möchte (Mittelwert).

d.h. mein Status ist zurzeit so
rechenfeld1 - rechenfeld2 - rechenfeld3
wert1.1 - wert2.1 - wert3.1
wert1.2 - wert2.2 - wert3.2
mittelwert1 - mittelwert2 - mittelwert3

über den feldkatalog kann ich ja mittels DO_SUM = 'C', den mittelwert berechnen - dummerweise handelt es sich bei mittelwert3 um eine neue berechnung, nämlich mittelwert1 * mittelwert2.
kann ich dieses feld manuell übersteuern?
frage so nebenbei: kann ich die ausgabe prozentuell irgendwie darstellen, also statt 0,54 --> 54%
doeme
ForumUser
 
Beiträge: 18
Registriert: 03.07.2012, 09:32
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Sponsor

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

Re: ALV: subtotals manipulieren

Beitragvon Unit605 » 18.07.2012, 15:12

Was ist die Frage genau?

Mittlerweile wurde das Eingangsposting geaendert.
Unit605
Expert
 
Beiträge: 555
Registriert: 05.02.2009, 21:29
Wohnort: San Diego, CA, USA
Dank erhalten: 46 mal
Ich bin: Entwickler/in

Re: ALV: subtotals manipulieren

Beitragvon bliss » 18.07.2012, 15:41

Ich stand mal vor einem ähnlichen Problem (Summen statt Mittelwerte) und habe es so gelöst, dass ich erst alles in der internen Tabelle berechnet habe, bevor es an die ALV-Ausgabe ging. (Ich weiß, kein wirklich helfender Tipp)

Wo hast du DO_SUM = 'C' her? Wenn tatsächlich der Mittelwert berechnet wird, ist ja gut, aber warum sehe ich hier keine Dokumentation dazu? SAP-Bibliothek - ALV Grid Control (BC-SRV-ALV)

Zur %-Darstellung fällt mir spontan ein, dass man den Wert ausliest, mit 100 multipliziert und mit einem %-Zeichen in einem char-Feld ausgibt. Es gibt aber sicher eine eingebaute Möglichkeit.

Wenn keine professionelle (bessere) Hilfe kommt, werde ich morgen mal meinen Code hier posten.
Gruß
bliss
.|.. .. ...| . .|.. ||| |. ||. .| |. |.. .||. .|. ||| ... .||. . .|.

Ich bin Anfänger und meine Tipps sind mit Vorsicht zu genießen.
bliss
ForumUser
 
Beiträge: 66
Registriert: 10.04.2012, 15:31
Dank erhalten: 6 mal
Ich bin: Entwickler/in

Re: ALV: subtotals manipulieren

Beitragvon a-dead-trousers » 19.07.2012, 07:17

doeme hat geschrieben:über den feldkatalog kann ich ja mittels DO_SUM = 'C', den mittelwert berechnen - dummerweise handelt es sich bei mittelwert3 um eine neue berechnung, nämlich mittelwert1 * mittelwert2.
kann ich dieses feld manuell übersteuern?

Was soll hier "manuell übersteuert" werden?

doeme hat geschrieben:frage so nebenbei: kann ich die ausgabe prozentuell irgendwie darstellen, also statt 0,54 --> 54%

Schau dir mal die EDIT-Masken im Feldkatalog an. Damit sollte es gehen. Alternativ könntest du wie bliss bereits erwähnt hat, ein CHAR Feld verwenden und selber das % reinschreiben. Dann verlierst du aber die Summen/Mittelwert-Funktionen.

bliss hat geschrieben:Wo hast du DO_SUM = 'C' her?

hmmm... Entweder eine "undokumentierte" Funktion oder ein Schreib-Fehler. Ich hab auf die schnelle den H_FTYPE im Feldkatalog gefunden. Steht aber, dass das für den ALV-Tree wäre.

lg ADT
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.05
Basis: 7.02
a-dead-trousers
Top Expert
 
Beiträge: 1789
Registriert: 07.02.2011, 13:40
Dank erhalten: 357 mal
Ich bin: Entwickler/in

Re: ALV: subtotals manipulieren

Beitragvon doeme » 19.07.2012, 07:40

danke mal für die antworten.

- DO_SUM = 'C': ja, das steht komischerweise in keiner doku, das habe ich in einem forum gefunden. funktioniert aber ohne probleme, gibt es auch mit Variante 'A' und 'B' anstatt nur 'X'. Der Feldname DO_SUM ist in diesem Fall total irreführend.
- Prozent Darstellung: wie schon gesagt, hatte ich bereits implementiert, da waren meine "rechenfelder" vom typ string und habe dann einfach ein '%' hinzugefügt, aber wie bereits erwähnt, verlor ich dadurch die aggregat funktion.
in den funktionen des feldkatalogs finde ich nichts mit % darstellung.
- "manuelle Übersteuerung": wie im Eingangsposting erwähnt, die Aggregatfunktion Mittelwert geht über die Spalte. Anbei ein Bild wie es sein sollte:

http://imageshack.us/photo/my-images/28/alvbsp.png

Mittelwert von Spalte 1 ist korrekt, von Spalte 2 ebenfalls, aber Mittelwert von Spalte 3 ist nicht korrekt da er sich aus Mittelwert1 * Mittelwert2 errechnet. d.h. ich möchte gerne diese ausgabe manipulieren.
geht das?
doeme
ForumUser
 
Beiträge: 18
Registriert: 03.07.2012, 09:32
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: ALV: subtotals manipulieren

Beitragvon Alexander D. » 19.07.2012, 08:38

doeme hat geschrieben:- DO_SUM = 'C': ja, das steht komischerweise in keiner doku, das habe ich in einem forum gefunden.


der Trick wurde hier im Forum auch schon mal erwähnt:
viewtopic.php?t=14482
schöne Grüße
Alexander
Alexander D.
Expert
 
Beiträge: 648
Registriert: 17.02.2006, 11:28
Wohnort: Bockenem
Dank erhalten: 79 mal
Ich bin: Entwickler/in

Re: ALV: subtotals manipulieren

Beitragvon doeme » 19.07.2012, 08:45

korrekt, war ganz genau dieser eintrag :)
doeme
ForumUser
 
Beiträge: 18
Registriert: 03.07.2012, 09:32
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: ALV: subtotals manipulieren

Beitragvon doeme » 19.07.2012, 09:56

ich hätte ja diesen beitrag gefunden, nur funktioniert der funktionsbaustein überhaupt nicht bei mir. nach dem aufruf ist meine referenz auf den alv initial.

http://zevolving.com/2008/09/classical- ... -subtotal/
doeme
ForumUser
 
Beiträge: 18
Registriert: 03.07.2012, 09:32
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: ALV: subtotals manipulieren

Beitragvon JHM » 19.07.2012, 10:22

doeme hat geschrieben:nur funktioniert der funktionsbaustein überhaupt nicht bei mir. nach dem aufruf ist meine referenz auf den alv initial.


Wann bzw. Wo rufst du den FuBa auf?
Gruß Hendrik
JHM
Expert
 
Beiträge: 851
Registriert: 15.02.2006, 12:39
Wohnort: Aachen
Dank erhalten: 91 mal

Re: ALV: subtotals manipulieren

Beitragvon bliss » 19.07.2012, 10:27

Oh, ich habe da was durcheinander gebracht. In einem Report habe ich cl_gui_alv_grid benutzt, aber do_sum habe ich in einem anderen Report in Zusammenhang mit REUSE_ALV_LIST_DISPLAY im Feldkatalog verwendet.

Sorry, kann dir doch keinen Code posten :(
Gruß
bliss
.|.. .. ...| . .|.. ||| |. ||. .| |. |.. .||. .|. ||| ... .||. . .|.

Ich bin Anfänger und meine Tipps sind mit Vorsicht zu genießen.
bliss
ForumUser
 
Beiträge: 66
Registriert: 10.04.2012, 15:31
Dank erhalten: 6 mal
Ich bin: Entwickler/in

Re: ALV: subtotals manipulieren

Beitragvon doeme » 19.07.2012, 10:28

JHM hat geschrieben:
doeme hat geschrieben:nur funktioniert der funktionsbaustein überhaupt nicht bei mir. nach dem aufruf ist meine referenz auf den alv initial.


Wann bzw. Wo rufst du den FuBa auf?


in meinem fall habe ich es direkt nach SET_TABLE_FOR_FIRST_DISPLAY aufgerufen.
doeme
ForumUser
 
Beiträge: 18
Registriert: 03.07.2012, 09:32
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: ALV: subtotals manipulieren

Beitragvon JHM » 19.07.2012, 11:24

doeme hat geschrieben:in meinem fall habe ich es direkt nach SET_TABLE_FOR_FIRST_DISPLAY aufgerufen.


Stimmt du bist ja mit dem OO-ALV unterwegs, dann brauchst du dir auch nicht den Umweg über den FuBa 'GET_GLOBALS_FROM_SLVC_FULLSCR' nicht, du hast bereits die Referenz auf deinen ALV.

Einfach mit gr_alv->get_subtotals weitermachen (gr_alv ist der selbe wie beim SET_TABLE_FOR..). Einziges Probelm könnte sein, dass der ALV evtl. nach SET_TABLE_FOR.. noch keine Summen gebildet hat, aber das muss man ausprobieren.
Gruß Hendrik
JHM
Expert
 
Beiträge: 851
Registriert: 15.02.2006, 12:39
Wohnort: Aachen
Dank erhalten: 91 mal

Re: ALV: subtotals manipulieren

Beitragvon doeme » 19.07.2012, 11:51

also mit der methode bin ich zwar dem ziel etwas näher gekommen, aber ich bekomme es nicht auf die anzeige.

direkt nach SET_TABLE_FOR_FIRST_DISPLAY rufe ich folgende FORM auf:
Code: Alles auswählen
form P_CHANGE_SUB .
  DATA: it_01 TYPE REF TO data.
   FIELD-SYMBOLS: <ft_tab> TYPE ANY TABLE,
                 <fs_tab> TYPE ANY,
                 <ff_field> TYPE ANY.
*

  CALL METHOD gr_grid->get_subtotals
    IMPORTING
      ep_collect01 = it_01.

  ASSIGN it_01->* TO <ft_tab>.
*
  LOOP AT <ft_tab> ASSIGNING <fs_tab>.
    ASSIGN COMPONENT 'PROD' OF STRUCTURE <fs_tab> TO <ff_field>.
    <ff_field> = '100'. "overwriting for test
    ASSIGN COMPONENT 'LEIST' OF STRUCTURE <fs_tab> TO <ff_field>.
    <ff_field> = '100'.
    ASSIGN COMPONENT 'AVAIL' OF STRUCTURE <fs_tab> TO <ff_field>.
    <ff_field> = '100'.
  ENDLOOP.

  CALL METHOD gr_grid->refresh_table_display
    EXPORTING
      i_soft_refresh = 'X'
        .


endform.                    " P_CHANGE_SUB


wenn ich mich durchdebugge wird korrekterweise der wert der subtotal auf 100 gesetzt, am Frontend/ALV ändert sich gar nix...ich bin gerade sehr verzweifelt...keinen Plan wie das funktionieren soll.
doeme
ForumUser
 
Beiträge: 18
Registriert: 03.07.2012, 09:32
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: ALV: subtotals manipulieren

Beitragvon a-dead-trousers » 20.07.2012, 11:07

doeme hat geschrieben:- Prozent Darstellung: wie schon gesagt, hatte ich bereits implementiert, da waren meine "rechenfelder" vom typ string und habe dann einfach ein '%' hinzugefügt, aber wie bereits erwähnt, verlor ich dadurch die aggregat funktion.
in den funktionen des feldkatalogs finde ich nichts mit % darstellung.

Mit folgende Edit-Mask (LVC_S_FCAT-EDIT_MASK) solte es funktionieren:
'RR___ %' (dreistellige Zahl OHNE Komma)
Schau dir die Hilfe zum WRITE Befehl für die genaue Syntax an.

lg ADT
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.05
Basis: 7.02
a-dead-trousers
Top Expert
 
Beiträge: 1789
Registriert: 07.02.2011, 13:40
Dank erhalten: 357 mal
Ich bin: Entwickler/in


Zurück zu ABAP Objects®

  Aktuelle Beiträge   
Verarbeitungsroutine für externes senden
vor 2 Stunden von Werther123 0 Antw.
Verbindungslinien im Tree Control
vor 9 Stunden von Dele 0 Antw.
ADRC - Adressen verändern
vor 10 Stunden von allgrinder 0 Antw.
Splaten Listenausgabe
vor 44 Minuten von black_adept 7 Antw.
gelöst Wildcard in Verbindung mit Variable
Gestern von Dele 1 Antw.

  Ähnliche Beiträge beta
DATA-CHANGED-PROTOCOL vom ALV-Grid manipulieren
27.05.2008, 20:31 von Frog 0 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

Feedback ...?

Was können wir verbessern? Hinterlasse deine Kontaktdaten, wenn du eine direkte Antwort möchtest.

... Absenden!