Access 2003 - Rechnungsnummer generieren

Hallo an alle Experten,

nun habe ich schon etliche Zeit damit verbracht eine Lösung zu finden, aber da reicht es mit meinen bescheidenen Kenntnissen in VBA uä nicht aus.
Also, ich habe eine Tabelle mit meinen Kunden, die alle auch einen ID per Autowert bekommen.
Und ich habe eine Rechnung in Word, die durch Seriendruck mit der Access Datenbank verknüpft ist.
Nun möchte ich, dass mir Access die Rechnungsnummer automatisch generiert für jeden Kunden (ich kann nicht den Autowert nehmen, da bei Fehlern beim Daten importieren oä die Nummer weg sind und die Nummerierung nicht fortlaufend ist).
Ich habe diese Lösung gefunden:

"Sie können zum Erzeugen einer fortlaufenden Nummer eine Unterabfrage verwenden. Diese besteht aus SQL-Text, der wie jedes andere berechnete Feld in einer Spalte einzugeben ist.

Angenommen, Sie haben eine Tabelle „tbl_Artikel“ mit einem Zählerfeld (Autowert) „ID“ und einem Textfeld „Bezeichnung“. Der SQL-Text für das Feld mit der laufenden Nummer in einer Abfrage könnte lauten:

Nummer: (Select Count (*) FROM [tbl_Artikel] as X WHERE [X].[ID]

Moin, Silke,

Wo bitte mache ich das rein??

Du hast doch eine Anweisung geplant à la

 Insert into MeineTabelle (Tabelle\_ID, Spalte1, Spalte2, ...)
 Values(4712, "Wert\_Spalte1", ...)

Den genannten Ausdruck setzt Du anstelle von 4712 ein, natürlich mit Deinen Spaltennamen, also in der Form

 (Select Count (\*) FROM MeineTabelle as X WHERE X.ID 

Vorsicht, ungetestet! 
Gruß Ralf

Hallo,

würde eher sagen:

(Select Count (*) FROM MeineTabelle ) as X +1

eine „laufende Nr“ wie vorher beschrieben ist wohl hier nicht angebracht.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Moin, Silke,

heute mit (hoffentlich) mehr Verstand:

Du hast Kunden mit einem Zähler als ID und Rechnungen, die ebenfalls einen Zähler als ID haben. Richtig? Dann kann’s weitergehen.

Noch eine Vermutung: Rechnungsnummern sollen aufsteigend und lückenlos vergeben werden. Der Trick mit der Rangfolge (dafür ist die Geschichte eigentlich gedacht) könnte klappen, wäre aber nicht sinnvoll, weil dafür immer der ganze Bestand an Rechnungen gelesen werden muss. Ich rate deshalb zu einer zusätzlichen Tabelle mit genau einem Feld, das die letzte vergebene Rechnungsnummer festhält.

Nutzung des Feldes: Nach dem Anlegen einer neuen Rechnung wird es um 1 hochgezählt und der aktualisierte Wert als Rechnungsnummer für den Druck bei der Rechnung gespeichert und an Word übergeben.

Gruß Ralf

Du hast Kunden mit einem Zähler als ID und Rechnungen, die
ebenfalls einen Zähler als ID haben.

Also ich habe Tabelle 1: ID (Autowert), Name Kunde, Adresse etc.
Und ich habe Tabelle 2: Rechnungsnummer(Autowert), ID Kunde(dieser gebe ich im moment halt manuell ein…)
Ich bekomme in der Woche mehrere Kundennamen und muss für jeden einzelnen ne Rechnung dann auch machen (in .pdf). Ich habe eine Abfrage (Tab1+Tab2) mit dem Worddokument verknüpft.

Noch eine Vermutung: Rechnungsnummern sollen aufsteigend und lückenlos vergeben werden.

Ganz genau!

Ich rate deshalb zu einer
zusätzlichen Tabelle mit genau einem Feld, das die letzte
vergebene Rechnungsnummer festhält.

Nutzung des Feldes: Nach dem Anlegen einer neuen Rechnung wird
es um 1 hochgezählt und der aktualisierte Wert als
Rechnungsnummer für den Druck bei der Rechnung gespeichert und
an Word übergeben.

Lieber Ralf,

ich Danke dir für den Hinweis…
ich müsste deine Hilsbereitschaft noch weiter ausnutzen, und dich fragen: mache ich das dann durch ne Abfrage? Oder muss ich dafür einen Code in VBA schreiben (so mit dao.recordset oä)?
Ich bringe mir im Moment alles selber bei, und da gibt es leider noch sehr viele Lücken bei mir…

Vielen Dank schon mal für deine Hilfe

Grüße aus dem Schwabenländle

Silke

ich müsste deine Hilsbereitschaft noch weiter ausnutzen

Da wird’s schwierig, weil ich nicht weiß, was Du weißt (oder
eben nicht).

ok, ich versuche es mal so… die Abfrage für den Seriendruck in word lautet:

SELECT Tab_Personaldaten.Nachname, Tab_Personaldaten.Vorname, Tab_Personaldaten.Straße,…
FROM Tab_Personaldaten INNER JOIN Tab_Rechnungsnummer ON Tab_Personaldaten.ID = Tab_Rechnungsnummer.[ID Kunde];

Kann ich hier irgendwie es so anstellen, dass ich dieses INNER JOIN weg lasse und diese Unterabfrage einbringe??? Wenn ja, ganz konkret wie???

Ich werde noch verrückt mit dieser Rechnungsnummer!

LG

Silke

SELECT Tab_Personaldaten.Nachname, Tab_Personaldaten.Vorname,
Tab_Personaldaten.Straße,…
FROM Tab_Personaldaten INNER JOIN Tab_Rechnungsnummer ON
Tab_Personaldaten.ID = Tab_Rechnungsnummer.[ID Kunde];

in dem Select fehlt genau diese ominöse Rechnungsnummer, also häng den geheimnisvollen Rangstufen-Select als weitere Spalte dran:

SELECT Tab\_Personaldaten.Nachname, Tab\_Personaldaten.Vorname,
Tab\_Personaldaten.Straße, ... , (Select Count \* from ... + 1) 

Das hilft Dir zwar für den Moment aus der Breduoille, ist und bleibt aber fachlicher Murx, weil sich diese Rechnungsnummer niemals zurückverfolgen lässt („Wir hätten da gerne mal 'n Problem mit der Rechnungsnummer 4711!“). Du solltest auf der Rechnung dann die interne Rechnungsnummer mit angeben, sonst gibt’s Ärger mit der Revision.

Gruß Ralf