Hallo Accessianer,
ich habe ein Problem, dass mir schwer lösbar erscheint. Ob das so funktioniert, wie ich mir das vorstelle, weiß ich nicht. Ich habe mal eine vereinfachte Datei angefertigt und unten beigefügt, die wie folgt aussieht:
Ich möchte in folgende Formulare Datensätze eingeben:
- Artikelstamm
- Kundenstamm
- Lieferantenstamm
Jeder der Datensätze soll eine entsprechende Nummer erhalten. Diese setzt sich aus einer Kombination aus Buchstaben (1-stellig)und Nummern (4-stellig), getrennt durch einen Bindestrich, zusammen. Diese Kombinationen sind in der Nachschlagetabelle ,,Alphanumerikkreise" definiert.
Dabei gibt es in jedem der o.g. Stämme verschiedene Alphanumerikkreise:
- Artikelstamm = 4 Stück: A-1000, A-2000, A-3000, A-4000 (diverse Artikelgruppen)
- Kundenstamm = 2 Stück: K-0000, K-1000 (unregistrierte und registrierte Kunden)
- Lieferantenstamm = 2 Stück: L-0000, L-1000 (unregistrierte und registrierte Lieferanten)
In der Nachschlagetabelle ,,Alphanumerikkreise" sind zusätzlich noch folgende Felder vorhanden:
- Präfix: Die in diesem Feld eingegebenen Daten sind quasi die ,,Anführungszeichen", die im Dropdownmenü der o.g. Stämme auswählbar sind.
- Anwendung in: Hier ist eingetragen, für welchen der 3 Stämme der Alphanumerikkreis auswählbar sein soll.
Und so soll es funktionieren, als Beispiel möchte ich den Kundenstamm nehmen:
1. Ich möchte einen neuen Kunden anlegen, dazu öffne ich das Formular ,,Kundenstamm", ein neuer, leerer Datensatz erscheint. Ich klicke zuerst auf das Dropdownmenü ,,Kundennummer". Jetzt sollen mir NUR die für den Kundenstamm relevanten Präfixe der Alphanumerikkreise angezeigt werden, also nur  K-0 und K-1. Momentan werden ALLE Präfixe (also für den Artikelstamm und Lieferantenstamm) angezeigt.
2. Wähle ich eins der beiden Präfixe aus, soll die nächste freie Nummer vergeben und automatisch vervollständigt werden.  
Beispiel:
- Letzter unregistrierte Kunde war K-0815.
Wenn ich einen weiteren unregistrierten Kunden anlegen möchte, wähle ich K-0 aus und die Nummer K-0816 soll automatisch vergeben werden.
- Letzter registrierte Kunde war K-1386.
Wenn ich einen weiteren registrierten Kunden anlegen möchte, wähle ich K-1 aus und die Nummer K-1387 soll automatisch vergeben werden.
Dies sind meine Probleme:
- Ich kriege es nicht hin, dass mir in den entsprechenden Dropdownmenüs der Stämme nur die relevanten Präfixe zur Auswahl angezeigt werden. Dazu habe ich z.B. im Abfragegenerator des Formulars ,,Kundenstamm" unter ,,Kriterien" der 2. Spalte (AlphNumKr_Anw) das Wort ,,Kundenstamm" (in Anführungszeichen) eingegeben, jedoch ohne Erfolg. Es kommt beim Anklicken des Dropdownmenüs die Fehlermeldung ,,Datentypenkonflikt in Kriterienausdruck".
- Wie kann ich die jeweils 1. Nummer manuell eingeben, also z.B. K-1000? Die soll ja als Basis für alle weiteren, automatisch angelegten Nummern dienen.
Für eine Hilfe wäre ich wirklich sehr dankbar.
Viele Grüße
Rainer
[Anhang gelöscht durch Administrator]
			
			
			
				Hallo,
In den "Stamm"-Tabellen muss zunächst je ein weiteres Feld ("LfdNr", Long) eingebaut werden, das die  laufende Nummer eines jeden Datensatzes (Kunde, Lieferant, Artikel) beinhaltet und die dadurch erst überhaupt berechenbar wird.
Die Felder KDSt_KDNR  LiefSt_LiefNr, ArtSt_ArtNr sollten in "....ANKID" umbenannt werden.
so soll es funktionieren:
1) eine Abfrage (SQL) für die Datensatzherkunft des Kombis ("KdSt_ANKID") erstellen, das nur die Prefixe des jeweiligen "Stammes" auflistet:
Select AlphnumKr_ID, AlphnumKr_AlphnumKr from Alphanumerikkreise inner Join Anwendungen 
on Anwendungen.Anwend_id = Alphanumerikkreise.AlphnumKr_Anw
where Anwend_Anwend ="Kundenstamm"
2) etwa mit diesem Code:
Sub KdSt_ANKID_Afterupdate()
Me!KdSt_LfDnr.Defaultvalue = nz(Dmax("KdSt_Lfdnr","Kundenstamm"),-1) +1  'Erste Nummer beginnt bei leerer Tabelle bei 0
End Sub
Probleme:
1) Nicht Abfragegenerator für das Formular,  eher für das Kombi  (siehe SQl oben)
2) Es wird nichts manuell eingegeben, die Lfdnr wird berechnet. Wenn die Tabelle leer ist, wird für die  Lfdnr 0 erzeugt. Über den Standardwert im Formular wird die jeweils berechnete LfdNr beim Anlegen eines neuen Ds vorgeschlagen. Es ist sinnvoll, dieses Feld gegen manuelle Eingabe zu sperren.
			
			
			
				Hallo Franz,
