Hallo LO Fans,
mache gerade meinen ersten Gehversuche mit LibreBase. Hatte mir mal eine Datenbank mit MS Access aufgebaut um Rechnungen zu erstellen.
Ich weis, das Thema wurde schon oft angesprochen. Hab eine Abfrage gefunden in einer Beispiel_DB.
Die darin enthaltende Beispiel Abfrage hab ich auf meine Datenbank (Tabelle) angepasse. Der SQL Code sieht so aus:
SELECT "Rg_Kopf".*, RIGHT( '00' || MONTH( "Leistungsdatum" ), 2 ) AS "Monat", RIGHT( '000' || ( SELECT COUNT( "ID" ) FROM "Rg_Kopf" WHERE YEAR( "Leistungsdatum" ) = YEAR( "Rg_Kopf"."Leistungsdatum" ) AND MONTH( "Leistungsdatum" ) = MONTH( "Rg_Kopf"."Leistungsdatum" ) AND "ID" <= "Rg_Kopf"."ID" ), 4 ) AS "lfdNrMonat", RIGHT( '000' || MONTH( "Leistungsdatum" ), 4 ) || RIGHT( '00' || ( SELECT COUNT( "ID" ) FROM "Rg_Kopf" WHERE YEAR( "Leistungsdatum" ) = YEAR( "Rg_Kopf"."Leistungsdatum" ) AND MONTH( "Leistungsdatum" ) = MONTH( "Rg_Kopf"."Leistungsdatum" ) AND "ID" <= "Rg_Kopf"."ID" ), 3 ) AS "Monat_lfdNrMonat", RIGHT( '000' || YEAR( "Leistungsdatum" ), 4 ) AS "Jahr", RIGHT( '000' || ( SELECT COUNT( "ID" ) FROM "Rg_Kopf" WHERE YEAR( "Leistungsdatum" ) = YEAR( "Rg_Kopf"."Leistungsdatum" ) AND "ID" <= "Rg_Kopf"."ID" ), 4 ) AS "LfdNrJahr" FROM "Rg_Kopf"
Was ich erreichen wollte, ist die Erstellung einer fortlaufenden Rechnungsnummer pro Monat innerhalb eines Jahres. Kann auch geändert werden in fortlaufend über das ganze Jahr. Das wäre auch ok.
In der Beispiel DB wird korrekt gezählt. Bei meinem Versuch wird nichts hochgezählt sondern nur die Anzahl der vorhandenen Datensätze (hier = 39) angezeigt. Hab mal einen Screenshot angehängt. Ich bin kein SQL Experte und finde nicht wo hier der Fehler liegt.
Kann mir einer helfen?
Mein Ansatz war die durch die Abfrage ermittelte Lfd Nr per Makro in die Tabelle Rg_Kopf in eine Spalte "Rg_Nummer" einzutragen, gesteuert durch ein Formularereignis z. B. "nach Datensatzaktion", während man eine neue Rechnung über ein Formular erfasst, wenn so geht. Anregungen sind willkommen.
Wenn später dann die Rechnung gedruckt werden soll, möchte ich die generierte Rechnungsnummer aus der Tabelle per Abfrage für den Bericht auslesen.
Ist mein Ansatz zielführend?
🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
[Gelöst] - Leider nochmal Thema Rechnungsnummer
-
- Beiträge: 2
- Registriert: So 12. Mär 2023, 11:35
[Gelöst] - Leider nochmal Thema Rechnungsnummer
- Dateianhänge
-
- Screen.jpg (60.24 KiB) 1169 mal betrachtet
Zuletzt geändert von Dietmar_Schütz am Mo 13. Mär 2023, 10:37, insgesamt 1-mal geändert.
Gruß
Dietmar Schütz
Nutzer von LibreOffice unter Linux.
Dietmar Schütz
Nutzer von LibreOffice unter Linux.
Re: Leider nochmal Thema Rechnungsnummer
Code: Alles auswählen
...
SELECT COUNT( "ID" ) FROM "Rg_Kopf"
WHERE
YEAR( "Leistungsdatum" ) = YEAR( "Rg_Kopf"."Leistungsdatum" )
AND
"ID" <= "Rg_Kopf"."ID"
...
"ID" <= "Rg_Kopf"."ID" ergibt immer WAHR weil (1<=1) = TRUE
daher liefert SELECT COUNT( "ID" ) immer die Anzahl aller Datensätze in der Tabelle.
Einfacher wäre so was:
Code: Alles auswählen
Select count(1) as MaxReNr from "Rg_Kopf" where TO_CHAR("Leistungsdatum", 'YYYY-MM') = '2023-03'
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
-
- Beiträge: 2
- Registriert: So 12. Mär 2023, 11:35
[Gelöst]Re: Leider nochmal Thema Rechnungsnummer
Danke gogo für deine Hilfe.
hab zwar Deinen Ansatz nicht versucht, da ich verstehen wollte, warum meine Korrekturen nicht funktioniert hatten.
Daher hab ich den Original SQL in der Entwurfsansicht noch mal genau angesehen, und erst dann fiel mir auf, dass der Ersteller der Musterabfrage auf eine Tabelle zugreift, die gar nicht existiert = "a.".
Ich wusste nicht, das man eine - wie soll ich sagen - temporäre Tabelle in einer Abfrage erschaffen kann, auf die man zugreift.
Mein korrigierter Code sieht jetzt so aus und der funktioniert auch:
SELECT "a".*, RIGHT( '000' || MONTH( "Leistungsdatum" ), 4 ) AS "Monat", RIGHT( '000' || ( SELECT COUNT( "ID" ) FROM "Rg_Kopf" WHERE YEAR( "Leistungsdatum" ) = YEAR( "a"."Leistungsdatum" ) AND MONTH( "Leistungsdatum" ) = MONTH( "a"."Leistungsdatum" ) AND "ID" <= "a"."ID" ), 4 ) AS "lfdNrMonat", RIGHT( '000' || MONTH( "Leistungsdatum" ), 4 ) || RIGHT( '0' || ( SELECT COUNT( "ID" ) FROM "Rg_Kopf" WHERE YEAR( "Leistungsdatum" ) = YEAR( "a"."Leistungsdatum" ) AND MONTH( "Leistungsdatum" ) = MONTH( "a"."Leistungsdatum" ) AND "ID" <= "a"."ID" ), 2 ) AS "Monat_lfdNrMonat", RIGHT( '000' || YEAR( "Leistungsdatum" ), 4 ) AS "Jahr", RIGHT( '000' || ( SELECT COUNT( "ID" ) FROM "Rg_Kopf" WHERE YEAR( "Leistungsdatum" ) = YEAR( "a"."Leistungsdatum" ) AND "ID" <= "a"."ID" ), 4 ) AS "LfdNrJahr" FROM "Rg_Kopf" AS "a"
Deinen Ansatz versuch ich vielleicht später noch einmal.... Vielen Dank.
hab zwar Deinen Ansatz nicht versucht, da ich verstehen wollte, warum meine Korrekturen nicht funktioniert hatten.
Daher hab ich den Original SQL in der Entwurfsansicht noch mal genau angesehen, und erst dann fiel mir auf, dass der Ersteller der Musterabfrage auf eine Tabelle zugreift, die gar nicht existiert = "a.".
Ich wusste nicht, das man eine - wie soll ich sagen - temporäre Tabelle in einer Abfrage erschaffen kann, auf die man zugreift.
Mein korrigierter Code sieht jetzt so aus und der funktioniert auch:
SELECT "a".*, RIGHT( '000' || MONTH( "Leistungsdatum" ), 4 ) AS "Monat", RIGHT( '000' || ( SELECT COUNT( "ID" ) FROM "Rg_Kopf" WHERE YEAR( "Leistungsdatum" ) = YEAR( "a"."Leistungsdatum" ) AND MONTH( "Leistungsdatum" ) = MONTH( "a"."Leistungsdatum" ) AND "ID" <= "a"."ID" ), 4 ) AS "lfdNrMonat", RIGHT( '000' || MONTH( "Leistungsdatum" ), 4 ) || RIGHT( '0' || ( SELECT COUNT( "ID" ) FROM "Rg_Kopf" WHERE YEAR( "Leistungsdatum" ) = YEAR( "a"."Leistungsdatum" ) AND MONTH( "Leistungsdatum" ) = MONTH( "a"."Leistungsdatum" ) AND "ID" <= "a"."ID" ), 2 ) AS "Monat_lfdNrMonat", RIGHT( '000' || YEAR( "Leistungsdatum" ), 4 ) AS "Jahr", RIGHT( '000' || ( SELECT COUNT( "ID" ) FROM "Rg_Kopf" WHERE YEAR( "Leistungsdatum" ) = YEAR( "a"."Leistungsdatum" ) AND "ID" <= "a"."ID" ), 4 ) AS "LfdNrJahr" FROM "Rg_Kopf" AS "a"
Deinen Ansatz versuch ich vielleicht später noch einmal.... Vielen Dank.
- Dateianhänge
-
- Screen1.jpg (68.97 KiB) 1126 mal betrachtet
Gruß
Dietmar Schütz
Nutzer von LibreOffice unter Linux.
Dietmar Schütz
Nutzer von LibreOffice unter Linux.
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.