ich breche mir gerade die Ohren, in einem FastReport, der mit einer TfrxUserDataSet befüllt wird, eine Summe zu erzeugen. Aktuell habe ich ein Übungsprogramm mit ganz einfachen Daten, die ich aus einem JSONArray heraushole:
procedure TForm1.frxRprtProformaOnGetValue(const VarName: string; var Value: Variant); var JsData: TJSONObject;
WertAlter: integer; begin
JsData:= TJSONObject.Create; Try if JsDataProforma.Items[frxDataSet.RecNo] is TJSONObject thenbegin
JsData:= TJSONObject.ParseJSONValue(TJSONObject(JsDataProforma.Items[frxDataSet.RecNo]).ToString) as TJSONObject;
Value:= JsData.GetValue<string>(VarName); end; Finally
JsData.Free; End; end;
Soweit klappt auch alles. Jetzt möchte ich aber die Summe des Alters (ist nur eine Übung) unter der Tabelle ausgeben. Dazu habe ich ein Band "ReportSummary" unterhalb des MasterData eingefügt und eine TextObject.
vielen Dank für Deine Antwort. Leider habe ich damit keinen Erfolg. Ich bekommen nach wie vor die Fehlermedeldung: Wert <frxDataSetUName."Alter"> nicht gefunden.
Ich habe bewusste den UserNamen des DataSets geändert, weil dort der DataSet-Name eingetragen war und ich einen Unterschied haben wollte.
Ich habe mir Deinen Artikel durchgelesen und auch das Beispiel heruntergeladen. Leider habe Deinen Hinweis auf eine Beschreibung, wie man mit eine TfrxUserDataSet eine Summe zieht dort nicht gefunden.
Hast Du noch eine Idee, was ich falsch mache? Das muss doch möglich sein. Leider habe ich in der Dokumentation keinen Hinweis auf die Vorgehensweise mit einem TfrxUserDataSet gefunden und die beschriebene Vorgehensweise mit einem TfrxDataSet scheint nicht zu funktionieren - oder ich stelle mich gerade nicht gut an...
Die Mehrwertsteuer könnte für jeden Posten unterschiedlich sein. Daher verwendet man am besten zwei DataSets: eines für die Posten in der Liste und eines für die Zusammenfassung (MwSt-Satz, Betrag) der Liste. Über diesen kann man dann die Gesamtsumme berechnen. Allgemein erledigt man die Berechnungen im Programm-Quelltext und übergibt die Ergebnisse als mundgerechte Häppchen an den FastReport. Für einfache Lösungen findest du Anregungen in meinen Beiträgen hier im Forum.
An unterschiedliche MwSt-Sätze hatte ich auch schon gedacht, war aber nicht auf die Lösung mit dem zweiten TfrxUserDataSet gekommen. Muss ich mir mal zusammenbasteln.
Aber grundsätzlich fühlt sich meine Lösung nach Gefrickel an. Ist das auch so oder muss man das Thema mit der Summierung so lösen?
Ich würde halt viel lieber die vorhandenen Summen-Funktionen nutzen...
Hat jemand vielleicht ein Beispiel, wo eine Summenfunktion mit einem TfrxUserDataSet umgesetzt wurde?
Gibts nen besonderen Grund, warum Du nicht einfach Memory DataSets (z.B. TClientDataSet) verwendest, und dann mit den "normalen" Summationsfunktionen innerhalb des Reports arbeitest?
nein, die gibt es nicht. Ich habe noch nicht viel mit FastReport gemacht, daher fehlt es mir an Erfahrung und Wissen über die verschiedenen Möglichkeiten. Ich habe Google und das Manual bemüht und hatte den Eindruck, dass ein TfrxUserDataSet eine saubere Lösung wäre. Daher bin ich den Weg gegangen.
Wenn die Verwendung eines anderen DataSets funktioniert und ich mehr Möglichkeiten damit habe, bin ich dafür absolut offen.
Leg Dir pro Tabelle ein TClientDataSet an. Felder anlegen z.B. per Feldeditor. Für das Reporting musst Du dann die Daten aus JSON "umfüllen" ins ClientDataSet mit den üblichen Standard Datenbankoperationen:
Du brauchst dann pro ClientDataSet eine TfrxDBDataSet Komponente. In DataSet verbindest Du das ClientDataSet, in "Username" gibst Du an, wie die Tabelle im Report heißen soll.
Ein Tipp: Das ClientDataSet hat eine Methode "SaveToFile", damit kannst Du die eingespeicherten Daten abspeichern. Mach das ein Mal für alle ClientDataSets und dann kommentierst Du das aus. Für das Design des Reports gehst Du dann hin, klickst die ClientDataSets mit Rechts an und gehst auf "aus MyBase Tabelle laden" und gibst als Datei die zuvor per SaveToFile gespeicherten Daten an. Die werden dann ins ClientDataSet geladen und, wenn Du Dein Programm startest und den Reportdesigner aufrufst, direkt angezeigt, so dass Du mit "echten Daten" den Report designen kannst, einschließlich aller Summen.
Die ClientDataSets wieder leeren kannst Du mit Rechtsklick und "Daten löschen".