Ressourcenplanung mit Vertec in Versionen vor 6.6
Product line
Standard
|Expert
Operating mode
CLOUD ABO
|ON-PREMISES
Modules
Services & CRM
Budget & Phases
Purchases
Resource Planning
Business Intelligence
Dieser Artikel gilt nur für Vertec Versionen vor 6.6. Alle Informationen zur neuen Ressourcenplanung finden Sie im Artikel Ressourcenplanung .
Das Modul Ressourcen & Projektplanung erlaubt die projektorientierte Planung Ihrer Mitarbeiter-Ressourcen und natürlich den Vergleich mit den effektiv erfassten Leistungen.
Die Planung erfolgt tage-, wochen- oder monatsweise pro Mitarbeiter und Projekt bzw. Projektphase. Dank den Sollzeiteinstellungen ist die verfügbare Arbeitszeit von Mitarbeitern pro Planungsintervall genau ersichtlich und kann in die Planung miteinbezogen werden.
Die Erfassung von Ressourcenplanungsdaten erfolgt in der Ressourcenplanungsliste auf einem Mitarbeiter, einem Projekt oder einer Projektphase. Bei den Ressourcenplanungslisten handelt es sich um die gewohnten Vertec Listenansichten mit den Möglichkeiten zur Spaltenkonfiguration und direktem Export in Excel.
Das Planungsintervall (Monat, Woche oder Tag) kann in jeder Ansicht jederzeit dynamisch geändert werden.
Die Ressourcenplanung verfügt über eine Master-Detailansicht. Bei der Selektierung einer Projektzeile (bzw. Phasen- oder Bearbeiterzeile) im oberen Bereich wird unten eine Tabelle angezeigt mit allen für dieses Projekt (bzw. für diese Phase oder diesen Mitarbeitenden) geplanten Ressourcen. Gesteuert wird diese Ansicht über die Systemeinstellung Ressourcenplan für Detailzeile anzeigen.
Auf jeder Liste kann ein Stichdatum angegeben werden. Damit kann dynamisch eine Abgrenzung der Vergangenheit erreicht werden. Dieses Datum bewirkt folgendes:
Dies ermöglicht nun einen Vergleich zwischen den geplanten und tatsächlich geleisteten Stunden.
Eine manuelle Umstellung des Stichdatums ist temporär für die aktuelle Liste gültig. Der Standard berechnet sich wie folgt:
Für den April und den Mai wurden je 50 Stunden geplant. Nun wurden im April aber bereits 70 Stunden geleistet. Bisher sah man das nicht, das heisst, es wurden weiterhin 50 Stunden für den Mai geplant, dabei würde es nur noch 30 Stunden brauchen.
Um das zu korrigieren, kann man nun den Stichtag setzen, in unserem Beispiel auf den 1. Mai. So sieht man, dass 70 Stunden geleistet wurden und noch 50 Stunden geplant sind.
Wenn man das mit dem Budget vergleicht (im Beispiel auf dem entsprechenden Projekt), dann sieht man, dass dieses nur 100 Stunden beträgt, also kann man den Planwert für den Mai manuell auf 30 Stunden verringern.
Hier sieht man auch schön, wie sich der Fertigstellungsgrad (PoC) verändert. Vor der Korrektur (bzw. vor Einführung eines Stichdatums) war man der Meinung, es wären erst 58 Prozent geleistet, tatsächlich sind es aber bereits 70 Prozent.
Das Planungsintervall (Monat, Woche oder Tag) kann in jeder Ansicht jederzeit dynamisch geändert werden. Auf Detailebene werden nur dann Werte gespeichert, wenn diese durch den Benutzer dort eingegeben wurden. Die restlichen Werte der Detailebene werden dynamisch berechnet von der nächsthöheren Ebene, falls vorhanden.
Für eine einzelne dargestellte Periode (ein Tag, eine Woche, ein Monat) gibt es folgende Möglichkeiten:
Wird auf einer Periode ein Wert gesetzt, und es sind Plandaten vorhanden auf darunter liegenden Perioden, so werden diese ohne weitere Abfrage gelöscht.
Am Monatsende kann es bei Wochen und Monaten Überschneidungen geben. Wenn ein Monat gesetzt wird und bereits Plandaten für die überschneidende Woche vorhanden sind, werden die Tage der Woche, die den anderen Monat betreffen, in Tages-Plandaten umgewandelt.
Sobald ein Wert von einer darüber liegenden Periode auf darunter liegende Perioden verteilt werden muss, wird immer über die einzelnen Tage gerechnet. Dabei muss die Summe der einzelnen Tage in der Periode wieder dem Wert auf der darüber liegenden Periode (Woche oder Monat) entsprechen. Jeder einzelne Tag in der Periode erhält denjenigen Anteil am eingegeben Wert, der seinem Anteil an der verfügbaren Ressourcenzeit (Sollzeit minus Kompensation) entspricht.
Ausnahme: wenn für das gesamte Intervall, auf dem der Wert eingetragen wurde, die Ressourcenzeit 0 ist (z.B. Ferien), dann wird die Skalierung linear auf Anzahl Tage vorgenommen (weil sonst der geplante Wert verloren wäre).
Plandaten können entweder für Projekte oder für Phasen erfasst werden. In den Systemeinstellungen > Ressourcenplanung kann hinterlegt werden, ob standardmässig auf Projekten oder auf Phasen geplant wird. Die entsprechende Systemeinstellung lautet Planungsebene für neue Projekte. Auf dem einzelnen Projekt kann dieser Wert noch übersteuert werden.
Die Linktypen Phase - Ressourcen sowie Bearbeiter - Ressourcenplanung Phase müssen aktiv sein, um die Ressourcenplanung auf Phasen verwenden zu können.
Die Liste der Phasen wird aufgrund der dem Bearbeiter zugeordneten Projekte bestimmt (bearbProjekte). Es werden nur Phasen von Projekten aufgelistet, auf denen der Bearbeiter erfassen darf. Es wird nur die erste Ebene von Phasen (direkte Phasen des Projekts, keine Subphasen) unterstützt.
Die Darstellung der Phasenliste erfolgt gruppiert nach Projekten, mit jeweils einer Projektzeile oberhalb der Phasenzeilen.
Neue Zeilen können über rechte Maustaste > Zeile hinzufügen erzeugt werden. Es erscheint der Projekt-Auswahldialog mit allen Projekten, welche Phasen haben. Das Hinzufügen einer neuen Zeile ordnet das Projekt dem Bearbeiter zu (gleich wie in der Projekt-Ressourcenliste).
Planwerte können nicht nur von Hand in der Liste, sondern auch über den Dialog Ressourcenplanwerte setzen erfasst werden. Klicken Sie mit der rechten Maustaste in die entsprechende Zeile und wählen Sie Planwerte setzen...
Mitarbeiter und Projekt (bzw. Projektphase) berechnen sich automatisch aus der entsprechenden Ressourcen-Liste. Die Zeitperiode und das Planungsintervall übernehmen die Werte der aktuellen Liste, können jedoch noch angepasst werden.
Hier können Sie die verfügbare Zeit des Mitarbeiters linear auf die Zeitperiode verteilen. Als verfügbare Zeit gilt die Restverfügbarkeit, also alle noch nicht verplante Zeit des Mitarbeiters. Bei 100% wird die gesamte verfügbare Zeit eingesetzt, sonst der entsprechende Anteil.
Mit dieser Option können Sie pro Planungsintervall den entsprechenden prozentualen Anteil an der Gruppen-Sollzeit (100% Sollzeit) als Ressourcenzeit einsetzen.
Hier kann manuell ein Wert angegeben werden, der eingetragen wird. Der Wert muss bezogen auf das Planungsintervall angegeben werden, also jeweils pro Tag, Woche oder Monat. Es wird der fixe Wert eingetragen, unabhängig davon, wieviel Sollzeit vorhanden ist. Das kann zu Überbuchungen führen, was bei Sondereinsätzen wie z.B. Wochenenden gewollt sein kann. Ausserdem sind Überbuchungen ein wichtiger Nutzen einer Ressourcenplanung - die Überbuchungen zeigen Engpässe an, die in einem Management-Prozess aufgelöst werden müssen.
Sie können mit diesem Dialog auch Plandaten entfernen, indem Sie im Feld Wert einsetzen einen leeren Wert setzen (Wert aus dem Feld löschen, nicht 0 eingeben).
Dies kann nur auf der Ebene geschehen, auf der die Werte gesetzt wurden (also dort, wo die Werte in grüner Schrift dargestellt werden).
Werden Ferien als Abwesenheit erfasst, wird dies in der Ressoucenplanung bei der Berechnung der verfügbaren Zeit der Bearbeiter berücksichtigt.
Werden Ferien als Leistung erfasst (mit korrekt hinterlegter Ferientätigkeit etc.), wird dies in der Ressoucenplanung bei der verfügbaren Zeit der Bearbeiter nicht berücksichtigt.
Möchte man Ferien nicht als Abwesenheiten eingeben, die Ferien aber trotzdem in der Ressourcenplanung sehen, dann muss man die Ferien-Zeit in der Ressourcenplanung planen wie die anderen Leistungen. Der Grund ist, dass Abwesenheiten PLAN und IST sind, während Leistungen immer nur IST sind.
Ab Vertec 5.8 gibt es eine Script-Methode namens setresourceplanvalue zum Setzen von Ressourcenplanungswerten per Script. Diese Methode setzt einen Planwert für eine Zelle in der Ressourcenplanung.
vtcapp.setresourceplanvalue(bearbeiter, projekt, phase, date, intervalType, value)
IVtcSession.SetResourcePlanValue(bearbeiter, projekt, phase, date, intervalTyp, value)
date | Das Datum sollte dem Anfangsdatum eines Intervalls des gewählten Typs entsprechen. Sicherheitshalber wird das Datum von der Methode automatisch nach unten auf die nächstliegende Intervall-grenze korrigiert. |
intervalType | Art des Planungsintervalls: 0: Tag |
value | Planwert in Minuten. Zum Entfernen eines Wertes kann ein Wert übergeben werden, der logisch "False" ist, also 0, ein Leerstring"", oder None. |
Es werden dieselben Berechtigungsprüfungen gemacht wie beim Schreiben in der Ressourcentabelle:
Lässt sich global übersteuern durch die Berechtigung auf Resourcespalte.planminuten.
Expression-basierte Berechtigungen, welche auf die Zuordnung der Ressourcenspalte zugreifen, funktionieren nicht, da keine Ressourcenspalte vorhanden ist.
In Abhängigkeit der Einstellung auf Projekt kann nur entweder auf Projekt oder auf Phasen geplant werden.
Die Master-Listen der Ressourcenplanung (oben) können über die Listeneinstellungen angepasst werden.
In den Einstellungen sind die fixen Spalten am Anfang sowie die Intervallspalten für das erste Intervall dargestellt (im Beispiel das Geplant und das Eff zuunterst in der Liste).
Die fixen Spalten am Anfang repräsentieren die einzelnen Detail-Zeilen und sind vom Typ ResourceZeile. Sie enthalten folgende Werte:
Expression | Wert | Renderer |
---|---|---|
planMinuten | Total geplanter Wert | dbmTIM.MinuteRenderer |
istMinuten | Total geleisteter Wert | dbmTIM.MinuteRenderer |
detailObj | Zugriff auf das entsprechende Objekt, für das die Zeile angezeigt wird (Projekt, Phase, Bearbeiter). Es handelt sich um eine ObjectReference, muss also auf eine bestimmte Klasse gecastet werden, bsp: | rndResourceList |
| if detailObj->oclIsTypeOf(Projektphase) then detailObj->oclAsType(Projektphase). |
Die Intervallspalten werden automatisch für die der Periode entsprechenden Anzahl Intervalle dupliziert. Den Intervall-Spalten mit den Planwerten pro Planungsintervall liegt die Expression spalten->at(1) zugrunde. Damit bekommt man Zugriff auf die einzelnen Spalten vom Typ ResourceSpalte. Diese enthalten folgende Werte:
Expression | Wert | Renderer |
---|---|---|
planMinuten | Planwert in der angezeigten Periode | rndPlanMinuten |
restMinuten | Verfügbare Zeit, entspricht rsrcMinuten - planMinutenTotal | rndMinuten |
effMinuten | Geleisteter Wert in der angezeigten Periode | rndMinuten |
effMinutenExt | Geleistete MinutenExt | rndMinuten |
effWertExt | Geleisteter WertExt |
|
effWertKosten | Geleisteter WertKosten |
|
rsrcMinuten | Verfügbare Ressourcenzeit | rndMinuten |
planMinutenTotal | Alle geplanten Minuten für | rndPlanMinuten |
planMinutenBearbeiter | Alle geplanten Minuten für den Bearbeiter und Intervall. Sinnvoll, wenn der ParentEintrag des Containers ein Bearbeiter ist. Andernfalls entspricht dieser Wert planMinutenTotal. | rndPlanMinuten |
Möchte man in den Listen Tage mit Ressourcenzeit = 0, also Wochenenden und Ferien, für die bessere Übersichtlichkeit grau hinterlegen, kann das mit folgender Color-Expression auf der Intervallspalte Verfügbar geschehen:
if spalten->at(1).rsrcMinuten=0 then 'clLightGray' else 'clLightPurple' endif
Bei Ressourcenlisten auf Mitarbeitern (welche als Detailzeilen Projekt oder Phasen anzeigen), ist die verfügbare Ressourcenzeit (rsrcMinuten) in jeder Zeile die gleiche. Damit dieser Wert nicht für jede Zeile erneut berechnet wird, kann in diesen Spalten der Renderer rndMinuten verwendet werden.
Der rndPlanMinuten Renderer, welcher für Planwerte eingesetzt wird, macht dasselbe mit der Color-Expression.
Bei den standardmässig vorhandenen entsprechenden Spalten sind die Color-Expression und der Renderer bereits so gesetzt. Bei neuen Listeneinstellungen müssen Sie die Farbexpression sowie den Renderer manuell setzen, falls Sie die Tage mit Ressourcenzeit = 0 grau hinterlegen möchten.
Es gibt eine Reihe von OCL Operatoren für Abfragen von Ressourcenplanungsdaten mit Vertec Versionen vor 6.6.
Für Vertec Versionen ab 6.6 konsultieren Sie stattdessen den Artikel OCL, Python, Custom Renderer und List Controller rund um die Ressourcenplanung .
.getResPlanMinuten(von, bis) |
Gibt die verplante Zeit für den Bearbeiter für die angegebene Periode (von, bis Datum) in Minuten zurück. |
.getResRsrcMinuten(von, bis) |
Gibt die Ressourcenzeit für den Bearbeiter für die angegebene Periode (von, bis Datum) in Minuten zurück. Das ist nicht die noch verfügbare Zeit, sondern die gesamte Ressourcenplan-relevante Sollzeit. Der Unterschied zur Sollzeit ist, dass nur Abwesenheiten vom Typ "Frei" die Sollzeit beeinflussen, von der Ressourcenzeit hingegen werden alle Arten von Abwesenheiten (Frei, Ferien, Kompensation) abgezogen (siehe dazu auch die Tabelle über die Arbeitszeit-Ausnahmen im Artikel Abwesenheiten ). Ab der Vertec Version 5.7 werden zusätzlich auch die als Ferien erfassten Leistungen abgezogen. |
getResLinksB(von, bis)
|
Die Operatoren getResLinksB , getResLinksP und getResLinksPh operieren auf Projektbearbeiter , Projekt bzw. Projektphase . Die Operatoren können auf einzelne Objekte oder auf Listen angewendet werden. Die Operatoren unterstützen 2 Argumente zur Angabe des gewünschten Datumsintervalls. Die Datumsargumente werden als Strings übergeben, damit ist auch ein leeres Datum für Anfang oder Ende des Intervalls möglich. Ergebnis der getResLinks Operatoren ist jeweils eine Liste von Resourcelink Objekten. |
sumResPlanMinuten(von, bis) |
Der Operator sumResPlanMinuten operiert auf einer Liste von Ressourcelinks und liefert die Summe der Ressourcenplan-Daten für die Liste und das angegebene Intervall. |
Die Abfrage von Ressourcenplanungsdaten via OCL wird in 2 Schritten vorgenommen:
Die Operatoren getResLinksB, getResLinksP und getResLinksPh operieren auf Projektbearbeiter, Projekt bzw. Projektphase. Die Operatoren können auf einzelne Objekte oder auf Listen angewendet werden.
Die Operatoren unterstützen 2 Argumente zur Angabe des gewünschten Datumsintervalls. Die Datumsargumente werden als Strings übergeben, damit ist auch ein leeres Datum für Anfang oder Ende des Intervalls möglich.
Ergebnis der getResLinks Operatoren ist jeweils eine Liste von Resourcelink Objekten.
Der Operator sumResPlanMinuten operiert auf einer Liste von Resourcelinks und liefert die Summe der Ressourcenplanungsdaten für die Liste und das angegebene Intervall.
Die Aufteilung der Ressourcenplanungsabfrage auf 2 Operatoren ermöglicht sehr flexible Abfragen, da die Selektion der gewünschten Resourcelink Objekte von der eigentlichen Summierung getrennt ist. Die eigentliche Schwierigkeit bei Abfragen von Resourcenplanungsdaten ist die Summierung von Resourcelinks. Dabei müssen die unterschiedlichen Intervall-Typen (Tag, Woche, Monat) korrekt berücksichtigt werden.
Abfrage von Resourcenplanungsdaten für Bearbeiter und Periode:
bearb->getResLinksB('01.05.12','31.05.12')->sumResPlanMinuten('01.05.12','31.05.12')
Ressourcenplanungsdaten für Bearbeiter und Periode nur für ein bestimmtes Projekt:
bearb->getResLinksB('01.05.12','31.05.12')->select(projekt.code='ABC')->sumResPlanMinuten('01.05.12','31.05.12')
Etwas umständlich wirkt, dass bei beiden Operatoren (getResLinks, sumResPlanMinuten) das Datumsintervall angegeben werden muss. Das ist aber notwendig, denn die Selektion von Resourcelinks mit getResLinks liefert unter Umständen zu viele Resourcelinks, da zum Beispiel bei Intervall-Typen von Woche oder Monat auch Resourcelinks berücksichtigt werden müssen, deren Datum vor dem Von-Datum liegt. Die endgültige Datums-Selektion erfolgt erst während der Summierung mit dem sumResPlanMinuten Operator.
Standardmässig sind die Berechtigungen wie folgt vergeben: Der Bearbeiter kann seine eigenen Einträge ändern, der Projektleiter zusätzlich die auf seinen Projekten. Alle Benutzer können alle Einträge lesen.
Sollen die Berechtigungen anders definiert werden, muss das wie folgt geschehen: Grundsätzlich sind die Berechtigungen alle auf der Klasse ResourceSpalte zu setzen. Diese entsprechen den Spalten, wie sie in der Ressourcenansicht dargestellt sind. Von dort aus kommt man via zeile auf die Zeilen der Ressourcenplanung. Von dort aus kommt man via detailObj auf das Objekte, welches aktuell in dieser Zeile dargestellt wird, und via rescontainer auf den Container und von dort via parentEintrag auf das Root-Objekt im Baum (welches die Ressourcenplanung darstellt).
Als Beispiel sollen die Mitarbeitenden keine eigenen Werte erfassen können:
if zeile.rescontainer.parentEintrag.oclIsTypeOf(Projekt) then zeile.rescontainer.parentEintrag.oclAsType(Projekt).projektleiter=varLogin else if zeile.rescontainer.parentEintrag.oclIsTypeOf(Projektphase) then zeile.rescontainer.parentEintrag.oclAsType(Projektphase).projekt.projektleiter=varLogin else if zeile.detailobj.oclIsTypeOf(Projekt) then zeile.detailobj.oclAsType(Projekt).projektleiter=varLogin else if zeile.detailobj.oclIsTypeOf(Projektphase) then zeile.detailobj.oclAsType(Projektphase).projekt.projektleiter=varLogin else 1=0 endif endif endif endif
Anhand dieses Beispiels sieht man, dass die Berechtigung in jeder Ansicht gesetzt werden muss (kann), da sie sich auf die Ressourcespalten beziehen.