Vertragsverwaltung

Verträge verwalten – das ist was für größere Unternehmen, aber doch nicht für mich! Oder doch überlegen Sie einmal, wieviele Verträge Sie derzeit haben: Da kommt selbst ohne geschäftliche Verträge einiges zusammen: Mietverträge, Leasingverträge, Versicherungsverträge, Mitgliedschaften in Sportvereinen und viele mehr. Dazu vielleicht noch ein paar Wartungsverträge, Verträge mit Internet-Providern, … – da wäre es doch gar nicht schlecht, sich mal einen vernünftigen überblick zu verschaffen.

Funktionen der Lösung

Wenn Sie einmal durch Ihre Aktenordner stöbern, werden Sie eine Reihe von Verträgen finden, die eine Vertragsverwaltung rechtfertigen. Allein, um einen überblick über Laufzeiten, Kündigungsfristen, Verlängerungszeiträume oder auch die Vertragsinhalte zu haben. Das wäre doch toll, wenn man schnell mal die eingescannte Version eines Vertrags hervorzaubern könnte oder dieses Jahr nicht die Frist zur Kündigung der Mitgliedschaft in einem Verein verstreichen lässt.

Datenmodell

Das Verwalten von Verträgen ist – zumindest, was das Datenmodell angeht – eine echte Herausforderung. Der Grund ist, dass Verträge sehr unterschiedliche Eigenschaften aufweisen können, was etwa Informationen wie Laufzeit und Kündigungsfristen angeht. Versuchen wir doch, ein passendes Datenmodell herzuleiten.

Verträge

Ein Vertrag ist jeweils eine Einheit, also benötigen Sie in jedem Fall eine Tabelle namens tblVertraege. Eindeutige Informationen sind eine Bezeichnung des Vertrags sowie eine Beschreibung des Inhalts. In einem weiteren Feld verweisen Sie auf einen Eintrag einer Tabelle namens tblVertragspartner. Dies macht Sinn, weil es durchaus mehrere Verträge mit dem gleichen Vertragspartner geben kann.

Wenn man den Originaltext oder einen Scan des Vertrags speichern oder den Verweis auf eine Datei angeben möchte, benötigt man unter Umständen schon eine eigene Tabelle, da ein Vertrag durchaus mehrere Dokumente enthalten kann. Eindeutig sind hingegen die Informationen zur Vertragslaufzeit – zumindest, wenn man davon ausgeht, dass alle gespeicherten Verträge diesbezüglich grundlegenden Regeln gehorchen:

  • Vertragsbeginn: Beginn der Gültigkeit des Vertrags
  • Laufzeit: Einfache Laufzeit des Vertrags
  • Kündigungsfrist: Zeitraum vor Ablauf des Vertrags, bis zu dem man diesen kündigen kann
  • Laufzeitverlängerung: Laufzeit, um die sich der Vertrag verlängert, wenn er nicht gekündigt wird.
  • Vertragsende: Gibt das Ende des Vertrags an und kennzeichnet gleichzeitig abgelaufene oder beendete Verträge.

Wie man die passenden Felder füllt, ist hingegen nicht so einfach: Deshalb und weil auch die Berechnung des nächstmöglichen Kündigungstermins nicht allzu trivial ist, finden Sie alle Informationen dazu in [1]. Dort klären wir Fragen wie “welche Einheit verwendet man etwa zur Berechnung der Laufzeit und wie gibt man die Kündigungsfrist an”. Im Prinzip wäre es ein Leichtes, einfach ein Textfeld zu verwenden und dieses mit einem Ausdruck für die Laufzeit wie “3 Jahre” oder “6 Monate” zu füllen.

Genauso können Sie das Feld mit der Kündigungsfrist mit Texten wie “drei Monate zum Jahresende” oder “30 Tage vor Ablauf” bestücken. Das liest sich zwar alles ganz toll, aber wenn Sie wirklich von der Anwendung profitieren möchten, ist das nicht die Erste-Wahl-Lösung. Wenn es gelingt, die Informationen numerisch auszudrücken, könnte man etwa zu einem bestimmten Zeitpunkt alle Verträge ermitteln, deren Kündigungsfrist innerhalb des nächsten Monats verstreicht, und die entsprechenden Maßnahmen treffen.

Als Einheit für die Laufzeit scheint “Monat” angemessen; Bruchteile davon kommen in Laufzeiten wohl eher selten vor. Bei den Kündigungsfristen wird es komplizierter: Neben zeitlich befristeten Verträgen, die eine bestimmte Zeit vor Ablauf der Kündigungsfrist gekündigt werden können, gibt es auch Verträge wie etwa Mitgliedschaften, die man irgendwann beginnt und beispielsweise bis drei Monate vor Ablauf eines Kalenderjahres oder bis einen Monat vor Ablauf des Quartals kündigen kann.