zuerst vielen Dank!!!
Habe den "Kundenstamm" komplett nach Deinem Rat aufgebaut, die anderen Stämme sind noch nicht ganz fertig, werde ich noch anpassen.
Die aktualisierte Datei ist unten beigefügt.
Was ich jetzt schon festgestellt habe:
Punkt 1 funktioniert auf den ersten Blick einwandfrei.
Bei Punkt 2 treten folgende Probleme auf:
- Beim 1. Datensatz wird gar keine Nummer vergeben, erst beim 2. Datensatz wird eine "0" vergeben.
- Die Nummern sind immer in 2 Datensätzen identisch.
- Außerdem nummeriert er fortlaufend, ohne Rücksicht, ob ich vorher "K-1000" oder "K-0000" auswähle.
Kann ich irgendwie im ersten Datensatz die Nummer manuell eintragen, da nicht alle Datensatz-Serien aus "gewachsenen" Gründen bei "0" anfangen?
Übrigens: Was bedeutet das Kürzel ANKID?
Schönen Wochenanfang wünscht
Rainer
[Anhang gelöscht durch Administrator]
			
			
			
				Hallo,
naja, damit der ganze Ablauf korrekt vonstatten geht, braucht es noch ein bisschen mehr an programmatischen Aufwand...
Anbei ein Beispiel für den Kundenstamm.
 Probleme 1 & 2:
Der Code sollte ja nur das Prinzip zeigen, wie man so etwas realisieren könnte (Defaultwert-Eigenschaft auf berechneten Wert setzen) 
Problem 3:
Ja, das war so vorgesehen, die "KdSt_Lfdnr" ist eine "laufende Nummer". ;-)    Im meinem Beispiel hab ich das aber angepaßt.
"Was bedeutet das Kürzel ANKID?"
-->  AnwendungsNummernKreis-ID    
(Ich bin zu faul zum Schreiben ;-)  . Deine Benamsungen sind eher "unhandlich"  )
[Anhang gelöscht durch Administrator]
			
			
			
				Hallo Franz,
ich kann Deine Datei leider nicht öffnen - es kommt die Meldung:
"Der Extrahierungsvorgang kann nicht fertig gestellt werden. Die Zieldatei konnte nicht erstellt werden."
Viele Grüße
Rainer
			
			
			
				Hallo Franz,
habe es mehrmals versucht - jedoch kann ich immer noch nicht Deine Datei aus Deinem Beitrag vom 30.05.2011 öffnen.
Bei anderen Dateien im Forum klappt es problemlos.
Schönen Feiertag wünscht
Rainer
			
			
			
				Hallo,
anbei ZIP-Archiv mit geringerer Kompression. Vielleicht geht das ja.
[Anhang gelöscht durch Administrator]
			
			
			
				Hallo Franz,
super - hat geklappt, die Datei konnte ich öffnen!
Funktioniert jetzt, wie ich es mir vorgestellt habe - vielen Dank.
Bezüglich Deiner Änderung im Kundenstamm: Kommt man eigentlich irgendwie ohne die "doppelte" Kombifeld-Ausführung des Präfixes (Präfix im Detailbereich und Nummernkreis im Formularkopf) und vor allem der Befehlsschaltfläche "Datensatz hinzufügen" im Formularkopf aus?
Ich werde mal am kommenden Wochenende versuchen, das zu vereinfachen.
Werde mich wieder melden.
Viele Grüße
Rainer
			
			
			
				Hallo,
das gibt Probleme,  weil bei nur einem gebundenen Kombi die Nummer jedesmal bei Neuauswahl verändert werden würde, auch bei schon generierten Nummern.   Was stört Dich denn an dem zweiten (gebundenen) Kombi?  blende es halt aus, wenn Du es nicht brauchst...
			
			
			
				Hallo Franz,
