SAP ABAP-Infoset Query - WÄHLEN Sie SUMME und Doppelte Linien
Ich habe Schwierigkeiten, herauszufinden, wo zu beginnen/wie bekomme ich die richtige Ausgabe.
Ich bin ganz neu ABAP-coding. Ich bin versucht, erstellen Sie eine Infoset query und müssen noch ein bisschen Codierung in SQ02.
Ich habe zwei Tabellen verbunden - ein Wesen RBKP als header für rechnungseingänge das andere ist RBDRSEG für die Rechnung Belegpositionen.
Die Abfrage ausgeführt werden muss, folgt eine irrelevante Parameter/Varianten, aber wenn Sie es tut, so muss es - - -
Blick in RBDRSEG für alle gleichen Belegnummern RBKP-BELNR EQ RBDRSEG-RBLNR
Dabei RBDRSEG kann oder kann nicht mehrere Ergebnisse für jeden Doc-Nr.
Muss ich gesamten Bereich RBDRSEG-DMBTR für jedes Dok. - Nr. Ergebnis.
(Wenn es ein 5-Zeilen für ein Doc. Nein.; DMBTR haben einen anderen Wert für jeden, die müssen summiert werden)
An dieser Stelle muss ich die Ausgabe nur show (zusammen mit anderen Feldern in RBKP) Eine Zeile mit der SUMME der DMBTR Feld für jeden Doc. Nein.
Ich dann brauchen, um einen anderen Bereich zeigt die Unterschied des Feldes RBKP - RMWWWR die ist der Rechnungsbetrag und die Summe berechnet wurde früher für das Doc. Nein. für Feld-DMBTR.
Wenn Sie helfen könnte, wäre ich unglaublich dankbar.
InformationsquelleAutor justin derouin | 2014-10-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
zuerst müssen Sie definieren eine Struktur, die enthält Ihre Auswahl von Daten. Eine Beispiel-Struktur für Ihre Anforderung könnte wie folgt Aussehen:
vergessen Sie nicht, aktivieren Sie die Struktur und stellen Sie sicher, dass diese keine Fehler enthalten.
erstellen Sie nun die Auswahl Bericht. Verwenden einen Bericht, wie die Daten-Auswahl-Methode, müssen Sie zwei Kommentare,
*<QUERY_HEAD>
und*<QUERY_BODY>
.*<QUERY_HEAD>
dort platziert werden, wo Sie Ihre start-of-Auswahl in der Regel gehen würde,*<QUERY_BODY>
innerhalb einer Schleife, setzt die ausgewählten Zeilen in eine interne Tabelle mit dem gleichen Namen wie die Struktur, die Sie in SE11.Machte ich einen Beispiel-report zu zeigen, wie dies funktionieren würde:
sample report selektiert zunächst die
RBKP
Linien entlang mit einer Summe vonRBDRSEG-DMBTR
für jedes Dokument inRBKP
. Nach einemloop
updates derDIFF
Spalte mit der Differenz zwischen den ausgewählten SpaltenRMWWR
undDMBTR
.Leider gibt es in unserem SAP-System die Tabelle
RBDRSEG
leer ist, so kann ich nicht testen, der Teil des Berichts. Aber Sie können testen, den Bericht in Ihrem system, indem Sie nur eine Pause vor dem erstenloop
und starten Sie dann den Bericht. Sie sollten dann in der Lage sein, einen Blick auf die ausgewählten Zeilen in die interne TabelleITAB
und sehen, ob die Auswahl funktioniert wie erwartet.Vorbehalte in der Beispiel-report: beide
RBKP
undRBDRSEG
auf unterschiedliche Währung Felder. So kann es möglich sein, Ihre Werte inRMWWR
undDMBTR
sind in verschiedenen Währungen (RMWWR
ist in der belegwährung,DMBTR
zu sein scheint, die in Unternehmen standardmäßig Währung). Wenn das der Fall sein, müssen Sie konvertieren Sie Sie in die entsprechende Währung vor der Berechnung der Differenz. Bitte machen Sie sichRBKP
undRBDRSEG
unter Verwendung der Dokument-Nummer inBELNR
/RBLNR
und das Jahr, inGJAHR
/RJAHR
(Feld, inRBDRSEG
istRJAHR
, nichtGJAHR
, obwohlGJAHR
gibt es auch inRBDRSEG
).wenn Ihr Bericht wie erwartet funktioniert, erstellen Sie das infoset basiert auf deinen Bericht. Anschließend können Sie mit der infoset wie jede andere infoset.
Update:
Ich erkannte, dass, weil Sie schrieb über neue ABAP-ich sofort angenommen, dass Sie brauchen, um einen Bericht zu erstellen für Ihre infoset. Abhängig von Ihren tatsächlichen Anforderungen kann dies nicht der Fall sein. Sie können eine einfache infoset query über die Tabelle RBKP und dann verwenden Sie die infoset-editor fügen Sie zwei weitere Felder für die Linie total und der Unterschied, dann fügen Sie einige abap-code, der auswählt, die Summe aller entsprechenden Zeilen in RBDRSEG und berechnet die Differenz zwischen RMWWR und das aggregierte Summe. Das wäre wahrscheinlich langsamer als eine benutzerdefinierte abap-report als Auswahl hätte wiederholt werden, für jede Zeile in RBKP, so dass es wirklich hängt von der Menge der Daten, die Ihre Benutzer-Abfrage. Eine kundenspezifische ABAP-report ist gut, flexibel und schnell, aber vielleicht zu viel des guten und die Zahl der Menschen in der Lage zu ändern ein Bericht ist kleiner als die Anzahl der Menschen in der Lage zu ändern ein infoset.
Zusätzliche Info für die Variante unter Verwendung des infoset-designer
erstellen Sie zunächst eine einfache infoset Lesen nur die Tabelle RBKP (also keine Tabellen-join in der infoset-definition). Jetzt gehen Sie auf Anwendungs-spezifische Erweiterungen:
In meinem Beispiel habe ich bereits Hinzugefügt 2 Felder
LINETOTAL
undDIFFERENCE
. Beide haben die gleichen Eigenschaften wieRBDRSEG-DMBTR
. Stellen Sie sicher, dass Ihr Feld enthält die Summe derRBDRSEG-DMBTR
hat eine untere Abfolge (hier '1') als das Feld mit der Differenz. Die Reihenfolge legt fest, welche Felder wird zuerst berechnet werden.Klicken Sie auf den coding-Taste für das erste Feld und fügen Sie die Codierung wählen Sie die Summe für ein einzelnes
RBKP
Eintrag:Dann tun Sie das gleiche für die Differenz Feld:
Jetzt haben Sie beide Felder in die Feldliste können Sie fügen Sie Sie im Feld Gruppe auf der rechten Seite:
Wie bereits erwähnt, den code, den Sie gerade eingegeben, verarbeitet werden, wird für jede Zeile in RBKP. So könnte dies einen großen Einfluss auf die Laufzeit-performance, abhängig von der Größe Ihres ursprünglichen ResultSet.
ich habe ein kurzes Beispiel für den infoset builder Variante
Wow, vielen, vielen Dank! Das hat auf jeden Fall auf den Punkt brachte. Das einzige Problem, das ich sehe ist, dass das Problem mit mehreren Zeilen ist eigentlich aus der RBDRSEG Tabelle nicht der RBKP. RBKP gibt nur eine Zeile pro Dok. - Nr. aber in RBDRSEG ist es möglich, dass Doc Nicht. könnte mehrere Zeilen. Dies ist, was ich bin versucht zu 'SUMME' für die in-DMBTR. Die SUMME aller Ergebnisse in die DMBTR Feld für jede Zeile in RBDRSEG. Nur mit der RBKP-Tabelle Aufruf der RBDRSEG Tabelle.
das ist genau das, was der obige code sollte tun. Eine einzelne Linie in RBKP, wählen Sie für alle Zeilen in RBDRSEG mit diesem Dokument die Anzahl und die Summe der DMBTR gesammelt in LINETOTAL. Wie die Ausgabe, die Sie nur die einzigen RBKP Zeile und ein Feld LINETOTAL mit der Summe aller DMBTR die Werte in den entsprechenden RBDRSEG Linien.
Leider LINETOTAL ist nicht gefüllt und der UNTERSCHIED ist nur gefüllt mit dem, was ist in der RMWWR Feld.
InformationsquelleAutor Dirk Trilsbeek