Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 5/2002.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Projektmanagement mit Access, Teil 2

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.

Abb. 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.

Datenmodell der
Projektverwaltung

Das Datenmodell besteht im Wesentlichen aus den Tabellen tblProjekte, tblProjektphasen und tblTaetigkeiten. Die Tabellen sind jeweils durch 1:n-Beziehungen miteinander verknüpft (s. Abb. 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.

Verwaltung der Projekte

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 (s. Abb. 2).

Abb. 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
  • Abb. 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.

    Tagesübersicht von Tätigkeiten

    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 von
    Tä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 (s. Abb. 3).

    Abb. 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.

    Abb. 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.

    Abb. 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 Abb. 5 entnehmen. Sie enthält vier Tabellen, von denen allerdings nur zwei die Informationen für das Ergebnis liefern.

    Anlegen der
    Unterformular-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.

    Abb. 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.

    Anlegen des
    Unterformulars
    sfmTagesplan

    Die frisch angelegten Unterformular-Steuerelemente warten nun auf die anzuzeigenden Daten. Das Anzeigen der Daten ist jedoch nicht ohne ein entsprechendes Unterformular möglich.

        If AlleMitarbeiter = True Then

            strM = "tblMitarbeiter"

        Else

            strM = "SELECT DISTINCT MitarbeiterID, Nachname, ArbeitszeitVon, " _

                & "ArbeitszeitBis FROM qryMitarbeiterProjekte WHERE ProjektID = " & _

                AktuellesProjekt

        End If

        Set rstM = db.OpenRecordset(strM, dbOpenDynaset)

        Do While Not rstM.EOF

            MitarbeiterID = rstM!MitarbeiterID

            With Me("sfm" & MitarbeiterID)

                .Form.txtMitarbeiterID = rstM!MitarbeiterID

                .Form.txtMitarbeiter = rstM!Nachname

                .Form("cmdBearbeiten").OnClick = "=TaetigkeitenBearbeiten(" _

                    & rstM!MitarbeiterID & ", """ & Me.txtDatum & """)"

                For i = 1 To 48

                    .Form("lbl" & i).BackColor = 8421504

                Next i

                For i = rstM!ArbeitszeitVon To rstM!ArbeitszeitBis

                    .Form("lbl" & i).BackColor = 16777215

                Next i

                strT = "SELECT * FROM qryTaetigkeiten WHERE MitarbeiterID = " _

                    & MitarbeiterID & " AND Datum = " & ISODatum(Me.txtDatum)

                If Not IsNull(Forms!frmUebersicht!cboProjekte) Then

                    strT = strT & " AND ProjektID = " & Forms!frmUebersicht!cboProjekte

                End If

                Set rstT = db.OpenRecordset(strT, dbOpenDynaset)

                Do While Not rstT.EOF

                    Start = rstT!Start

                    Ende = rstT!Ende

                    For i = Start To Ende - 1

                        .Form("lbl" & i).BackColor = rstT!Farbcode

                        .Form("lbl" & i).ControlTipText = "" & rstT!Taetigkeit

                    Next i

                    rstT.MoveNext

                Loop

            End With

            rstM.MoveNext

        Loop

    End Sub

    Quellcode 4 (Fortsetzung)

    Legen Sie daher ein neues Formular an und speichern es unter dem Namen sfmTagesplan. Das Formular enthält zwei Textfelder zur Anzeige von MitarbeiterID und Mitarbeitername namens txtMitarbeiterID und txtMitarbeiter sowie 48 Textfelder für die Anzeige des Tagesverlaufs.

    Die Namen der Textfelder setzen sich aus den Buchstaben lbl sowie der laufenden Nummer von 1 bis 48 zusammen. Schließlich fehlt noch eine Schaltfläche zum Aufrufen eines Formulars, mit dem der Anwender die Daten bearbeiten kann - sie heißt cmdBearbeiten.

    Abb. 7: Entwurfsansicht des Unterformulars sfmTagesplan

    Nachdem Sie das Unterformular erstellt haben, können Sie das Formular frmTagesplan bereits öffnen und die entsprechende Anzahl Unterformularsteuerelemente automatisch erstellen lassen.

    Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

    Sind Sie Abonnent?Jetzt einloggen ...
     

    Kompletten Artikel lesen?

    Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

    E-Mail:

    © 2003-2015 André Minhorst Alle Rechte vorbehalten.