Verschiedene Nummerierungen erzeugen und kombinieren
Hallo!
Vielleicht kann mir jemand auf die Sprünge helfen.
A.) Ich benötige eine ganz normale Zählung von Datensätzen, die 2-stellig (also 00, 01, 02 ... 99) Zahlen erzeugt, die einmalig für einen Datensatz vergeben werden und nicht mehr änderbar sind. Die Datensätze werden auch nie wieder gelöscht, also ist der letzte auch der mit der höchsten Nummer - immer.
B1.) Ich benötige eine Zählung von Datensätzen auf ein Jahr bezogen (aus einem Datumsfeld heraus), beginnend bei 01 für das Jahr bis 99 für dieses vorgegebene Jahr. Auch das soll einmal festgelegt werden und darf nicht mehr änderbar sein. Ein anderes Jahr fängt dann auch wieder bei 01 an.
B2.) Wie bekomme ich aus dem vorgegebenen Jahr die beiden letzten Stellen (also für 2022 nur die 22) herausgezogen? Ich vermisse (oder habe es noch nicht gefunden) die Möglichkeit, eine Zahl in Text umzuwandeln, um dann die beiden letzten Stellen zu extrahieren.
Punkte B: Am besten wäre es, glaube ich, wenn diese Zahlenwerte mit einem Klick auf einen Button (z.B. "Jetzt Wert berechnen" oder so) erzeugt werden. Und dann nicht mehr geändert werden können. Es wird nur das Datum eingetragen, der Rest muss dann aus diesem Datum erzeugt werden.
Je nach Aufwand für diese Hilfe bin ich bei einer praktikablen Lösung gerne bereit eine angemessene Zahlung (vorher vereinbart) gegen Rechnung zu leisten. Könnte ja vielleicht doch bisschen Zeit in Anspruch nehmen ;-)
Gerne mit persönlicher Kontaktaufnahme.
37 Antworten
-
Bez. des "Select" Kommandos weiter oben:
max gibt den höchsten Wert (nicht den Datensatz mit dem höchsten Wert) zurück, der durch das select Kommando erreicht wird. Dabei muss es sich um eine Zahl oder Zeit handeln, Text geht nicht. Du musst also ggf. Text in Zahl umwandeln bzw umgekehrt.
siehe Doku Funktionen text() und number()
-
Bernhard Schulze said:
Der fängt immer wieder bei 01 an.Sind 'JahrYY' und 'LfdNrYY' Textfelder? Gibt es in der Tabelle '01.1 Aufträge' Datensätze, bei denen die ersten beiden Stellen von 'LfdNrYY' (z.B. "2206") mit 'myJJ' (z. B. "06") übereinstimmen?
-
Bernhard Schulze said:
Brauch ich das mit dem substr dann überhaupt an der StelleDie Nummer ist ja in einem Textfeld gespeichert und besteht aus zwei Teilen: Jahr und laufender Nummer innerhalb eines Jahres. Man muss also mit der where-Bedingung erst auf das betreffende Jahr filtern ("substr(XYNUMMER, 0, 2)"), dann aus den betreffenden Datensätzen die höchste laufende Nummer ermitteln ("substr(XYNUMMER, 2, 2)").
-
Hallo!
planox. pro said:
Sind 'JahrYY' und 'LfdNrYY' Textfelder?JahrYY: format(Auftragsdatum, "YY") (ist das Ergebis ein Text, dann ja)
LfdNrYY: Textfeld (hier stehen nur die Nummerierungen (bis jetzt) ab 01, 02 ... drin)
Also die erzeugten Nummern sehen letztendlich aus wie folgt:
"X-" + '01 Kunden'.KdNr + "-" + LfdNrYY + "-" + JahrYY + MonatMM
Das klappt alles, bis auf die automatische Zählung von LfdNrYY, die ich im Moment noch händisch eintrage. (X = Platzhalter für festgelegte Kennungen: Auftrag, Auftragsbestätigung, Rechnung, Gutschrift etc.). LfdNrYY ist die fortlaufende Nummerierung für JahrYY, beginnend mit 01. Für jede Kennung separat, die in jeweiligen Tabellen generiert werden und mit der Kundentabelle verknüpft sind, teilweise auch untereinander (z.B. Rechnungen in den Aufträgen, da es zu einem Auftrag auch mehrere Rechnungen und Gutschriften geben kann).
Die ganze Datenbank funktioniert mittlerweile genau so, wie ich mir das vorstelle. Nur diese !?$%&? automatischen Nummerierungen nicht :-(
Naja, nach 5 Programmier-Tagen ist wohl eh noch kein Meister vom Himmel gefallen :-)
-
Bernhard Schulze said:
LfdNrYY: Textfeld (hier stehen nur die Nummerierungen (bis jetzt) ab 01, 02 ... drin)Okay, dann kann es natürlich nicht funktionieren. Das Script geht wie gesagt davon aus, dass die Nummern vierstellig vorliegen, also "2201", "2202" usw. Wenn das Jahr aber fehlt, kann man auch nicht darauf abfragen und das "substr(FELD, 2, 2)" gibt nichts Verwertbares zurück, weil die Zeichenkette ja nur 2 Stellen umfasst (beim substr() beginnt die Zählung der Zeichen bei 0, die 2 steht also für das dritte Zeichen).
Die zweistellige Nummer im Feld 'LfdNrYY' ohne Berücksichtigung eines Jahres hochzuzählen, ist noch einfacher:
let myLast := max((select '01.1. Aufträge').LfdNrYY); LfdNrYY := format(number(myLast) + 1, "00")
ich glaube, jetzt haben wir alle Konstellationen durch.
Wenn diese zweistellige Nummerierung auf vierstellige mit Jahreszahl umgestellt werden soll, müssten auch die vorhandenen Nummern zunächst in das vierstellige Format gebracht werden. Den Code dazu hatte ich weiter oben schon mal gepostet.
-
Hallo!
planox. pro said:
Bei manchen Daten wie z. B. Rechnungen sollte man generell darauf verzichten, nur über Formelfelder auf Informationen aus anderen Tabellen zu referenzieren. Sonst steht in einer bereits versendeten Rechnung plötzlich eine andere Adresse, weil der Kunde umgezogen ist, oder ein falscher Betrag, weil sich zwischenzeitlich der Preis des Artikels geändert hat.Genau das ist meine Befürchtung. Falsche Referenzen auf Grund einer ungewollten Neuberechnung einer Formel. Oder auf einmal die Änderung einer Nummer, die schon publiziert ist (z.B. Rechnungsnummer u.ä.). Das mit dem Speichern in ein Feld muss ich mir nochmal konzeptionell für meinen Fall ansehen.
Content aside
- vor 1 JahrZuletzt aktiv
- 37Antworten
- 320Ansichten
-
3
Folge bereits