Speichern von Datenbank-Reports

Hallo,

ich habe für eine Papyrus-Datenbank eine Reportvorlage erstellt, die für einen Datensatz den Code eines Diagramms im SVG-Format erzeugt. Speichert man einen solchen Report als Text mit der Endung .svg ab, dann kann man das Diagramm direkt in Papyrus als Grafik einsetzen oder in anderen Programmen verwenden.

Am Ende der Reportvorlage habe ich eine SAVE-Anweisung, die den Report auch gleich unter dem gewünschten Namen abspeichert. Das ganze klappt wunderbar für einzelne Datensätze: in der Papyrus-Datenbanktabelle anklicken, dann „Report“ anklicken, Vorlage auswählen und Report erstellen, fertig.

Wenn ich X Diagramme auf einen Rutsch erzeugen will, wähle ich entsprechend X Zeilen in der Datenbanktabelle aus und klicke wie oben auf Report, Vorlage und Report erzeugen. Es werden dann auch X Reportdateien mit unterschiedlichen Dateinamen erzeugt (wie von der SAVE-Anweisung festgelegt), aber der Inhalt dieser Reports ist immer der gleiche. Er besteht aus allen X Diagrammen, die hintereinander in jeder Datei stehen.

Kann ich irgendwie erreichen, dass jeder Report für sich abgespeichert wird und den Reporttext auch nur ein einziges mal enthält?

Bei der Erzeugung anderer Reports ist mir ähnliches auch schon mal passiert.
Eine Idee/Frage habe ich erst mal: Wo steht die SAVE-Anweisung im Report?
Im Textbereich oder (wie ja normalerweise unprobblematisch möglich) auf dem Klemmbrett?
Könnte vielleicht eine Ursache sein (Auch in der Kopfzeile macht es mal Probleme)

Was meinst du damit? Was erzeugst du als SVG?
Vielleicht lädst du mal den Report hoch?

Hallo.

Die SAVE-Funktion müsste hierfür in einer geeigneten Schleife untergebracht werden können:

Beginne beim ersten markierten Datensatz
SAVE(FeldMitDateiname + ‘.pap’) +
Gehe zum nächsten markierten Datensatz +
SAVE(FeldMitDateiname + ‘.pap’) +
(Kein weiterer markierter Datensatz vorhanden.)
Beende!

Alternativ würde eine Schleife auch erlauben, den Inhalt eines DB-Feldes im Datensatz zu prüfen.
Stimmt der Inhalt überein, wird gespeichert.
Es kann damit also auch über alle Datensätze der DB-Tabelle gegangen werden und nicht ‘nur’ über die zuvor markierten Datensätze.

Schleife - schön wärs…

Im Textbereich ganz am Ende des Dokuments.

Auf dem Klemmbrett probiere ich mal aus. Allerdings erwarte ich keine Besserung. Die SAVE-Anweisung wird ja korrekt ausgeführt (ich bekomme X Reportdateien), aber irgendwie werden die eigentlichen Reportdaten zunächst für alle Datensätze in einem einigen Dokument gesammelt und am Ende X mal mit X verschiedenen Dateinamen gespeichert. Das X mal speichern ist beabsichtigt, das Sammeln aller Datensätze in einem Dokument jedoch nicht.

Ich habe Zahlenwerte in den Datensätzen einer Datenbanktabelle und dazu eine Reportvorlage, die XML-Code enthält. An bestimmten Stellen wird der XML-Code über Datenfelder mit den Zahlenwerten gefüllt und am Ende habe ich ein Balkendiagramm/Histogramm als SVG.

Den Report lade ich demnächst mal hoch. Ich muss die Datenbank passend zurechtstutzen, da sie auch geheimhaltungsbefürftige Daten enthält. :slight_smile:

Meine Erwartung war, dass Papyrus diese Schleife von selbst bereits ausführt, wenn man mehrere Datensätze auswählt und dann “Report direkt speichern” im Reportdialog wählt. Hilft aber nicht, genausowenig wie “Jeder Datensatz auf einer eigenen Seite”. Ich bräuchte wohl “Jeder Datensatz in einer eigenen Datei”.

Auf die Gefahr hin, dass ich mich lächerlich mache:
Du hast unter Optionen für die Ausgabe des Reports ‘Jeder Datensatz auf einer neuen Seite’ gesetzt?

