PDA

Vollständige Version anzeigen : Auftragsnummer generieren!!!


Aggu
05.08.2004, 09:19
Hallo zusammen,

ich entwickel grad eine Auftragsdatenbank. Diese soll u.a. die Auftragsnummer automatisch generieren, und zwar sieht die Auftragsnummer folgemdermassen aus:

Beispiel:

AF2004001DEU

hier ist das AF immer da, die 2004 ist das Jahr, 001 ist die fortlaufende Nummer von dem Auftrag und DEU steht für Deutschland.

Ich habe eine Tabelle in der ich alle meine Kunden drin habe, die Kunden sind entweder DEU für Deutschland, FRA für Frankreich, usw.

So, wenn ich einen nene Auftrag anlege, kommt erstmal eine maske mit all meinen Kunden, ich wähle einen aus, und dann kommt eine andere Maske in der aber schon die generierte Auftragsnummer stehen soll, d.h. z.B. Kunde DEU, erstmal suchen nach Auftragsnummern die mit DEU enden und dann nach der fortlaufenden nummer, ob es schon Aufträge zu dem Kunden gibt, wenn ja, die letzte Zahl um eins erhöhen. Ich hoffe man kann das verstehen und einer von Euch kann mir dabei helfen, es zu realisieren.

Danke

Gruß Agnes

Arne Dieckmann
05.08.2004, 09:22
Sprechende Schlüssel sind hochgradiger M**t und sollten vermieden werden. Da ich denke, dass dir das egal ist, gibt es hier nur einen Link: http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=111328
(weiteren "Support" leiste ich für dieses Thema aber nicht).

rita2008
05.08.2004, 16:30
Du brauchst doch gar nicht nach allen deutschen Kunden zu suchen, wenn Du den Kundennamen schon hast.

