Projektverwaltung mit Access, Teil 2

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Autor: André Minhorst, Duisburg

!

Das Management von Projekten ist eine recht komplexe Aufgabe – so komplex, dass Sie in der vorliegenden Ausgabe von Access im Unternehmen den zweiten Teil zu der Projektverwaltung aus Ausgabe 2/2002 finden. Die Projektverwaltung erhält eine neue Funktion zur Eingabe und Auswertung der für die einzelnen Projekte aufgewendeten menschlichen Ressourcen – sprich: Welche Mitarbeiter haben eigentlich wie viel Zeit mit welchen Projekten verbracht Diese und weitere Informationen können Sie mit der hier vorgestellten Erweiterung der bestehenden Projektverwaltung übersichtlich in Form geeigneter Berichte ausgeben.

Bild 1: Datenmodell der Projektverwaltung

Der zweite Teil der Projektverwaltung bringt zwei neue Features sowie damit in Zusammenhang stehende änderungen des Datenmodells mit sich.

Hinweis

Den ersten Teil dieser Beitragsreihe finden Sie auf der Heft-CD. Die Beispieldatenbanken mit den neuen Versionen der Projektverwaltung finden Sie ebenfalls auf der Heft-CD unter den Dateinamen Projektverwaltung97.mdb sowie Projektverwaltung2000.mdb.

Bei den zwei neuen Features handelt es sich um die Möglichkeit zur Eingabe von Arbeitszeiten der einzelnen Mitarbeiter sowie die Auswertung der eingegebenen Arbeitszeiten.

Die Eingabe der Arbeitszeiten erfolgt in halbstündigen Intervallen und ist streng projektbezogen. Das ermöglicht die Auswertung der Arbeitszeiten bezogen auf Mitarbeiter und Projekte.

Neben der Ausgabe der Arbeitszeiten je Mitarbeiter und Projekt in Form von Berichten ermöglicht ein spezielles Formular einen Tagesüberblick über die Arbeitszeiten von Mitarbeitern – entweder bezogen auf alle oder nur die an einem ausgewählten Projekt beteiligten Mitarbeiter.

Das Datenmodell besteht im Wesentlichen aus den Tabellen tblProjekte, tblProjektphasen und tblTaetigkeiten. Die Tabellen sind jeweils durch 1:n-Beziehungen miteinander verknüpft (siehe Bild 1).

Ebene der Projekte

Die Tabelle tblProjekte beinhaltet die einzelnen Projekte als oberste Ebene der Hierarchie des Datenmodells. Die Tabelle enthält ein Feld zur Angabe einer Projektbezeichnung sowie zwei Felder mit dem Start- und dem Enddatum des Projektes.

Jedes Projekt ist mit je einem Eintrag der Tabellen tblMitarbeiter und tblKunden verknüpft. Die Verknüpfung zur Tabelle tblMitarbeiter dient der Festlegung des Projektleiters. Mit dem Verweis auf die Tabelle tblKunden legen Sie den Kunden fest, für den Sie das Projekt durchführen.

Ebene der Phasen

Die nächste Ebene unter einem Projekt sind die einzelnen Projektphasen. Die Tabelle tblProjektphasen beinhaltet Informationen zu den Phasen wie die Bezeichnung und den Start- und den Endtermin.

Genau wie die Tabelle tblProjekte enthält auch die Tabelle tblProjektphasen einen Verweis auf die Tabelle tblMitarbeiter, um den für die Projektphase verantwortlichen Mitarbeiter festzulegen. Das Feld ProjektID dient zur Auswahl eines Projektes aus der Tabelle tblProjekte, zu dem die Projektphase gehört.

Hinweis

Bei den Projekten finden Sie eine der änderungen im Datenmodell gegenüber der Projektverwaltung des ersten Teils: Es ist nunmehr nicht mehr möglich, zu den einzelnen Projektphasen Unterphasen anzulegen. Die Anzeige der Projekte wurde entsprechend angepasst.

