Autor: André Minhorst, Duisburg
Die Projektverwaltung in Handwerksbetrieben ist oft eine undurchsichtige Sache – wickeln bisher doch die meisten derartigen Betriebe ihre Projekte mehr oder weniger auf Papier ab. Dabei sammelt sich schnell ein großer Stapel von Informationen in Papierform an – und der will erst einmal gebändigt sein. Dabei wäre es ein Leichtes, die Informationen per PC in eine Datenbank einzugeben und anschließend in Form übersichtlicher Berichte auszugeben. Doch Handwerksbetriebe bestehen oft nur aus wenigen Mitarbeitern und ein EDV-Fachmann ist selten dabei. Daher beschreibt der vorliegende Beitrag eine Musterlösung zur Verwaltung von Projekten, Kosten und Mitarbeitern in Handwerksbetrieben.
Bild 1: Auflistung der zu einem Projekt gehörenden Leistungen
Die Projektverwaltung in Handwerksbetrieben besteht oft lediglich aus einem Haufen Papier. Das muss aber nicht sein: Mit der vorliegenden Musterlösung bringen Sie Ordnung in den Blätterwald.
Probleme bei der Projektverwaltung in Handwerksbetrieben
Selbst der größte Papierstapel kann – einen ebenso fleißigen wie genialen Mitarbeiter vorausgesetzt – zu einem übersichtlichen Ergebnis führen.
So gibt es wahrscheinlich nicht wenige Handwerksbetriebe, die längst pleite waren, bevor sie den Grund für finanzielle Probleme gefunden haben. Eine übersichtliche Planung und eine penible Notierung von Ausgaben für Material und Arbeitskräfte hätte möglicherweise einen anderen Ausgang ermöglicht. So hätte beispielsweise eine Aufstellung wie in Bild 1 einen guten überblick auf die unterschiedlichen Arbeitszeiten gewährt. Stattdessen konnte möglicherweise noch nicht einmal im Nachhinein festgestellt werden, an welcher Stelle die entsprechenden Fehler passierten.
Bild 2: Entwurf der Tabelle tblProjekte
Was kann die vorliegende Musterlösung
Die vorliegende Musterlösung soll zeigen, wie man die unterschiedlichen, für den Handwerksbetrieb notwendigen Daten handhaben kann. Im Rahmen einer Musterlösung kann man selbstverständlich nicht alle Bereiche abdecken – so ist beispielsweise nicht vorgesehen, Angebote oder Rechnungen zu erstellen oder etwa Kalkulationen von Projekten durchzuführen. Stattdessen dient sie zur Verwaltung der Stammdaten von Handwerkern, Kunden und Projekten sowie zur Eingabe und Nachverfolgung von geleisteten Stunden und angefallenen Kosten.
Bild 3: Entwurf der Tabelle tblKunden
Dabei soll der Anwender einzelnen Projekten unterschiedliche Leistungen zuordnen können. Die Leistungen wiederum lassen sich in kleinere Einheiten wie Fahrtzeiten, Rüstzeiten, Materialbeschaffung und die eigentliche Arbeitszeit aufteilen. Außerdem soll der Anwender zu jeder Leistung den Namen des durchführenden Handwerkers angeben können. So können Sie sich anschließend detailliert über alle angefallenen Leistungen und Kosten informieren.
Das Datenmodell der vorliegenden Datenbank besteht aufgrund der Komplexität der Anwendung aus relativ vielen Tabellen und entsprechenden Beziehun-gen zwischen den Tabellen. Sicher hat der eine oder andere bereits Datenmodelle gesehen, die ein Vielfaches der hier vorhandenen Tabellen enthalten. Im Verhältnis zu einer Kontaktdatenbank oder ähnlichem ist dieses Datenmodell hier ziemlich umfangreich.
Speicherung von Stammdaten
Zunächst einmal benötigen Sie einige Tabellen, die zum Speichern der Stammdaten und deren verknüpften Tabellen erforderlich sind.
Tabelle zum Speichern der Kundenstammdaten
Die Tabelle zum Speichern der Kundendaten (siehe Bild 2) beinhaltet die bei solchen Tabellen üblichen Felder wie z. B. Firmenname, Ansprechpartner, Adresse, Telefonnummern usw. Bei der vorliegenden Datenbank wurde aus Gründen der übersicht bewusst darauf verzichtet, mehrere Adressen je Kunde anzugeben. In der Praxis sind dagegen durchaus mehrere Adressen denkbar, wie z. B. Postadresse, Lieferadresse oder Firmensitz. Hier liegt es in Ihrem Ermessen, die Tabelle ent- sprechend sinnvoll auszubauen. Die Tabelle hat keine Felder mit Verknüpfungen zu anderen Tabellen.
Tabelle zum Speichern der Projektstammdaten
Die Projektstammdaten sind ein wichtiger Bestandteil der Handwerkerdatenbank. Da die geleisteten Stunden der Handwerker sowie sonstige angefallene Kosten später den unterschiedlichen Projekten zugeordnet werden sollen, ist das Speichern bestimmter Projektdaten erforderlich. Dabei sind vor allem der Verweis auf den entsprechenden Kunden, die Bezeichnung und die Dauer des Projektes und noch einige weitere Informationen interessant (siehe Bild 3). Die Tabelle tblProjekte besitzt ein Feld mit einer Verknüpfung auf die Tabelle der Kundendaten.
Tabelle zum Speichern der Handwerker-stammdaten
Kein Projekt funktioniert ohne die fleißige Mitarbeit der Handwerker. Und da die Verwaltung eines Projektes die beteiligten Handwerker mit einbeziehen soll, muss man auch zu den einzelnen Handwerkern einige Daten speichern (siehe Bild 4).
Dabei geht die Musterlösung allerdings nicht zu sehr ins Detail. Sie begnügt sich, was die persönlichen Daten angeht, mit dem Vor- und Nachnamen des Handwerkers. Wichtiger sind in diesem Zusammenhang die Berufsbezeichnung des Handwerkers sowie der Lohneinkauf.
Die Tabelle verfügt über keinerlei Felder, die Verknüpfungen zu anderen Tabellen beinhalten.
Bild 4: Entwurf der Tabelle tblHandwerker
Bild 5: Entwurf der Tabelle tblLeistungen
Bild 6: Entwurf der Tabelle tblTeilleistungen
Speichern der Projektdaten und der Leistungen
Neben den Tabellen zum Speichern der Stammdaten benötigen Sie einige Tabellen, die zum Speichern der eigentlichen Projektdaten und Leistungen dienen.
Die Tabelle zum Speichern der Leistungen
Das wichtigste Feld der Tabelle zum Speichern der Leistungen (siehe Bild 5) ist das Feld, das die Bezeichnung der Leistung speichert. Neben diesem Feld gibt es zwei Felder, die zur Auswahl von Einträgen anderer Tabellen dienen. Das erste dient zur Auswahl des Projektes, in dessen Bereich die Leistung fällt, und das zweite zur Auswahl des Handwerkers, der die Leistung ausführt.
Außerdem soll die Tabelle ein Feld zur Angabe des Datums enthalten.
Hinweis
Sicher gibt es bestimmte Leistungen, deren Ausführung sich über mehrere Tage hinziehen kann. Im Rahmen der vorliegenden Lösung ist die Dauer durch die notwendige Angabe nur eines Datums auf einen Tag begrenzt. Leistungen, die mehrere Tage in Anspruch nehmen, müssen dementsprechend auf mehrere Leistungen aufgeteilt werden (z. B. durch Anfügen einer lau- fenden Nummer).
Aufteilen der Leistung in Teilleistungen
Um eine möglichst genaue Erfassung der unterschiedlichen Zeiten wie Arbeitszeit, Rüstzeit, Fahrtzeit usw. zu erreichen, sollen die einzelnen Leistungen in die entsprechenden Teilleistungen mit exakten Zeitangaben aufgeteilt werden. So kann der Anwender die Zeiten genau den einzelnen Projekten zuord- nen.
Dazu benötigen Sie eine Tabelle zum Speichern der unterschiedlichen Zeiten (siehe Bild 6). Die Tabelle soll außerdem ein Feld enthalten, über welches sie die Beziehung zur Tabelle tblLeistungen herstellt. Da es wahrscheinlich nur eine begrenzte Anzahl unterschiedlicher Leistungsarten gibt, legen Sie hierfür eine weitere Tabelle an. Die Tabelle heißt tblLeistungsarten (siehe Bild 7). Sie soll neben dem Primärindexfeld lediglich ein Feld mit dem Namen der jeweiligen Leistungsart enthalten.
Bild 7: Entwurf der Tabelle tblLeistungsarten
Bild 8: Entwurf der Tabelle tblKosten
Bild 9: Entwurf der Tabelle tblKostenarten
Bild 10: Datenmodell der Projektverwaltung
Speichern der je Projekt anfallenden Kosten
Neben den Lohnkosten ergeben sich natürlich noch weitere projektspezifische Kosten. Dazu gehören solche Posten wie z. B. Materialkosten, Kosten für Geräte usw. Um die je Projekt anfallenden Kosten entsprechend zu speichern, benötigen Sie noch zwei weitere Tabellen. Die erste Tabelle, tblKosten, dient zum Speichern der Beschreibung des Kostenfaktors, der Höhe des Faktors sowie des Zeitpunktes, an dem die Kosten angefallen sind (siehe Bild 8). Außerdem verfügt die Tabelle über einen Primärindex sowie zwei Felder zur Auswahl weiterer wichtiger Informationen. Das erste dient zur Auswahl des Projektes, zu dem der Kostenfaktor gerechnet wird, und das zweite zur Auswahl eines Eintrags der Tabelle tblKostenarten.
Die Tabelle tblKostenarten beinhaltet zwei Felder: den Primärindex sowie die Bezeichnung der unterschiedlichen Kostenarten (siehe Bild 9).
Zusammenfassung des Datenmodells
Das vorliegende Datenmodell liefert einen Ansatz, um eine komplette Verwaltung von Projekten in Handwerksbetrieben zu ermöglichen. Es gibt sowohl in den einzelnen Tabellen als auch im Datenmodell selbst unzählige Erweiterungsmöglichkeiten. So kann beispielsweise die Tabelle tblKunden sicher noch um einiges umfangreicher gestaltet werden – man könnte sie beispielsweise um diverse Adressen erweitern.
Leider ist der für den vorliegenden Beitrag zur Verfügung stehende Platz begrenzt – sonst würde dieses Datenmodell sicher dasjenige aus Bild 10 bei weitem sprengen.
Was nützt dem Anwender eine Anhäufung von Tabellen, wenn er nicht in ansprechender Weise mit den Daten arbeiten kann Zur Eingabe der Daten sowie zur Auswahl der gewünschten Daten dient eine entsprechende Anzahl von Formularen.
Das Hauptformular
Damit der Anwender überhaupt einen Ansatzpunkt hat, um sich in den unterschiedlichen Möglichkeiten der Datenbank zurechtzufinden, stellen Sie ihm verschiedene Formulare zur Auswahl der verschiedenen Optionen zur Verfügung.
Dabei beginnen Sie mit dem Hauptformular frmStart (siehe Bild 11). Die hier zur Auswahl stehenden Möglichkeiten sollen den Anwender erst einmal in die richtige Richtung schieben.
Eigenschaften eines Auswahlformulars
Damit das Formular ansprechend aussieht und auch in der Mitte des Bildschirms platziert wird, stellen Sie die Eigenschaften Bildlaufleisten, Datensatzmarkierer, Navigationsschaltflächen und Trennlinien auf den Wert Nein und die Eigenschaft Automatisch zentrieren auf den Wert Ja ein.
Bild 11: Hier entscheiden Sie, wo es langgeht.
Bild 12: Mit diesem Formular wählen Sie weitere Formulare zur Bearbeitung der Stammdaten aus.
Mit den drei Schaltflächen btnStammdatenBearbeiten, btnNeueDaten und btnDatenAusgeben soll der Anwender entsprechend weiterführende Menüs öffnen können. Die Schaltfläche btnClose dient zum Beenden der Datenbank.
Hinter der Ereigniseigenschaft Beim Klicken der Schaltfläche verbirgt sich der folgende Code:
Private Sub btnClose_Click() DoCmd.Quit End Sub
Diese Anweisung hat die einzige Funktion, die Anwendung zu beenden.
Die weiteren Schaltflächen zum öffnen der folgenden Menüs verwenden einander ähnliche Prozeduren (s. Quelltext 1).
In den Prozeduren wird jeweils das gewünschte Formular geöffnet – in diesem Fall beispielsweise das Formular zur Auswahl der zu bearbeitenden Stammdaten. Die zweite und letzte Anweisung schließt das aktuelle Formular.
Die weiteren Auswahlformulare
Vom Startformular aus kann der Anwender weitere Auswahlformulare öffnen. Die Schaltfläche mit der Beschrif- tung Stammdaten bearbeiten öffnet z. B. das Formular frmStammdatenBearbeiten. Hier kann der Anwender auswählen, welche Stammdaten er bearbeiten will. Zur Verfügung stehen die Projektdaten, die Handwerkerdaten sowie die Kundendaten (siehe Bild 12).
Die Schaltfläche mit der Beschriftung Neue Leistungen und Kosten eingeben öffnet das Formular frmLeistungenUndKosten. Hier kann der Anwender sich entscheiden, ob er ent-
Quelltext 1
weder neue Leistungsdaten oder neue Kostenfaktoren eingeben möchte.
Schließlich dient die Schaltfläche mit der Beschriftung Daten ausgeben zur Anzeige eines Formulars namens frmDatenausgabe. Hier steht Ihnen die Auswahl der unterschiedlichen Berichte zur Datenausgabe zur Verfügung.
Die Formulare zur Auswahl der weiteren Menüpunkte sind prinzipiell gleich wie das Startformular aufgebaut. Unterschiedlich dazu sind die Namen der aufgerufenen Formulare sowie die Funktionalität, die sich hinter der Schaltfläche mit der Beschriftung Schließen befindet. Während die gleichnamige Schaltfläche im Startformular die Anwendung beendet, hat die Schaltfläche der Unterformulare jeweils das öffnen des übergeordneten Formulars zur Folge. Als Beispiel soll die Prozedur der Schaltfläche btnClose des Formulars frmStamm-datenBearbeiten (s. Quelltext 2) dienen.
Quelltext 2
Dabei ist frmStart die aufzurufende übergeordnete Schaltfläche. Das aktuelle Formular hingegen soll geschlossen werden.
Bild 13: Geben Sie hier den Namen des neuen Formulars ein.
Die Formulare zur Anzeige und Bearbeitung der Stammdaten
Es gibt drei unterschiedliche Formulare, die zur Bearbeitung der verschiedenen Stammdaten dienen. Alle drei sind in Ihrer Funktionsweise nahezu identisch. Daher finden Sie nur die Beschreibung eines der Formulare. Hinsichtlich der Datenherkunft gibt es ebenfalls kaum Unterschiede: Alle drei Formulare beziehen sich auf je eine Tabelle mit Stammdaten. Dabei spielen keinerlei Beziehungen eine Rolle.
Formular zur Anzeige und zum Bearbeiten der Projektstammdaten
Als Beispiel für eines der Formulare zur Bearbeitung der Projektdaten soll das Formular frmStammdatenProjekte dienen. übernehmen Sie auch für dieses Formular die bereits im Hauptformular festgelegten Eigenschaften.
Praxis-Tipp
Wenn Sie mehrere Formulare erstellen möchten, die sich – bezogen auf das Layout – ähnlich sehen, können Sie sich das weitere Erstellen erleichtern: Kopieren Sie einfach das Formular, das als Vorlage dienen soll und fügen Sie es unter einem anderen Namen wieder ein. Das Ganze spielt sich im Datenbankfenster ab. Markieren Sie den Namen des gewünschten Formulars, kopieren Sie das Formular mit der Tastenkombination Strg + C in die Zwischenablage und fügen Sie es mit den Tasten Strg + V erneut ein. Sie müssen nur noch einen geeigneten Namen eingeben (siehe Bild 13).
Anschließend können Sie direkt die Tabelle tblProjekte als Datenherkunft des Formulars festlegen. Dann ziehen Sie die gewünschten Felder, wie in Bild 14 zu sehen, aus der Feldliste in die Entwurfsansicht des Formulars.
Nachdem Sie die benötigten Felder angelegt und auf die gewünschte Größe gebracht haben, bringen Sie noch ein wenig Individualität in das Formular: Statt der Standard-Navigationsschalt-flächen von Access erstellen Sie Ihre eigenen.
Bild 14: Ziehen Sie die gewünschten Felder aus der Feldliste in den Formularentwurf.
Bild 15: Das fertige Formular zur Bearbeitung der Projektstammdaten
Dazu benötigen Sie zunächst fünf Schaltflächen mit den Namen btnFirst, btnPrevious, btnNext, btnLast und btnNew, die Sie mit den entsprechenden Beschriftungen versehen (siehe Bild 15).
Quelltext 3
Quelltext 4
Anschließend können Sie sich mit dem Anlegen der entsprechenden Ereignis-prozeduren beschäftigen, die nicht besonders umfangreich sind.
Die beiden Schaltflächen zum Springen auf den jeweils ersten oder letzten Datensatz bestehen nur aus einem einzigen Befehl (s. Quelltext 3).
Ebenfalls nur aus einer Anweisung besteht die Prozedur zum Anlegen eines neuen Datensatzes (s. hierzu Quelltext 4).
Bei den entsprechenden Methoden der DoCmd-Anweisung zum Springen auf den vorherigen oder nächsten Datensatz kann es zu einem Fehler kommen, wenn der Datensatzzeiger sich auf dem ersten oder letzten Datensatz befindet. Daher schalten Sie am besten die Fehlerbehandlung für die beiden Prozeduren einfach ab (s. Quelltext 5).
Quelltext 5
Schließlich fehlt noch die obligatorische Schaltfläche zum Schließen des Formulars (s. Quelltext 6).
Quelltext 6
Die Formulare zur Eingabe von Leistungen und Kosten
Während die bisherigen Formulare eher mit trivialen Mechanismen aufwarten, wird es nun interessanter. Für das Formular zur Eingabe von Leistungen sind immerhin zwei Unterformulare erforderlich.
Bild 16: Das fertige Formular zur Eingabe von Leistungen
Das Formular zur Eingabe von Leistungen
Mit dem Formular zur Eingabe der Leistungen soll der Anwender in zwei Tabellen gleichzeitig Daten eingeben können, nämlich in die Tabellen tblLeistungen und tblTeilleistungen. Die Eingaben in die beiden Tabellen realisiert man über zwei Unterformulare, die erstens miteinander synchron und zweitens mit dem im Hauptformular ausgewählten Projekt synchron sein sollen (siehe Bild 16).
Zunächst einmal sollten Sie jedoch die beiden Unterformulare erstellen.
Das Unterformular subfrmLeistungen
Dieses Unterformular soll die Datensätze der Tabelle tblLeistungen anzeigen – und zwar in der Datenblattansicht. Dazu bedarf es nicht viel.
Erstellen Sie einfach ein neues Formular und öffnen Sie es in der Entwurfsansicht. Anschließend legen Sie als Datenherkunft die entsprechende Tabelle fest (siehe Bild 17).
Da die Anzeige der Daten in der Datenblattansicht erfolgen soll, können Sie die drei anzuzeigenden Felder Datum, HandwerkerNr und Leistungsbeschreibung ohne große Mühe in den Detailbereich des Formulars ziehen.
Sie müssen lediglich die Eigenschaft Standardansicht auf den Wert Datenblattansicht einstellen, um einen Anblick wie in Bild 17 zu erzeugen.
Bild 17: Das Unterformular subfrmLeistungen
Das Unterformular subfrmTeilleistungen
Bei dem Formular subfrmTeilleistungen gehen Sie genauso wie beim vorherigen Formular vor. Legen Sie die Tabelle tblTeilleistungen als Datenherkunft fest und ziehen Sie die drei Felder LeistungsartNr, Beginn und Ende in den Detailbereich des Formulars.
Praxis-Tipp
Wenn Sie ein Unterformular in der Datenblattansicht verwenden, kommt es hin und wieder vor, dass die einzelnen Spalten des Unterformulars nicht in der richtigen Breite oder Reihenfolge angezeigt werden. Sie können das äußere des Datenblattes dann zwar im Hauptformular anpassen – aber das Ergebnis ist dadurch nicht von Dauer. Für beständige änderungen müssen Sie die änderungen in der Datenblattansicht des Unterformulars vornehmen.
Erstellen des Hauptformulars und Einbinden der Unterformulare
Als Datenherkunft für das Hauptformular dient die Tabelle tblProjekte. Ziehen Sie die drei Felder KundenNr, Start und Ende in den Detailbereich.
Damit der Anwender das gewünschte Projekt auswählen kann, stellen Sie ihm ein Kombinationsfeld zur Verfügung. Das Kombinationsfeld ist nicht an die Datenherkunft des Formulars gebunden. Als Datensatzherkunft des Kombinationsfeldes stellen Sie aber trotzdem die Tabelle tblProjekte ein. Damit das Kombinationsfeld nicht die Nummer des Projektes, sondern seine Bezeichnung anzeigt, ändern Sie noch zwei Eigenschaften des Kombinationsfeldes: Die Eigenschaft Spaltenanzahl erhält den Wert 2 und die Eigenschaft Spaltenbreiten stellen Sie auf den Wert 0cm;6cm ein (der zweite Wert richtet sich nach der Breite des Kombinationsfeldes).
Das Kombinationsfeld soll direkt nach dem öffnen des Formulars ein Projekt anzeigen. Da es hier keine Kriterien für die Auswahl des anzuzeigenden Projektes gibt, wählt die folgende Prozedur das erste Projekt der Tabelle tblProjekte (s. Quelltext 7).
Quelltext 7
Wenn Sie nun das Formular in der Formularansicht anzeigen, haben Sie möglicherweise Glück und das Formular zeigt auch die Daten des im Kombinationsfeld ausgewählten Projekts an. Das wäre aber auch wirklich Glück, da das Kombinationsfeld und die Datenherkunft des Formulars noch nicht synchronisiert sind. Das holen Sie schnell ganz einfach mit der folgenden Prozedur nach, die Sie für die Ereigniseigenschaft Nach Aktualisierung des Kombinationsfeldes hinterlegen (s. Quelltext 8)
Die Prozedur legt zunächst eine Kopie der Datensatzherkunft des Formulars an und sucht darin den Eintrag mit der im Kombinationsfeld ausgewählten Projektnummer aus. Anschließend verschiebt sie den Datensatzzeiger des Formulars auf den entsprechenden Eintrag.
Quelltext 8
Einfügen der Unterformulare
Nun lassen sich die beiden Unterformulare einfügen. Anschließend können Sie das Ganze optisch noch ein wenig aufpeppen, indem Sie jeweils einen Rahmen um die Felder mit den Projektdaten sowie die beiden Unterformulare ziehen (siehe Bild 18).
Bild 18: Das Unterformular subfrmLeistungen im Formular frmLeistungen
Praxis-Tipp
Das Einfügen von Unterformularen in ein Formular realisieren Sie am einfachsten, indem Sie das Datenbankfenster und das Formular nebeneinander positionieren und dann einfach die entsprechenden Einträge aus dem Datenbankfenster in das Formular ziehen. Unter gewissen Umständen synchronisiert Access das Haupt- und das Unterformular direkt miteinander.
Wenn Sie das Unterformular subfrmLeistungen – wie im Praxis-Tipp beschrieben – in das Formular einfügen, klicken Sie anschließend in der Entwurfsansicht einmal auf das Unterformular subfrmLeistungen und aktivieren im Eigenschaftenfenster das Register Daten. Hier hat Access bereits automatisch Werte für die Eigenschaften Verknüpfen von und Verknüpfen zu eingetragen (siehe Bild 19).
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