DLast("AuftrNR","Tabname","[Kunde]=Aktkunde)+1

müsste doch ausreichen.

(evtl musst Du mit Stringfunktionen noch den entsprechenden Teil aus Deiner Auftragsnummer rausholen, oder legst generell ein zusätzliches Feld mit dem numerischen Teil an)

mfg Rita

Aggu
11.08.2004, 13:47
Also, ich habe ein Formular frmAnlegenAuftrag. Wenn ich den Auftrag jetzt anlege, wandern die Daten in die Tabelle tblAngebotsdaten.
Die Auftragsnummer möchte ich nicht manuell eingeben, ich möchte dass wenn ich beim Punkt Kunde bin, wo ich den Kunden auswähle, das ist z.B.: DEU, FRA....., dass er automatisch schaut in der Tabelle tbAngebotsdaten.KundenNr ob es zu der Kundennummer schon einen Auftrag gibt, wenn ja, dann um 1 erhöhen.

Hier sind die relevanten Daten:

tblAngebotsdaten:
AuftragsNr
KundenNr

tblKundenstamm:
KundenNr
KurzName

Nun muss ich hier um den Kurznamen herauszufinden und ob es dazu einen Auftrag gibt, vergleichen: tblAngebotsdaten.KundenNr=tblKundenstamm.KundenNr und dann den KurzName ermitteln und vergleichen.

Ich weis nur gar nicht wie ich das machen soll.
Kann mir jemand dabei helfen?

Danke

Gruß Agnes

TommyK
11.08.2004, 15:16
Hallo Agnes,

ich hab mal ein kleines Bsp erstellt. (s. Anhang)

Im Formular wird nach der Auswahl eines Kunden zu einem neuen DS gesprungen. Dabei wird die Abfrage "qryKundenNr" benötigt.
Die Funktion UniCounter ermittelt den nächst höheren Wert und schreibt diesen
in das gelbe Feld. Es ist ein Hilfsfeld und kann auf nicht sichtbar geschaltet werden. Dieses Feld muss aber in Deiner Tabelle "tblAngebotsdaten" vorhanden sein.
Dann wird die KundenNr in die Tabelle "tblAngebotsdaten" geschrieben und die eigentliche AuftragsNr generiert.
Schau es Dir mal an ob es so gehen würde.

Aggu
12.08.2004, 06:59
Hallo TommyK,

Das sieht ja ganz gut aus.
kannst Du mir noch sagen wie das Hilfsfeld heisst?
Es ist ja ausgeblendet, ich nehme mal an es ist in der Tabelle Angebotsdaten.

Gruß Agnes

TommyK
12.08.2004, 07:02
Hallo Agnes,

wie in der Bsp-DB zur ersehen heißt das Feld "AuftragsNrTemp" in der Tabelle "tblAngebotsdaten"

Aggu
12.08.2004, 12:59
Hey TommyK,

ich habe versucht das jetzt bei mir anzupassen aber irgendwas läuft noch schief.

Dein Beispiel:

tblAngebotsdaten --> KundenNr ist bei mir nicht DEU, FRA usw, sondern nur zahlen 1...bis ...

tblKundenstamm --> KundenNr s.o., KurzName soll DEU, FRA, usw. sein.

Meine Daten:
tblAuftragsabwicklung
tblKundenstamm

Mein Tabellen Name hat sich geändert. Ich habe eigentlich alles angepasst, doch klappt es nicht.

Ich habe in mein tblAuftragsabwicklung das Feld AuftragsNrTemp eingefügt.

Deine Abfrage ist so:

SELECT tblAngebotsdaten.AuftragsNr, tblAngebotsdaten.KundenNr, tblAngebotsdaten.AuftragsNrTemp
FROM tblAngebotsdaten
WHERE (((tblAngebotsdaten.KundenNr)=[Formulare]![Formular1]![cboKunden]));

Meine jetzt so:

SELECT tblAuftragsabwicklung.AuftragsNr, tblAuftragsabwicklung.AuftragsNrTemp
FROM tblKundenstamm INNER JOIN tblAuftragsabwicklung ON tblKundenstamm.KundenNr = tblAuftragsabwicklung.KundenNr
WHERE (((tblAuftragsabwicklung.KurzName)=[Formulare]![Formular1]![cboKunden]));
So, bei dem Formular1 habe ich auch die Datenherkunft des Formulars auf tblAuftragsabwicklung gesetzt, bei dem PullDownMenü habe ich bei der Datenherkunft SELECT DISTINCTROW tblKundenstamm.KurzName FROM tblKundenstamm;

So das ist alles an Änderungen, und es kommt jetzt die Fehlermeldung "Fehler beim Kompilieren: Methode oder Datenobjekt nicht gefunden". Dabei geht das VB Fenter auf und der Code vom Formular1 ist ja so:

Private Sub cboKunden_AfterUpdate()
DoCmd.RunCommand acCmdRecordsGoToNew
Me.txtKurzName = Me.cboKunden
Me.txtAuftragsNr = "AF" & Me.txtAuftragsNrTemp & Me.cboKunden
End Sub

Ich habe hier auch eine Änderung gemacht und zwar in der dritten Zeile steht jetzt Me.txtKurzName, war vorher KundenNr.

Kannst Du mir noch mal helfen?

Gruß Agnes

Aggu
12.08.2004, 13:09
Ich glaube mein Fehler liegt hier in der SelectAnweisung:

<i>So, bei dem Formular1 habe ich auch die Datenherkunft des Formulars auf tblAuftragsabwicklung gesetzt, bei dem PullDownMenü habe ich bei der Datenherkunft</i> SELECT DISTINCTROW tblKundenstamm.KurzName FROM tblKundenstamm;

Denn ich habe zwar eine Beziehung zwischen tblKundenstamm und tblAuftragsabwickllung, aber woher soll er die zu dem Kunden dazugehörigen Datensätze wissen.

Ich galube das ist es, und wenn, wie muss ich dann die SelectAnweisung schreiben?

Gruß Agnes