Načrtovanje opravil z odvisnostmi
Ohranite vrstni red opravil v gantogramu: povežite opravila, naj odvisna opravila sledijo spremembi ali naj se le sporoči, kaj je porušeno, in trajanje štejte v delovnem času.
Zahteva WKL Forms Object Library 1.23 ali novejšo različico.
Pregled rešitve
Odvisnosti prihajajo iz tabele (DependencySource s PredecessorField, SuccessorField,
LinkTypeField, LagField) ali iz polja z besedilom naslednika (PredecessorsField).
ScheduleMode določa, kaj stori sprememba: wgsManual ne premakne ničesar in porušene odvisnosti
navede v Violations; wgsAutomatic premakne odvisna opravila. Delovni čas izhaja iz WorkDays,
WorkHours in prostih dni iz HolidaySource; DurationUnit šteje v dnevih ali urah. Uporabniki
povezujejo in razvezujejo s Ctrl+F2 in Ctrl+Shift+F2, prek priročnega menija ali tako, da potegnejo
črto od konca ene palice do druge.
Izvedba
With Me!Gantt1.Object
' Dependencies as text in the task record instead of a table: "3FS+2;5SS"
' (FS finish-to-start, SS start-to-start, FF finish-to-finish, SF start-to-finish; lag in DurationUnit).
.DependencySource = ""
.PredecessorsField = "Predhodniki"
' Calendar: Monday to Saturday, 7:00-12:00 and 12:30-16:00, nonworking days from a table.
.WorkDays = 2 + 4 + 8 + 16 + 32 + 64 ' bit 1 = Sunday ... bit 64 = Saturday
.WorkHours = "07:00-12:00;12:30-16:00"
.HolidaySource = "tblPrazniki": .HolidayField = "Dan"
' Automatic scheduling: link 3 -> 4 with one working day lag; 4 and its successors follow.
.ScheduleMode = wgsAutomatic
.LinkTasks 3, 4, wglFinishToStart, 1
.SetTaskDates 3, #10/8/2026#, #10/12/2026# ' 4 moves again
' Manual: nothing moves; broken dependencies are listed and drawn red.
.ScheduleMode = wgsManual
Dim item As Variant
For Each item In .Violations
Debug.Print item
Next
.Reschedule ' "Znova načrtuj projekt": everything as early as allowed
Debug.Print .TaskDuration(3), .TaskSlack(3), .IsCritical(3)
End With
Opombe
- Konec je zadnji delovni dan opravila (pri
DurationUnit= ure: trenutek, ko se delo konča). Opravilo, ki zajema prost dan, traja en delovni dan manj; konec ostane tam, kjer ga določajo podatki. - Opravil brez odvisnosti in omejitev samodejno načrtovanje nikoli ne premakne, zato prvi klic
Reschedulene premeša načrta, ki je bil vnesen ročno. - Opravilo, ki ga v samodejnem načinu premaknete ročno, dobi omejitev „začetek ne prej kot“; da se ohrani tudi v naslednjih sejah, preslikajte
ConstraintTypeFieldinConstraintDateField. LinkTaskszavrne odvisnost, ki bi sklenila krog (wkeCycle), in odvisnost med opravilom in njegovim lastnim povzetnim opravilom (wkeInvalidValue); v tem primeru se ne zapiše nič.- Oris je del načrta:
IndentTaskinOutdentTask(Alt+Shift+desno/levo, Zamakni/Zmanjšaj zamik v priročnem meniju) opravilo spremenita v podopravilo predhodnega opravila oziroma ga premakneta iz njegovega povzetnega opravila;TaskResourcesin Dodeli vire … dodelijo vire. - Spremembe s kodo ne sprožijo dogodkov. Enake spremembe, ki jih naredi uporabnik, sprožijo
BeforeTaskChange,BeforeLinkAddaliBeforeLinkDelete, kjer jih lahko VBA prilagodi ali prekliče.