habe das 2. gebundene Kombi ausgeblendet.
Gibt es eigentlich irgendwie die Möglichkeit, die Befehlsschaltfläche btnNeu zu umgehen?
Dieser soll ja, soweit ich das verstanden habe, das ungebundene Kombifeld txtANKID bei einem neuen Datensatz leer anzeigen, damit manuell eine Auswahl getroffen werden kann. Aber warum steht da, wenn man auf konventionelle Art einen neuen Datensatz öffnet (also durch TAB- bzw. ENTER-Taste nach Eingabe der letzten Eingabe, also des Kundennamens), überhaupt schon ein Wert drin (hier K-1)?
Wenn ich in irgendeiner Datei irgendein Formular öffne, sind doch bei einem neuen Datensatz die Kombifelder von vornherein leer.
Viele Grüße
Rainer
			
			
			
				Hallo,
es ist so gewollt (von mir durch den Code ), dass das Feld geleert wird. Wenn der Eintrag von vorher bleiben soll, dann kommentier den Code aus, der das Feld leer setzt.
Mein Code insgesamt ist ja nur ein Vorschlag, wie man an die Nummer lt. Vorgabe kommen könnte(!) und wie man überhaupt das Form bedient.
Es ist halt an Dir, einen genauen(!) und gangbaren Formularbedienaublauf zu definieren...
 
Die Schaltfläche umgehen (d. h. gar nicht  benutzen/haben zu wollen) ist schon möglich, es ist lediglich ein auslösendes Ereignis zu bestimmen.
			
			
			
				Hallo Franz,
okay - werde versuchen, es entsprechend umzubauen.
Werde mich danach wieder melden.
Schönen Sonntagabend
Rainer
			
			
			
				Hallo Franz,
habe eine Lösung ohne Schaltfläche gefunden, die scheint zu funktionieren.
Hier der umgestellte Code vom Kundenstamm:Private Sub Form_Load()
    DoCmd.GoToRecord , , acNewRec   'Neuer Datensatz
End Sub
Private Sub Form_Current()
    Me!KdSt_ANKID.DefaultValue = ""
    Me!KdSt_LfdNr.DefaultValue = ""
    Me!txtANKID = Null
    Me!txtANKID.Visible = Me.NewRecord
End Sub
Private Sub txtANKID_AfterUpdate()
    Me!KdSt_LfdNr.DefaultValue = Nz(DMax("KdSt_Lfdnr", "Kundenstamm", "kdst_Ankid=" & Me!txtANKID), -1) + 1 'Erste Nummer beginnt bei leerer Tabelle bei 0
    Me!KdSt_ANKID.DefaultValue = Me!txtANKID
    Me.KdSt_LfdNr.Locked = Not Me!KdSt_LfdNr.DefaultValue = 0
End Sub
Viele Grüße
Rainer
			
			
			
				Hallo Franz,
mir ist noch ein Problem eingefallen - bin leider erst jetzt draufgestoßen.  :-[
Auch akquirierte Kunden werden in den Kundenstamm aufgenommen, bei denen jedoch noch nicht feststeht, welchem Alphanumerikkreis sie mal angehören werden. Deshalb erhalten diese noch gar keine Kundennummer.
Möchte ich zu einem späteren Zeitpunkt nachträglich eine Nummer generieren, geht das nicht.
Habe versucht, den Code entsprechend umzubauen, bisher ohne Erfolg.  ???
Ist sowas überhaupt möglich? Dafür müssten nicht nur all die vor dem betroffenen Datensatz (also dem ohne Kundennummer) liegenden Datensätze berücksichtigt werden, sondern alle darauf folgenden auch, um die nächste freie Kundennummer zu generieren.
Einen schönen Pfingstmontagnachmittag wünshct
Rainer
			
			
			
				Hallo Rainer,
diese ganze Vorgehensweise ist Quatsch, sorry..., soll heißen: db-technischer Unsinn.
Ein Kunde ist ein Kunde, ob nun "akquiriert" oder nicht.  Sobald ein Kunde erfasst wird, erhält er eine Kundennummer, die NICHT SPRECHEND sein darf (dringend "sollte") .  Der "Zustand"  (Status, Kategorie) eines Kunden ist ein Attribut des Kunden und keine Definition (Kennung), insofern ist es sinnvoll, im Datensatz ein Feld mitzuführen, das eben den (akt.) Status des Kunden aufnimmt ("neu", "akquiriert", "archiviert", "gelöscht", "gestorben",  etc), wobei diese Kategorien gemäß den Normalisierungsregeln in einer extra Tabelle geführt werden.
Ist sowas überhaupt möglich? 
möglich ist es, genau so, wie aus einem Auto einen Hubschrauber zu bauen...  ;) ;D
 
			
			
			
				Hallo Franz,
