🙏 Helfen Sie mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> 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

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Dietmar_Schütz
Beiträge: 2
Registriert: So 12. Mär 2023, 11:35

[Gelöst] - Leider nochmal Thema Rechnungsnummer

Beitrag von Dietmar_Schütz » So 12. Mär 2023, 11:57

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?
Dateianhänge
Screen.jpg
Screen.jpg (60.24 KiB) 1170 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.

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Leider nochmal Thema Rechnungsnummer

Beitrag von gogo » So 12. Mär 2023, 12:54

Code: Alles auswählen

...
SELECT COUNT( "ID" ) FROM "Rg_Kopf" 
   WHERE 
	YEAR( "Leistungsdatum" ) = YEAR( "Rg_Kopf"."Leistungsdatum" ) 
   AND 
	"ID" <= "Rg_Kopf"."ID"
...
YEAR( "Leistungsdatum" ) = YEAR( "Rg_Kopf"."Leistungsdatum" ) ergibt immer WAHR weil (1=1) = TRUE
"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

Dietmar_Schütz
Beiträge: 2
Registriert: So 12. Mär 2023, 11:35

[Gelöst]Re: Leider nochmal Thema Rechnungsnummer

Beitrag von Dietmar_Schütz » Mo 13. Mär 2023, 10:22

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.
Dateianhänge
Screen1.jpg
Screen1.jpg (68.97 KiB) 1127 mal betrachtet
Gruß
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.



Antworten