Jährliches Hinzufügen eines Datums

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

S_teffi
**
Beiträge: 26
Registriert: Do, 12.12.2013 15:31

Jährliches Hinzufügen eines Datums

Beitrag von S_teffi »

Hallo liebes Forum,

ich stehe gerade vor einem neuen Problem und hoffe ihr könnt mir Tipps geben. Es gibt ein Formular mit Tabellendarstellung mit verschiedenen Datensätzen. Soweit so gut. Jährlich einmal soll nun zu einem vorhandenen Datensatz eine Information hinzukommen: das Datum der Jahresabrechnung.

Eine simple Umsetzung wär in der Haupttabelle von vornherein für jedes Jahr (z.B. 20 Jahre im Voraus) eine Datumsspalte anzulegen. Hierzu lade ich mal ein Beispiel hoch, um eher zu verstehen, was ich meine.

Nachteil: Nach 20 Jahren (auch wenn ich bezweifle, dass die DB da noch existiert) müsste die Tabelle angefasst werden, um neue Spalten hinzuzufügen. Deswegen dachte ich, man könnte in das Formular einen Button integrieren, der bei Klick eine neue Spalte erzeugt. Datenbanktechnisch ist das über Makro sicher möglich, aber funktioniert das auch für die gezeichnete Tabelle im Formular? Gerade wenn ich an die normalerweise händischen Einstellungen wie "Neue Spalte hinzufügen", "Wiederholung: ein", "Aufklappbar: ja" denke, würde ich vermuten, dass das schwierig werden könnte.

Oder ist mein Ansatz vllt sogar total falsch und performancetechnisch eher ungeeignet und es gibt schlauere Lösungen?

