P-BASE: Textinhalt von Tabellenspalten per Report zusammenfassen

Ich habe eine Papyrus-BASE-Tabelle mit den Angaben, welches Kind wann in welche AG geht, dass der Name in der AG-Spalte erscheint, wenn bei dem Kind die AG eingetragen ist.

Nun würde ich gerne einen Text-Report haben, indem die AG steht und dann die entsprechenden Namen aufgelistet sind. Wie ist zu bewerkstelligen?

Anbei eine auf das wesentliche reduzierte Beispieltabelle.

AGs.zip (5.47 KB)

Hallo HeHo.

Ich habe zwei Report-Vorlagen erstellt.

Eine Tabellen-Reportvorlage und eine Text-Reportvorlage.

Beide habe ich mit ein und derselben Suchabfrage verknüpft.

Erzeugst Du nun einen Report, erhälst Du alle Teilnemer der Montags-AG Tanzen.

Das kannst Du ja entsprechend erweitern. Also auch die Teilnemer für einen anderen Wochentag der AG Tanzen …

AG_Vorschlag1.zip (13.3 KB)

Hallo zusammen

Da wird etwas angesprochen das ich auch schon mal versucht habe. Aber keine Lösung gefunden habe.

Ist es nicht so dass die erstellten Reporte zwar die Teilnehmer vom AG Tanzen (Montag) auflistet, aber für jeden Datensatz der die Bedingungen Tanzen Mo nicht erfüllt, trotzdem eine Leerzeile einfügt?

Also ist es doch so dass, für die Datensätze von (Halil&Marina&Loreta…) eine Formel erstellt werden müsste, um zu sagen du bist nicht Montag und nicht AG Tanzen. Also wirst du als Datensatz übersprungen und nicht als Leerzeile dazugefügt.

Eben das habe ich auch schon versucht. In einem Report eine solche Auswahl zu treffen. Aber ich habs dann irgendwann aufgegeben und vorab mit Sortierung und Markieren die nötige Auswahl getroffen. Aber es wäre natürlich super wenn es möglich wäre einem Report bereits zu sagen: Ich will nur die AG Tanz am Montag und sonst nix.

In diesem Sinne schönen Tag noch.

Hallo Alex.

Der papyrus BASE-Anwender kann u.a. eine Report-Vorlage dauerhaft mit einer zuvor definierten (komplexen) Suchabfrage verknüpfen.

Die Suchabfrage stellt sicher, dass nur die Datensätze angezeigt werden, welche den Suchkriterien entsprechen. Zudem wird erreicht, dass die weiterzubearbeitende - oft zu reportierende - Datenmenge (erheblich) reduziert wird.

Beispiel:

Die aktuelle Bankleitzahlen-Datei besteht aus 20420 Datensätzen.

Gibt man nun den Suchstring: “Landesbank Berlin” ein, gibt es eine Ergebnismenge von 5 Datensätzen.

Startet man nun einen Report mit der verknüpften Suchabfrage, sind die 5 Datensätze ruckzuck reportiert - ohne Leerzeilen.

Würde man jedoch zum Stand der Dinge eine Report-Vorlage mit entsprechender Funktionalität nutzen, würde die Reporterzeugung an diesem Beispiel schon einmal bedeutend länger dauern.

Und wenn man dann noch bedenkt, dass BASE mit Hunderttausenden Datensätzen umgehen kann, so ist aus meiner Sicht die vorangestellte Datenmengenreduzierung der übliche Weg.

Zur Thematik “Unterdrückung von Leerzeilen” hat der Hersteller etwas im Dokument “Faktura.pap” geschrieben. (If LENGTH() Then …) - ungeprüft -

Das mit dem Text-Report von einer AG mit den Namen in einem Report geht, auch mit dem ausgrenzen leerer Zeilen IF LENGTH()…

Beim Tabellenreport werden die leeren Zeilen weiterhin ausgegeben.

Ich hatte mich etwas kurz ausgedrückt. Ich wollte als Reportergebnis gerne eine einzige Seite, auf der alle AGs mit den entsprechenden Namen aufgelistet sind und nicht zig Reports, die ich dann erst zusammenfügen muss.

Ich hatte auch gehofft, dass es mit Textfeldern geht, wenn der Datensatz-Bereich definiert wird und das Ergebnis in einem Textfeld pro AG landet. Es werden aber die Textfelder (wie bei Tabellenfeldern auch) für jeden Datensatz neu erzeugt. Es wäre wünschenswert, wenn es bei der Reportausgabe die Möglichkeit gäbe, alle Datensätze in ein Text- oder Tabellenfeld auszugeben. Bis jetzt kann ja nur „jedes Datenfeld auf eine neue Seite“ eingestellt werden - ansonsten werden die Datensätze auf einer Seite ausgegeben.