Speicherung von Tätigkeiten

Die nächste Ebene des Datenmodells bilden die einzelnen Tätigkeiten. Die Informationen zu den Tätigkeiten befinden sich in der Tabelle tblTaetigkeiten. Genau wie die Tabellen tblProjekte und tblProjektphasen hat auch diese Tabelle einen Verweis auf die Tabelle tblMitarbeiter. Er dient allerdings nicht zur Auswahl des Verantwortlichen, sondern des Ausführenden der Tätigkeit.

Weitere Felder dienen zur Angabe der ausgeführten Tätigkeit, des Datums der Tätigkeit sowie des Zeitraums. Die Angabe des Zeitraums erfolgt durch die Auswahl der Start- und der Endzeit aus einer separaten Tabelle namens tblUhrzeiten. Die Tabelle enthält alle Tageszeiten in halbstündigen Abständen.

Kategorisieren der Tätigkeiten

Die einzelnen Tätigkeiten können Sie über eine Verknüpfung zur Tabelle tblTaetigkeitsarten grob kategorisieren. Die Tabelle enthält neben dem Namen der Tätigkeitsart noch einen Farb-code. Das Formular zur Anzeige der Tätigkeiten eines Tages verwendet die Farbangaben zu deren übersichtlicheren Darstellung.

Mitarbeiter und Arbeitszeiten

Die Tabelle tblMitarbeiter ist um zwei Felder erweitert worden: ArbeitszeitVon und ArbeitszeitBis. Diese Informationen benötigen Sie, um im Formular der Tätigkeiten eines Mitarbeiters direkt die Zeiten zu markieren, in denen der Mitarbeiter nicht verfügbar ist.

Da es im Vergleich zu der im ersten Teil des vorliegenden Beitrages beschriebenen Musterlösung nun nicht mehr nur die Projekte und deren Phasen, sondern auch noch die Tätigkeiten der Mitarbeiter eines Tages und einige Berichte zur Anzeige von Informationen gibt, benötigen Sie ein Hauptformular zur Auswahl der gewünschten Darstellungsart (siehe Bild 2).

Bild 2: Hauptmenü der Projektverwaltung

Das Hauptmenü bietet vier Optionen. Die unterschiedlichen Optionen führen zu folgenden Ansichten:

  • Alle Projekte: zeigt eine Auflistung der wichtigsten Projektdaten aller Projekte an und dient zur Auswahl, Neuanlage und Bearbeitung von Projekten
  • Tagesansicht: enthält einen überblick über alle an dem angegebenen Tag durchgeführten Tätigkeiten aller oder der an dem ausgewählten Projekt beteiligten Mitarbeiter
  • Projektdaten: enthält das bereits im ersten Teil des vorliegenden Beitrags beschriebene Formular zur Darstellung eines Projektes und seiner Detaildaten
  • Auswertungen: zeigt eine projekt- oder mitarbeiterbezogene Auswertung der Tätigkeiten in dem gewählten Zeitraum an
  • Bild 3: Anzeige der Tätigkeiten eines Tages

    Da die Aufrufe teilweise eng mit den Funktionen verknüpft sind, folgt deren Beschreibung mit den jeweiligen Funktionen.

    Die Verwaltung von Projekten ist nicht zuletzt die Kunst, mit minimaler Mitarbeiteranzahl eine große Menge Projekte in möglichst kurzer Zeit abzuarbeiten – und dabei nicht den überblick zu verlieren. Daher ist es nicht nur sinnvoll, nach der Durchführung eines Projektes einen Rückblick auf die eingesetzten Ressourcen zu werfen, sondern auch während der Projekte genau zu wissen, welcher Mitarbeiter wann an welchem Projekt arbeitet.

    Formular zur Anzeige vonTätigkeiten

    Zu diesem Zweck erstellen Sie nun ein Formular, mit dem Sie für jeweils einen Kalendertag alle Mitarbeiter und deren Tätigkeiten anzeigen können.

    Das Formular hat einen ähnlichen Aufbau wie das Formular zur Anzeige von Projekten aus dem ersten Teil der Beitragsserie.

    Im Kopf des Formular legen Sie vier Steuerelemente an – zwei Textfelder und zwei Schaltflächen.

    Das erste Textfeld namens txtDatum zeigt das Datum des Tages an, für den die Tätigkeiten aufgelistet werden sollen.

    Das zweite Textfeld namens txtProjekt zeigt an, ob die Mitarbeiter zu einem bestimmten Projekt oder alle Mitarbeiter angezeigt werden.

    Die beiden Schaltflächen cmdTagZurueck und cmdTagVor dienen zum Vor- und Zurückblättern des angezeigten Datums.

    Das Formular enthält jeweils eine Zeile in Form eines Unterformulars für jeden Mitarbeiter. Jede Zeile enthält den Namen des Mitarbeiters, je ein Kästchen für jede halbe Stunde des Kalendertages sowie eine Schaltfläche zum öffnen des Formulars zur Anzeige der Tätigkeiten des Mitarbeiters (siehe Bild 3).

    Bild 4: Aufruf der Tagesansicht über das Formular frmUebersicht

    Die dunklen Felder zeigen Zeiten an, dass der Mitarbeiter nicht zur Verfügung steht – entweder weil sie nicht in seiner Arbeitszeit liegen oder weil er einen als außer Dienst bezeichneten Tätigkeitszeitraum festgelegt hat.

    Die weißen Felder zeigen Zeiten ohne Zuordnung irgendeiner Tätigkeit an. Sämtliche anders eingefärbten Felder entsprechen den in der Legende angegebenen Tätigkeitsarten.

    Aufbau des Formulars

    ähnlich wie das Formular zur Anzeige ganzer Projekte verwendet auch dieses Formular eine Reihe von Unterformularen, um die Daten für die einzelnen Mitarbeiter anzuzeigen.

    Hinweis

    Zur Erinnerung: Unter Access 97 ist es gar nicht und unter Access 2000 nur eingeschränkt möglich, Daten in Endlosformularen unterschiedlich zu formatieren. Daher verwenden Sie Unterformulare zur Anzeige der mit unterschiedlichen Farben markierten Zeiträume.

    Im ersten Teil der Beitragsreihe verwendeten Sie eine feste Anzahl von Unterformularen, um die unterschiedlichen Projektphasen anzuzeigen. Das hatte zwei Nachteile: Wenn die tatsächliche Anzahl von Datensätzen kleiner als die Anzahl der angezeigten Unterformulare war, verschenkten Sie unnötig Platz. War die tatsächliche Anzahl größer, konnten nur die ersten n Phasen angezeigt werden.

    Das Formular zur Anzeige der Tätigkeiten der einzelnen Mitarbeiter soll dieses Problem umgehen. Dazu wird die benötigte Anzahl von Unterformularen vor dem öffnen des Formulars ermittelt. Anschließend erstellt eine Prozedur dynamisch die benötigte Anzahl Unterformulare – also für jeden beteiligten Mitarbeiter eines.

    Aufruf des Formulars

    Das Hinzufügen von Steuerelementen zur Laufzeit erfordert das öffnen des gewünschten Objektes – in diesem Fall eines Formulars – in der Entwurfsansicht. In der Formularansicht ist kein Hinzufügen oder Entfernen von Elementen des Formulars möglich.

    Da die Ereignisse eines Formulars nur zur Laufzeit des Formulars ausgelöst werden können, kann die Erstellung der benötigten Steuerelemente nicht durch die Ereignisse des Formulars selbst erfolgen.

    Die Erstellung der benötigten Unterformulare erfolgt im aufrufenden Formular frmUebersicht.

    Bild 4 zeigt den Bereich des Formulars frmUebersicht in der Entwurfsansicht, mit dem Sie nach der Auswahl der gewünschten Parameter die Tagesübersicht aufrufen können.

    Mit der Optionsgruppe optgrpMitarbeiter legen Sie fest, ob alle Mitarbeiter oder nur die an einem bestimmten Projekt beteiligten Mitarbeiter angezeigt werden sollen. Dabei legen Sie mit dem Kombinationsfeld cboProjekt das gewünschte Projekt fest.

    Mit der Schaltfläche cmdTagesansicht starten Sie das Ereignis zum Anpassen des Formulars zur Anzeige der Tätigkeiten. Dazu legen Sie die Prozedur aus Quellcode 1 für die Ereigniseigenschaft Beim Klicken der Schaltfläche an.

    Die Prozedur ermittelt, ob Sie die Tätigkeiten aller oder nur die der an dem ausgewählten Projekt beteiligten Mitarbeiter ausgeben möchten. Wenn Sie alle Mitarbeiter in die Anzeige einbeziehen möchten, setzt die Prozedur die globale Variable AlleMitarbeiter auf den Wert True. Falls nicht, erhält die Variable den Wert False. Außerdem erhält die Variable AktuellesProjekt die ID des ausgewählten Projektes.

    Die globalen Variablen legen Sie bitte in einen neuen Klassenmodul namens mdlGlobal an.

    Die Prozedur TagesansichtAktualisieren (s. Quellcode 2) legen Sie in einem neuen Standardmodul namens mdlTagesansicht an. Der Grund liegt darin, dass Sie die Prozedur zur Anzeige der Tagesübersichten später noch von weiteren Formularen aus aufrufen.

    Die Prozedur fragt nach dem Deklarationsteil zunächst die soeben gesetzten globalen Variablen ab. Wenn der Anwender die Anzeige der Tätigkeiten aller Mitarbeiter gewählt hat, dient die komplette Tabelle tblMitarbeiter als Grundlage für die zu erstellenden Unterformulare.

    Bild 5: Entwurfsansicht der Abfrage zur Ermittlung von Mitarbeitern und deren Projekten

    Private Sub cmdTagesansicht_Click()
        Dim ProjektID As Integer
        If Me.optgrpMitarbeiter = 1 Then
            AlleMitarbeiter = True
            TagesansichtAktualisieren
        Else
            AlleMitarbeiter = False
            If Not IsNull(Me.cboProjekte) Then
                AktuellesProjekt = Me.cboProjekte
                TagesansichtAktualisieren
            Else
                MsgBox "Projekt auswählen!", _
                vbOKOnly + vbExclamation, _
                "Projektverwaltung"
            End If
        End If
    End Sub

    Quellcode 1

    Falls das Formular nur die Tätigkeiten von Mitarbeitern anzeigen soll, die an einem bestimmten Projekt beteiligt sind, muss es diese zunächst ermitteln.

    Public Sub TagesansichtAktualisieren()
        Dim objFormular As Form
        Dim i As Integer
        Dim strSQL As String
        Dim objUnterformular As Control
        Dim db As Database
        Dim rst As Recordset
        If AlleMitarbeiter = True Then
            strSQL = "tblMitarbeiter"
        Else
            If IsNull(AktuellesProjekt) Then
                MsgBox "Kein Projekt ausgewählt!", _
                    vbExclamation + vbOKOnly
                Exit Sub
            End If
            strSQL = "SELECT DISTINCT MitarbeiterID FROM " _
                & "qryMitarbeiterProjekte"
            If Not IsNull(AktuellesProjekt) Then
                strSQL = strSQL & " WHERE ProjektID = " & _
                AktuellesProjekt & " GROUP BY MitarbeiterID"
            End If
        End If
        DoCmd.OpenForm "frmTagesplan", acDesign
        Set objFormular = Forms!frmTagesplan
        For i = objFormular.Controls.Count - 1 To 0 Step -1
            If Left(objFormular.Controls.Item(i).Name, 3) _
                = "sfm" Then
                DeleteControl objFormular.Name, _
                    objFormular.Controls.Item(i).Name
            End If
        Next i
        Set db = CurrentDb
        Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)
        i = 1
        Do While Not rst.EOF
            Set objUnterformular = _
            CreateControl(objFormular.Name, acSubform, _
            acDetail, , , 0, (i - 1) * 300, 12000, 300)
            With objUnterformular
                .SourceObject = "sfmTagesplan"
                .SpecialEffect = 0
                .BorderStyle = 0
                .Name = "sfm" & rst!MitarbeiterID
            End With
            i = i + 1
            rst.MoveNext
        Loop
        DoCmd.RunCommand acCmdSave
        DoCmd.OpenForm "frmTagesplan", acNormal
    End Sub

    Quellcode 2

    Dazu dient eine Abfrage, die alle Mitarbeiter und deren Projekte ermittelt. Aus dem Ergebnis diese Abfrage wiederum filtert die Prozedur alle Datensätze heraus, die zu dem angegebenen Projekt gehören.

    Das Aussehen der Abfrage können Sie Bild 5 entnehmen. Sie enthält vier Tabellen, von denen allerdings nur zwei die Informationen für das Ergebnis liefern.

    Anlegen derUnterformular-Steuerelemente

    Im Anschluss an die Ermittlung der betroffenen Mitarbeiter wird es interessant: Die Prozedur öffnet das Formular frmTagesplan in der Entwurfsansicht.

    In der anschließenden For Next-Schleife entfernt die Prozedur zunächst alle zuvor verwendeten Unterformular-Steuerelemente. Dabei durchläuft die Prozedur alle Steuerelemente dem Index nach. Dieser Durchlauf muss rückwärts erfolgen, da ein Entfernen von Steuerelementen immer eine neue Indexierung der anderen Steuerelemente zur Folge hat. Die Anweisungen innerhalb der Schleife überprüfen, ob der Name des Steuerelementes mit sfm beginnt, und entfernen es dann gegebenenfalls.

    Nachdem alle Unterformulare entfernt sind, können die neuen Unterformulare erstellt werden. Dabei durchläuft die Prozedur in einer Do While-Schleife alle Datensätze der ermittelten Datensatzgruppe der Mitarbeiter.

    Private Sub Form_Current()
        If IsNull(Forms!frmUebersicht!cboProjekte) Then
            Me.txtProjekt = "Alle Projekte"
        Else
            AktuellesProjekt = _
                Forms!frmUebersicht!cboProjekte
            Me.txtProjekt = _
                Forms!frmUebersicht!cboProjekte.Column(1)
        End If
        If TagTaetigkeit = "30.12.1899" Then
            Me.txtDatum = Date
        Else
            Me.txtDatum = TagTaetigkeit
        End If
        TagesplanAktualisieren
    End Sub

    Quellcode 3

    Sub TagesplanAktualisieren()
        Dim ctl As Control
        Dim db As Database
        Dim rstM, rstT As Recordset
        Dim Start, Ende, i, MitarbeiterID As Integer
        Dim Datum As Date
        Dim strM, strT As String
        Set db = CurrentDb

    Quellcode 4 (erster Teil)

    Mit der CreateControl-Funktion erstellt die Prozedur die neuen Unterformulare und vergrößert den Wert der vertikalen Position der Formulare jeweils so, dass alle Unterformulare genau untereinander positioniert werden.

    Bild 6: Entwurfsansicht der Abfrage qryTaetigkeiten

    Anschließend werden einige Eigenschaften festgelegt: Das Formular sfmTagesplan wird zum Herkunftsobjekt des neuen Unterformular-Steuerelements, die Eigenschaft Spezialeffekt wird auf Flach und die Eigenschaft Rahmenart auf den Wert Keine eingestellt. Außerdem erhält das Unterformular-Steuerelement einen Namen, der sich aus der Zeichenfolge frm und der Mit-arbeiterID zusammensetzt. Schließlich wird das Formular in der Formularansicht geöffnet.

    Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

    Testzugang

    eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

    diesen und alle anderen Artikel mit dem Jahresabo

    Schreibe einen Kommentar