Temat: Obciążenie zasobów - godziny pracy w przedziale czasu
Izabela Korzińska:
Kamil Kozieł:
Cóż, czasem 1% może mieć większe znaczenie niż 99% ;)
1. Jak wspomniałem poprzednio potrzebujesz dwóch kolumn z datami.
2. W kolumnie typu numer wstawiasz formułę:
(ProjDateDiff([Data1];[Data2];[Kalendarz bazowy])/480)*([Praca]/480/(projdatediff([Rozpoczęcie];[Zakończenie];[Kalendarz bazowy])/480))
Najważeniejsze, to przy jej tworzeniu pamiętać o żelaznaj zasadzie w Projekcie: Praca = Czas trwania x Jednostki
To rozwiązanie pozwala obliczyć pracę zasobu między dwiema datami. Bardzo podbne w Wykresie Gantta lub dowolnym innym tabelarycznym widoku zadaniowym można utworzyć dla całego zadania.
Kamil,
Zrób to samo dla zasobu, pracującego przez 2 tygodnie od 8 do 19 września tyle godzin dziennie:
Dzień: 8, 9, 10, 11, 12, 15, 16, 17, 18, 19
Praca(w godz.): 8, 8, 0, 0, 4, 0, 0, 8, 8, 4
Data1 := 2008-09-11
Data2 := 2008-09-16
Jeśli Ci wyjdzie w wyniku pół dnia pracy, to wygrałeś :) Dla pewności - nie ustalaj dni wolnych w kalendarzu bazowym innych, niż standardowe :)
Moim zdaniem to ładne równianie działa, kiedy nie ma przerwy w pracy. Ale jak już wspominałam - nie mam przed sobą Projecta.
pozdr
Iza
Iza,
Przypuszczam, że Autor posta, zadając to pytanie, raczej chciał wiedzieć jak to zrobić, a nie jak tego nie robić i słyszeć, że mam przed sobą projecta...
Moje rozwiązanie działa jeżeli:
- Zadanie nie jest przerwane
lub
- Dostosujemy odpowiedni kalendarz, co nie jest specjalnie trudne.
Jeżeli potrzebujemy uniwersalnego rozwiązania to faktycznie potrzeby będzie VBA, a konkretnie jedno z następujących makr:
Zakres wrzucony do pola czas trwania:
Sub PracaPrzedzialtemp()
Dim z As Resource
Dim Przedzial As TimeScaleValues, Ile As Long
Dim Praca As Double
Dim SumPraca As Double
Dim Rozp As Date
Dim Zak As Date
For Each z In ActiveProject.Resources
SumPraca = 0
Rozp = z.Start1
Zak = z.Finish1
Set Przedzial = z.TimeScaleData(Rozp, Zak, TimeScaleUnit:=pjTimescaleDays)
For Ile = 1 To Przedzial.Count
If Przedzial(Ile).Value = "" Then
Praca = 0
Else
Praca = Przedzial(Ile).Value
End If
SumPraca = SumPraca + Praca
Next Ile
z.Duration1 = SumPraca
Next z
End Sub
Zakres wrzucony do pola numer:
Sub PracaPrzedzial()
Dim z As Resource
Dim Przedzial As TimeScaleValues, Ile As Long
Dim Praca As Double
Dim SumPraca As Double
Dim Rozp As Date
Dim Zak As Date
For Each z In ActiveProject.Resources
SumPraca = 0
Rozp = z.Start1
Zak = z.Finish1
Set Przedzial = z.TimeScaleData(Rozp, Zak, TimeScaleUnit:=pjTimescaleDays)
For Ile = 1 To Przedzial.Count
If Przedzial(Ile).Value = "" Then
Praca = 0
Else
Praca = Przedzial(Ile).Value
End If
SumPraca = SumPraca + Praca
Next Ile
z.Number1 = SumPraca / 60
Next z
End Sub
Peace :P
Kamil Kozieł edytował(a) ten post dnia 19.10.09 o godzinie 00:31