Eigentlich sollte man meinen, die Verwaltung von Liefer- und Rechnungsadressen ist kein großes Problem. In der Tat ergeben sich aber je nach Definition Probleme: Was ist beispielsweise, wenn die eine Datenbank Kundenadressen sammelt und bei Bedarf eine zusätzliche Rechnungsadresse aufnimmt, die andere neben den Kundenadressen eine Lieferadresse notiert Und wenn Sie diese Daten dann noch in Rechnungsberichten verwenden oder zusammenführen möchten Lesen Sie einfach weiter und tauchen Sie ein in die Probleme der Adressverwaltung – und ihre Lösung.
Je nach Art der Produkte oder Dienstleistungen, die Sie anbieten, benötigen Sie ganz unterschiedliche Adressdaten vom Kunden. Wenn Sie etwa nur Software entwickeln und diese als Download anbieten, reicht Ihnen die Rechnungsadresse des Kunden. Sollten Sie die Software hingegen in einer Box versenden, reicht die Rechnungsadresse nicht aus – Kunden haben ja manchmal verschiedene Adressen für Rechnungen und Lieferungen.
Das eingängigste Beispiel sind wohl größere Unternehmen, bei denen Sie das Produkt sofort zum Anwender schicken und die Rechnung direkt in der Buchhaltung landen soll. Im letzteren Fall gibt es verschiedene Möglichkeiten, die entsprechenden Adressen aufzunehmen:
- Sie nehmen eine Adresse auf und bieten dem Kunden an, zusätzlich noch eine weitere Adresse als Lieferadresse anzugeben, wenn diese erste Adresse nicht gleichzeitig Liefer- und Rechnungsadresse ist.
- Sie nehmen eine Adresse auf, bieten aber diesmal an, eine zusätzliche Rechnungsadresse anzugeben, wenn die erste Adresse nicht gleichzeitig Lieferadresse und Rechnungsadresse ist.
- Sie nehmen grundsätzlich zwei Adressen als Liefer- und Rechnungsadresse auf. Sind beide identisch, kann die erste Adresse eingegeben und dann als zweite Adresse kopiert werden.
Für die spätere Verarbeitung ist die dritte Möglichkeit am einfachsten zu handhaben. Wenn Sie etwas versenden möchten, nutzen Sie einfach die Lieferadresse, und wenn Sie eine Rechnung schicken, nutzen Sie die Rechnungsadresse. Aber auch hier gibt es einen Haken: Wenn Sie Produkt und Rechnung nämlich gegebenenfalls gleichzeitig versenden möchten, müssen Sie erst prüfen, ob Liefer- und Rechnungsadresse gleich sind, und anderenfalls die Sendung doch wieder in Lieferung und Rechnung aufteilen.
Andersherum verwenden Sie bei der ersten Variante die erste Adresse in jedem Fall als Rechnungsadresse und prüfen dann, ob die zweite Adresse auch angegeben wurde. Falls nicht, geht die Lieferung an die erste Adresse, sonst an die zweite. Bei der zweiten Variante geht die Lieferung immer an die erste Adresse. Für den Rechnungsversand prüfen Sie die zweite Adresse und verwenden diese, falls vorhanden – sonst geht die Rechnung ebenfalls an die Lieferadresse.
Und richtig lustig wird es, wenn Sie mehrere Datenbanken verwenden, die zwei oder mehr der oben beschriebenen Varianten zum Speichern von Rechnungsdaten verwenden, und die Daten zusammenführen wollen.
Hintergrund
Wie in so vielen Fällen führte ein Beispiel aus dem echten Leben zur Erstellung dieses Beitrags. In diesem Fall verwendet der Autor selbst eine Datenbank, in der er für jeden Kunden eine Basisadresse pflegt (die im Zweifel als Rechnungs- und Lieferadresse dient) und in der zusätzlich eine alternative Rechnungsadresse eingetragen werden kann.
Während der Autor sich mit dem Import von Adressen, bei denen dies genau umgekehrt lief, herumärgerte, kam ihm die Idee, dass er womöglich einfach die falsche Methode gewählt hatte. Zu seiner eigenen Entlastung hat er daraufhin die Google-Probe gemacht, die folgende Ergebnisse für bestimmte Suchbegriffe ergab:
- abweichende Lieferadresse: 448.000
- abweichende Lieferanschrift: 337.000
- abweichende Rechnungsadresse: 257.000
- abweichende Rechnungsanschrift: 427.000
Allzu selten scheint der Einsatz einer abweichenden Rechnungsadresse im Vergleich zu einer abweichenden Lieferadresse also nicht zu sein …
Begriffsklärung
In den folgenden Abschnitten tauchen wiederholt die Begriffe Stammadresse, Lieferadresse und Rechnungsadresse auf. In einer Tabelle, die immer eine Rechnungsadresse und eine Lieferadresse enthält (auch, wenn beide identisch sind), ist die Begrifflichkeit eindeutig. Wenn eine Tabelle grundsätzlich nur eine Adresse aufnimmt und eine weitere, wenn die Lieferadresse von dieser Adresse abweicht, heißt die erste Adresse Stammadresse und die zweite Adresse Lieferadresse. Genauso verhält es sich, wenn neben der ersten Adresse eine abweichende Rechnungsadresse angegeben werden kann.
Zusammenführen gemischter Adressen
Wenn Sie eine Datenbank verwalten, die ihre Adressen mit alternativer Rechnungsadresse pflegt, und die Daten einer anderen Datenbank hinzufügen möchten, welche die Daten mit alternativer Lieferadresse speichert, haben Sie mehrere Möglichkeiten.
Die einfachste ist die folgende: Sie duplizieren einfach überall die Adressen, wo keine Liefer- oder Rechnungsadresse angegeben ist (was immer die “abweichende” Adresse ist) und führen die Daten dann so zusammen, dass die Lieferadresse der zweiten Datenbank der Stammadresse der ersten Datenbank hinzugefügt wird und umgekehrt.
Das würde jedoch dazu führen, dass Sie eine große Menge redundanter Daten unterhalten: Wenn Liefer- und Rechnungsanschrift übereinstimmen, muss man diese ja theoretisch auch nicht doppelt pflegen.
Und wenn, dann sollten Sie zumindest ein Ja/Nein-Feld zur Kundentabelle hinzufügen, das angibt, ob die Lieferadresse mit der Rechnungsadresse übereinstimmt. Sie können dann bei änderungen im Formular gleich prüfen, ob beide Adressen gleich sein sollen, und die änderungen für den jeweils anderen Datensatz übernehmen. Wenn Sie hingegen weiterhin etwa die Stammadresse und eine optionale weitere Adresse wie etwa die Rechnungsadresse in Ihrer Datenbank verwalten möchten und die Stammadresse plus alternativer Lieferadresse aus einer anderen Datenbank importieren möchten, bedarf es einiger Fummelei beim Erstellen der für den Import benötigten Abfrage.
Datenmodell
Die Tabelle zum Speichern von Adressen und abweichenden Rechnungsadressen sieht wie in Bild 1 aus (siehe Tabelle tblAdressenUndRechnungsadressen in der Beispieldatenbank), bei der Tabelle zum Speichern von Adressen und abweichenden Lieferadressen wurden einfach die Suffixe _Rechnung durch _Lieferung ersetzt (siehe Tabelle tblAdressenUndLieferadressen).
Bild 1: Adressen und abweichende Rechnungsadressen
Bei der Tabelle, die Rechnungs- und Lieferadresse explizit erfasst, werden beide Suffixe verwendet – und ein zusätzliches Feld namens LieferGleichRechnung, das als Ja/Nein-Feld ausgeführt wird und festlegt, ob beide Adressen übereinstimmen (s. Bild 2, Tabelle tblAdressen).
Bild 2: Tabelle mit expliziter Angabe von Liefer- und Rechnungsadresse
Adressen mit alternativer Lieferadresse in explizite Adressen umwandeln
Wenn Sie Daten aus der Tabelle tblAdressenRechnungsadressen in die Tabelle tblAdressen überführen möchten, erstellen Sie eine entsprechende Aktualisierungsabfrage. Diese soll bei Datensätzen, die nur Daten in den Feldern ohne Suffix enthalten (also Firma, AnredeID, Vorname et cetera), alle Werte in Liefer- und Rechnungsanschrift eintragen. Bei Datensätzen, die sowohl eine Stamm- als auch eine Rechnungsadresse enthalten, soll die Rechnungsanschrift in den Feldern mit dem Suffix _Rechnung landen und die Stammanschrift in den Feldern mit dem Suffix _Lieferung.
Erstmal müssen Sie aber herausfinden, ob eine Adresse nun eine alternative Rechnungsadresse enthält oder nicht. Dazu erstellen Sie eine neue Abfrage, welche die Tabelle tblAdressenRechnungsadressen als Datenherkunft verwendet. Die Frage nach dem Vorhandensein einer alternativen Rechnungsadresse ist gleichbedeutend mit: Enthält irgendeines der Felder mit dem Suffix _Rechnung einen Wert Falls ja, ist eine Rechnungsadresse vorhanden, sonst nicht. Dabei gehen wir davon aus, dass dort nicht versehentlich ein Wert in irgendeines der betroffenen Felder eingetragen wurde. Die Abfrage qryAdressimport_StammUndRechnung_Nach_LieferUndRechnung erhält also zunächst ein Feld mit dem folgenden Inhalt:
RAFehlt: Nicht Länge(Nz([Firma_Rechnung]) & Nz([AnredeID_Rechnung]) & Nz([Vorname_Rechnung]) & Nz([Nachname_Rechnung]) & Nz([Strasse_Rechnung]) & Nz([PLZ_Rechnung]) & Nz([Ort_Rechnung]) & Nz([Land_Rechnung]))>0
Der Ausdruck liefert den Wert True zurück, wenn alle Rechnungsadressfelder leer sind.
Fügen Sie nun alle weiteren Felder der Tabelle tblAdressenUndRechnungsadressen zum Entwurfsraster der Abfrage hinzu. Wandeln Sie die Abfrage dann über den Kontextmenü-Eintrag Abfragetyp|Anfügeabfrage in eine Anfügeabfrage um (s. Bild 3). Wählen Sie außerdem als Zieltabelle die Tabelle tblAdressen aus.
Bild 3: Umwandeln der Abfrage in eine Anfügeabfrage
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo