Forums Neueste Beiträge
 

Vorgänger und Nachfolger finden

25/03/2010 - 16:20 von Bjoern Krueger | Report spam
Moin allerseits!

Ich habe folgendes Problem und komme irgendwie nicht weiter. Daher frage ich
hier mal nach.

Hier kurz ein paar Vorab-Informationen:
Wir haben drei klassische Tabellen:
-Kundenstamm (ca. 6.000)
-Auftragstabelle
-Positionstabelle

Die Verknüpfung erfolgt ganz normal über Kundennummer und Auftragsnummer,
sodass man für jede Kundennummer z.B. den Gesamtumsatz aller Auftràge
ermitteln kann.

Das Problem:
Das Feld "Auftragsnummer" in der Auftragstabelle hat nur drei Stellen, das
heißt, pro Kunde sind maximal 999 Auftràge möglich.

Wenn nun ein Kunde 999 Auftràge hat, wird der Kundendatensatz komplett
kopiert, und erhàlt eine neue Kundennummer. In einer Spalte wird im
Originalkundensatz ein Flag gesetzt, dass es für diese Kundennummer eine
Kopie gibt, dessen Kundennummer steht dann in einer weiteren Spalte
Damit kann der Kunde über seine neue Kundennummer wieder 999 Auftràge
generieren, bevor die nàchste Kopie erzeugt wird.

Ein Beispiel:
Kunde 4711 hat 999 Auftràge erreicht, wird also kopiert. Die Kopie hat die
Nummer 4811. Im Originaldatensatz wird das Nachfolgerkennzeichen gesetzt, und
die 4811 als Nachfolgernummer eingetragen.

Nach der Aktion sieht es dann also so aus:

Kunden-Nr. NachfolgerVorhanden Nachfolger-Nr.
4711 1 4811
4811 0 [leer]

Wenn jetzt 4811 ebenfalls 999 Auftràge hat, wird auch dieser Datensatz
kopiert, z.B: in 4911. Dann sieht es anschließend so aus:

Kunden-Nr. NachfolgerVorhanden Nachfolger-Nr.
4711 1 4911
4811 1 4911
4911 0 [leer]

zu beachten: AUch im ersten Datensatz wird die Nummer der neuesten Kopie als
Nachfolger eingetragen


Leider gibt es aber noch eine andere Variante:

Kunden-Nr. NachfolgerVorhanden Nachfolger-Nr.
4711 1 4811
4811 1 4911
4911 0 [leer]

Hierbei wird also im ersten Datensatz die neueste Nachfolger-Nr. nicht
eingetragen.

So, jetzt das eigentliche Problem:
Wenn ich für einen Kunden z.B. die Umsàtze ermitteln will, muss ich u.U.
mehrere Kundennummern berücksichtigen.

Ich bràuchte eine Funktion, die mir für eine beliebige Kundennummer alle
Nachfolger und auch Vorgànger ermittelt

z.B. so:
function(4711) => 4811, 4911

oder auch:
function(4911) => 4711, 4811

Ich hab's rekursiv versucht, aber irgendwie habe ich das nicht hinbekommen.

Jemand ne Idee? Muss auch nicht unbedingt mit Access realisiert werden, bei
der Anzahl der Datensàtze würde sich auch Excel eignen.

Freue mich auf zahlreiche Tipps!

Danke und viele Grüße,

Björn
 

Lesen sie die antworten

#1 Josef Poetzl
25/03/2010 - 18:37 | Warnen spam
Hallo!

Bjoern Krueger schrieb:
Hier kurz ein paar Vorab-Informationen:
Wir haben drei klassische Tabellen:
-Kundenstamm (ca. 6.000)
-Auftragstabelle
-Positionstabelle

Die Verknüpfung erfolgt ganz normal über Kundennummer und Auftragsnummer,
sodass man für jede Kundennummer z.B. den Gesamtumsatz aller Auftràge
ermitteln kann.

Das Problem:
Das Feld "Auftragsnummer" in der Auftragstabelle hat nur drei Stellen, das
heißt, pro Kunde sind maximal 999 Auftràge möglich.

Wenn nun ein Kunde 999 Auftràge hat, wird der Kundendatensatz komplett
kopiert, und erhàlt eine neue Kundennummer.



Wàre es nicht einfacher gewesen, die Auftragsnummern zu erweitern? ;-)


Ein Beispiel:
Kunde 4711 hat 999 Auftràge erreicht, wird also kopiert. Die Kopie hat die
Nummer 4811. Im Originaldatensatz wird das Nachfolgerkennzeichen gesetzt, und
die 4811 als Nachfolgernummer eingetragen.

Nach der Aktion sieht es dann also so aus:

Kunden-Nr. NachfolgerVorhanden Nachfolger-Nr.
4711 1 4811
4811 0 [leer]

Wenn jetzt 4811 ebenfalls 999 Auftràge hat, wird auch dieser Datensatz
kopiert, z.B: in 4911. Dann sieht es anschließend so aus:

Kunden-Nr. NachfolgerVorhanden Nachfolger-Nr.
4711 1 4911
4811 1 4911
4911 0 [leer]

zu beachten: AUch im ersten Datensatz wird die Nummer der neuesten Kopie als
Nachfolger eingetragen

Leider gibt es aber noch eine andere Variante:

Kunden-Nr. NachfolgerVorhanden Nachfolger-Nr.
4711 1 4811
4811 1 4911
4911 0 [leer]

Hierbei wird also im ersten Datensatz die neueste Nachfolger-Nr. nicht
eingetragen.

So, jetzt das eigentliche Problem:
Wenn ich für einen Kunden z.B. die Umsàtze ermitteln will, muss ich u.U.
mehrere Kundennummern berücksichtigen.

Ich bràuchte eine Funktion, die mir für eine beliebige Kundennummer alle
Nachfolger und auch Vorgànger ermittelt



Ich würde mir dafür zumindest eine Hilfstabelle einrichten, die den
obigen Murks ;-) wenigstens ein wenig bereinigt.

Beispiel:
Tabelle KundenstammMurks
KundenNr | HauptNummer
4711 | 4911
4811 | 4911
4911 | 4911

(KundenNr = PK)

Diese Tabelle könntest du dann in einer VBA-Schleife befüllen.

Prinzip:

insert into KundenstammMurks (KundenNr, HauptNummer)
values (4911, 4911)

do until (kein DS mehr angefügt wird)
insert into KundenstammMurks (KundenNr, HauptNummer)
select
K.[Kunden-Nr], M.HauptNummer
from
KundenstammMurks M
inner join
Kundenstamm K
ON K.[Nachfolger-Nr] = M.KundenNr
where
not exists (select * from KundenstammMurks X
where KundenNr = K.[Kunden-Nr])
loop


Anschließend könnte eine Suche aus aussehen:

select
K.*,
A.Auftragsnummer
from
KundenstammMurks SuchTab
inner join
KundenstammMurks H
ON H.HauptNummer = SuchTab.HauptNummer
inner join
Kundenstamm K
ON K.[Kunden-Nr] = H.WeitereNummern
inner join
Auftragstabelle A
ON A.[Kunden-Nr] = K.[Kunden-Nr]
Where
SuchTab.KundenNr = 4811

Anm.: für Jet fehlen die Klammern um die Joins, aber ich wollte eh nur
das Prinzip zeigen.
... und da alles Luftcode ist, bitte nur als Prinzip-Darstellung
betrachten.


mfg
Josef

Code-Bibliothek für Access-Entwickler: http://access-codelib.net/
Access-FAQ von Karl Donaubauer: http://www.donkarl.com/

Ähnliche fragen