{"id":55000422,"date":"2006-12-01T00:00:00","date_gmt":"2021-02-11T21:07:23","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=422"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Vertragsverwaltung","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/","title":{"rendered":"Vertragsverwaltung"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg02.met.vgwort.de\/na\/04a66bd9a6a046e992d48d8db391a536\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<div id=\"vertragsverwaltung\">\n<div class=\"tabellekurzinfo\"><\/div>\n<div class=\"abbildung\">\n<p><b>Vertr&auml;ge verwalten &#8211; das ist was f&uuml;r gr&ouml;&szlig;ere Unternehmen, aber doch nicht f&uuml;r mich! Oder doch &uuml;berlegen Sie einmal, wieviele Vertr&auml;ge Sie derzeit haben: Da kommt selbst ohne gesch&auml;ftliche Vertr&auml;ge einiges zusammen: Mietvertr&auml;ge, Leasingvertr&auml;ge, Versicherungsvertr&auml;ge, Mitgliedschaften in Sportvereinen und viele mehr. Dazu vielleicht noch ein paar Wartungsvertr&auml;ge, Vertr&auml;ge mit Internet-Providern, &#8230; &#8211; da w&auml;re es doch gar nicht schlecht, sich mal einen vern&uuml;nftigen &uuml;berblick zu verschaffen.<\/b><\/p>\n<\/p><\/div>\n<div class=\"story\">\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Funktionen der L&ouml;sung<\/p>\n<p>Wenn Sie einmal durch Ihre Aktenordner st&ouml;bern, werden Sie eine Reihe von Vertr&auml;gen finden, die eine Vertragsverwaltung rechtfertigen. Allein, um einen &uuml;berblick &uuml;ber Laufzeiten, K&uuml;ndigungsfristen, Verl&auml;ngerungszeitr&auml;ume oder auch die Vertragsinhalte zu haben. Das w&auml;re doch toll, wenn man schnell mal die eingescannte Version eines Vertrags hervorzaubern k&ouml;nnte oder dieses Jahr nicht die Frist zur K&uuml;ndigung der Mitgliedschaft in einem Verein verstreichen l&auml;sst.<\/p>\n<p><b>Datenmodell<\/b><\/p>\n<p>Das Verwalten von Vertr&auml;gen ist &#8211; zumindest, was das Datenmodell angeht &#8211; eine echte Herausforderung. Der Grund ist, dass Vertr&auml;ge sehr unterschiedliche Eigenschaften aufweisen k&ouml;nnen, was etwa Informationen wie Laufzeit und K&uuml;ndigungsfristen angeht. Versuchen wir doch, ein passendes Datenmodell herzuleiten.<\/p>\n<p><b>Vertr&auml;ge<\/b><\/p>\n<p>Ein Vertrag ist jeweils eine Einheit, also ben&ouml;tigen Sie in jedem Fall eine Tabelle namens <b>tblVertraege<\/b>. Eindeutige Informationen sind eine Bezeichnung des Vertrags sowie eine Beschreibung des Inhalts. In einem weiteren Feld verweisen Sie auf einen Eintrag einer Tabelle namens <b>tblVertragspartner<\/b>. Dies macht Sinn, weil es durchaus mehrere Vertr&auml;ge mit dem gleichen Vertragspartner geben kann.<\/p>\n<p>Wenn man den Originaltext oder einen Scan des Vertrags speichern oder den Verweis auf eine Datei angeben m&ouml;chte, ben&ouml;tigt man unter Umst&auml;nden schon eine eigene Tabelle, da ein Vertrag durchaus mehrere Dokumente enthalten kann. Eindeutig sind hingegen die Informationen zur Vertragslaufzeit &#8211; zumindest, wenn man davon ausgeht, dass alle gespeicherten Vertr&auml;ge diesbez&uuml;glich grundlegenden Regeln gehorchen:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Vertragsbeginn: Beginn der G&uuml;ltigkeit des Vertrags<\/li>\n<li class=\"aufz-hlung\">Laufzeit: Einfache Laufzeit des Vertrags<\/li>\n<li class=\"aufz-hlung\">K&uuml;ndigungsfrist: Zeitraum vor Ablauf des Vertrags, bis zu dem man diesen k&uuml;ndigen kann<\/li>\n<li class=\"aufz-hlung\">Laufzeitverl&auml;ngerung: Laufzeit, um die sich der Vertrag verl&auml;ngert, wenn er nicht gek&uuml;ndigt wird.<\/li>\n<li class=\"aufz-hlung\">Vertragsende: Gibt das Ende des Vertrags an und kennzeichnet gleichzeitig abgelaufene oder beendete Vertr&auml;ge.<\/li>\n<\/ul>\n<p>Wie man die passenden Felder f&uuml;llt, ist hingegen nicht so einfach: Deshalb und weil auch die Berechnung des n&auml;chstm&ouml;glichen K&uuml;ndigungstermins nicht allzu trivial ist, finden Sie alle Informationen dazu in [1]. Dort kl&auml;ren wir Fragen wie &#8222;welche Einheit verwendet man etwa zur Berechnung der Laufzeit und wie gibt man die K&uuml;ndigungsfrist an&#8220;. Im Prinzip w&auml;re es ein Leichtes, einfach ein Textfeld zu verwenden und dieses mit einem Ausdruck f&uuml;r die Laufzeit wie &#8222;3 Jahre&#8220; oder &#8222;6 Monate&#8220; zu f&uuml;llen.<\/p>\n<p>Genauso k&ouml;nnen Sie das Feld mit der K&uuml;ndigungsfrist mit Texten wie &#8222;drei Monate zum Jahresende&#8220; oder &#8222;30 Tage vor Ablauf&#8220; best&uuml;cken. Das liest sich zwar alles ganz toll, aber wenn Sie wirklich von der Anwendung profitieren m&ouml;chten, ist das nicht die Erste-Wahl-L&ouml;sung. Wenn es gelingt, die Informationen numerisch auszudr&uuml;cken, k&ouml;nnte man etwa zu einem bestimmten Zeitpunkt alle Vertr&auml;ge ermitteln, deren K&uuml;ndigungsfrist innerhalb des n&auml;chsten Monats verstreicht, und die entsprechenden Ma&szlig;nahmen treffen.<\/p>\n<p>Als Einheit f&uuml;r die Laufzeit scheint &#8222;Monat&#8220; angemessen; Bruchteile davon kommen in Laufzeiten wohl eher selten vor. Bei den K&uuml;ndigungsfristen wird es komplizierter: Neben zeitlich befristeten Vertr&auml;gen, die eine bestimmte Zeit vor Ablauf der K&uuml;ndigungsfrist gek&uuml;ndigt werden k&ouml;nnen, gibt es auch Vertr&auml;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&uuml;ndigen kann.<\/p>\n<p>Die Tabelle <b>tblVertraege <\/b>sieht nun wie in Bild 1 aus. Die beiden weiteren bisher vorgestellten Tabellen <b>tblKuendigungszeitpunkte <\/b>und <b>tblVertragspartner <\/b>sowie die &uuml;brigen Tabellen finden Sie im Datenmodell in Bild 2.<\/p>\n<div class=\"abbildung\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2006_06\/Vertragsverwaltung-web-images\/pic001_opt.jpeg\" alt=\"pic001.tif\" \/>\n        <\/div>\n<div class=\"abbildung\">\n<p><b><span style=\"color:darkgrey\">Bild 1: Die Tabelle tblVertraege in der Entwurfsansicht<\/span><\/b><\/p>\n<\/p><\/div>\n<div class=\"abbildung\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2006_06\/Vertragsverwaltung-web-images\/pic002_opt.jpeg\" alt=\"pic002.tif\" \/>\n        <\/div>\n<div class=\"abbildung\">\n<p><b><span style=\"color:darkgrey\">Bild 2: Datenmodell der Vertragsverwaltung<\/span><\/b><\/p>\n<\/p><\/div>\n<p>Dort gibt es auch noch die Tabelle <b>tblDokumente<\/b>. Die Tabelle dient dem Speichern der Vertr&auml;ge selbst &#8211; unabh&auml;ngig vom Format. Die Tabelle hat ein Fremdschl&uuml;sselfeld namens <b>VertragID<\/b> f&uuml;r die Zuordnung des Datensatzes zu einem Vertrag sowie ein OLE-Feld zum Speichern einer Datei in beliebigem Format &#8211; Bilddatei mit einem Scan, PDF, Word und andere sind m&ouml;glich.<\/p>\n<p>Desweiteren soll ein Index &uuml;ber die in den Vertr&auml;gen enthaltenen W&ouml;rter erstellt werden &#8211; dazu ben&ouml;tigen Sie zwei weitere Tabellen: Die erste enth&auml;lt die W&ouml;rter, wobei es wichtig ist, dass Sie das Feld <b>Wort <\/b>mit einem eindeutigen Index versehen. Die zweite Tabelle verkn&uuml;pft die W&ouml;rter mit den Dokumenten und realisiert damit eine m:n-Beziehung zwischen den passenden Tabellen.<\/p>\n<p>Die Verkn&uuml;pfungstabelle enth&auml;lt neben den beiden Fremdschl&uuml;sselfeldern <b>DokumentID<\/b> und <b>WortID <\/b>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&auml;rschl&uuml;ssel &uuml;ber alle drei Felder fest.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Laufzeiten und K&uuml;ndigungsfristen in Abfragen<\/p>\n<p>Mit den in den Feldern der Tabelle <b>tblVertraege <\/b>gespeicherten Daten haben Sie die Grundlage geschaffen, Vertr&auml;ge mit ablaufenden K&uuml;ndigungsfristen zu ermitteln.<\/p>\n<p>Dazu verwenden Sie eine Abfrage auf Basis der Tabelle <b>tblVertraege<\/b>, die die Funktion <b>KuendigungszeitpunktErmitteln <\/b>verwendet. Das Aussehen der Abfrage (aus Platzgr&uuml;nden k&ouml;nnen hier nicht alle Felder abgebildet werden) finden Sie in Bild 3. Das rechte Feld hat den folgenden Inhalt:<\/p>\n<div class=\"abbildung\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2006_06\/Vertragsverwaltung-web-images\/pic003_opt.jpeg\" alt=\"pic003.tif\" \/>\n        <\/div>\n<div class=\"abbildung\">\n<p><b><span style=\"color:darkgrey\">Bild 3: Die Abfrage enth&auml;lt alle Felder der Tabelle tblVertraege und zus&auml;tzlich ein Feld zur Berechnung des n&auml;chstm&ouml;glichen K&uuml;ndigungstermins f&uuml;r einen Vertrag.<\/span><\/b><\/p>\n<\/p><\/div>\n<pre>Kuendigungszeitpunkt: KuendigungszeitpunktErmitteln([Vertragsbeginn];[Laufzeit];[KuendigungszeitpunktID];[Kuendigungsfrist];[Laufzeitverlaengerung];[GekuendigtAm];[Vertragsende])<\/pre>\n<p>Die Funktion <b>KuendigungszeitpunktErmitteln<\/b> (s. Listing 1) ist eine Wrapper-Funktion, die zun&auml;chst pr&uuml;ft, ob &uuml;berhaupt ein K&uuml;ndigungstermin berechnet werden muss (das ist nicht der Fall, falls schon ein K&uuml;ndigungstermin vorliegt oder der Vertrag bereits beendet ist).<\/p>\n<p class=\"kastentabelleheader\">Listing 1: Wrapper-Funktion zum Aufruf der Funktion zum Berechnen des n&auml;chsten K&uuml;ndigungszeitpunkts<\/p>\n<pre>Public Function KuendigungszeitpunktErmitteln(dateVertragsstart As Date, intLaufzeit As Integer, _<br \/> lngKuendigungszeitpunkt As eKuendigungszeitpunkt, intKuendigungsfrist As Integer, _<br \/> intLaufzeitverlaengerung As Integer, varGekuendigtAm As Variant, varVertragsende As Variant)\r\n     If IsNull(varGekuendigtAm) And IsNull(varVertragsende) Then\r\n         KuendigungszeitpunktErmitteln = NaechstenKuendigungszeitpunktErmitteln(Date, dateVertragsstart, _<br \/> intLaufzeit, lngKuendigungszeitpunkt, intKuendigungsfrist, intLaufzeitverlaengerung)<br \/>\r\n     End If<br \/>\r\nEnd Function<\/pre>\n<p><b>Formular zur Anzeige von Vertragsdaten<\/b><\/p>\n<p>Das Hauptformular und gleichzeitig die Steuerzentrale der Anwendung ist das Formular <b>frmVertraege<\/b>. Es enth&auml;lt sowohl alle f&uuml;r die Anzeige von Vertragsdaten notwendigen Steuerelemente als auch Schaltfl&auml;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&auml;tzlich weitere Vertragsdaten.<\/p>\n<div class=\"abbildung\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2006_06\/Vertragsverwaltung-web-images\/pic004_opt.jpeg\" alt=\"pic004.tif\" \/>\n        <\/div>\n<div class=\"abbildung\">\n<p><b><span style=\"color:darkgrey\">Bild 4: Das Hauptformular der Anwendung ist gleichzeitig die Schaltzentrale.<\/span><\/b><\/p>\n<\/p><\/div>\n<p>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&auml;che mit den drei Punkten (&#8230;) kann man allerdings einen weiteren Dialog &ouml;ffnen. Dieser zeigt die detaillierten Daten des Vertragspartners an und erm&ouml;glicht ihre Bearbeitung. Dar&uuml;ber hinaus k&ouml;nnen Sie damit auch neue Vertragspartner anlegen. Wichtig ist, dass beim Klick auf die Schaltfl&auml;che <b>OK<\/b> der aktuell im Detailformular ausgew&auml;hlte Datensatz als Vertragspartner im Formular <b>frmVertraege <\/b>festgelegt wird. Bild 5 zeigt das Formular <b>frmVertragspartner <\/b>in der Formularansicht.<\/p>\n<div class=\"abbildung\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2006_06\/Vertragsverwaltung-web-images\/pic005_opt.jpeg\" alt=\"pic005.tif\" \/>\n        <\/div>\n<div class=\"abbildung\">\n<p><b><span style=\"color:darkgrey\">Bild 5: Mit diesem Formular verwalten Sie die Daten des jeweiligen Vertragspartners.<\/span><\/b><\/p>\n<\/p><\/div>\n<p><b>Laufzeitdaten<\/b><\/p>\n<p>Im Bereich <b>Laufzeitdaten<\/b> finden Sie unter anderem die Informationen wieder, die unter [1] ausf&uuml;hrlich erl&auml;utert werden.<\/p>\n<p><b>Vertragsdokumente verwalten<\/b><\/p>\n<p>Fehlt noch der unterste, nicht minder wichtige Bereich: Das auff&auml;lligste Element ist das Unterformular, das Informationen zu den Vertragsdokumenten in digitalem Format enth&auml;lt; in diesem Fall die Bezeichnung des Dokuments sowie den Pfad zur passenden Datei. Rechts daneben finden sich acht Schaltfl&auml;chen mit folgenden Funktionen:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Neu aus Dateisystem<\/b>: &ouml;ffnet einen Dateiauswahl-Dialog zur Auswahl einer Datei, deren Dateiname inklusive Pfad anschlie&szlig;end als Dokument-Datensatz gespeichert wird.<\/li>\n<li class=\"aufz-hlung\"><b>Parameter einstellen<\/b>: &ouml;ffnet einen Dialog, mit dem sich Scanner-Einstellungen bearbeiten lassen.<\/li>\n<li class=\"aufz-hlung\"><b>Scanner ausw&auml;hlen<\/b>: &ouml;ffnet einen Dialog mit einer Liste aller WIA-f&auml;higen Scanner (diese Version der Vertragsverwaltung arbeitet mit der WIA-Schnittstelle, die &auml;ltere Scanner gegebenenfalls nicht unterst&uuml;tzen).<\/li>\n<li class=\"aufz-hlung\"><b>Neu von Scanner<\/b>: Liest ein Dokument vom Scanner ein und speichert es in einer TIFF-Datei, deren Dateinamen der Benutzer vorher festlegen muss.<\/li>\n<li class=\"aufz-hlung\"><b>Weitere Seite scannen<\/b>: F&uuml;gt einem bestehenden eingescannten Dokument im TIFF-Format eine weitere Seite hinzu.<\/li>\n<li class=\"aufz-hlung\"><b>Dokument anzeigen<\/b>: Zeigt das Dokument in der passenden Anwendung an.<\/li>\n<li class=\"aufz-hlung\"><b>Indizieren<\/b>: Indiziert den Text von TIFF-Dokumenten.<\/li>\n<li class=\"aufz-hlung\"><b>Text anzeigen<\/b>: Zeigt den Text eines Dokuments an &#8211; vorausgesetzt, dieses wurde bereits indiziert.<\/li>\n<\/ul>\n<p><!--30percent--><\/p>\n<p><b>Vertragsdokumente aus dem Dateisystem hinzuf&uuml;gen<\/b><\/p>\n<p>Die Schaltfl&auml;che <b>Neu aus Dateisystem <\/b>&ouml;ffnet einen Dialog zum Hinzuf&uuml;gen eines Dateipfads zu einem neuen Dokumentdatensatz im Unterformular <b>sfmDokumente <\/b>des Hauptformulars. Die passende Ereignisprozedur verwendet die Funktion <b>OpenFileName<\/b>, 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 <b>DoCmd.GotoRecord <\/b>mit dem Parameter <b>Record:=acRecNew<\/b>.<\/p>\n<p><b>Vertragsdokumente anzeigen<\/b><\/p>\n<p>Ein Klick auf die Schaltfl&auml;che <b>Dokument anzeigen <\/b>&ouml;ffnet das aktuell im Unterformular <b>sfmDokumente <\/b>ausgew&auml;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 <b>OpenDocument<\/b>, die als Parameter lediglich den Dateinamen samt Pfad erwartet.<\/p>\n<p><b>Vertragsdokumente einscannen<\/b><\/p>\n<p>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&auml;hlt. Irgendwie sollte man die notwendigen Dokumente jedoch in ein digitales Format &uuml;berf&uuml;hren k&ouml;nnen &#8211; zumindest, um diese schnell finden und betrachten zu k&ouml;nnen. <\/p>\n<p>Da f&uuml;hrt nat&uuml;rlich kaum ein Weg am Scanner vorbei (au&szlig;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].<\/p>\n<p>Im Falle einer Anwendung wie der Vertragsverwaltung stehen die Scanner-Einstellungen prinzipiell fest: Es sollte in Schwarz-wei&szlig; mit einer relativ hohen Aufl&ouml;sung gescannt werden, um die resultierenden Dokumente gegebenenfalls per OCR in Text umwandeln zu k&ouml;nnen. Daher soll die Anwendung dem Benutzer nicht bei jedem Scan den Dialog mit den Scannereinstellungen pr&auml;sentieren, sondern die passenden Einstellungen einfach verwenden und das im Scanner befindliche Dokument direkt einlesen.<\/p>\n<p>In der Vertragsverwaltung legen Sie die Einstellungen f&uuml;r den Scanner &uuml;ber einen Dialog fest, den Sie mit der Schaltfl&auml;che <b>Parameter einstellen <\/b>&ouml;ffnen. Der Dialog sieht wie in Bild 6 aus. Neben den Eigenschaften f&uuml;r das Einscannen zeigt das Formular auch den aktuellen Scanner an. Der Dialog bezieht seine Daten aus der Tabelle <b>tblParameter <\/b>und speichert ge&auml;nderte Informationen auch wieder dort ab. F&uuml;r den Fall, dass Sie die Anwendung erweitern und zus&auml;tzliche Parameter anlegen m&ouml;chten, ist damit vorgesorgt: Die Tabelle l&auml;sst sich naturgem&auml;&szlig; beliebig erweitern. Und falls Sie einmal schnell auf eine bestimmte Einstellung zugreifen m&ouml;chten, geben Sie einfach einen Teil des Parameternamens oder des Wertnamens ein &#8211; der Dialog filtert dann alle passenden Elemente heraus. Wie dies im Detail funktioniert, k&ouml;nnen Sie [4]<b> <\/b>entnehmen.<\/p>\n<div class=\"abbildung\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2006_06\/Vertragsverwaltung-web-images\/pic006_opt.jpeg\" alt=\"pic006.tif\" \/>\n        <\/div>\n<div class=\"abbildung\">\n<p><b><span style=\"color:darkgrey\">Bild 6: In diesem Dialog legt der Benutzer die Einstellungen fest, die der Scanner beim Einlesen von Dokumenten verwenden soll.<\/span><\/b><\/p>\n<\/p><\/div>\n<p>Diesen legen Sie im &uuml;brigen &uuml;ber einen Dialog fest, den Sie mit der Schaltfl&auml;che <b>Scanner ausw&auml;hlen <\/b>anzeigen. Das beim Erstellen dieser Anwendung verwendete System lieferte beispielsweise den Dialog aus Bild 7. Nach der Auswahl des Scanners speichert die Anwendung dessen ID und Bezeichnung in einem Datensatz der Tabelle <b>tblParameter<\/b>.<\/p>\n<div class=\"abbildung\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2006_06\/Vertragsverwaltung-web-images\/pic007_opt.jpeg\" alt=\"pic007.tif\" \/>\n        <\/div>\n<div class=\"abbildung\">\n<p><b><span style=\"color:darkgrey\">Bild 7: Dialog zum Ausw&auml;hlen des Scanners<\/span><\/b><\/p>\n<\/p><\/div>\n<p><b>Mehrseitige Dokumente scannen<\/b><\/p>\n<p>Die Wahrscheinlichkeit, dass alle in der Datenbank zu speichernden Vertr&auml;ge nur aus einer Seite Text bestehen, ist relativ gering. Daher kann man mit der Anwendung ein- und mehrseitige Dokumente scannen. Leider funktioniert dies nicht vollautomatisch &#8211; also etwa so, dass man einfach nur die einzelnen Seiten in den Dokumenteneinzug des Scanners legt und Anwendung und Scanner auf Knopfdruck den Rest erledigen. Ein wenig umst&auml;ndlicher ist die vorliegende L&ouml;sung, aber sie erf&uuml;llt ihren Zweck:<\/p>\n<p>Mit der Schaltfl&auml;che <b>Neu von Scanner <\/b>starten Sie einen Scan-Vorgang, der das aktuell im Scanner beziehungsweise das erste im Dokumenteneinzug liegende Dokument scannt und speichert. <\/p>\n<p>Verantwortlich daf&uuml;r ist die Routine aus Listing 2. Sie ermittelt zun&auml;chst die f&uuml;r den Scan zu verwendenden Parameter aus der Tabelle <b>tblParameter <\/b>und ruft dann die Funktion <b>BildScannenUndSpeichern <\/b>auf.Dabei &uuml;bergibt die Routine auch den Namen, unter dem die Datei gespeichert werden soll. Nach erfolgtem Scan-Vorgang legt die Routine einen neuen Datensatz im Unterformular <b>sfmDokumente<\/b> an und tr&auml;gt dort den Pfad der gespeicherten Datei ein.<\/p>\n<p class=\"kastentabelleheader\">Listing 2: Einscannen der ersten Seite eines Dokuments<\/p>\n<pre>Private Sub cmdNeuVonScanner_Click()\r\n     Dim objCommonDialog As WIA.CommonDialog\r\n     Dim objImageFile As WIA.ImageFile\r\n     Dim strDateiname As String\r\n     Dim strDateiendung As String\r\n     Dim strFormat As String\r\n     Dim db As DAO.Database\r\n     Dim rstParameter As DAO.Recordset\r\n     Dim strScannerID As String\r\n     Dim lngCurrentIntent As Long\r\n     Dim lngResolution As Long\r\n     Dim lngBrightness As Long\r\n     Dim lngContrast As Long\r\n     DoCmd.Hourglass True\r\n     strDateiname = OpenFileName(CurrentProject.Path, \"Speichern unter\", \"Tagged Image File (*.tif)\")\r\n     Set rstParameter = CurrentDb.OpenRecordset(\"tblParameter\", dbOpenDynaset)\r\n     strScannerID = DLookup(\"Wert\", \"tblParameter\", \"Parameter = \"ScannerID'\")\r\n     lngCurrentIntent = DLookup(\"Wert\", \"tblParameter\", \"Parameter = \"CurrentIntent'\")\r\n     lngResolution = DLookup(\"Wert\", \"tblParameter\", \"Parameter = \"VerticalResolution'\")\r\n     lngBrightness = DLookup(\"Wert\", \"tblParameter\", \"Parameter = \"Brightness'\")\r\n     lngContrast = DLookup(\"Wert\", \"tblParameter\", \"Parameter = \"Contrast'\")\r\n     If BildScannenUndSpeichern(strScannerID, strDateiname, lngCurrentIntent, lngResolution, lngBrightness, _<br \/> lngContrast) = True Then\r\n         Me!sfmDokumente.SetFocus\r\n         DoCmd.GoToRecord , , acNewRec\r\n         Me!sfmDokumente!Dokumentpfad = strDateiname\r\n     End If\r\n     DoCmd.Hourglass False\r\n     rstParameter.Close\r\n     Set rstParameter = Nothing\r\n     Set db = Nothing\r\nEnd Sub<\/pre>\n<p><b>Folgeseiten<\/b><\/p>\n<p>Dies k&ouml;nnte man nun beliebig oft wiederholen und die einzelnen Seiten als je ein Dokument in der Tabelle <b>tblDokumente <\/b>speichern. Der Sinn dieser Tabelle und des Unterformulars ist jedoch, mehrere tats&auml;chlich unterschiedliche Dokumente zu einem Vertrag zu verwalten. Manchmal enthalten Vertr&auml;ge ja etwa Anlagen oder zus&auml;tzliche Informationen. Also fehlt eine M&ouml;glichkeit, mehrseitige Dokumente zu scannen, was sich allerdings umgehen l&auml;sst. Verantwortlich daf&uuml;r ist die Schaltfl&auml;che <b>Weitere Seite scannen<\/b>, die folgende Schritte erledigt:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Scannen einer weiteren Seite<\/li>\n<li class=\"aufz-hlung\">&ouml;ffnen der TIFF-Datei mit der ersten Seite<\/li>\n<li class=\"aufz-hlung\">Anf&uuml;gen der neuen Seite an das bestehende Dokument<\/li>\n<li class=\"aufz-hlung\">Speichern des neuen, zweiseitigen Dokuments<\/li>\n<\/ul>\n<p>Weitere Seiten f&uuml;gt die Anwendung auf die gleiche Weise an. Die ben&ouml;tigte Funktionalit&auml;t stellt die Bibliothek zur Verf&uuml;gung, die auch f&uuml;r die Texterkennung (OCR) verantwortlich ist. Grundlagen zu dieser Bibliothek namens <b>Microsoft Office Document Imaging <\/b>finden Sie [5]. In diesem Fall nutzt die Anwendung allerdings nicht die F&auml;higkeiten dieser Bibliothek zur Texterkennung, sondern die M&ouml;glichkeit, eingescannte und sonstige Dokumente der Formate TIFF und SMP in Form mehrerer Seiten aneinander zu h&auml;ngen. Die Routine aus Listing 3 scannt zun&auml;chst eine Seite ein und speichert diese unter einem tempor&auml;ren Namen. Anschlie&szlig;end erzeugt sie zwei <b>Document<\/b>-Objekte und f&uuml;llt das erste mit dem Dokument, das die erste(n) Seite(n) enth&auml;lt, und das zweite mit dem neu eingescannten Dokument. Das Anf&uuml;gen selbst erfolgt &uuml;ber die Methode <b>Add <\/b>der <b>Images<\/b>-Auflistung des ersten <b>Document<\/b>-Objekts. Zum Schluss speichert sie das neue, erweiterte Dokument und l&ouml;scht die tempor&auml;r gespeicherte neue Seite wieder aus dem Dateisystem. Bild 8 zeigt das Ergebnis in der passenden Anwendung: Links die Ansicht aller enthaltenen Dokumente im &uuml;berblick, rechts die Detailansicht einer der Seiten des Dokuments.<\/p>\n<p class=\"kastentabelleheader\">Listing 3: Einscannen der Folgeseiten eines Dokuments<\/p>\n<pre>Private Sub cmdSeiteHinzufuegen_Click()\r\n     Dim db As DAO.Database\r\n     Dim rstParameter As DAO.Recordset\r\n     Dim strScannerID As String\r\n     Dim lngCurrentIntent As Long\r\n     Dim lngResolution As Long\r\n     Dim lngBrightness As Long\r\n     Dim lngContrast As Long\r\n     Dim strDateiname As String\r\n     DoCmd.Hourglass True\r\n     Set rstParameter = CurrentDb.OpenRecordset(\"tblParameter\", dbOpenDynaset)\r\n     strScannerID = DLookup(\"Wert\", \"tblParameter\", \"Parameter = \"ScannerID'\")\r\n     lngCurrentIntent = DLookup(\"Wert\", \"tblParameter\", \"Parameter = \"CurrentIntent'\")\r\n     lngResolution = DLookup(\"Wert\", \"tblParameter\", \"Parameter = \"VerticalResolution'\")\r\n     lngBrightness = DLookup(\"Wert\", \"tblParameter\", \"Parameter = \"Brightness'\")\r\n     lngContrast = DLookup(\"Wert\", \"tblParameter\", \"Parameter = \"Contrast'\")\r\n     strDateiname = CurrentProject.Path &amp; \"\\temp.tif\"\r\n     If BildScannenUndSpeichern(strScannerID, strDateiname, lngCurrentIntent, lngResolution, lngBrightness, _<br \/> lngContrast) = True Then\r\n         Dim objDocument1 As MODI.Document\r\n         Dim objDocument2 As MODI.Document\r\n         Set objDocument1 = New MODI.Document\r\n         Set objDocument2 = New MODI.Document\r\n         objDocument1.Create Me!sfmDokumente!Dokumentpfad\r\n         objDocument2.Create strDateiname\r\n         objDocument1.Images.Add objDocument2.Images(0), Nothing\r\n         objDocument1.Save\r\n         objDocument1.Close\r\n         objDocument2.Close\r\n     End If\r\n     If Len(Dir(strDateiname)) &gt; 0 Then\r\n         Kill strDateiname\r\n     End If\r\n     DoCmd.Hourglass False\r\nEnd Sub<\/pre>\n<div class=\"abbildung\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2006_06\/Vertragsverwaltung-web-images\/pic008_opt.jpeg\" alt=\"pic008.tif\" \/>\n        <\/div>\n<div class=\"abbildung\">\n<p><b><span style=\"color:darkgrey\">Bild 8: Anzeige eines mehrseitigen, eingescannten Dokuments in der passenden Anwendung<\/span><\/b><\/p>\n<\/p><\/div>\n<p><b>Vertragsdokumente indizieren<\/b><\/p>\n<p>Um die eingescannten Dokumente einer Suche zug&auml;nglich zu machen, m&uuml;ssen Sie zun&auml;chst die enthaltenen Texte extrahieren. Dies erledigen die OCR-Methoden der oben erw&auml;hnten Bibliothek <b>Microsoft Office Document Imaging<\/b>.<\/p>\n<p>Listing 4 zeigt die Routine, die beim Klick auf die Schaltfl&auml;che <b>Indizieren <\/b>ausgel&ouml;st wird. Die Routine erzeugt zun&auml;chst ein neues Document-Objekt und f&uuml;llt es mit der zu diesem Vertrag geh&ouml;renden TIFF-Datei. Anschlie&szlig;end ermitteln Sie mit der <b>Count<\/b>-Methode der <b>Images<\/b>-Auflistung des <b>Document<\/b>-Objekts die Anzahl der enthaltenen Seiten. Die nun folgende <b>For Next<\/b>-Schleife durchl&auml;uft alle enthaltenen Seiten, wobei sie f&uuml;r die aktuelle Seite jeweils eine Objektvariable namens <b>objImage <\/b>festlegt und anschlie&szlig;end mit der OCR-Methode die eigentliche Texterkennung durchf&uuml;hrt.<\/p>\n<p class=\"kastentabelleheader\">Listing 4: Texterkennung eingescannter Dokumente und Anlegen eines Index<\/p>\n<pre>Private Sub cmdIndizieren_Click()\r\n     Dim objDocument As MODI.Document\r\n     Dim db As DAO.Database\r\n     Dim lngDokumentID As Long\r\n     Dim i As Integer\r\n     Dim j As Integer\r\n     Dim objImage As MODI.Image\r\n     Dim strInhalt As String\r\n     Dim strWort As String\r\n     Dim lngWortID As Long\r\n     Dim intAnzahlSeiten As Integer\r\n     Dim intAnzahlWoerter As Integer\r\n     Set objDocument = New MODI.Document\r\n     If Not IsNull(Me.sfmDokumente) Then\r\n         objDocument.Create Me!sfmDokumente!Dokumentpfad\r\n         DoCmd.Hourglass True\r\n         Set db = CurrentDb\r\n         lngDokumentID = Me!sfmDokumente!DokumentID\r\n         intAnzahlSeiten = objDocument.Images.Count\r\n         For i = 0 To intAnzahlSeiten - 1\r\n             objDocument.Images(i).OCR\r\n             Set objImage = objDocument.Images(i)\r\n             strInhalt = strInhalt &amp; vbCrLf &amp; AnfuehrungszeichenVerdoppeln(objImage.Layout.Text)\r\n             intAnzahlWoerter = objDocument.Images(i).Layout.Words.Count\r\n             For j = 0 To intAnzahlWoerter - 1\r\n                 SysCmd acSysCmdSetStatus, _<br \/> \"Seite \" &amp; i + 1 &amp; \"\/\" &amp; intAnzahlSeiten &amp; \" Wort \" &amp; j + 1 &amp; \"\/\" &amp; intAnzahlWoerter\r\n                 strWort = objDocument.Images(i).Layout.Words(j).Text\r\n                 db.Execute \"INSERT INTO tblWoerter(Wort) VALUES(\"\" &amp; strWort &amp; \"')\"\r\n                 lngWortID = DLookup(\"WortID\", \"tblWoerter\", \"Wort = \"\" &amp; strWort &amp; \"'\")\r\n                 db.Execute \"INSERT INTO tblDokumenteWoerter(DokumentID, WortID, Seite) VALUES(\" _<br \/> &amp; lngDokumentID &amp; \",\" &amp; lngWortID &amp; \", \" &amp; i + 1 &amp; \")\"\r\n                 DoEvents\r\n             Next j\r\n         Next i\r\n         Me!sfmDokumente!Inhalt = strInhalt\r\n         DoCmd.Hourglass False\r\n     End If\r\nEnd Sub<\/pre>\n<p>Der Text der aktuellen Seite wird dem Inhalt einer Variablen namens <b>strInhalt <\/b>hinzugef&uuml;gt. Dies geschieht bei jedem Schleifendurchlauf, wodurch die Variable <b>strInhalt <\/b>am Ende den kompletten eingelesenen Text des Dokuments enth&auml;lt. Dieser wird im passenden Datensatz der Tabelle <b>tblDokumente <\/b>gespeichert. F&uuml;r jede Seite durchl&auml;uft die Routine eine weitere Schleife, n&auml;mlich &uuml;ber alle enthaltenen W&ouml;rter. Dazu ermittelt die Routine zun&auml;chst die Anzahl der W&ouml;rter. In den folgenden Durchl&auml;ufen versucht die Routine jeweils, einen neuen Datensatz in der Tabelle <b>tblWoerter <\/b>f&uuml;r das aktuelle Wort anzulegen.<\/p>\n<p>Dies gelingt nur, wenn das Wort noch nicht vorhanden ist, weil die Tabelle &#8211; wie weiter vorne beschrieben &#8211; einen passenden eindeutigen Index besitzt. Die n&auml;chste Anweisung ermittelt die ID des Wortes in der Tabelle, um diese zusammen mit der aktuellen Seitenzahl und der ID des Dokuments in der Tabelle <b>tblDokumenteWoerter<\/b> zu speichern. Auch dies gelingt wegen des zusammengesetzten Prim&auml;rschl&uuml;ssels der Tabelle <b>tblDokumenteWoerter <\/b>nur einmal je Seite und Wort. Ist dieser Vorgang f&uuml;r alle Seiten und alle darin enthaltenen W&ouml;rter abgeschlossen, ist das Dokument komplett indiziert.<\/p>\n<p><b>Anzeige des Inhalts von Dokumenten<\/b><\/p>\n<p>In einem der ersten Schritte beim Indizieren hat die Routine aus Listing 4 den kompletten Inhalt des Dokuments in der Tabelle <b>tblDokumente<\/b> gespeichert. Diesen Inhalt kann sich der Benutzer ansehen, indem er auf die Schaltfl&auml;che <b>Inhalt anzeigen <\/b>klickt. Dieses Formular hat zum schnellen Auffinden von Begriffen eine eingebaute Suche (siehe Bild 9). Die Funktion dieser Suche wird in [6] beschrieben. Alternativ k&ouml;nnen Sie auch die Suche aus [7] in die Anwendung integrieren, was vor allem bei l&auml;ngeren Texten Vorteile bringt.<\/p>\n<div class=\"abbildung\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2006_06\/Vertragsverwaltung-web-images\/pic009_opt.jpeg\" alt=\"pic009.tif\" \/>\n        <\/div>\n<div class=\"abbildung\">\n<p><b><span style=\"color:darkgrey\">Bild 9: Dieser Dialog zeigt den kompletten Inhalt eines Dokuments an.<\/span><\/b><\/p>\n<\/p><\/div>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Die Vertragsverwaltung ist vor allem wegen der Scan- und OCR-Funktionen relativ komplex geworden.<\/p>\n<p>Diese Fassung reicht f&uuml;r das Anlegen von Vertr&auml;gen leicht aus, und auch die Funktionen zum Scannen und Verwalten der Vertr&auml;ge im digitalen Format sind voll einsatzbereit.<\/p>\n<p>Es fehlen aber noch einige Funktionen, die die Vertragsverwaltung erst richtig wertvoll machen und die wir aus Platzgr&uuml;nden leider nicht mehr in dieser Ausgabe von <b>Access im Unternehmen <\/b>unterbringen konnten.<\/p>\n<p>Dazu geh&ouml;ren folgende Funktionen:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Bericht mit anstehenden K&uuml;ndigungen: Dieser Bericht enth&auml;lt eine Liste der Vertr&auml;ge, die man in n&auml;chster Zukunft k&uuml;ndigen kann. Dies ist ein wichtiges Werkzeug, um nicht unn&ouml;tig Vertr&auml;ge weiterlaufen zu lassen, deren Leistung man gar nicht mehr in Anspruch nimmt.<\/li>\n<li class=\"aufz-hlung\">Bericht K&uuml;ndigungsschreiben: K&uuml;ndigungsschreiben sehen im Grunde immer gleich aus. Sie enthalten die Vertragsnummer, auf die sie sich beziehen und einen Standardsatz \u00e1 la &#8222;&#8230; hiermit k&uuml;ndige ich den oben angef&uuml;hrten Vertrag zum n&auml;chstm&ouml;glichen Zeitpunkt &#8230;&#8220;. Solche Schreiben kann man mit wenigen Codezeilen und einem vorbereiteten Bericht mit einem Mausklick erstellen. Die Voraussetzungen haben wir schon geschaffen: Die Datenbank enth&auml;lt ja bereits alle Vertrags- und Vertragspartnerdaten, die nur noch in den Bericht eingef&uuml;gt werden m&uuml;ssen.<\/li>\n<li class=\"aufz-hlung\">Weitere Scanner: Da die WIA-Bibliothek in dieser Ausgabe vorgestellt wurde, lag es nahe, diese direkt in einer Anwendung einzusetzen. WIA gibt es allerdings erst f&uuml;r Windows ab Version XP mit Service Pack 1, und auch der Scanner sollte nicht von ganz altem Eisen sein: Nur neuere Modelle kommen mit einer Treibersoftware, die WIA unterst&uuml;tzt.<\/li>\n<li class=\"aufz-hlung\">Auch die MODI-Bibliothek sollte sich direkt einmal in der Praxis bew&auml;hren und liefert recht ordentliche Ergebnisse. Fehlerfrei arbeitet die Texterkennung allerdings noch lange nicht, und daher sollte man der Anwendung noch eine M&ouml;glichkeit hinzuf&uuml;gen, die eingescannten Texte nach dem Scannen zu lesen und manuell zu korrigieren, bevor die Inhalte per Index erfasst werden.<\/li>\n<li class=\"aufz-hlung\">Die MODI-Funktion zum Erfassen der W&ouml;rter eingescannter Dokumente zum anschlie&szlig;enden Indizieren k&ouml;nnte man durch einen eigenen Algorithmus ersetzen, der etwas genauer arbeitet.<\/li>\n<li class=\"aufz-hlung\">Wer einen Index erstellt, sollte diesen auch nutzen: In diesem Sinne fehlt der Anwendung noch eine Funktion zum Durchsuchen des Index und zur Ausgabe der Dokumente mit den gesuchten Begriffen.<\/li>\n<\/ul>\n<p>Wenn Sie die Vertragsverwaltung in der Praxis einsetzen m&ouml;chten, sollten Sie noch eine Fehlerbehandlung und eine Eingabevalidierung hinzuf&uuml;gen. Diese Aufgaben erledigt die Anwendung in der vorliegenden Fassung nicht.<\/p>\n<p class=\"zwischen-berschriftquellen\">Quellen<\/p>\n<p class=\"quellen\">[1] K&uuml;ndigungsfristen berechnen, Ausgabe 6\/2006, Shortlink 421<\/p>\n<p class=\"quellen\">[2] VBA-Funktionssammlung, Ausgabe 6\/2006, Shortlink 416<\/p>\n<p class=\"quellen\">[3] Dokumente scannen mit WIA, Ausgabe 6\/2006, Shortlink 419<\/p>\n<p class=\"quellen\">[4] Schnelles Filtern in Unterformularen, Ausgabe 6\/2006, Shortlink 413<\/p>\n<p class=\"quellen\">[5] Texterkennung mit OCR und VBA, Ausgabe 6\/2006, Shortlink 420<\/p>\n<p class=\"quellen\">[6] Suchen in Textfeldern, Ausgabe 6\/2006, Shortlink 414<\/p>\n<p class=\"quellen\">[7] Volltextsuche mit Highlight, Ausgabe 6\/2006, Shortlink 415<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Vertragsverwaltung.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/8C3B0314-4415-427A-A711-90C04273D5C5\/aiu_422.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vertr&auml;ge verwalten &#8211; das ist was f&uuml;r gr&ouml;&szlig;ere Unternehmen, aber doch nicht f&uuml;r mich! Oder doch &Uuml;berlegen Sie einmal, wieviele Vertr&auml;ge Sie derzeit haben: Da kommt selbst ohne gesch&auml;ftliche Vertr&auml;ge einiges zusammen: Mietvertr&auml;ge, Leasingvertr&auml;ge, Versicherungsvertr&auml;ge, Mitgliedschaften in Sportvereinen und viele mehr. Dazu vielleicht noch ein paar Wartungsvertr&auml;ge, Vertr&auml;ge mit Internet-Providern, &#8230; &#8211; da w&auml;re es doch gar nicht schlecht, sich mal einen vern&uuml;nftigen &Uuml;berblick zu verschaffen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662006,66062006,44000027],"tags":[],"class_list":["post-55000422","post","type-post","status-publish","format-standard","hentry","category-662006","category-66062006","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Vertragsverwaltung - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vertragsverwaltung\" \/>\n<meta property=\"og:description\" content=\"Vertr&auml;ge verwalten - das ist was f&uuml;r gr&ouml;&szlig;ere Unternehmen, aber doch nicht f&uuml;r mich! Oder doch &Uuml;berlegen Sie einmal, wieviele Vertr&auml;ge Sie derzeit haben: Da kommt selbst ohne gesch&auml;ftliche Vertr&auml;ge einiges zusammen: Mietvertr&auml;ge, Leasingvertr&auml;ge, Versicherungsvertr&auml;ge, Mitgliedschaften in Sportvereinen und viele mehr. Dazu vielleicht noch ein paar Wartungsvertr&auml;ge, Vertr&auml;ge mit Internet-Providern, ... - da w&auml;re es doch gar nicht schlecht, sich mal einen vern&uuml;nftigen &Uuml;berblick zu verschaffen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T21:07:23+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg02.met.vgwort.de\/na\/04a66bd9a6a046e992d48d8db391a536\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"20\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vertragsverwaltung\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vertragsverwaltung\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Vertragsverwaltung\",\"datePublished\":\"2021-02-11T21:07:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vertragsverwaltung\\\/\"},\"wordCount\":3495,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vertragsverwaltung\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/04a66bd9a6a046e992d48d8db391a536\",\"articleSection\":[\"2006\",\"6\\\/2006\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Vertragsverwaltung\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vertragsverwaltung\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vertragsverwaltung\\\/\",\"name\":\"Vertragsverwaltung - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vertragsverwaltung\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vertragsverwaltung\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/04a66bd9a6a046e992d48d8db391a536\",\"datePublished\":\"2021-02-11T21:07:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vertragsverwaltung\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Vertragsverwaltung\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vertragsverwaltung\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/04a66bd9a6a046e992d48d8db391a536\",\"contentUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/04a66bd9a6a046e992d48d8db391a536\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vertragsverwaltung\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Vertragsverwaltung\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Vertragsverwaltung - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/","og_locale":"de_DE","og_type":"article","og_title":"Vertragsverwaltung","og_description":"Vertr&auml;ge verwalten - das ist was f&uuml;r gr&ouml;&szlig;ere Unternehmen, aber doch nicht f&uuml;r mich! Oder doch &Uuml;berlegen Sie einmal, wieviele Vertr&auml;ge Sie derzeit haben: Da kommt selbst ohne gesch&auml;ftliche Vertr&auml;ge einiges zusammen: Mietvertr&auml;ge, Leasingvertr&auml;ge, Versicherungsvertr&auml;ge, Mitgliedschaften in Sportvereinen und viele mehr. Dazu vielleicht noch ein paar Wartungsvertr&auml;ge, Vertr&auml;ge mit Internet-Providern, ... - da w&auml;re es doch gar nicht schlecht, sich mal einen vern&uuml;nftigen &Uuml;berblick zu verschaffen.","og_url":"https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-11T21:07:23+00:00","og_image":[{"url":"http:\/\/vg02.met.vgwort.de\/na\/04a66bd9a6a046e992d48d8db391a536","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"20\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Vertragsverwaltung","datePublished":"2021-02-11T21:07:23+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/"},"wordCount":3495,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/04a66bd9a6a046e992d48d8db391a536","articleSection":["2006","6\/2006","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/","url":"https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/","name":"Vertragsverwaltung - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/04a66bd9a6a046e992d48d8db391a536","datePublished":"2021-02-11T21:07:23+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/#primaryimage","url":"http:\/\/vg02.met.vgwort.de\/na\/04a66bd9a6a046e992d48d8db391a536","contentUrl":"http:\/\/vg02.met.vgwort.de\/na\/04a66bd9a6a046e992d48d8db391a536"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Vertragsverwaltung\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Vertragsverwaltung"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000422","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000422"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000422\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000422"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000422"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000422"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}