Ja, hab ich probiert. Dann bekomme ich ebenfalls alle Reports in einer einzigen Datei, fein säuberlich durch getrennt (vermutlich ist NP = next page oder so :slight_smile:

Hallo.

Ja, so eine Checkbox im Report-Dialog oder auch ein weiterer Eintrag dort in der Auswahlliste “Ausgabe” würde ich auch begrüßen.
Startet man aber eine Forum-Umfrage, ob Checkbox bzw. Ausgabeliste oder Schleife, dann würde ich für Schleife stimmen.
Wer Schleifen braucht, schlägt einfach in der Hilfe nach, wie man es ja auch bspw. bei SAVE() oder CALL() tun kann.

Mit der geeigneten Schleife bekäme man auch endlich eine Möglichkeit zu prüfen, ob eine zuvor mit SAVE() gespeicherte Datei existiert und verhindert so das Überschreiben. Zurzeit hilft da nur datumscodiert zu speichern.

Ich schätze es geht nur, indem man zuerst per Suche die Datensätze einschränkt,den obersten auswählt, nur markierten DS einstellt und dann im Report nach dem SAVE-Befehl den nächsten DS markiert. Das ersetzt quasi eine Schleife. Papyrus schleift ja schon, siehe Dateinamen, aber verarbeitet halt immer den selben Inhalt in der Schleife, weil immer dieselben Datensätze markiert sind.
Ich weiß nur nicht, ob das überhaupt geht.

Ja, das ist eine manuelle Schleife. Leider bei 500+ Datensätzen recht mühsam. :wink:

Hm, nicht, wenn man per Befehl einen DS markieren könnte. Geht aber nicht, oder?

Nee, die Auswahl der Datensätze macht man ja schon durch anklicken oder durch die Suche.

So, falls jemand spielen will oder einfach nur mal schauen, wie man mit Papyrus Diagramme erstellen kann :wink: Anbei eine sehr reduzierte und anonymisierte Variante der Datenbank, die ich benutze. Es handelt sich um eine Tabelle zur Auswertung von Siebanalysen, mit der man die Partikelgrößenverteilung eines Pulvers darstellen kann.

Kurzanleitung:
– Zip entpacken
– Im Ordner AnsaetzeDB die Siebanalyse.pb öffnen
– Datensätze öffnen und mit vor/zurück drin blättern

ggf. Report anklicken, dann Report erzeugen. Es erscheint in dieser Variante eine Hinweisbox, wo das Diagramm gespeichert wurde.

AnsaetzeDB.zip (27.1 KB)

2 „Gefällt mir“

Stimmt, geht nicht.

Ein zu erbringendes Feature könnte den Markierungszustand einer DB-Tabelle in einer Datei ablegen.
Wird diese Datei “Mein Markierungszustand.mak” aufgerufen (z. B. über ein Menüpunkt in BASE), dann tut sie nichts anderes als die Datensätze in der DB-Tabelle wieder sichtbar markiert darzustellen.
Ich rede hier von Markierungszuständen, die nur mit einer aufwändigen Suche (Suche in der Suche usw.) erstellt werden.
Wäre toll, wenn dann eine solche Markierungsdatei auch reportseitig aufgerufen / genutzt werden könnte. Z. B. könnten Voraussetzungen geschaffen werden, damit evtl. eine Meta-Report-Vorlage sie initiieren kann. Oder so …

Das würde bei meiner Fragestellung in keiner Weise helfen.

Was ich brauche, ist eine Abwandlung von „Report direkt speichern” und “E-Mail senden“. Beim E-Mail senden kann doch bestimmt personalisierte Briefe verschicken, sodass jeder Empfänger mit seinem Namen angesprochen wird, aber dennoch nur eine einzige E-Mail erhält. Nur dass ich hier einzelne Reports speichern will und nicht E-Mails versenden.

Deswegen habe ich es kursiv gesetzt. Helfen kann es aber dennoch. Hier die Erklärung.

Du tust ja zuvor gewisse Datensätze markieren.
Und dann startet der Report mit SAVE(). Und du erwartest eine Datei je Datensatz. …

Stelle Dir vor dieses Markieren ist sehr schwer mit der Suche zu bewerkstelligen.
Später möchtest Du vielleicht weitere Datensätze dazu nehmen - die Suche muss wieder verfeinert werden.

Mein Vorschlag zielt darauf ab, dass BASE dies Markierungsdatei einliest.
Du kannst ggfls. durch weitere Klicks weitere Datensätze der Markierung hinzufügen.
Das speicherst Du (erneut) ab.

So, und jetzt schließt sich der Kreis:

  • Du startest die Datenbank.
  • öffnest die Markierungsdatei - oder startest, wie bisher auch, eine (hinterlegte) Suche.
  • führst Deinen SAVE()-Report über die wie auch immer markierten Datensätze aus.
    … und hoffst, dass es bald möglich sein wird je Datensatz eine Datei zu erzeugen.

Bei mir funktioniert es, wenn man einen zusätzlichen Report anlegt, der nur ein Datenfeld mit

REPORT(„Histogramm-SVG.pap“)

enthält. Dadurch wird die gewünschte Schleife hergestellt. Man kann auch nur einzelne Datensätze markieren und es werden nur für diese Reports erstellt. Ich habe damals nicht auf dein eigentliches Problem geachtet, weil ich so begeistert von der Idee war, dass man eine SVG-Grafik aus den Daten erzeugen kann …

1 „Gefällt mir“

Oh, interessant. Und jeder Report wird dann unter einem eigenen Namen abgespeichert?

Haha :wink:

Vor kurzem habe ich Papyrus benutzt, um Daten aus einer Excel-Tabelle in SQL-Anweisungen umzuschreiben. Die Daten wurden per CSV-Datei von Excel nach Papyrus Base transferiert und dann in einem Report in einzelne SQL-Anweisungen aufgedröselt. Danach konnten sie in eine MySQL-Datenbank eingelesen werden.

1 „Gefällt mir“