Die Tabelle tblVertraege sieht nun wie in Bild 1 aus. Die beiden weiteren bisher vorgestellten Tabellen tblKuendigungszeitpunkte und tblVertragspartner sowie die übrigen Tabellen finden Sie im Datenmodell in Bild 2.

pic001.tif

Bild 1: Die Tabelle tblVertraege in der Entwurfsansicht

pic002.tif

Bild 2: Datenmodell der Vertragsverwaltung

Dort gibt es auch noch die Tabelle tblDokumente. Die Tabelle dient dem Speichern der Verträge selbst – unabhängig vom Format. Die Tabelle hat ein Fremdschlüsselfeld namens VertragID für die Zuordnung des Datensatzes zu einem Vertrag sowie ein OLE-Feld zum Speichern einer Datei in beliebigem Format – Bilddatei mit einem Scan, PDF, Word und andere sind möglich.

Desweiteren soll ein Index über die in den Verträgen enthaltenen Wörter erstellt werden – dazu benötigen Sie zwei weitere Tabellen: Die erste enthält die Wörter, wobei es wichtig ist, dass Sie das Feld Wort mit einem eindeutigen Index versehen. Die zweite Tabelle verknüpft die Wörter mit den Dokumenten und realisiert damit eine m:n-Beziehung zwischen den passenden Tabellen.

Die Verknüpfungstabelle enthält neben den beiden Fremdschlüsselfeldern DokumentID und WortID noch ein Feld zum Speichern der Seite des Dokuments, in dem ein Wort gefunden wurde. Damit ein Wort nur einmal pro Dokument und Seite indiziert wird, legen Sie einen zusammengesetzten Primärschlüssel über alle drei Felder fest.

Laufzeiten und Kündigungsfristen in Abfragen

Mit den in den Feldern der Tabelle tblVertraege gespeicherten Daten haben Sie die Grundlage geschaffen, Verträge mit ablaufenden Kündigungsfristen zu ermitteln.

Dazu verwenden Sie eine Abfrage auf Basis der Tabelle tblVertraege, die die Funktion KuendigungszeitpunktErmitteln verwendet. Das Aussehen der Abfrage (aus Platzgründen können hier nicht alle Felder abgebildet werden) finden Sie in Bild 3. Das rechte Feld hat den folgenden Inhalt:

pic003.tif

Bild 3: Die Abfrage enthält alle Felder der Tabelle tblVertraege und zusätzlich ein Feld zur Berechnung des nächstmöglichen Kündigungstermins für einen Vertrag.

Kuendigungszeitpunkt: KuendigungszeitpunktErmitteln([Vertragsbeginn];[Laufzeit];[KuendigungszeitpunktID];[Kuendigungsfrist];[Laufzeitverlaengerung];[GekuendigtAm];[Vertragsende])

Die Funktion KuendigungszeitpunktErmitteln (s. Listing 1) ist eine Wrapper-Funktion, die zunächst prüft, ob überhaupt ein Kündigungstermin berechnet werden muss (das ist nicht der Fall, falls schon ein Kündigungstermin vorliegt oder der Vertrag bereits beendet ist).

Listing 1: Wrapper-Funktion zum Aufruf der Funktion zum Berechnen des nächsten Kündigungszeitpunkts

Public Function KuendigungszeitpunktErmitteln(dateVertragsstart As Date, intLaufzeit As Integer, _
lngKuendigungszeitpunkt As eKuendigungszeitpunkt, intKuendigungsfrist As Integer, _
intLaufzeitverlaengerung As Integer, varGekuendigtAm As Variant, varVertragsende As Variant) If IsNull(varGekuendigtAm) And IsNull(varVertragsende) Then KuendigungszeitpunktErmitteln = NaechstenKuendigungszeitpunktErmitteln(Date, dateVertragsstart, _
intLaufzeit, lngKuendigungszeitpunkt, intKuendigungsfrist, intLaufzeitverlaengerung)
End If
End Function

Formular zur Anzeige von Vertragsdaten

Das Hauptformular und gleichzeitig die Steuerzentrale der Anwendung ist das Formular frmVertraege. Es enthält sowohl alle für die Anzeige von Vertragsdaten notwendigen Steuerelemente als auch Schaltflächen zum Aufrufen der Funktionen und weiteren Formulare (siehe Bild 4). Der Kopfbereich zeigt jeweils die Vertragsbezeichnung und die Vertragsnummer an, darunter findet man die gleichen Daten erneut und zusätzlich weitere Vertragsdaten.

pic004.tif