Liebe Grüße, Steffi (:
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Jährliches Hinzufügen eines Datums

Beitrag von RobertG »

Hallo Steffi,

eine einmal erstellte Tabelle wird in der Regel anschließend nicht mehr angefasst. Da kommen nicht jährlich neue Felder hinzu. Wenn Du eine jährliche Abrechnung haben willst, so kannst Du das doch anhand der Daten per Abfrage machen - vorausgesetzt Du hast irgendwo das Datum mitgeführt.

Gruß

Robert
S_teffi
**
Beiträge: 26
Registriert: Do, 12.12.2013 15:31

Re: Jährliches Hinzufügen eines Datums

Beitrag von S_teffi »

hmm.. allerdings ist die Methode für die Zukunft jeweils eine Jahresspalte anzulegen doch auch eher "unschön" oder? Nur wie kann das jeweilige Datum sonst mitgeführt und vorgehalten werden?

Das Problem ist halt, dass das Formular immer Anfang des Jahres geöffnet wird, nur um das Datum der Abrechnung einzutragen (zu dem Zeitpunkt steht der restliche Datensatz schon fest). Aussehen soll die Tabelle und der Bericht dann wie die Tabelle im Beispiel-Formular.

Liebe Grüße, Steffi (:
S_teffi
**
Beiträge: 26
Registriert: Do, 12.12.2013 15:31

Re: Jährliches Hinzufügen eines Datums

Beitrag von S_teffi »

oh, ich hatte ja das Beispiel gar nicht mit hochgeladen - sorry! Hier ist es..
Dateianhänge
BeispielDB_JahresAB.odb
(24.06 KiB) 65-mal heruntergeladen
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Jährliches Hinzufügen eines Datums

Beitrag von RobertG »

Hallo Steffi,

ich verstehe überhaupt nicht, was die verschiedenen Felder bewirken sollen. Das Datum reicht doch als Eintrag aus, um das Jahr zu ermittelt. Du möchtest doch nicht im Datensatz A001 ein Datum für 2014, ein Datum für 2015, ein Datum für 2016 usw. eintragen, oder?

Gruß

Robert
S_teffi
**
Beiträge: 26
Registriert: Do, 12.12.2013 15:31

Re: Jährliches Hinzufügen eines Datums

Beitrag von S_teffi »

Hallo Robert,

doch genau das möchte ich. Es soll wirklich für jedes Jahr das Rechnungsdatum gespeichert werden und das weiß man ja erst im jeweiligen Jahr. Also vom Prinzip her so wie in der Beispiel-Tabelle, nur ich dachte mir, dass das vielleicht eleganter geht. Deswegen dachte ich man könnte halt per Button immer die jeweilige Jahres-Spalte hinzufügen.

Hab jetzt vielleicht noch so überlegt eine Tabelle anzulegen:

ID (INT) - Primärschlüssel
Abrechnung_ID (INT) - Fremdschlüssel (mit Primärschlüssel aus ID in TA_Main verknüpft)
Abrechnungsdatum (DATE)

würde dann für 2 Datensätze für die Jahre 2014, 2015 in etwa so aussehen:
ID | Abrechnung_ID | Abrechnungsdatum
0 | 0 | 02.01.14
1 | 0 | 03.01.15
2 | 1 | 02.01.14
3 | 1 | 03.01.15

mit SELECT MAX() könnte man zumindest das letzte Abrechnungsdatum ausgeben wie man allerdings an die Daten zwischen MIN und MAX kommt und die dann auch in der Formular-Tabelle ein- und ausgeben kann, ist mir allerdings noch schleierhaft.

Liebe Grüße, Steffi (:
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Jährliches Hinzufügen eines Datums

Beitrag von F3K Total »

Hi,
habe deinen Vorschlag mal eingebaut.

Gruß R
Dateianhänge
BeispielDB_JahresAB.odb
(25.45 KiB) 73-mal heruntergeladen
S_teffi
**
Beiträge: 26
Registriert: Do, 12.12.2013 15:31

Re: Jährliches Hinzufügen eines Datums

Beitrag von S_teffi »

Hey R,

an eine zweite Tabelle hatte ich gar nicht gedacht - super danke! (:
Problem wird dann nur der Berichtdruck werden - da bekommt man ja dann nicht alle Rechnungsdaten zum jeweiligen Datensatz in eine Ansicht/Tabelle oder geht das doch?

Liebe Grüße, Steffi (:
S_teffi
**
Beiträge: 26
Registriert: Do, 12.12.2013 15:31

Re: Jährliches Hinzufügen eines Datums

Beitrag von S_teffi »

Falls es dazu eine simple, schnelle Variante gibt, wär ich sehr dankbar für die Lösung. Wenn es allerdings komplexer wird, dann reicht mir auch die bisherige Lösung bzw. das erste und letzte Abrechnungsdatum auszugeben.

Möchte im Bericht dann noch gerne die Anzahl der Datensätze angezeigt bekommen.
Hab versucht das in die Abfrage einzubauen, aber irgendwie werden nur Fehler geschmissen. Bei einer zusätzlichen korrelierenden Unterabfrage (( SELECT COUNT( * ) FROM "TA_Main" ) AS "Anzahl" ) klappt es, aber dann wird mir ja die Anzahl aller Datensätze der TA_Main ausgegeben, das möchte ich ja nicht. Sobald ich versuche ein COUNT (COUNT("a"."ID") AS "Anzahl") auf die "Haupttabelle" anzuwenden, kommt der Fehler: Not in aggregate function or group by clause: org.hsqldb.Expression@116dda1..

Hab ich da nur einen Aufruf-Fehler oder geht der Befehl generell nicht in diesem Fall?
Oder gibt es vllt sogar direkt in der Berichterstellung die Möglichkeit die Anzahl der Datensätze anzeigen zu lassen? Hab etwas vom Einbinden von Steuerelementen in LibreOffice gelesen, aber in Open Office nicht gefunden.

Ich lade nochmal die BeispielDB mit hoch, in der Abfrage: qBericht_Abrechnung_Count ist die nicht funktionierende COUNT-Version zu sehen.

Liebe Grüße, Steffi (:
Dateianhänge
BeispielDB_JahresAB.odb
(37.51 KiB) 61-mal heruntergeladen
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Jährliches Hinzufügen eines Datums

Beitrag von RobertG »

Hallo Steffi,

was möchtest Du haben:
Einen Zähler, der im Bericht mitläuft (Zeilenzahl) für jede Gruppe? Die Gesamtzahl?
Funktionen in Abfragen gehen nur, wenn die anderen Werte der Abfrage gruppiert sind - das ist bei Deiner Abfrage nicht der Fall. Allerdings hast Du schon jede Menge korrelierende Unterabfragen drin. Da könntest Du auch das Zählen mit einer korrelierende Unterabfrage machen. Hierfür müsstest Du allerdings die gesamten Bedingungen der Abfrage auch in die korrelierende Unterabfrage übernehmen.

Allerdings kannst Du vermutlich einfacher im Bericht selbst zählen - allerdings nicht, wenn Du nicht den Report-Builder nutzt, wie ich gerade aus der Anlage ersehe.

Gruß

Robert
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Jährliches Hinzufügen eines Datums

Beitrag von F3K Total »

Hallo Steffi,
es geht alles, nur, ohne zu wissen, welche Art von Bericht du erstellen willst, ist es schwierig.
Also, was genau soll wie drauf, und wo willst Du den zu exportierenden Umfang einstellen (filtern)
Es ist z.B auch machbar, nach Datum zu filtern.
Bedenke, du brauchst keine Parameterabfrage, da du kein beschreibbares Abfrageergebnis benötigst, und, du kannst der Filtertabelle weitere Filterspalten, wie z.B "F_von" , "F_bis" zufügen, die du im Formular füllst um die Berichtsabfrage vorzubereiten.

Der Hinweis von Robert
RobertG hat geschrieben:... wenn Du nicht den Report-Builder nutzt ...
ist wichtig, ich habe noch keinen vernünftigen Bericht ohne die Oracle-Reportbuilder-Extension gesehen.
Ich empfehle dir die Extension zu installieren.

Gruß R
S_teffi
**
Beiträge: 26
Registriert: Do, 12.12.2013 15:31

Re: Jährliches Hinzufügen eines Datums

Beitrag von S_teffi »

Hallo Robert, Hallo R,

vielen Dank für den Report Builder - Tipp, wusste nicht, dass es den gibt und damit alles viel individueller anzupassen ist, sobald man mit den ganzen Köpfen und Füßen durchgeblickt hat ;)

Hab es soweit hinbekommen wie ich wollte (siehe Bericht: Bericht_ohneParameterabfrage). Nur die Gesamtsumme stimmt in diesem Fall nicht. Hab für das Beispiel irgendwann aufgegeben, weil Open Office ständig abgestürzt ist, sobald ich den Geltungsbereich umstellen wollte, manchmal ists sogar schon beim einfachen Einstellen der Funktion auf "Summe" abgestürzt - keine Ahnung warum, ist aber auch egal, weil es im richtigen Dokument von mir funktioniert! (:
Eine kleine Frage dazu hätte ich aber noch: In der Abfrage (qBericht_Abrechnung_Kunde_ohneParameterabfrage) sortiere ich nach Kundenname - aber irgendwie greift das ORDER BY im Bericht nicht - wisst ihr warum?
Ach und.. : eine direkte Tabellenerstellung geht nur, wenn man den Assistenten wählt oder? Hab bei mir jetzt alle Felder einzeln zu einer Tabelle zusammengeschoben, weil ich das in der normalen Entwurfsansicht einfach nicht gefunden hab.

Beim Testen der Formulare ist mir dann leider noch was doofes bei der einfachen Summenbildung aufgefallen. Hier fange ich ja eigentlich mit der Methode IFNULL() leere Felder ab:

Code: Alles auswählen

( SELECT IFNULL( "TA_Farbe"."Farbe_Kosten", 0 ) + IFNULL( "TA_Form"."Form_Kosten", 0 ) FROM "TA_Farbe", "TA_Form" WHERE "TA_Farbe"."Farbe_ID" = "a"."Farbe_ID" AND "TA_Form"."Form_ID" = "a"."Form_ID" ) AS "Gesamtkosten"
Aber irgendwie kommt, sobald eines der Felder leer ist, bei der Gesamtsumme 0 raus.. kann mir irgendwie nicht erklären warum :(
(siehe Abfrage: Test)

Liebe Grüße und vielen Dank für eure Hilfe!
Dateianhänge
BeispielDB_JahresAB.odb
(187.9 KiB) 67-mal heruntergeladen
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Jährliches Hinzufügen eines Datums

Beitrag von RobertG »

Hllo Steffi,
S_teffi hat geschrieben: Eine kleine Frage dazu hätte ich aber noch: In der Abfrage (qBericht_Abrechnung_Kunde_ohneParameterabfrage) sortiere ich nach Kundenname - aber irgendwie greift das ORDER BY im Bericht nicht - wisst ihr warum?
Die Sortierung wird im Bericht selbst vorgenommen. Wähle dazu eine entsprechende Gruppierung aus. Die bestimmt die Sortierreihenfolge.
S_teffi hat geschrieben:Ach und.. : eine direkte Tabellenerstellung geht nur, wenn man den Assistenten wählt oder? Hab bei mir jetzt alle Felder einzeln zu einer Tabelle zusammengeschoben, weil ich das in der normalen Entwurfsansicht einfach nicht gefunden hab.
Ich habe mit dem Assistenten nie groß etwas ausprobiert. Aber auch der Assistent nutzt nur die tatsächlichen Möglichkeiten des Report-Builders. Das bedeutet, dass er auch nur Felder zusammen stellt und keine Tabelle auf die Art vorbildet, wie es der Writer tut. Nachher ergibt sich daraus gegebenenfalls eine Tabelle.
S_teffi hat geschrieben: Beim Testen der Formulare ist mir dann leider noch was doofes bei der einfachen Summenbildung aufgefallen. Hier fange ich ja eigentlich mit der Methode IFNULL() leere Felder ab:

Code: Alles auswählen

( SELECT IFNULL( "TA_Farbe"."Farbe_Kosten", 0 ) + IFNULL( "TA_Form"."Form_Kosten", 0 ) FROM "TA_Farbe", "TA_Form" WHERE "TA_Farbe"."Farbe_ID" = "a"."Farbe_ID" AND "TA_Form"."Form_ID" = "a"."Form_ID" ) AS "Gesamtkosten"
Aber irgendwie kommt, sobald eines der Felder leer ist, bei der Gesamtsumme 0 raus.. kann mir irgendwie nicht erklären warum :(
Das liegt daran, dass die Bedingung von "Ta_Form"."Form_ID"="a"."Form_ID" nicht greifen kann, da diese Verbindung leer ist.
Du kannst das so lösen, dass Du einfach die vorher in der Abfrage bereits ermittelten Werte auf die gleiche Art noch einmal ermittelst und addierst:

Code: Alles auswählen

IFNULL(( SELECT "TA_Form"."Form_Kosten" FROM "TA_Form" WHERE "TA_Form"."Form_ID" = "a"."Form_ID" ),0)+IFNULL(( SELECT "TA_Farbe"."Farbe_Kosten" FROM "TA_Farbe" WHERE "TA_Farbe"."Farbe_ID" = "a"."Farbe_ID" ),0) AS "GesamtKosten"
Gruß

Robert
S_teffi
**
Beiträge: 26
Registriert: Do, 12.12.2013 15:31

Re: Jährliches Hinzufügen eines Datums

Beitrag von S_teffi »

Hallo Robert,

vielen Dank!

Hm, also bei der Gruppierung gruppiere ich anstatt nach dem Kundennamen, nach der Kunden_ID.. da sobald ich nach Kundenname gruppiert habe, immer ein Fehler bei der Berichterstellung aufgetreten ist. Dementsprechend kann ich nach dem Namen auch nicht sortieren.

Dacht jetzt vielleicht es liegt an der Abfrage.. um Tabellen editierbar zu belassen, müssen ja auch stets alle ID's abgefragt werden - dachte hat damit vllt auch was zu tun, aber die Änderung der Abfrage hat auch nichts gebracht :/

Liebe Grüße, Steffi (:
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Jährliches Hinzufügen eines Datums

Beitrag von RobertG »

Hallo Steffi,
S_teffi hat geschrieben: Hm, also bei der Gruppierung gruppiere ich anstatt nach dem Kundennamen, nach der Kunden_ID.. da sobald ich nach Kundenname gruppiert habe, immer ein Fehler bei der Berichterstellung aufgetreten ist. Dementsprechend kann ich nach dem Namen auch nicht sortieren.
Welcher Fehler ist aufgetreten? Hattest Du gleiche Namen? Unter der Voraussetzung:
Oberste Gruppe "Kundenname", darunterliegend "Kunden_ID" (ist auf jeden Fall eindeutig). Dann hast Du die Soprtierung nach den Namen und bei gleichen Namen die Sortierung nach der ID.

Gruß

Robert
Antworten