Adressen für Berichte aufbereiten

Die Ausgabe von Adressen in Berichten ist doch ein alter Hut. Sie platzieren die einzelnen Felder mit den betroffenen Daten dort, wo die Adresse erscheinen soll – fertig! Aber halt: Manchmal ist es doch nicht so einfach. Wenn beispielsweise Adresselemente wie die Straße fehlen, kommt es mitunter zu unschönen Lücken im Adressblock. Aber auch die Lösung zu diesem Problem ist bereits bekannt. Dieser Beitrag stellt kurz die gängigen Vorgehensweisen vor und zeigt dann eine alternative Methode, um Adressblöcke perfekt zusammenzustellen.

Wer noch nicht lange mit Access arbeitet, wird beim ersten Versuch, Adressdaten zu einem Adressblock zusammenzuführen, wohl einfach die betroffenen Felder an die entsprechende Stelle im Entwurf des Berichts ziehen.

Dies kann funktionieren, tut es aber nicht zwangsläufig: Adressdaten kommen nämlich längst nicht immer in der gleichen Zusammenstellung daher. Mal gehört eine Firma zu einer Adresse, mal mit, mal ohne Ansprechpartner, mal geht die Post an eine einzelne Person, die mit entsprechender Anrede zu versehen ist, mal fehlt die Straße. Gelegentlich fügen eifrige Benutzer die Länderkennzeichnung zur Postleitzahl hinzu, was früher hilfreich war, heute aber eher stört: Immerhin bereits seit einer änderung der DIN 5008 im Jahr 2001 sollen die Länderkennzeichen für Auslandssendungen nicht mehr vor die Postleitzahl gesetzt werden, sondern das Land ausgeschrieben in der letzten Zeile des Adressblocks erscheinen. Es gilt also nicht mehr:

Herrn
André Minhorst
Borkhofer Straße 17
D-47137 Duisburg

Stattdessen ist seit 2001 folgende Notation zu verwenden:

Herrn
André Minhorst
Borkhofer Straße 17
47137 DUISBURG
DEUTSCHLAND

Dies gilt allerdings auch nur für Sendungen ins Ausland (dieses Beispiel ist also streng genommen falsch) – für Inlandssendungen wird schlicht kein Land angegeben.

Bei Auslandssendungen werden Ort und Land in Großbuchstaben angegeben, der Ort in Landessprache, das Land in Deutsch, Englisch oder Französisch. Es gibt keine Leerzeilen im Adressblock! Zusätzliche Vermerke wie Einschreiben, Warensendung et cetera landen in der ersten Zeile:

Einschreiben
Herrn
André Minhorst
Borkhofer Straße 17
47137 DUISBURG

Ist eine Firmenbezeichnung im Spiel, landet diese über dem Namen eines eventuell vorhandenen Adressaten, aber unter einem Zusatzvermerk. Bei Firmenbezeichnung und Adressat gehört die Anrede in die gleiche Zeile wie der Adressat, sonst eine Zeile darüber:

Redaktionsbüro Minhorst
Herrn André Minhorst
Borkhofer Straße 17
47137 DUISBURG

Wenn eine Sendung mit Personenangabe wie oben an eine Firma geschickt wird, wird diese geöffnet und dann weitergeleitet. Soll diese nicht geöffnet werden, vertauscht man Adressat und Firma:

Herrn André Minhorst
Redaktionsbüro Minhorst
Borkhofer Straße 17
47137 DUISBURG

Beispieltabelle

Als Beispieltabelle verwenden wir zunächst die Tabelle tblAdressenEinfach der Beispieldatenbank. Diese enthält die Felder Firma, AnredeID, Vorname, Nachname, Strasse, PLZ, Ort und Land (s. Bild 1).

pic002.png

Bild 2: Erweitern der Adressen um das Anrede-Feld der Anreden-Tabelle

Einfache Variante: Einzelne Felder

Wenn Sie die Felder Ihrer Adresstabelle in einem Bericht platzieren möchten, erledigen Sie dies am einfachsten durch direktes Einfügen der Felder im Bericht. Wenn Sie die Anrede wie in der Beispieltabelle in einer separaten Tabelle etwa namens tblAnreden speichern, können Sie diese auf zwei Arten in den Bericht holen: Entweder Sie definieren das Feld AnredeID als Nachschlagefeld oder Sie fügen das Feld über eine Abfrage wie in Bild 3). In beiden Fällen müssen Sie normalerweise später nachhelfen: Immerhin lautet die auszuwählende Anrede meist Herr und Frau, zumindest der Herr wird aber im Adressblock als Herrn ausgegeben.

pic001.png