Bild 4: Das Hauptformular der Anwendung ist gleichzeitig die Schaltzentrale.

Die Daten des Vertragspartners des aktuell angezeigten Vertrags zeigt das Formular nicht an, sondern lediglich die Bezeichnung des Vertragspartners. Mit einem Klick auf die Schaltfläche mit den drei Punkten (…) kann man allerdings einen weiteren Dialog öffnen. Dieser zeigt die detaillierten Daten des Vertragspartners an und ermöglicht ihre Bearbeitung. Darüber hinaus können Sie damit auch neue Vertragspartner anlegen. Wichtig ist, dass beim Klick auf die Schaltfläche OK der aktuell im Detailformular ausgewählte Datensatz als Vertragspartner im Formular frmVertraege festgelegt wird. Bild 5 zeigt das Formular frmVertragspartner in der Formularansicht.

pic005.tif

Bild 5: Mit diesem Formular verwalten Sie die Daten des jeweiligen Vertragspartners.

Laufzeitdaten

Im Bereich Laufzeitdaten finden Sie unter anderem die Informationen wieder, die unter [1] ausführlich erläutert werden.

Vertragsdokumente verwalten

Fehlt noch der unterste, nicht minder wichtige Bereich: Das auffälligste Element ist das Unterformular, das Informationen zu den Vertragsdokumenten in digitalem Format enthält; in diesem Fall die Bezeichnung des Dokuments sowie den Pfad zur passenden Datei. Rechts daneben finden sich acht Schaltflächen mit folgenden Funktionen:

  • Neu aus Dateisystem: öffnet einen Dateiauswahl-Dialog zur Auswahl einer Datei, deren Dateiname inklusive Pfad anschließend als Dokument-Datensatz gespeichert wird.
  • Parameter einstellen: öffnet einen Dialog, mit dem sich Scanner-Einstellungen bearbeiten lassen.
  • Scanner auswählen: öffnet einen Dialog mit einer Liste aller WIA-fähigen Scanner (diese Version der Vertragsverwaltung arbeitet mit der WIA-Schnittstelle, die ältere Scanner gegebenenfalls nicht unterstützen).
  • Neu von Scanner: Liest ein Dokument vom Scanner ein und speichert es in einer TIFF-Datei, deren Dateinamen der Benutzer vorher festlegen muss.
  • Weitere Seite scannen: Fügt einem bestehenden eingescannten Dokument im TIFF-Format eine weitere Seite hinzu.
  • Dokument anzeigen: Zeigt das Dokument in der passenden Anwendung an.
  • Indizieren: Indiziert den Text von TIFF-Dokumenten.
  • Text anzeigen: Zeigt den Text eines Dokuments an – vorausgesetzt, dieses wurde bereits indiziert.

Vertragsdokumente aus dem Dateisystem hinzufügen

Die Schaltfläche Neu aus Dateisystem öffnet einen Dialog zum Hinzufügen eines Dateipfads zu einem neuen Dokumentdatensatz im Unterformular sfmDokumente des Hauptformulars. Die passende Ereignisprozedur verwendet die Funktion OpenFileName, um den Dialog anzuzeigen. Eine Beschreibung dieser Funktion finden Sie in [2]. Das Anlegen des neuen Datensatzes erfolgt durch Setzen des Fokus auf das Unterformular und DoCmd.GotoRecord mit dem Parameter Record:=acRecNew.

Vertragsdokumente anzeigen

Ein Klick auf die Schaltfläche Dokument anzeigen öffnet das aktuell im Unterformular sfmDokumente ausgewählte Dokument mit der passenden Anwendung. Auch dies macht den Einsatz einer Funktion aus der VBA-Funktionssammlung aus dieser Ausgabe notwendig. Diesmal handelt es sich um die Funktion OpenDocument, die als Parameter lediglich den Dateinamen samt Pfad erwartet.

Vertragsdokumente einscannen

Vertragsdokumente, die nichts mit Produkten oder Leistungen der EDV insbesondere in Zusammenhang mit dem Internet zu tun haben, liegen meist nicht in digitaler, sondern in Papierform vor. Das liegt allein daran, dass in den meisten Branchen noch die gute alte manuelle Unterschrift zählt. Irgendwie sollte man die notwendigen Dokumente jedoch in ein digitales Format überführen können – zumindest, um diese schnell finden und betrachten zu können.

Da führt natürlich kaum ein Weg am Scanner vorbei (außer, Sie knipsen die Vertragsunterlagen mit der Digitalkamera ab). Wie Sie moderne Scanner, die mit einer WIA-Schnittstelle ausgestattet sind, steuern und dazu bringen, ein gescanntes Dokument direkt auf der Festplatte zu speichern, erfahren Sie in [3].

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