Mit Access 2007 hat Microsoft die etwas unscheinbare Berichtsansicht als weitere Ansicht für Berichte eingeführt. Auch wenn diese Ansicht nicht direkt zur Dateneingabe verwendet werden kann, ist sie dennoch ein mächtiges Werkzeug – vor allem, wenn es um die Darstellung hierarchischer Daten geht. Der vorliegende Beitrag zeigt, wie Sie damit interaktiv Projekte, Aufgaben und Tätigkeiten verwalten und sogar noch die Arbeitszeit protokollieren.
Die Lösung
Die fertige Lösung liefert die wesentlichen Funktionen in Form eines Access-Berichts in der Berichtsansicht. Diese Ansicht ist eine Mischung aus der Berichtsvorschau und einem Formular in der Endlosansicht.
Von der Berichtsvorschau erbt die Berichtsansicht die Möglichkeit, durch entsprechende Gruppierungen Daten hierarchisch anzeigen zu können. Die Formulare steuern die Interaktivität bei: Zwar können Sie in der Berichtsvorschau keine Textfelder ausfüllen oder Daten aus Kombinationsfeldern auswählen, dafür lassen sich aber Schaltflächen und andere Steuerelemente mit einer Beim Klicken-Ereignisprozedur versehen. Wie aber sollen Sie in der Berichtsansicht Daten verwalten, wenn doch die Eingabe nicht möglich ist Kein Problem: Über das Beim Klicken-Ereignis öffnen Sie zum Eingeben und Bearbeiten von Daten einfach entsprechende Formulare.
Die fertige Lösung dieses Beitrags sieht übrigens wie in Bild 1 aus. Im unteren Bereich zur Darstellung der Daten finden Sie die hierarchische Anzeige von Projekten, Aufgaben und Tätigkeiten. Zusätzlich erscheinen dort Schaltflächen, mit denen sich neue Elemente anlegen und vorhandene bearbeiten oder löschen lassen.
Bild 1: Die Aufgabenverwaltung im Einsatz
Ganz rechts finden sich schließlich noch Symbole, welche die aktuell in Bearbeitung befindliche Tätigkeit markieren. Im oberen Teil zeigt das Formular eine Schaltfläche Projekt auswählen an, mit der Sie einen Dialog zum Ein- und Ausblenden aller in der Datenbank gespeicherten Projekte anzeigen können.
Dieses Formular wird als modaler Dialog angezeigt und zeigt alle aktuell im Bericht dargestellten Projekte schwarz hinterlegt an (s. Bild 2). Durch einfaches Anklicken werden die Einträge sowohl im Listenfeld als auch in der Berichtsansicht ein- und ausblendet.
Bild 2: Ein- und Ausblenden der aktuell in Arbeit befindlichen Projekte
Das Kontrollkästchen Erledigte Tätigkeiten anzeigen blendet eine weitere Ebene ein, die zu jeder Tätigkeit ein Kontrollkästchen anzeigt – entweder mit oder ohne Haken (s. Bild 3). Durch einen Klick auf eine dieser Schaltflächen aktivieren beziehungsweise deaktivieren Sie eine Tätigkeit. Ist die Option Erledigte Tätigkeiten anzeigen nicht aktiviert, werden alle abgehakten Tätigkeiten ausgeblendet.
Bild 3: Anzeige erledigter Tätigkeiten
Die übrigen Schaltflächen dienen dem Anlegen, Bearbeiten und Löschen von Elementen. In der obersten Ebene befindet sich nur eine Schaltfläche, mit der Sie ein Projekt anlegen können. Dies öffnet den Dialog aus Bild 4. Hier tragen Sie einfach nur den Namen des Projekts ein und speichern diesen mit einem Klick auf die OK-Schaltfläche. Der gleiche Dialog erscheint übrigens, wenn Sie auf das Bearbeiten-Symbol eines bereits vorhandenen Projekts klicken. Damit können Sie dann die Bezeichnung eines Projekts ändern.
Bild 4: Dialog zum Anlegen eines neuen Projekts
Eine Ebene darunter befinden sich die Aufgaben eines Projekts. Diese legen Sie im Dialog aus Bild 5 an, den Sie für ein neues Projekt mit einem Klick auf die entsprechende Schaltfläche anzeigen. Auch dieser Dialog eignet sich zum Bearbeiten bestehender Elemente. Im Gegensatz zum Formular zum Anzeigen der Projektdetails liefert dieser noch ein weiteres Steuerelement, mit dem Sie die Aufgabe einem Projekt zuweisen können.
Bild 5: Anlegen und Bearbeiten von Aufgaben
Fehlen noch die eigentlichen Tätigkeiten: Auch diesen Dialog haben wir relativ einfach gehalten. Er erlaubt die Eingabe einer Tätigkeitsbezeichnung und die Auswahl der Aufgabe, zu der die Tätigkeit gehört (s. Bild 6).
Bild 6: Mit diesem Dialog legen Sie Tätigkeiten an.
Für alle drei Dialoge gilt: Wir haben sie so einfach wie möglich gehalten. Lassen Sie Ihrer Fantasie freien Lauf, wenn Sie eigene Eigenschaften zu den zugrunde liegenden Tabellen und zu den entsprechenden Formularen hinzufügen.
Zeiterfassung
Ein weiteres Feature ist die Zeiterfassung. Diese erfolgt auf denkbar einfachem Wege: Sie klicken einfach auf die rote Stopp-Schaltfläche, woraufhin sich diese in ein Play-Symbol umwandelt. Dadurch wird auch die Stoppuhr oben im Bericht gestartet und eine entsprechende Aufzeichnung der Startzeit der Tätigkeit durchgeführt.
Klicken Sie anschließend erneut auf die Play-Schaltfläche, ändert sich das Symbol wieder und die Endzeit dieser Tätigkeit wird in die entsprechende Tabelle eingetragen. Ein Klick auf das Stopp-Symbol einer anderen Tätigkeit startet die Aufzeichnung eines Zeitraums für diese Tätigkeit und beendet die zuvor markierte.
Datenmodell
Das Datenmodell ist relativ einfach gehalten. Die Projekte, Aufgaben und Tätigkeiten werden in den drei Tabellen tblProjekte, tblAufgaben und tblTaetigkeiten erfasst, deren Feldlisten und Beziehungen Sie Bild 7 entnehmen können.
Bild 7: Datenmodell der Lösung
Alle Beziehungen sind mit referenzieller Integrität und Löschweitergabe definiert. Die Tabelle tblAufgaben enthält ein Fremdschlüsselfeld namens ProjektID, mit dem Sie eine Aufgabe einem Projekt zuordnen können.
Die Tabelle tblTaetigkeiten wird entsprechend über das Feld AufgabeID mit der Tabelle tblAufgaben verknüpft.
Neben dem Primärschlüsselfeld, dem Feld mit der Bezeichnung des jeweiligen Elements und dem Fremdschlüsselfeld enthalten die Tabellen noch einige wenige weitere Felder, von denen einige nur als Vorbereitung für weitere Ausbaustufen dienen. Interessant sind in der mit diesem Beitrag veröffentlichten Beispieldatenbank nur zwei Felder:
- Das Feld ProjektSichtbar der Tabelle tblProjekte speichert, ob ein Objekt beim Öffnen des Berichts rptAufgaben eingeblendet werden soll oder nicht.
- Das Feld TaetigkeitAktiv der Tabelle tblTaetigkeiten speichert, ob eine Tätigkeit im Bericht als erledigt markiert wurde. ähnliche Felder sind auch in den Tabellen tblProjekte und tblAufgaben vorhanden, aus Gründen der Übersichtlichkeit werden diese jedoch in der Beispieldatenbank nicht verwendet.
Diese beiden Felder sowie die übrigen Ja/Nein-Felder der drei Tabellen tblProjekte, tblAufgaben und tblTaetigkeiten sind mit dem Standardwert Wahr ausgestattet.
Generell lässt sich zu diesen drei Tabellen sagen, dass Sie die Hierarchie beliebig ändern, umbenennen oder erweitern können, wenn sie sich nicht an Ihre eigene Arbeitsweise anpassen lässt.
Es gibt noch zwei weitere Tabellen. Die erste heißt tblOptionen und speichert einige Einstellungen des Hauptberichts, damit der Benutzer diese beim nächsten Aufruf nicht erneut vornehmen muss. Dabei handelt es sich um die aktuell aktive Tätigkeit sowie ein Ja/Nein-Feld namens ErledigteTaetigkeitenAnzeigen, das angibt, ob abgehakte Tätigkeiten angezeigt werden sollen (s. Bild 8).
Bild 9: Protokollierung von Arbeitszeiten
Die Tabelle tblArbeitszeiten schließlich speichert bei der Arbeit mit dem Hauptbericht aufgezeichnete Arbeitszeiten für die einzelnen Tätigkeiten. Dazu sind nur drei Felder nötig: die Startzeit, die Endzeit sowie ein Verweis auf die Tätigkeit, die während des angegebenen Zeitraums durchgeführt wurde (s. Bild 9).
Bild 8: Tabelle zum Speichern von Anwendungsoptionen
Der Bericht rptAufgaben
Der Hauptbericht dieser Anwendung, der in der Berichtsansicht angezeigt wird und zur Steuerung sämtlicher Funktionen der Anwendung dient, zeigt viele Möglichkeiten der Berichtsansicht auf.
Die Datenherkunft beim Öffnen des Berichts sieht wie in Bild 10 aus. Sie enthält fast alle Felder der drei Tabellen tblProjekte, tblAufgaben und tblTaetigkeiten (allein die Fremdschlüsselfelder wurden weggelassen, da deren Werte ja bereits in den Primärschlüsselfeldern der entsprechenden referenzierten Tabellen vorliegen).
Bild 10: Datenherkunft des Berichts rptAufgaben
Dabei wurde für das Feld ProjektSichtbar als Bedingung der Wert True festgelegt, damit nur ausgewählte Projekte angezeigt werden.
Das Besondere an dieser Abfrage ist, dass die Eigenschaften der Beziehungen zwischen den Tabellen so festgelegt wurden, dass Projektdatensätze auch angezeigt werden, wenn es keine passenden Aufgaben-Datensätze gibt. Auf die gleiche Weise sollen Projekte mit Aufgaben angezeigt werden, für die es keine Tätigkeits-Datensätze gibt.
Der Bericht enthält zwei Gruppierungen nach den Feldern ProjektID und AufgabeID, die jeweils mit Gruppenköpfen ausgestattet sind.
Diese legen Sie unter Access 2007 und jünger im Bereich Gruppieren, Sortieren und Summe im Fuß des Access-Fensters fest, den Sie mit dem Ribbon-Eintrag Entwurf|Gruppierung und Summen|Gruppieren und Sortieren einblenden (s. Bild 11).
Bild 11: Anlegen der Gruppierungen im Bericht rptAufgaben
Im ersten Schritt fügen Sie außerdem bereits die Felder ProjektID, Projekt, AufgabeID, Aufgabe, TaetigkeitID und Taetigkeit der Datenherkunft zu den einzelnen Bereichen wie in der Abbildung hinzu.
Die Beschriftungsfelder können Sie gleich wieder löschen und die Primärschlüsselfelder mit dem Wert Nein für die Eigenschaft Sichtbar ausblenden – diese Felder dienen nur als Bedingungen für die Anzeige verschiedener weiterer Elemente. Für eine bessere Optik verschieben Sie die Felder Projekt, Aufgabe und Taetigkeit nun an den oberen Rand der jeweiligen Bereiche, verkleinern die Höhe der Bereiche und rücken die Felder entsprechend der Hierarchie ein wenig ein.
Außerdem versehen Sie die Textfelder mit unterschiedlichen Textgrößen und gestalten diese teilweise in fetter Schrift – etwa so wie in Bild 12.
Bild 12: Anordnen und Layouten der Steuerelemente
Hier nicht sichtbar, für eine bessere Optik aber dennoch sinnvoll: Stellen Sie die Eigenschaft Rahmenart der Textfelder auf Transparent ein und passen Sie die Eigenschaft Alternative Hintergrundfarbe dem Wert für die Eigenschaft Hintergrundfarbe an (der Hintergrund soll durchgängig weiß sein).
Das Ergebnis ist ein bereits ansprechend aussehender Bericht wie in Bild 13.
Bild 13: Bericht noch ohne Steuerelemente
Schaltflächen
Für die Darstellung der Schaltflächen halten einige Tricks her. Erstens einmal enthalten die Gruppierungen und der Detailbereich überhaupt keine Schaltflächen, sondern lediglich Bildsteuerelemente, die beim Anklicken das Beim Klicken-Ereignis auslösen.
Warum das Nun: Die Steuerelemente sollen je nach dem Inhalt des Datensatzes gegebenenfalls ausgeblendet werden und teilweise sogar verschiedene Icons anzeigen. Dies ist mit herkömmlichen Schaltflächen nicht möglich: Diese weisen immer für alle Datensätze die gleichen Eigenschaften auf und es werden immer die zuletzt per VBA zugewiesenen Werte für die Eigenschaften verwendet. Es gibt also keine Möglichkeit, einer Schaltfläche einmal ein Play-Symbol und einmal ein Stopp-Symbol zuzuweisen, wie es etwa zur Markierung der aktuellen Tätigkeit nötig ist.
Seit Access 2007 jedoch bieten Bildsteuerelemente die Möglichkeit, per Steuerelementinhalt ein in einem Anlagefeld befindliches Bild zu referenzieren. Mit Access 2010 wurde dies noch weiter vereinfacht: Sie brauchen nur noch den Namen eines in einer separaten Tabelle namens MSysResources gespeicherten Bildes anzugeben.
Daher sind für Access 2007 und Access 2010 leider verschiedene Techniken zur Anzeige der Bilder nötig, die im Detail im Beitrag Bedingte Schaltflächen (www.access-im-unternehmen.de/824) beschrieben werden. Wir beschreiben im Folgenden die unter Access 2010 durchgeführten Schritte, die Version für Access 2007 finden Sie als Download zu diesem Beitrag.
Schaltflächen anlegen
Grundsätzlich sind die Schaltflächen zum Anlegen, Bearbeiten und Löschen von Projekten, Aufgaben und Tätigkeiten ja für jedes entsprechende Objekt immer eingeblendet. Die übrigen Bilder jedoch sollen in Abhängigkeit von bestimmten Feldinhalten mit verschiedenen Icons bestückt werden:
- Play-Icon für die aktuell bearbeitete Tätigkeit, Stopp für alle anderen
- Kontrollkästchen-Icon mit und ohne Haken für erledigte und nicht erledigte Tätigkeiten
Beginnen wir mit der Schaltfläche zum Anlegen eines neuen Projekts. Diese landet im Prozedurkopf. Wenn Sie mit eigenen Icons arbeiten möchten, fügen Sie dieses nun wie im obigen erwähnten Beitrag beschrieben zur Datenbank hinzu.
Anschließend können Sie das Bild aufgrund seines Namens in der Tabelle MSysResources für die Eigenschaft Bild des Bild-Steuerelements auswählen. Nennen Sie das Bild-Steuerelement picNeuesProjekt, stellen Sie die Eigenschaft Größenanpassung für dieses und alle im Folgenden angelegten Bildsteuerelemente auf Abschneiden ein und nennen Sie das Steuerelement picNeuesProjekt. Danach hinterlegen Sie für die Ereigniseigenschaft Beim Klicken die folgende Ereignisprozedur:
Private Sub picNeuesProjekt_Click() DoCmd.OpenForm "frmProjektdetails", Datamode:=acFormAdd, WindowMode:=acDialog Aktualisieren End Sub
Diese Prozedur öffnet das später beschriebene Formular frmProjektdetails zum Eingeben eines neuen Projektdatensatzes. Anschließend ruft sie die Routine Aktualisieren auf, die so aussieht:
Private Sub Aktualisieren() Me.Requery If IstFormularGeoeffnet("frmProjektauswahl") Then Forms!frmProjektauswahl!lstProjekte.Requery End If End Sub
Dies aktualisiert nach dem Schließen des Formulars zur Eingabe der Projektbezeichnung den Bericht in der Berichtsansicht. Außerdem wird das Listenfeld des Formulars zum Ein- und Ausblenden der Projekte aktualisiert, sofern dieses aktuell geöffnet ist – auch dieses Formular beschreiben wir weiter unten.
Fügen Sie nun auf die oben beschriebene Weise drei Bild-Steuerelemente zum Gruppenkopf ProjektID hinzu und nennen Sie diese picAufgabeAnlegen, picProjektBearbeiten und picProjektLoeschen (s. Bild 14).
Bild 14: Anlegen der drei Bild-Steuerelemente auf Projektebene
Das Bild-Steuerelement picAufgabeAnlegen führt beim Anklicken die folgende Prozedur aus:
Private Sub picAufgabeAnlegen_Click() DoCmd.OpenForm "frmAufgabendetails", Datamode:=acFormAdd, OpenArgs:=Me!ProjektID, WindowMode:=acDialog Aktualisieren End Sub
Dabei wird das Formular frmAufgabendetails zum Anlegen eines neuen Datensatzes der Tabelle tblAufgaben geöffnet. Als zusätzlicher Parameter wird mit OpenArgs die ID des übergeordneten Projekts übergeben. Diese ProjektID wird als Wert des Fremdschlüsselfeldes für den neuen Datensatz der Tabelle tblAufgaben benötigt.
Zum Bearbeiten eines Projekts klickt der Benutzer auf das Bild-Steuerelement picProjektBearbeiten.
Dieses öffnet das bereits zum Anlegen des Projekts verwendete Formular frmProjektdetails und filtert dieses nach der ProjektID des Datensatzes, auf dessen Bild-Steuerelement der Benutzer geklickt hat:
Private Sub picProjektBearbeiten_Click() DoCmd.OpenForm "frmProjektdetails", Datamode:=acFormEdit, WhereCondition:="ProjektID = " _ & Me!ProjektID, WindowMode:=acDialog Aktualisieren End Sub
Das Löschen eines Projekts erfolgt schließlich über die Prozedur aus Listing 1, die durch einen Klick auf das Bild-Steuerelement picProjektLoeschen ausgelöst wird.
Listing 1: Löschen eines Projekts per Klick auf das Bildsteuerelement picProjektLoeschen
Private Sub picProjektLoeschen_Click() Dim db As DAO.Database If MsgBox("Projekt wirklich löschen", vbOKCancel, "Projekt löschen") = vbOK Then Set db = CurrentDb db.Execute "DELETE FROM tblProjekte WHERE ProjektID = " & Me!ProjektID Aktualisieren Set db = Nothing End If End Sub
Diese Prozedur fragt noch kurz nach, ob das Projekt wirklich gelöscht werden soll. Ist dies der Fall, löscht die Prozedur das Projekt und aktualisiert die Steuerelemente durch einen Aufruf der Aktualisieren-Prozedur.
Schaltflächen für die Aufgabe anlegen
Die drei als Schaltflächen missbrauchten Bild-Steuerelemente für die Ebene, die nach dem Feld AufgabeID gruppiert ist, sehen ganz ähnlich aus (s. Bild 15). Allerdings heißen sie picTaetigkeitAnlegen, picAufgabeBearbeiten und picAufgabeLoeschen.
Bild 15: Anlegen der drei Bild-Steuerelemente auf Aufgaben
Das Bildsteuerelement picTaetigkeitAnlegen löst die folgende Prozedur aus:
Private Sub picTaetigkeitAnlegen_Click() If Not IsNull(Me!AufgabeID) Then DoCmd.OpenForm "frmTaetigkeitdetails", Datamode:=acFormAdd, WindowMode:=acDialog, OpenArgs:=Me!AufgabeID Aktualisieren End If End Sub
Diese öffnet das Formular frmTaetigkeitsdetails als modalen Dialog zur Eingabe der Bezeichnung der Tätigkeit. Nach dem Schließen des Formulars aktualisiert die Prozedur Aktualisieren den Bericht. Das Bearbeiten einer Aufgabe wird durch einen Klick auf das Bild-Steuerelement picAufgabeBearbeiten initiiert und verläuft ähnlich wie das Bearbeiten eines Projekts:
Private Sub picAufgabeBearbeiten_Click() If Not IsNull(Me!AufgabeID) Then DoCmd.OpenForm "frmAufgabendetails", Datamode:=acFormEdit, WhereCondition:="AufgabeID = " _ & Me!AufgabeID, WindowMode:=acDialog Aktualisieren End If End Sub
Schließlich sorgt das Anklicken des Bild-Steuerelements picAufgabeLoeschen für das Entfernen einer Aufgabe – natürlich nicht ohne Rückfrage, ob diese auch tatsächlich gelöscht werden soll (siehe Listing 2).
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