Bild 1: Beispieltabelle mit Adressen

pic003.png

Bild 3: Anrede als Nachschlagefeld

Access-Neulinge bauen beim ersten Versuch, einen Adressblock zusammenzustellen, meist so etwas wie in Bild 5). Anrede, Vorname und Nachname landen dann etwa in einem Feld namens txtAdressat mit dem folgenden Steuerelementinhalt:

pic004.png

Bild 4: Einsteiger-Variante

pic005.png

Bild 5: Verbesserte Einsteiger-Variante

=[Anrede] & " " & [Vorname] & " " & [Nachname]

Leider steht dann im Bericht Herr und nicht Herrn. Dies ändert folgende Anpassung:

=Wenn([AnredeID]=1;"Herrn";"Frau") & " " & [Vorname] & " " & [Nachname]

Nun kann es aber auch vorkommen, dass keine Firma angegeben wurde. Dann soll die Anrede in die erste Zeile rutschen. Die erste Zeile (Textfeld txtFirmaOderAnrede) sieht dann etwa so aus:

=Wenn(Länge([Firma])>0;[Firma];Wenn([AnredeID]=1;"Herrn";"Frau"))

Für die zweite Zeile resultiert daraus folgende Formel:

=Wenn(IstNull([Firma]);"";Wenn([AnredeID]=1;"Herrn";"Frau") & " ") & [Vorname] & " " & [Nachname]

Das Ergebnis sieht schon recht gut aus, wie Bild 6 zeigt. Fehlt nur noch eine Behandlung von Lücken, die auftreten, wenn bestimmte Elemente wie etwa die PLZ oder die Straße fehlen. Bezogen auf ein komplettes Textfeld ist dies kein Problem: Stellen Sie einfach die Eigenschaft Verkleinerbar auf den Wert Ja ein. Es wird dann mit der Höhe 0cm angezeigt, wenn es leer ist. Die übrigen Felder rutschen entsprechend nach oben. Leider bleiben die Zwischenräume zwischen den Feldern erhalten. Aber auch dies lässt sich verhindern: Wenn Sie den gewünschten Zeilenabstand durch Zwischenräume herstellen, dann können Sie die Höhe der Felder auch so weit vergrößern, dass diese genau aneinander kleben. Die Felder dürfen sich aber nicht berühren, sonst werden leere Felder nicht mehr verkleinert. Auch dürfen sich auf der gleichen Höhe keine weiteren Steuerelemente befinden, da diese ja nicht gleichermaßen minimiert werden können.

pic006.png

Bild 6: Ist keine Firma vorhanden, landet die Anrede in der ersten Zeile.

Weitere Variante: Alles in ein Textfeld

Sie können auch den kompletten Adressblock in einem einzigen Feld zusammenstellen. Dies ergibt dann einen mehr oder weniger übersichtlichen Ausdruck, der eine Reihe Wenn-Bedingungen, Zeilenumbruch-Codes und verschiedene Verknüpfungsarten (Kaufmanns-Und und Plus-Zeichen) enthält. Den kompletten Ausdruck geben Sie dann als Steuerelement eines einzigen Textfelds an. Wir wollen an dieser Stelle nicht ins Detail gehen.

Erschwernis: Liefer- und Rechnungsadressen

In vielen Fällen kommen Sie mit einer einzigen Adresse pro Kunde nicht aus. Zwar muss man nicht immer gleich wie Amazon die Möglichkeit bieten, endlos viele Adressen je Kunde einzutragen, aber eine Liefer- und eine Rechnungsanschrift je Kunde kann schon nicht schaden. Dem wird beispielsweise die Tabelle aus Bild 7 gerecht. Sie enthält jedes Feld je einmal für die Liefer- und die Rechnungsanschrift, was durch entsprechende Suffixe verdeutlicht wird.

pic007.png

Bild 7: Tabellen mit Daten für Rechnungs- und Lieferadresse

Wer keine redundanten Daten mag, wird für Kunden, deren Rechnungs- und Lieferanschrift identisch ist, nur eine der beiden Anschriften angeben. In diesem Fall brauchen Sie je nach benötigter Anschrift für jedes Feld noch eine weitere Unterscheidung: Soll Firma, Anrede, Vorname et cetera der Rechnungs- oder der Lieferanschrift verwendet werden Wenn Sie alle Informationen in einem einzigen Ausdruck unterbringen möchten, wird dieser sehr unübersichtlich und auch die Fehleranfälligkeit steigt. Ganz zu schweigen von der Tatsache, dass nachträgliche änderungen eine echte Herausforderung sind.

