Kundenverwaltung

Zusammenfassung

Sie erstellen ein zur Artikelverwaltung passendes CRM-Tool, das Sie auch separat verwenden können. Das Tool dient zum Pflegen von Kundenkontakten inklusive Verweisen auf E-Mails und sonstige Dokumente.

Techniken

Datenmodellierung, Formulare, Unterformulare, VBA

Voraussetzungen

Access 2000 oder höher

Verwandte Beiträge: 273, 281, 294

André Minhorst, Duisburg

Wer seinen Kunden etwas verkaufen möchte, sollte diese gut pflegen. Und damit das gelingt, hält man nicht nur deren Kontaktdaten auf dem aktuellen Stand – auch die persönlichen Kontakte zum Kunden sind wichtig. Die vorliegende Erweiterung der Artikelverwaltung sorgt für beides – damit verwalten Sie je Kunde beliebig viele Liefer- und Rechnungsanschriften und haben die Korrespondenz im Griff.

Die hier beschriebene Lösung erweitert die Artikelverwaltung aus Ausgabe 2/2005 und 3/2005 um die Möglichkeit, Kunden und Kontakte zu verwalten.

Das Hauptelement ist das Formular frmKunden, das zur Verwaltung der Kundendaten einschließlich Rechnungs- und Lieferanschriften sowie Kundenkontakten dient. Es enthält folgende Funktionen:

  • Anlegen mehrerer Rechnung- und Lieferanschriften je Kunde
  • Schnellauswahl von Kunden per Kombinationsfeld
  • Verwaltung beliebig vieler Kontakte zu dem Kunden
  • Erstellen von E-Mails aus der Anwendung heraus sowie Referenzieren von in Outlook gespeicherten E-Mails
  • Verknüpfen von Kontakten mit Dokumenten, die im Dateisystem gespeichert sind
  • Abb. 1 und Abb. 2 zeigen das Hauptformular mit den beiden Registerseiten zum Eingeben von Liefer- und Rechnungsadressen sowie Kontaktdaten.

    Die meisten Tabellen des Datenmodells sind bereits in der Artikelverwaltung enthalten, auf der die Kunden- und Kontaktverwaltung aufsetzt. Das Datenmodell ist relativ flexibel ausgelegt, um je Kunde mehrere Liefer- und Rechnungsadressen zu speichern.

    Bild 1: Hauptformular der Kundenverwaltung mit Liefer- und Rechnungsadressen…

    Haupttabelle des Datenmodells ist die Tabelle tblKunden, welche Kundennummer, Name und die wichtigsten Kontaktdaten des Kunden enthält.

    Die Liefer- und Rechnungsadressen befinden sich zum größten Teil in der Tabelle tblAdressen.

    Liefer- und Rechnungsadressen enthalten unterschiedliche Informationen. Deshalb wurden diese Informationen in je eine weitere Tabelle ausgelagert, um die Tabelle tblAdressen nicht mit leeren Feldern zu überladen.

    Bild 2: … und Verwaltung der Kontakte zu den jeweiligen Kunden.

    Bild 3: Datenmodell des CRM-Tools

    Die beiden Tabellen mit den speziellen Liefer- beziehungsweise Rechnungsinformationen enthalten beide ein Feld namens Standard. Mit diesem Feld lässt sich festlegen, welche Liefer- beziehungsweise Rechnungsadresse standardmäßig für den Kunden verwendet werden soll.

    Neu im Datenmodell sind die beiden Tabellen tblKontakte und tblKontaktarten. Die Tabelle tblKontakte enthält Informationen über Telefonate und Meetings mit dem Kunden sowie Informationen über E-Mails, Briefe und Faxe an den Kunden.

    Die Tabelle tblKontaktarten enthält die genannten Kommunikationsmöglichkeiten, die aus der verknüpften Tabelle tblKontakte per Fremdschlüsselfeld ausgewählt werden können.

    Bild 4: Das komplette Kundenformular in der Detailansicht

    Bild 5: Einfügen der Felder der Tabelle tblKunden

    Das Kundenformular soll alle in den Tabellen des Datenmodells bereitgestellten Daten verwalten. Das scheint auf den ersten Blick ein wenig viel, aber mit einem zweiseitigen Register und drei Unterformularen wird das Formular schnell Herr der Daten (siehe Bild 4).

    Das Hauptformular ist sehr einfach aufgebaut:

    Seine Datenherkunft ist die Tabelle tblKunden und die darin enthaltenen Felder bilden auch schon den größten Teil der Steuerelemente des Formulars.

    Die Felder ziehen Sie nach dem Festlegen der Datenherkunft einfach aus der Feldliste in das Formular und positionieren diese am oberen Rand (siehe Bild 5).

    Anschließend fügen Sie ein Registersteuerelement ein und beschriften die beiden Reiter mit Adressdaten und Kundenkontakte.

    Schnelle Kundenauswahl

    Damit der Benutzer schnell zu einem anderen Kunden wechseln kann, ohne erst umständlich ein Suchformular oder ähnliches öffnen zu müssen, stellen Sie ihm ein Kombinationsfeld zur schnellen Auswahl eines Kunden zur Verfügung (siehe Bild 6).

    Das Kombinationsfeld hat als Datensatzherkunft die folgende Abfrage:

    Bild 6: Kombinationsfeld zur Schnellauswahl eines Kunden

    SELECT tblKunden.KundeID, [Nachname] & ", " & [Vorname] AS Kunde FROM tblKundenORDER BY [Nachname] & ", " & [Vorname];

    Damit das Formular nach der Auswahl eines der Einträge aktualisiert wird, legen Sie außerdem für die Ereigniseigenschaft Nach Aktualisierung die Prozedur aus Quellcode 1 an.

    Quellcode 1: Anzeigen des im Kombinationsfeld ausgewählten Kunden

    Private Sub cboKunden_AfterUpdate()
        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        Set db = CurrentDb
        Set rst = Me.RecordsetClone
        rst.FindFirst "KundeID = " & Me.cboKunden
        If Not rst.NoMatch Then
            Me.Bookmark = rst.Bookmark
        End If
    End Sub

    Bild 7: Datenherkunft des Unterformulars zur Anzeige der Lieferadressen

    Nun geht es direkt an das Einbinden der Informationen aus den anderen Tabellen – den Start machen die Adressinformationen aus den drei Tabellen tblAdressen, tblLieferadressen und tblRechnungsadressen.

    Datenherkunft des Unterformulars

    Als Datenherkunft des ersten Unterformulars, das die Lieferadressen anzeigt, dient die Abfrage qryLieferadressenAdd (siehe Bild 7). Die Abfrage enthält alle Felder der beiden per 1:1-Beziehung verknüpften Tabellen tblAdressen und tblLieferadressen.

    Aufbau des Unterformulars frmLieferadressen

    Das Unterformular frmLieferadressen enthält die anzuzeigenden Felder wie in Bild 8 zu sehen. Außerdem sind die beiden Felder, über die die 1:1-Beziehung realisiert wird, zu erkennen.

    Diese beiden Felder werden in der Formularansicht ausgeblendet, da sie nur der Herstellung der 1:1-Beziehung beim Anlegen neuer Lieferadressen dienen.

    Die Abfrage zur Zusammenführung der verknüpften Tabellen stellt zwar alle Daten beider Tabellen wie gewünscht dar, allerdings wird, wenn man nur die Felder der Tabelle tblAdressen ausfüllt, nicht automatisch ein korrespondierender Datensatz in der Tabelle tblLieferadressen angelegt.

    Die Abfrage zeigt allerdings Kombinationen aus Datensätzen der Tabellen tblAdressen und tblLieferanten an, bei denen der Wert des Feldes AdresseID gleich ist.

    Um bereits beim Anlegen der Daten sicherzustellen, dass nicht nur der tblAdressen-Teil der 1:1-Beziehung angelegt wird, erstellen Sie eine kleine Ereignisprozedur, die vor Aktualisierung des Formulars ausgeführt wird (s. Quellcode 2).

    Die Prozedur füllt lediglich das Feld AdresseID der Tabelle tblLieferadressen mit dem gleichen Wert, den das entsprechende Feld der Tabelle tblAdressen enthält.

    Quellcode 2: Anlegen eines Datensatzes in einer per 1:1-Beziehung verknüpften Tabelle

    Private Sub Form_BeforeUpdate(Cancel As Integer)
        Me!tblLieferadressen_AdresseID = Me!tblAdressen_AdresseID
    End Sub

    Quellcode 3: Diese Routine sorgt für das Setzen einer neuen Standardadresse für einen Kunden.

    Private Sub Standard_BeforeUpdate(Cancel As Integer)
        Dim db As DAO.Database
        If Me.Standard = True Then
            If MsgBox("Möchten Sie diese Adresse als Standard-Lieferadresse festlegen", _            vbYesNo + vbExclamation) = vbYes Then
                Set db = CurrentDb
                db.Execute "UPDATE tblLieferadressen AS t1 SET t1.Standard = False " _                & "WHERE t1.AdresseID <> " & Me.tblAdressen_AdresseID _                & " AND t1.AdresseID IN (SELECT t2.AdresseID FROM tblAdressen AS t2 " _                & "WHERE KundeID = " & Me.KundeID & ")"
                Set db = Nothing
            Else
                Me.Standard.Undo
                Cancel = True
            End If
        Else
            MsgBox "Sie können eine Adresse als Standardadresse deaktivieren, indem Sie eine " _            & "andere Adresse zur Standardadresse machen."
            Me.Standard.Undo
            Cancel = True
        End If
    End Sub

    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