erstmal vielen Dank für Deine Meinung, die ich gut nachvollziehen kann.  :)
Hier mal eine kleine Hintergrundinfo:
Habe einen kleinen Online-Shop, der (noch) komplett über Excel verwaltet wird, was auch gut funktioniert. Doch aufgrund der überbordenden Größe dieser Excel-Datei und der sehr komplexen inneren Struktur, die eigentlich für Access und weniger für Excel spricht, habe ich mich Anfang des Jahres entschlossen auf Access umzusteigen und baue diese Datenbank momentan auf.
Warum Kunden nicht von vornherein eine Kundennummer erhalten?
Registriert sich ein Kunde im Online-Shop und bestellt dort Ware, erzeugt der Shop automatisch eine Kundennummer (K-1000-er Reihe).
Bestellt der Kunde ohne Registrierung oder bestellt auf eine andere Weise (Telefon, E-Mail, Papierschriftlich, Besuch) erhält er eine anders geartete, manuell vergebene Kundennummer (K-0000-er Reihe), damit es mit dem Online-Shop keine Überschneidungen gibt.
Somit kommen von 2 Seiten Kundennummern zusammen, die entsprechend gelenkt werden müssen.
Und es ist leider nicht vorhersehbar, wo ein akquirierter Kunde mal bestellen wird (Online-Shop oder "konventionell"). Von daher habe ich bisher keine Kundennummern an solche Kunden vergeben.
Ich könnte jetzt zwar problemlos in Excel nachträglich allen kundennummernlosen Kunden als "Access-vorbereitende Maßnahme" eine Nummer verpassen (aus dem K-0000-er Kreis), was ist aber, wenn einige von ihnen im Online-Shop bestellen und zusätzlich eine K-1000-er Nummer entsteht? Dann habe ich 2 Kundennummern. :o
Viele Grüße
Rainer
			
			
			
				Hallo Rainer,
ich möchte hier nicht quereinsteigen, muss aber dennoch ein Statement abgeben, weil du in deinem letzten Beitrag eben genau ein Problem angesprochen hat, das unweigerlich dann entsteht, wenn du Kunden an Hand ihrer Kundennummern klassifizierst!
Zitatwas ist aber, wenn einige von ihnen im Online-Shop bestellen und zusätzlich eine K-1000-er Nummer entsteht? Dann habe ich 2 Kundennummern.
...das wird früher oder später passieren und es ist dabei zu bedenken, dass trotz aller Verbiegungen es nicht sein darf, dass die ursprünglich vergebene Kundennummer überschrieben wird - es stimmen sonst deine Geschäftsaufzeichnungen nicht mehr!
In Anlehnung an die Vorschläge von Franz - ein Kunde ist ein Kunde und SOLLTE / MÜSSTE eine Kundennummer erhalten, sobald er in deinem geschäftlichen Umfeld als solcher auftritt.
Wobei es egal ist, ob er als registrierter Kunde via Internet bei dir einkauft oder eine Bestellung per Telefon plaziert.
Ich würde entweder wie Franz vorgeschalgen hat, ein Statusfeld mitführen - der Staus kann sich immer wieder ändern und zeigt im Moment der Abfrge immer die aktuelle Situation - und / oder würde einfach die Bestellung kennzeichnen (telefonisch, persönlich, durch Boten, Onlinshop, ...)
			
 
			
			
				Hallo Rainer, ich habe die gleiche Problemstellung: Online-Shop, Ladengeschäft, telefonische Bestellungen u.a.
Ein Kunde erhält seine Nummer in der Datenbank. Onlinebestellungen werden als solche mit einer Checkbox gekennzeichnet. Unser Onlineshop vergibt keine Nummern, wenn er es aber täte, würde ich sie als zusätzliche Info aufnehmen, um ggf. danach suchen zu können, aber nicht als Kundennummer, die die Grundlage für alle möglichen Verknüpfungen darstellt.
In der Rechnungsstellung beziehe ich mich auch nicht auf die Auftragsnummern, die der Online-Shop automatisch vergibt, sondern auf die Rechnungsnummer aus der Datenbank.
LG, Ulli
			
			
			
				Hallo Franz, Peter und Ulli,
eine Statusanzeige habe ich bereits vor einiger Zeit beim Aufbau des Kundenstammes in ACCESS vorbereitet.
In EXCEL nutze ich schon seit langer Zeit diese vollautomatisierte Hilfe - die geht so:
AKQUIRIERT: wird bei Anlage des Kunden gesetzt. 
BESTELLENDER: wird bei erster Bestellung gesetzt.
SPERREMPFEHLUNG: ständiger Vergleich von z.B. Zahlungstreue, Anzahl unberechtigter Reklamationen, etc. empfiehlt mir ggf. zur Sperrung.
GESPERRT: diesen setze ich ausschließlich manuell. Bestellt der Kunde, kann ich keine Bestellung einpflegen - es sei denn ich entferne den Status manuell wieder.
Viele Grüße
Rainer