Dies wird etwas vereinfacht, wenn Sie sich zu ein wenig Redundanz hinreißen lassen, wie es etwa im Beitrag Liefer-, Rechnungs- und sonstige Adressen (www.access-im-unternehmen.de/813) beschrieben wird. Wenn Sie auch bei Vorhandensein nur einer Adresse sowohl die Rechnungs- als auch die Lieferanschrift entsprechend füllen, brauchen Sie zwar einen Ausdruck mehr, dafür fallen beide Ausdrücke aber wesentlich einfacher aus.

Sonderfälle

Wahrscheinlich können Sie noch so viele Felder für die Eingabe von Adressdaten bereitstellen: Irgendein Kunde wird doch wieder mit der Umsetzung seiner Anschrift unzufrieden sein. Außerdem sollten Sie möglichst einen guten Kompromiss zwischen vielen Details bei der Aufnahme einer Kundenadresse und geringer Komplexität finden. So wäre es zum Beispiel denkbar, einfach standardmäßig die folgenden Daten abzufragen:

  • Firma
  • Anrede
  • Vorname
  • Nachname
  • Straße und Hausnummer, gegebenenfalls getrennt
  • PLZ
  • Ort

Wenn der Kunde seine Daten selbst einträgt (etwa über ein Online-Bestellformular), fehlt ihm hier möglicherweise etwa ein Feld, um eine Abteilung wie etwa Buchhaltung anzugeben. Sie könnten im Bestellformular einfach ein weiteres Feld namens Abteilung hinzufügen, aber andere Kunden fühlen sich dadurch vielleicht verunsichert, weil sie nicht wissen, was sie dort eintragen sollen (und dann irgendetwas eintragen, was später für Verwirrung sorgt). Gegebenenfalls vergrößern Sie im Bestellformular einfach das Feld Firma – dies ist jedoch bei vorgefertigten Online-Anwendungen auch nicht so einfach. Pfiffige Kunden tragen die Abteilung dann einfach statt eines Ansprechpartners in die Felder Vorname und Nachname ein, was dann bei automatisierter Zusammenstellung des Adressblocks zu interessanten Schöpfungen wie dieser hier führt:

Unity Samples
Herrn Controlling
11a Brookside Heights
07465 WANAQUE, NJ
USA

Es gibt noch weitere Beispiele für spezielle Anforderungen: Ein Kunde möchte ein Postfach eintragen, weiß aber nicht, wo er diese Information unterbringen soll. Oder ein Unternehmen möchte auf jeglichem Schriftverkehr seine eigene Bestellnummer untergebracht wissen. Die Lösung für all diese Fälle ist ein zusätzliches Feld namens Bemerkungen: Hier bringt der Kunde mögliche weitere Hinweise unter (zum Beispiel Bitte Zusatz "Postfach 12345" hinzufügen). Als Benutzer der Datenbank zum Erstellen von Berichten mit Adressblöcken müssen Sie dann nur noch gewissenhaft auf eventuelle Einträge im Bemerkungen-Feld achten.

Mehr Redundanz als Lösung

Die im Bemerkungen-Feld gespeicherten Hinweise oder auch die falsch eingetragenen Adressdaten müssen Sie irgendwann korrigieren. Wenn Ihre Kundendatenbank nur über die Felder Firma, Vorname und Nachname verfügt und der Kunde die Abteilung Controlling im Feld Vorname eingetragen hat, müssen Sie dort Hand anlegen – ein Herr Controlling sollte Ihnen jedenfalls nicht rausrutschen (Sie ahnen es: der Autor dieser Zeilen verfügt über einschlägige Erfahrung). Nur wie erledigen Sie dies Die Lösung ist eine weitere Portion Redundanz. Sie legen einfach je Adressart (also etwa für Lieferung und Rechnung) ein weiteres Feld etwa namens Lieferadresse und Rechnungsadresse in der Kundentabelle an. Das Feld könnte mit 255 Zeichen etwas zu klein sein, daher sollten Sie es als Memofeld deklarieren.

Dieses Feld wird irgendwann vor der ersten Verwendung der Adresse in einem Bericht per VBA gefüllt, und zwar auf Basis der jeweils vorhandenen Felder. Im einfachsten Fall gibt es nur eine einzige Adresse beziehungsweise liegen die Rechnungs- und die Lieferanschrift in separaten Feldern vor (gegebenenfalls mit Redundanz, wie oben angeführt). Die Tabelle tblAdressenEinfach etwa würde dann um zwei Felder namens Bemerkungen und Adresse wie in Bild 8 erweitert.

pic008.png

Bild 8: Feld zum Speichern des Adressblocks

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

Schreibe einen Kommentar