Ich bin nun sehr umständlich zu meinem Ziel gelangt (aber vielleicht geht es ja doch einfacher):

Ich habe einen Tabellenreport genommen mit den einzelnen AGs in den Spalten. Vor dem Report die Tabellenkopfzeile in die Seitenkopfzeile verbannt. Nach dem Report nun jede Spalte einzeln selektiert und die Felder zusammengefasst – mit Suchen und Ersetzen alle überflüssigen Zeilen entfernt – und dann die Zusammenfassung aufgehoben. Nachdem alle Spalten abgearbeitet wurden, habe ich die leeren unteren Zeilen gelöscht. So habe ich auf einer Seite alle AGs mit den jeweiligen Kindern in einer Tabelle.

Damit die Tabelle nicht so breit wird, habe ich dann die Montags-AGs unter eine Montagspalte zusammengefasst wie auch die anderen Wochentage je eine Spalte. Siehe angehängte Beispieldatei!

Gäbe es die Möglichkeit, die Reports in einem Tabellenfeld zu sammeln, könnte eine Tabelle als Reportvorlage dienen, in der per Report nur die Namen in die jeweiligen Felder eingetragen werden.

Report AGs Tab.pap (9.85 KB)

Hier noch ein Nachtrag mit der gewünschten Report-Datei zur Datenbanktabelle unter Beitrag #3105, die das Ergebnis wie Anhang unter Beitrag #3111 liefern sollte, aber eben so nicht funktioniert.

Kann Papyrus das jetzt (noch) nicht – oder liegt es an der Einstellung?

Report AGs Tab.pap (9.88 KB)

Wegen Namensgleichheit der Reportdatei und der Ergebnisdatei hier die Reportdatei mit neuem Namen.

AGs Tab Report.pap (9.88 KB)

Hallo HeHo.

Also wenn Du mich fragst, ist die Datenbank mit Report-Vorlage (“AGs_Tab_Report.pap”) soweit OK.

papyrus macht genau das, was es zurzeit kann. Es arbeitet korrekt Datensatzweise.

Das bedeutet:

papyrus kann Dir die drei Teilnehmer (Halil, Robbi und Sükrü) der Montags-Fußball-AG (die in unterschiedlichen Datensätzen erfasst sind) nicht in die entsprechende Spalte der Report-Vorlage untereinander ausgeben.

Du würdest Deiner Vorstellung wohl etwas näher kommen, wenn Du die DB-Strukur änderst.

Insbesondere könntest Du prüfen, ob es sinnvoll ist für jede AG eine DB-Tabelle zu halten. Dort sollte es ein DB-Feld geben das bspw. alle Teilnehmer der Montag-Fußball-AG aufnimmt - und zwar untereinander - also:

Halil

Robbi

Sükrü

Dazu muß der Zeilenvorschub aktiviert werden.

(Es ist keine “saubere” Lösung, da es aus meiner Sicht eigentlich auch eine DB-Tabelle “Teilnehmer” geben sollte …)

Mir ist nicht ganz klar warum Du Datenbankfelder bswp. “Mo_AGFeb09”, “Di_AGFeb09” … nennst. Wie handelst Du dann die Datenbank im März 09?

Hallo,

die Beispieldatenbank ist ja stark reduziert. Die Originaldatei ist eine Adressdatei mit weiteren Infos. Ich habe also die AG-Infos hinten rangehängt.

Wegen der Bezeichnung. Die AGs wechseln alle Halbschuljahre. Diese AG-Belegung gilt ab diese Woche. Ab August im neuen Schuljahr wird es weitere neue Kinder geben und ein neues AG-Angebot mit neuer Belegung. Und für jedes Kind eine Spalte macht ja auch keinen Sinn.

– Aber wenn ein Report es schafft, für eine AG die entsprechenden Namen in eine Seite zu schreiben (mit IF LENGTH()THEN … sogar ohne Leerzeilen), sollte es da nicht möglich sein, das für ein Textfeld auch zu ermöglichen (Textfeld – oder Tabellenfeld – behandeln wie Seite.)? Ich habe von Datenbankstrukturen halt keine Ahnung, wie aufwändig so was zu programmieren wäre. –

Wenn ich meine Adress-Daten als DB Teilnehmer nehmen würde, wie sollte dann die DB AGs aufgebaut sein, um beide Tabellen richtig verknüpfen zu können?

Hallo HeHo.

Selbstverständlich könntest Du eine vorhandene papyrus-Adressentabelle in dein AG-Projekt einbinden.

Ich habe mal auf die Schnelle(!) eine kleine Strukturübersicht Deines AG-Projekts erarbeitet. Vielleicht kannst Du Dir daraus etwas entnehmen.

Die Struktur könnte Deiner Report-Vorlage etwas entgegen kommen.

AG_Tabellenstrukur.pdf (8.6 KB)

Hallo HeHo.

Die Datenbank „Arbeitsgemeinschafen“ zeigt die Umsetzung der Strukturübersicht.

Es ist ein unfertiger Datenbank-Entwurf. Er ist ausbaufähig.

Den Report „AGs_Tab_Report.pap“ habe ich völlig umgestaltet.

Vielleicht hilft es ja - würde mich feuen.

Arbeitsgemeinschaften.zip (7.69 KB)

Aus meiner Sicht hat diese Datenbank den Nachteil, dass sie nicht sehr flexibel ist. Wenn sich in einem halben Jahr der Kursplan ändert und z.B. Fußball nicht mehr am Montag, Dienstag und Mittwoch angeboten wird, sondern am Montag, Mittwoch und Freitag, dann muss wieder die Struktur der Datenbank verändert werden. Besser wäre es doch, lediglich einen neuen Kursplan einzutragen, und die teilnehmenden Kinder den Terminen der Kurse zuzuordnen.

Diese Flexibilität kann man erreichen, wenn die Daten in folgende Tabellen aufgeteilt werden:

  1. Kinder (enthält pro Kind einen Datensatz mit dessen Namen und ggf. weiteren Infos)

  2. Arbeitsgemeinschaften (enthält pro AG einen Datensatz mit deren Namen)

  3. Termine (enthält die Spalten AG, Wochentag, Zeit und legt pro Datensatz einen Kurstermin fest)

  4. Kursteilnehmer (enthält die Spalten AG, Wochentag, Zeit, Kind und legt pro Datensatz fest, welches Kind an welchem Termin teilnimmt)

Durch diese Struktur ergeben sich schon recht brauchbare Abfragemöglichkeiten. Zum Beispiel:

In der Tabelle „Termine“ kommt man mit einem Rechtsklick auf einen Datensatz zum Menüpunkt „Zeige Referenzen aus Kursteilnehmer“ und kann so erkennen, welche Kinder an dem ausgewählten Kurs teilnehmen.

In der Tabelle „Kinder“ kann man sich über den Rechtsklick zeigen lassen, an welchen Kursen ein Kind teilnimmt. Man bekommt quasi einen Stundenplan für das Kind.

Neue AGs, Termine und Teilnehmer lassen sich einfach durch zusätzliche Datensätze in den entsprechenden Tabellen ergänzen. Änderungen der Tabellenstruktur sind dazu nicht mehr notwendig.

Problematisch sind aber die eingeschränkten Abfrage- und Reportmöglichkeiten von Papyrus. Die reichen m.W. noch nicht aus, um den kompletten Wochenplan mit allen Kursen und Teilnehmern als Kalender bzw. Stundenplan vollautomatisch auszugeben.

AG.zip (7.17 KB)

Hallo glucose.

Wird die Datenbank “Arbeitsgemeinschaften” noch ein Stück vorangetrieben, kann man feststellen, dass sie in der Tat sehr flexibel ist.

Der Gedanke:

Eine AG Fußball kann nur an den fünf Wochentagen (Montag - Freitag) durchgeführt werden. Bitteschön - gern auch noch am Wochenenden. Kann ja HeHo gern erweitern.

Sie kann an einen Wochentag ein Mal oder mehrere Male stattfinden.

Es existiert die Zeitbegrenzung - ein Tag hat nun mal nur 24 Stunden.

All das könnte (kann) die Datenbank berücksichtigen - und hat das zum Teil im Entwurfsstadium schon angerissen.

Die Teilnehmer der AGs (zurzeit insbesondere AG Fußball) werden unter dem zurzeit sporadischen Eingabeformular “Teilnehmer” gehandelt.

Schon jetzt kann sehr einfach und schnell der Robbi aus der 2b auch noch für die Fußball-AG am Dienstag eingetragen werden. Ändert sich die Zeit eines Kurses, ist dass auch kein Problem. (Natürlich muss hier noch entsprechend erweitert werden - es ist halt nur ein Entwurf.)

Ich habe ja auch schon angedeutet; hat HeHo auch noch eine Eltern-Tabelle müssen in der DB “Arbeitsgemeinschaft” Änderungen stattfinden.

Diese Änderungen wiederum fallen in Deinem Entwurf geringer aus, da Du dort die DB-Tabelle “Kinder” führst.

Herzlichen Dank für die letzten Infos. Kann mich aber wohl erst nächste Woche wieder näher damit beschäftigen. Morgen werde ich erstmal einen morschen Weisheitszahn los … und das WE ist auch schon verplant.