Delphi, C++ Builder i .NET Część sgcUI

sgcPlanner, harmonogram, Gantt i Kanban dla Delphi, C++ Builder i .NET

Trzy widoki tego samego planu. Pokaż go zespołowi jako kalendarz, kierownikowi projektu jako wykres Gantta, a osobom wykonującym zadania jako tablicę Kanban, wszystko na jednym obiekcie danych. Przeciągnij kartę do Done, a pasek Gantta i kolor w kalendarzu zmienią się od razu.

VCL, FireMonkey, WinForms, WPF, Avalonia10 000 zadań zaplanowanych automatycznie w 11 ms na Win64Bezpłatna edycja .NET CommunityW sgcUI Enterprise
Demo ProjectPlanner: te same zadania na tablicy Kanban, wykresie Gantta i w harmonogramie

Jeden plan, trzy widoki

Trzynaście funkcji dla zespołu, kierownika projektu i osób wykonujących zadania. Funkcje oznaczone jako Registered nie są dostępne w bezpłatnej edycji .NET Community.

Jeden model danych

Każdy widok czyta i zapisuje ten sam TsgcPlannerData.

Jeden model danych

Trzy widoki, jeden obiekt danych, zawsze zsynchronizowane

Kalendarz, wykres projektu i tablica zadań nigdy nie powinny się różnić. sgcPlanner wiąże dowolną liczbę widoków z jednym obiektem danych, więc karta przeciągnięta na tablicy do Done jest od razu rysowana kolorem Done w Gantcie i w harmonogramie, pasek przesunięty w Gantcie przesuwa zdarzenie w kalendarzu, a zdarzenie utworzone w harmonogramie staje się kartą. Każda zmiana to jedna aktualizacja, więc każdy widok odświeża się raz na upuszczenie.

  • TsgcPlannerData przechowuje plan, a każdy widok wskazuje go przez Data
  • BarColorMode pbcStatus koloruje paski Gantta według statusu, tak jak robi to tablica
  • SyncSelection udostępnia wybrany element przez SelectedId
  • Ten sam model działa bez żadnego widoku, w usłudze lub w teście jednostkowym
  • Od prawej do lewej dla arabskiego i hebrajskiego: kolumny Scheduler i Kanban układają się od prawej, siatka zadań Gantta przechodzi na prawą stronę, a MirrorTimeline prowadzi oś czasu Gantta również od prawej
Przeczytaj temat pomocy
Demo DataSetPlanner: wiersze zbioru danych i powiązane z nimi widoki planu

Jeden model danych

Powiąż TDataSet, zapisz JSON, wyrenderuj PNG

Twój plan już jest w bazie danych, a sgcPlanner spotyka go tam. Źródło danych wiąże obiekt danych z dowolnym TDataSet, na przykład FireDAC, TClientDataSet lub dbExpress, wczytuje elementy, zasoby i zależności, śledzi zmiany zbiorów danych i zapisuje z powrotem zmiany wprowadzone w widokach. Zapis JSON działa w każdej edycji i na każdej platformie, a renderer bez interfejsu rysuje dowolny widok do PNG lub SVG na serwerze, także w systemie Linux64.

  • TsgcPlannerSource_DataSet mapuje nazwy twoich pól przez ItemFields
  • SaveToFile i LoadFromFile zapisują i wczytują udokumentowany format JSON
  • TsgcPlannerRenderer rysuje harmonogram, Gantta lub Kanban bez okna
  • Używa tylko jednostki DB, więc działa w VCL, FireMonkey i aplikacjach konsolowych
Przeczytaj temat pomocy

Jeden model danych

Cofaj i ponawiaj każdą zmianę planu

Błędne upuszczenie nie powinno kosztować planisty całego popołudnia. Obiekt danych zapisuje każde dodanie, usunięcie, zmianę właściwości i przesunięcie elementu, zasobu, statusu lub zależności, bez względu na to, kto je wykonuje: przeciągnięcie w widoku, edycja w miejscu, Smart Paste, silnik planowania lub twój własny kod. Wszystkie widoki powiązane z danymi współdzielą jedną historię, a grupa zmian, na przykład całe przeplanowanie, jest cofana jednym krokiem.

  • Data.Undo z Undo, Redo, CanUndo i CanRedo
  • BeginGroup i EndGroup łączą wiele zmian w jeden krok
  • UndoCaption i RedoCaption nazywają następny krok dla pozycji menu lub podpowiedzi
  • Limit ogranicza historię, a OnChange aktualizuje przyciski
Przeczytaj temat pomocy

Jeden model danych

Wpisz tytuł prosto w widoku

Otwieranie okna dialogowego, aby zmienić nazwę elementu, spowalnia pracę. Przy edycji w miejscu klawisz F2 edytuje tytuł zaznaczonego elementu w małym edytorze umieszczonym nad nim, a spotkanie utworzone przez przeciągnięcie po pustym miejscu w harmonogramie od razu otwiera edytor tytułu, więc użytkownik przeciąga i pisze. Działa to tak samo w harmonogramie, Ganttcie i tablicy Kanban, a każda edycja trafia do historii cofania.

  • InplaceEdit włącza ją, domyślnie jest wyłączona
  • F2 edytuje zaznaczony element, Enter zatwierdza, a Escape anuluje
  • BeginEdit otwiera edytor z twojej własnej pozycji menu
  • IsEditing mówi klawiszom formularza, takim jak Ctrl+Z, aby poczekały, gdy użytkownik pisze
Przeczytaj temat pomocy

Harmonogram: spotkania, osoby i sale

TsgcVCLScheduler i TsgcFMXScheduler oraz te same widoki w .NET.

Widok dnia w TsgcVCLScheduler
Widok tygodnia roboczego w TsgcVCLScheduler
Widok tygodnia w TsgcVCLScheduler
Widok miesiąca w TsgcVCLScheduler
Widok agendy w TsgcVCLScheduler
Widok osi czasu zasobów w TsgcVCLScheduler

Harmonogram: spotkania, osoby i sale

Siedem widoków kalendarza, osoby i sale obok siebie

Użytkownicy wiedzą już, jak powinien działać kalendarz, więc harmonogram daje im widoki, jakich oczekują: dzień, tydzień roboczy, tydzień, miesiąc, rok, agendę i oś czasu zasobów. Widok roczny pokazuje dwanaście mini miesięcy, w których każdy dzień jest zacieniony według obłożenia, a dwukrotne kliknięcie otwiera ten dzień. Dodaj osoby, sale lub maszyny jako zasoby z własnym kolorem i grupuj dzień lub tydzień według zasobu, aby klinika widziała każdego lekarza w osobnej kolumnie, a warsztat każde stanowisko. Godziny pracy, widoczny zakres dnia i nawigacja to właściwości i wywołania w jednej linii.

  • View: psvDay, psvWorkWeek, psvWeek, psvMonth, psvYear, psvAgenda, psvTimeline
  • AddResource z kolorem oraz Options.GroupByResource, aby każdy zasób miał własną kolumnę
  • DayStartHour, DayEndHour i SlotMinutes kształtują siatkę czasu
  • GoToday, Prior, Next i ScrollToTime pozwalają się poruszać po widoku

Widok Timeline zasobów jest w edycji Registered; w Community ten widok pokazuje komunikat.

Przeczytaj temat pomocy

Harmonogram: spotkania, osoby i sale

Przeciągaj, aby tworzyć, przenosić i zmieniać rozmiar

Rezerwacja spotkania powinna przypominać jego rysowanie. Przeciągnij po pustych slotach, a harmonogram utworzy zdarzenie, a twój handler OnItemCreate ustawi jego tytuł lub odrzuci slot. Przeciągnij zdarzenie na inną godzinę, dzień lub kolumnę zasobu albo pociągnij krawędź, aby zmienić jego długość, a każdy ruch przyciągnie się do rozmiaru slotu. Te same gesty działają w pozostałych widokach: paski przesuwa się i zmienia im rozmiar w Gantcie, a karty przenosi się między kolumnami na tablicy.

  • OnItemCreate nadaje nazwę nowemu zdarzeniu lub je odrzuca
  • Przenoszenie i zmiana rozmiaru przyciągają się do Options.SlotMinutes
  • Podgląd podąża za wskaźnikiem, widok przewija się przy krawędziach, a Escape anuluje
  • Mysz, rysik i dotyk; OnCardMoving może zablokować przeniesienie na tablicy
Przeczytaj temat pomocy
Widok miesiąca z cotygodniowym spotkaniem we wtorki, widocznym w każdy wtorek

Harmonogram: spotkania, osoby i sale Tylko zarejestrowana

Spotkania cykliczne ze standardowych reguł

Cotygodniowe spotkanie zespołu lub comiesięczny przegląd powinny być wpisane raz. Nadaj elementowi regułę iCalendar RRULE, a harmonogram pokaże każde wystąpienie w dowolnym widoku i okresie. Reguła ma format RFC 5545, którego używają Google Calendar, Outlook i Apple Calendar, więc zdarzenia cykliczne zachowują swoją regułę przy imporcie i eksporcie plików .ics, a twój kod może zapytać obiekt danych o wystąpienia z dowolnego zakresu dat, na przykład aby sprawdzić konflikty w sali.

  • RecurrenceRule := 'FREQ=WEEKLY;BYDAY=TU' powtarza co wtorek
  • Start i Finish elementu to pierwsze wystąpienie
  • GetOccurrences zwraca wystąpienia z dowolnego okresu
  • Importowane i eksportowane z plikami iCalendar

Community pokazuje element cykliczny raz i zachowuje jego regułę.

Przeczytaj temat pomocy
Demo ICalSubscription z kalendarzem świąt scalonym w harmonogramie

Harmonogram: spotkania, osoby i sale Tylko zarejestrowana

Google Calendar, Outlook, CalDAV i .ics, import i eksport

Spotkania twoich użytkowników już są w innych kalendarzach. TsgcPlannerICalendar importuje i eksportuje pliki .ics, czyli format Google Calendar, Outlook i Apple Calendar. Dzięki mostowi sgcPlannerWS subskrypcja śledzi dowolny adres URL .ics tylko do odczytu, na przykład listę świąt państwowych lub współdzielony kalendarz, a trzy komponenty synchronizacji utrzymują plan w zgodzie w obu kierunkach z jednym kalendarzem Google, jednym kalendarzem Outlook z Microsoft 365 lub Outlook.com przez Microsoft Graph albo jednym kalendarzem CalDAV z Nextcloud, iCloud, Fastmail, Radicale lub dowolnego innego serwera CalDAV. Każdy z nich odczytuje tylko zmiany od ostatniej synchronizacji i ma jasną regułę konfliktów.

  • TsgcPlannerICalendar z ImportFromFile i ExportToFile
  • TsgcPlannerICalSubscription z URL i RefreshInterval, z użyciem ETag i If-Modified-Since
  • TsgcPlannerGoogleSync z CalendarId, Direction i AutoSyncInterval
  • TsgcPlannerGraphSync z CalendarId i tokenem OAuth2 AccessToken, z użyciem zapytania delta Graph
  • TsgcPlannerCalDAVSync z CalendarURL, UserName i Password, z użyciem tokenów synchronizacji i ETag
  • W konflikcie wygrywa późniejsza zmiana, a OnConflict może rozstrzygnąć inaczej

Edycja Registered. Komponenty mostów wymagają też zarejestrowanego sgcWebSockets; w .NET są w esegece.sgcPlanner.sgcWebSockets.

Przeczytaj temat pomocy

Harmonogram: spotkania, osoby i sale

Przypomnienia z drzemką i odrzuceniem

Spotkanie, o którym nikt nie pamięta, to spotkanie, na które nikt nie przyjdzie. Nadaj elementowi przypomnienie w minutach przed rozpoczęciem, a TsgcPlannerReminders znajdzie przypomnienia, których czas nadszedł, i wywoła zdarzenie dla każdego z nich. Twoja aplikacja wywołuje go z własnego timera i sama decyduje, jak pokazać przypomnienie: oknem, powiadomieniem lub dźwiękiem. Element cykliczny przypomina ponownie przy każdym wystąpieniu, a przypomnienie można odłożyć lub odrzucić.

  • ReminderMinutes elementu: -1 oznacza brak, 0 oznacza chwilę rozpoczęcia
  • Check wywołuje OnReminder dla każdego przypomnienia, którego czas nadszedł
  • Snooze i Dismiss dla bieżącego lub następnego wystąpienia
  • Zapisywane w JSON i rejestrowane w historii cofania
Przeczytaj temat pomocy

Harmonogram: spotkania, osoby i sale

Strefy czasowe dla każdego elementu

Zespoły rozproszone po biurach umawiają spotkania we własnym czasie lokalnym. Każdy element może mieć własną strefę czasową, więc rozmowa zaplanowana na 10:00 w Nowym Jorku zostaje na 10:00 czasu nowojorskiego, podczas gdy widoki pokazują wszystkie elementy w jednej strefie wyświetlania. Zmień strefę wyświetlania, a elementy przesuną się na zegar ścienny w nowej strefie, natomiast elementy pływające i całodniowe zostają tam, gdzie są.

  • Item.TimeZone to strefa Start i Finish, pusta dla elementu pływającego
  • Data.DisplayTimeZone to strefa pokazywana w widokach, pusta oznacza strefę lokalną
  • Przeliczenie następuje tylko wtedy, gdy elementy są pokazywane
  • Przypomnienia również działają w strefie wyświetlania
Przeczytaj temat pomocy

Gantt: planuj projekty i śledź ścieżkę krytyczną

TsgcVCLGantt i TsgcFMXGantt: zadania, powiązania, skala czasu i silnik planowania.

Demo ProjectGantt: drzewo WBS z powiązaniami zakończenie do rozpoczęcia i rozpoczęcie do rozpoczęcia

Gantt: planuj projekty i śledź ścieżkę krytyczną Tylko zarejestrowana

Wykresy Gantta z zależnościami i opóźnieniem

Gantt pokazuje drzewo struktury podziału pracy z wierszami zbiorczymi, kamieniami milowymi i postępem na każdym pasku, a powiązania między zadaniami rysuje jako strzałki. Łącz zadania w kodzie lub przeciągając od końca jednego paska do drugiego, wybierz zakończenie do rozpoczęcia, rozpoczęcie do rozpoczęcia, zakończenie do zakończenia lub rozpoczęcie do zakończenia i dodaj opóźnienie w czasie pracy. Skala czasu powiększa się od 5 minut do lat.

  • Struktura podziału pracy przez ParentId, zbierana przez UpdateSummaries
  • AddDependency z TsgcPlannerDependencyKind: pdkFS, pdkSS, pdkFF, pdkSF
  • Lag liczone według kalendarza roboczego
  • Milestone i Progress w każdym elemencie, TimeScale do powiększania

Community przechowuje i zapisuje powiązania, ale ich nie rysuje, a przeciąganie do łączenia jest w edycji Registered.

Przeczytaj temat pomocy
Gantt z podświetloną ścieżką krytyczną i świętami zacieniowanymi według kalendarza roboczego

Gantt: planuj projekty i śledź ścieżkę krytyczną Tylko zarejestrowana

Planuj automatycznie i zobacz ścieżkę krytyczną

Gdy jedno zadanie się opóźnia, kierownik projektu potrzebuje nowej daty zakończenia od razu, a nie po popołudniu przesuwania pasków. Silnik planowania umieszcza każde zadanie jak najwcześniej po jego poprzednikach według kalendarza roboczego, pomijając dni wolne i święta, oblicza zapas każdego zadania i zaznacza ścieżkę krytyczną, czyli łańcuch zadań wyznaczający koniec projektu. Uruchamiaj go na żądanie, po każdej zmianie lub na obiekcie danych bez żadnego widoku.

  • Schedule uruchamia silnik, a AutoSchedule uruchamia go po każdej zmianie
  • ShowCriticalPath podświetla zadania, które wyznaczają datę zakończenia
  • TotalSlack podaje liczbę minut pracy, o jaką zadanie może się opóźnić
  • Kalendarz roboczy ustawia WorkDays, WorkTime i Holidays

W Community Schedule zgłasza EsgcPlannerError, a ShowCriticalPath nie ma żadnego efektu.

Przeczytaj temat pomocy
Gantt z szarymi paskami linii bazowej pod bieżącymi paskami i dwoma opóźnionymi zadaniami

Gantt: planuj projekty i śledź ścieżkę krytyczną Tylko zarejestrowana

Linie bazowe pokazują opóźnienie na pierwszy rzut oka

Interesariusze rzadko pytają, jaki jest plan; pytają, jak bardzo się przesunął. Zapisz linię bazową, gdy plan zostanie zatwierdzony, a Gantt narysuje ją jako cienki pasek pod każdym bieżącym paskiem, więc opóźnione zadanie widać bez czytania ani jednej daty. Daty linii bazowej są przechowywane razem z elementami, zapisywane w JSON i wymieniane przez Microsoft Project XML, a twój kod może je odczytać, aby zbudować własny raport odchyleń.

  • SetBaseline kopiuje Start i Finish każdego elementu w jednej aktualizacji
  • ShowBaseline rysuje paski linii bazowej
  • BaselineStart i BaselineFinish w każdym elemencie
  • Zapisywane w JSON i wczytywane z Microsoft Project XML

Community przechowuje i zapisuje daty linii bazowej, ale ich nie rysuje; SetBaseline zgłasza EsgcPlannerError.

Przeczytaj temat pomocy

Gantt: planuj projekty i śledź ścieżkę krytyczną Tylko zarejestrowana

Wymieniaj plany z Microsoft Project

Biura projektów otrzymują plany z Microsoft Project i odsyłają je z powrotem. TsgcPlannerMSProject importuje i eksportuje Microsoft Project XML (MSPDI), format XML, który Project otwiera i zapisuje, z zadaniami, powiązaniami, kalendarzem, zasobami, przypisaniami i liniami bazowymi. Import może zastąpić plan lub scalić się z nim, a dokument, który nie jest poprawnie zbudowany, zgłasza błąd z numerem linii. Import 10 000 zadań z 15 000 powiązań zajął 264 ms w pomiarze deweloperskim na Win64. Zasoby i przypisania przechodzą razem z zadaniami.

  • ImportFromFile, ImportFromStream i ImportFromString
  • ExportToFile zapisuje XML, który otwiera Microsoft Project
  • ImportMode: pmiReplace (domyślnie) lub pmiMerge
  • Błędny XML zgłasza EsgcPlannerError z numerem linii

Brak w edycji Community, gdzie formatem pliku jest JSON.

Przeczytaj temat pomocy

Gantt: planuj projekty i śledź ścieżkę krytyczną

Trzypoziomowa skala czasu i histogram zasobów

Długie plany czyta się lepiej, gdy nagłówek daje więcej kontekstu, a przeciążone osoby powinny być widoczne, zanim plan zostanie opublikowany. Skala czasu Gantta może pokazać trzeci poziom, na przykład miesiąc nad tygodniami nad dniami. Panel histogramu na dole wykresu rysuje dla każdego podziału, ile pracy ma każdy zasób w stosunku do swojego czasu pracy, a część powyżej 100% jest malowana kolorem krytycznym.

  • TimeScale.TierCount równe 3 dodaje górny poziom, a TopFormat ustawia jego etykiety
  • ShowHistogram i HistogramHeight pokazują panel
  • HistogramResourceId pokazuje jeden zasób albo wszystkie zasoby ułożone w stos, każdy własnym kolorem
  • Panel podąża za przewijaniem i powiększeniem wykresu
Przeczytaj temat pomocy

Kanban: tablice, które podążają za planem

TsgcVCLKanban i TsgcFMXKanban: jedna kolumna na status, na tych samych danych co Gantt.

Tablica Kanban z pięcioma kolumnami statusów, tagami, inicjałami właścicieli, terminami i paskami postępu

Kanban: tablice, które podążają za planem

Tablica zadań, na której może pracować twój zespół

Osoby wykonujące zadania chcą tablicy, a nie wykresu. Widok Kanban tworzy jedną kolumnę na status, z plakietką liczby i strzałką zwijania, a każda karta pokazuje tytuł, tagi, inicjały zasobu, termin i postęp. Upuszczenie karty w innej kolumnie zmienia jej status i pozycję we wspólnych danych, więc Gantt i harmonogram aktualizują się od razu, a twój kod może zablokować każde przeniesienie, zanim do niego dojdzie. Tablica korzysta z tego samego jasnego lub ciemnego motywu co pozostałe widoki.

  • ColumnSource buduje kolumny ze statusów lub z twoich własnych Columns
  • CardOptions określają, co pokazuje karta
  • OnCardMoving akceptuje lub odrzuca upuszczenie
  • Szerokości kolumn i zwijanie działają w każdej edycji
Przeczytaj temat pomocy
Demo TaskBoard: pięć kolumn, trzy tory według zasobu i jedna kolumna powyżej limitu

Kanban: tablice, które podążają za planem Tylko zarejestrowana

Tory i limity WIP utrzymują płynność pracy

Tory dzielą ją na poziome pasma według zasobu, zadania nadrzędnego lub tagu, więc każda osoba lub epik dostaje własny wiersz, a limity pracy w toku ograniczają każdą kolumnę, liczone we wszystkich torach. W trybie ostrzegania kolumna przekraczająca limit jest oznaczana; w trybie blokady karty, która przekroczyłaby limit, nie można upuścić. Rozmieszczenie 5 000 kart w 8 kolumnach i 6 torach zajęło 5 ms na Win64.

  • SwimlaneBy: pslResource, pslParent lub pslTag
  • WIPLimit dla każdej kolumny, 0 oznacza brak limitu
  • WIPMode: pwmWarn oznacza kolumnę, pwmBlock odrzuca upuszczenie
  • Tory i limity działają na tych samych danych co pozostałe widoki

Community ignoruje SwimlaneBy i limity WIP; kolumny, szerokości i zwijanie działają.

Przeczytaj temat pomocy

Dostępność

UI Automation dla czytników ekranu, klawiatura i wysoki kontrast, bez konfiguracji.

Dostępność

Każdy widok planera, czytelny i obsługiwany bez myszy

sgcPlanner udostępnia widoki Scheduler, Timeline, Gantt i Kanban Microsoft UI Automation: dni, tory i kolumny, elementy wraz z ich czasami oraz zależności Gantta. Wszystko, co przeciąga się myszą, można też zrobić klawiaturą.

  • Scheduler i Timeline: Ins dodaje element w aktywnym przedziale, Del go usuwa, Ctrl+strzałki przesuwają element, a Ctrl+Shift+strzałki zmieniają jego koniec
  • Gantt: Ctrl+Left i Ctrl+Right przesuwają zadanie o jedną działkę, Ctrl+K rozpoczyna zależność, a Ctrl+Shift+K przełącza między zależnościami aktywnego zadania
  • Kanban: Ctrl+Left i Ctrl+Right przenoszą kartę do sąsiedniej kolumny, a Ctrl+Up i Ctrl+Down zmieniają jej kolejność
  • W motywie wysokiego kontrastu systemu Windows kolory elementów aplikacji są zastępowane kolorami systemowymi z konturami, więc żadna informacja nie zależy wyłącznie od koloru

Dostępność jest domyślnie włączona w każdej edycji, łącznie z bezpłatną edycją Community, w VCL w każdej wersji Delphi i C++Builder od Delphi 7 do Delphi 13, w FireMonkey w systemie Windows oraz w WinForms, WPF i Avalonia. W Delphi i C++Builder właściwości AccessibleName i AccessibleDescription ustawiają nazwę i opis udostępniane UI Automation, a w .NET to samo robią standardowa nazwa dostępności i tekst pomocy każdego frameworka. Zobacz raporty zgodności dotyczące dostępności.

Przeczytaj temat pomocy

Zobacz sgcPlanner w akcji

sgcPlanner w demach pakietu sgcUI: kompletne aplikacje działające offline na wbudowanych danych symulowanych.

Zmierzone na rzeczywistych obciążeniach

Pomiary deweloperskie wydaniowych kompilacji Win64 w rozdzielczości 1920 x 1080. Win32 jest około 1,5 do 1,7 razy wolniejszy.

PomiarWynikWarunki
Automatyczne planowanie 10 000 zadań (1 000 zbiorczych, 3 poziomy) z 15 000 powiązań i 30 świętami, wraz ze ścieżką krytyczną11 msKompilacja wydaniowa Win64
Klatka Gantta podczas przewijania 10 000 zadań z 15 000 powiązań11 msKompilacja wydaniowa Win64, 1920 x 1080
Rozmieszczenie Kanban 5 000 kart w 8 kolumnach i 6 torach5 msKompilacja wydaniowa Win64
Widok tygodnia harmonogramu z 2 000 elementami z godzinami, rozmieszczenie1 msKompilacja wydaniowa Win64
Import 10 000 zadań z 15 000 powiązań z MS Project XML264 msKompilacja wydaniowa Win64

Źródło: temat pomocy opisujący te liczby.

Kto buduje z sgcPlanner

Oprogramowanie projektowe i inżynierskie

Biura projektów i firmy inżynierskie

Zaplanuj projekt jako strukturę podziału pracy, połącz zadania i pozwól silnikowi zaplanować je według kalendarza firmy, a ścieżka krytyczna pokaże, co wyznacza datę zakończenia. Zapisz linię bazową przy zatwierdzeniu, a opóźnienie pokaże się pod każdym paskiem. Plany przychodzą z Microsoft Project i wracają do niego jako XML, a te same zadania pojawiają się na tablicy dla zespołu.

  • Gantt z zależnościami
  • Automatyczne planowanie i ścieżka krytyczna
  • Linie bazowe
  • MS Project XML
Uruchom demo ProjectGantt

Systemy rezerwacji i umawiania wizyt

Kliniki, warsztaty i rezerwacja sal

Pokaż każdego lekarza, stanowisko lub salę konferencyjną jako osobną kolumnę i pozwól pracownikom rezerwować, przeciągając po wolnych slotach. Wizyty cykliczne pochodzą ze standardowych reguł, święta państwowe przychodzą przez subskrypcję .ics, a most Google Calendar utrzymuje w zgodzie własny kalendarz specjalisty. Źródło danych zapisuje każdą rezerwację prosto do twoich tabel. Pracownicy widzą te same rezerwacje w każdym widoku.

  • Widoki harmonogramu i zasoby
  • Powtarzanie
  • Powiązanie z DataSet
  • Synchronizacja z Google Calendar
Uruchom demo TeamScheduler

Narzędzia do śledzenia zadań i obsługi zgłoszeń

Zespoły zwinne i działy obsługi

Daj zespołowi tablicę Kanban z torem dla każdej osoby i limitami pracy w toku dla każdej kolumny, a kierownikowi Gantta tych samych zgłoszeń. Przeniesienie karty do Done zmienia kolor paska i zdarzenia w kalendarzu od razu, bo wszystkie trzy widoki korzystają z jednego obiektu danych. Obrazy statusu do nocnego e-maila można renderować bez interfejsu na serwerze.

  • Kanban
  • Tory i limity WIP
  • Zsynchronizowane widoki
  • Renderowanie bez interfejsu
Uruchom demo TaskBoard

Harmonogram zespołu w kilku linijkach

To samo API w Delphi, C++ Builder i C#: dwie osoby, codzienne spotkanie z reguły powtarzania i widok tygodnia, w którym użytkownicy przeciągają nowe spotkania.

Harmonogram tygodnia VCL: dwie osoby jako zasoby, codzienne spotkanie z reguły powtarzania, przeciąganie do tworzenia.

unit frmTeam;

interface

uses
  Classes, Controls, Forms, SysUtils,
  sgcUICore_Theme, sgcPlanner_Data, sgcPlanner_Scheduler,
  sgcPlanner_Scheduler_VCL;

type
  TFormTeam = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    FData: TsgcPlannerData;
    FScheduler: TsgcVCLScheduler;
    procedure DoItemCreate(Sender: TObject; const aStart, aFinish: TDateTime;
      const aResourceId: string; var aTitle: string; var aAccept: Boolean);
  end;

implementation

procedure TFormTeam.FormCreate(Sender: TObject);
var
  vItem: TsgcPlannerItem;
  vMonday: TDateTime;
begin
  vMonday := Date - DayOfWeek(Date) + 2;
  FData := TsgcPlannerData.Create(Self);
  FData.Resources.AddResource('ana', 'Ana').Color := $FF2563EB;
  FData.Resources.AddResource('luis', 'Luis').Color := $FF0F766E;
  // a daily stand-up from an iCalendar recurrence rule
  vItem := FData.AddItem('standup');
  vItem.Title := 'Daily stand-up';
  vItem.Start := vMonday + EncodeTime(9, 0, 0, 0);
  vItem.Finish := vMonday + EncodeTime(9, 15, 0, 0);
  vItem.RecurrenceRule := 'FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR';
  vItem.Resources := 'ana,luis';
  vItem := FData.AddItem('review');
  vItem.Title := 'Design review';
  vItem.Start := vMonday + 1 + EncodeTime(14, 0, 0, 0);
  vItem.Finish := vMonday + 1 + EncodeTime(15, 30, 0, 0);
  vItem.Resources := 'ana';

  FScheduler := TsgcVCLScheduler.Create(Self);
  FScheduler.Parent := Self;
  FScheduler.Align := alClient;
  FScheduler.Data := FData;
  FScheduler.Theme := utDark;
  FScheduler.View := psvWeek;
  FScheduler.Options.DayStartHour := 8;
  FScheduler.Options.DayEndHour := 18;
  FScheduler.Options.GroupByResource := True;
  FScheduler.OnItemCreate := DoItemCreate;
  FScheduler.ScrollToTime(vMonday + EncodeTime(8, 0, 0, 0));
end;

procedure TFormTeam.DoItemCreate(Sender: TObject; const aStart,
  aFinish: TDateTime; const aResourceId: string; var aTitle: string;
  var aAccept: Boolean);
begin
  // the user dragged an empty slot: name the new meeting
  aTitle := 'New meeting';
  aAccept := True;
end;

end.

Przeczytaj temat pomocy →

Ten sam harmonogram w C++ Builder.

#include <vcl.h>
#pragma hdrstop
#include <System.DateUtils.hpp>
#include "sgcUICore_Theme.hpp"
#include "sgcPlanner_Data.hpp"
#include "sgcPlanner_Scheduler.hpp"
#include "sgcPlanner_Scheduler_VCL.hpp"

class TTeamHandlers : public TObject
{
public:
	// the user dragged an empty slot: name the new meeting
	void __fastcall ItemCreate(TObject *Sender, const TDateTime aStart,
		const TDateTime aFinish, const UnicodeString aResourceId,
		UnicodeString &aTitle, bool &aAccept)
	{
		aTitle = "New meeting";
		aAccept = true;
	}
};

void __fastcall BuildTeamScheduler(TForm *Form)
{
	static TTeamHandlers *vHandlers = new TTeamHandlers();
	TDateTime vMonday = Date() - DayOfWeek(Date()) + 2;
	TsgcPlannerData *vData = new TsgcPlannerData(Form);
	vData->Resources->AddResource("ana", "Ana")->Color = 0xFF2563EB;
	vData->Resources->AddResource("luis", "Luis")->Color = 0xFF0F766E;
	// a daily stand-up from an iCalendar recurrence rule
	TsgcPlannerItem *vItem = vData->AddItem("standup");
	vItem->Title = "Daily stand-up";
	vItem->Start = vMonday + EncodeTime(9, 0, 0, 0);
	vItem->Finish = vMonday + EncodeTime(9, 15, 0, 0);
	vItem->RecurrenceRule = "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR";
	vItem->Resources = "ana,luis";
	vItem = vData->AddItem("review");
	vItem->Title = "Design review";
	vItem->Start = vMonday + 1 + EncodeTime(14, 0, 0, 0);
	vItem->Finish = vMonday + 1 + EncodeTime(15, 30, 0, 0);
	vItem->Resources = "ana";

	TsgcVCLScheduler *vScheduler = new TsgcVCLScheduler(Form);
	vScheduler->Parent = Form;
	vScheduler->Align = alClient;
	vScheduler->Data = vData;
	vScheduler->Theme = utDark;
	vScheduler->View = psvWeek;
	vScheduler->Options->DayStartHour = 8;
	vScheduler->Options->DayEndHour = 18;
	vScheduler->Options->GroupByResource = true;
	vScheduler->OnItemCreate = vHandlers->ItemCreate;
	vScheduler->ScrollToTime(vMonday + EncodeTime(8, 0, 0, 0));
}

Przeczytaj temat pomocy →

Wersja C# dla WinForms.

using System;
using System.Windows.Forms;
using esegece.sgcPlanner;
using esegece.sgcUICore;

namespace TeamPlanner
{
    internal class MainForm : Form
    {
        public MainForm()
        {
            Text = "Team scheduler";
            DateTime monday = DateTime.Today.AddDays(-(((int)DateTime.Today.DayOfWeek + 6) % 7));

            var data = new TsgcPlannerData();
            data.Resources.AddResource("ana", "Ana").Color = 0xFF2563EB;
            data.Resources.AddResource("luis", "Luis").Color = 0xFF0F766E;

            // a daily stand-up from an iCalendar recurrence rule
            var item = data.AddItem("standup");
            item.Title = "Daily stand-up";
            item.Start = monday.AddHours(9);
            item.Finish = monday.AddHours(9).AddMinutes(15);
            item.RecurrenceRule = "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR";
            item.Resources = "ana,luis";

            item = data.AddItem("review");
            item.Title = "Design review";
            item.Start = monday.AddDays(1).AddHours(14);
            item.Finish = monday.AddDays(1).AddHours(15.5);
            item.Resources = "ana";

            var scheduler = new TsgcWinFormsScheduler { Dock = DockStyle.Fill, Data = data, Theme = TsgcUITheme.utDark };
            scheduler.View = TsgcPlannerSchedulerViewKind.psvWeek;
            scheduler.Options.DayStartHour = 8;
            scheduler.Options.DayEndHour = 18;
            scheduler.Options.GroupByResource = true;
            // the user dragged an empty slot: name the new meeting
            scheduler.OnItemCreate = (object sender, DateTime start, DateTime finish, string resourceId,
                ref string title, ref bool accept) => { title = "New meeting"; accept = true; };
            Controls.Add(scheduler);
            scheduler.ScrollToTime(monday.AddHours(8));
        }

        [STAThread]
        static void Main() { Application.EnableVisualStyles(); Application.Run(new MainForm()); }
    }
}
dotnet add package esegece.sgcPlanner.WinForms

Przeczytaj temat pomocy →

Gantt w Delphi

Trzy zadania, dwa powiązania, linia bazowa, ścieżka krytyczna i silnik planowania (funkcje Gantta użyte tutaj są funkcjami edycji Registered).

unit frmGantt;

interface

uses
  Classes, Controls, Forms, SysUtils,
  sgcUICore_Theme, sgcPlanner_Data, sgcPlanner_Gantt, sgcPlanner_Gantt_VCL;

type
  TFormGantt = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

implementation

procedure TFormGantt.FormCreate(Sender: TObject);
var
  vData: TsgcPlannerData;
  vGantt: TsgcVCLGantt;
  vItem: TsgcPlannerItem;
  vStart: TDateTime;
begin
  vStart := Date + EncodeTime(8, 0, 0, 0);
  vData := TsgcPlannerData.Create(Self);
  vData.ProjectStart := vStart;
  vItem := vData.AddItem('1');
  vItem.Title := 'Design';
  vItem.Start := vStart;
  vItem.Finish := vStart + 3 + EncodeTime(9, 0, 0, 0);
  vItem.Progress := 100;
  vItem := vData.AddItem('2');
  vItem.Title := 'Build';
  vItem.Start := vStart;
  vItem.Finish := vStart + 6 + EncodeTime(9, 0, 0, 0);
  vItem.Progress := 40;
  vItem := vData.AddItem('3');
  vItem.Title := 'Release';
  vItem.Start := vStart;
  vItem.Finish := vStart;
  vItem.Milestone := True;
  // Build starts when Design finishes, Release when Build finishes
  vData.Dependencies.AddDependency('1', '2');
  vData.Dependencies.AddDependency('2', '3');

  vGantt := TsgcVCLGantt.Create(Self);
  vGantt.Parent := Self;
  vGantt.Align := alClient;
  vGantt.Data := vData;
  vGantt.Theme := utDark;
  vGantt.ShowCriticalPath := True;
  vGantt.SetBaseline;
  // the schedule engine moves the tasks to honour the links
  vGantt.Schedule;
end;

end.

Reguły powtarzania oraz wywołania Schedule i SetBaseline w Gantcie są funkcjami edycji Registered. Bezpłatna edycja Community pokazuje element cykliczny raz.

Uruchom dema sgcPlanner

Skompilowane pliki wykonywalne dem są w sgcUI_bin.zip, nic nie trzeba instalować. Źródła każdego dema są w pakiecie, dla Delphi, C++ Builder i .NET.

ProjectPlanner

ProjectPlanner

Gantt, Kanban i harmonogram na jednym obiekcie danych, zawsze zsynchronizowane.

TeamScheduler

TeamScheduler

Siedem widoków z widokiem rocznym, grupy zasobów, spotkania cykliczne, przypomnienia, strefy czasowe, cofanie i ponawianie oraz edycja w miejscu.

Tylko zarejestrowana ProjectGantt

Powiązania, automatyczne planowanie, ścieżka krytyczna, linie bazowe, Microsoft Project XML, trzypoziomowa skala czasu i histogram zasobów.

Tylko zarejestrowana TaskBoard

Kolumny statusów, tory według zasobu i limity WIP na tablicy Kanban.

DataSetPlanner

DataSetPlanner

Elementy, zasoby i zależności powiązane z TDataSet, ze zmianami zapisywanymi z powrotem.

Tylko zarejestrowana ICalendarSync

Import i eksport plików .ics.

ICalSubscription

Tylko zarejestrowana ICalSubscription

Śledź adres URL .ics tylko do odczytu, na przykład listę świąt.

Tylko zarejestrowana GoogleCalendarSync

Dwukierunkowa synchronizacja z jednym kalendarzem Google przez sgcWebSockets.

Tylko zarejestrowana OutlookCalendarSync

Dwukierunkowa synchronizacja z jednym kalendarzem Outlook z Microsoft 365 lub Outlook.com przez Microsoft Graph.

Tylko zarejestrowana CalDAVSync

Dwukierunkowa synchronizacja z jednym kalendarzem CalDAV, na przykład Nextcloud, iCloud, Fastmail lub Radicale.

HeadlessReport

Renderuje widoki do plików obrazów bez okna.

PlannerFMX

Trzy widoki w aplikacji FireMonkey.

Skompilowane dema

Gotowe do uruchomienia pliki wykonywalne każdego produktu sgcUI, nic nie trzeba instalować.

Pobierz sgcUI_bin.zip →

Gdzie jest sgcPlanner

sgcPlanner jest częścią sgcUI Enterprise i jest też sprzedawany osobno. sgcPlanner jest też zawarty w pakiecie All-Access.

Pojedynczy pakiet sgcPlanner

€249 / programista, pełny kod źródłowy, 1 rok aktualizacji.

Kup sgcPlanner → Zobacz cennik →

sgcUI Enterprise

Wszystkie produkty sgcUI (14), od €699.

Zobacz Enterprise →

.NET

Edycja .NET ma taką samą cenę. Bezpłatna edycja Community jest w NuGet jako esegece.sgcPlanner.Community.

Zobacz cennik →

Bezpłatna edycja Community to esegece.sgcPlanner.Community w NuGet. Tabela pokazuje, co zawiera.

FunkcjaCommunity (bezpłatna)Zarejestrowana
Widoki harmonogramu: dzień, tydzień roboczy, tydzień, miesiąc i agenda✓✓
Drzewo zadań Gantta, zadania zbiorcze, kamienie milowe i postęp✓✓
Kolumny Kanban, zwijanie i opcje kart✓✓
Przeciąganie w każdym widoku✓✓
Powiązanie z DataSet, JSON, motywy oraz PNG i SVG bez interfejsu✓✓
Widok roczny harmonogramu✓✓
Przypomnienia i strefy czasowe dla każdego elementu✓✓
Cofanie i ponawianie, edycja w miejscu✓✓
Trzypoziomowa skala czasu Gantta i histogram zasobów✓✓
Powtarzanie−✓
Widok Timeline zasobów w harmonogramie−✓
Strzałki zależności i przeciąganie do łączenia−✓
Automatyczne planowanie, ścieżka krytyczna i linie bazowe−✓
Tory i limity WIP−✓
iCalendar i Microsoft Project XML−✓
Synchronizacja z Google Calendar, Outlook i CalDAV oraz subskrypcja iCal (sgcPlannerWS)−✓

Obsługiwane frameworki i platformy

Komponenty w sgcPlanner

KomponentCo robi
TsgcPlannerDataWspólny model: elementy, zasoby, statusy, zależności i kalendarz roboczy.
TsgcVCLScheduler, TsgcFMXSchedulerWidoki dnia, tygodnia roboczego, tygodnia, miesiąca, roku, agendy i osi czasu.
TsgcVCLGantt, TsgcFMXGanttDrzewo zadań, paski, powiązania, silnik planowania, ścieżka krytyczna i linie bazowe.
TsgcVCLKanban, TsgcFMXKanbanKolumny statusów, karty, tory i limity WIP.
TsgcPlannerSource_DataSetPlan z TDataSet.
TsgcPlannerICalendar, TsgcPlannerMSProjectOdczyt i zapis plików iCalendar .ics oraz Microsoft Project XML (Registered).
TsgcPlannerRendererWyjście PNG i SVG bez interfejsu.
TsgcPlannerGoogleSync, TsgcPlannerGraphSync, TsgcPlannerCalDAVSync, TsgcPlannerICalSubscription (sgcPlannerWS)Dwukierunkowa synchronizacja z Google Calendar, z Outlook i Microsoft 365 przez Microsoft Graph oraz z serwerami CalDAV, a także subskrypcje iCal, przez sgcWebSockets. Tylko Registered.
CelKomponentPlatformy
Delphi 7 do 13, VCLHarmonogram, Gantt, KanbanWin32 i Win64
Delphi XE6 do 13, FireMonkeyTsgcFMXScheduler, TsgcFMXGantt, TsgcFMXKanbanWindows, macOS, iOS i Android
C++ Builder 2007 do 13Widoki VCL i FMXWygenerowane nagłówki .hpp i biblioteki statyczne
Delphi 10.2 do 13, bez frameworkaDane, silniki, JSON, iCalendar, Microsoft Project, rendererLinux64, na przykład do renderowania planów na serwerze
.NET Framework 4.7.2, .NET 8, 9 i 10TsgcWinFormsScheduler, Gantt i Kanban oraz ich odpowiedniki WPF i AvaloniaWinForms, WPF, Avalonia, PNG i SVG bez interfejsu

Najczęściej zadawane pytania

Tak, w edycji Registered. TsgcPlannerMSProject odczytuje i zapisuje Microsoft Project XML (MSPDI) z zadaniami, powiązaniami, kalendarzem, zasobami, przypisaniami i liniami bazowymi. Obsługiwany jest format XML, więc zapisz plan jako XML w Project.

Tak, w obu kierunkach. Google Calendar synchronizuje się przez TsgcPlannerGoogleSync, kalendarze Outlook z Microsoft 365 i Outlook.com synchronizują się przez Microsoft Graph za pomocą TsgcPlannerGraphSync, a kalendarze CalDAV, takie jak Nextcloud, iCloud, Fastmail czy Radicale, synchronizują się przez TsgcPlannerCalDAVSync. Każdy inny kalendarz publikujący adres URL .ics można śledzić tylko do odczytu przez TsgcPlannerICalSubscription, a pliki .ics importuje się i eksportuje przez TsgcPlannerICalendar. Mosty wymagają edycji Registered i sgcWebSockets.

Pomoc publikuje pomiary deweloperskie wydaniowych kompilacji Win64: automatyczne planowanie 10 000 zadań z 15 000 powiązań zajęło 11 ms, a klatka podczas przewijania tych samych 10 000 zadań także 11 ms. Rozmieszczenie Kanban 5 000 kart zajęło 5 ms. Win32 jest około 1,5 do 1,7 razy wolniejszy.

Trzy widoki z przeciąganiem, podsumowania, kamienie milowe, postęp, kalendarz roboczy, powiązanie z DataSet, JSON i wyjście bez interfejsu. Powtarzanie, automatyczne planowanie, rysowane zależności, ścieżka krytyczna, linie bazowe, widok Timeline, tory, limity WIP, iCalendar, Microsoft Project XML i mosty są w edycji Registered.

Tak. TsgcPlannerSource_DataSet wiąże obiekt danych z dowolnym TDataSet, na przykład FireDAC, TClientDataSet lub dbExpress. Wczytuje elementy, zasoby i zależności przez mapy pól, śledzi zmiany zbiorów danych i zapisuje z powrotem zmiany wprowadzone w widokach.

Tak, przez FireMonkey: TsgcFMXScheduler, TsgcFMXGantt i TsgcFMXKanban działają od Delphi XE6 w systemach Windows, macOS, iOS i Android. W systemie Linux64 model danych, silniki, JSON, iCalendar, Microsoft Project XML i renderer kompilują się od Delphi 10.2.

Tak. TsgcPlannerRenderer rysuje harmonogram, Gantta lub Kanban z obiektu danych do PNG lub SVG bez okna, w systemie Windows lub Linux64, w jasnym lub ciemnym motywie.

Pomoc sgcPlanner

3,000+Programistów
20+Lat
761+Komponentów
30+Integracji API
5Platform
30-dniowa gwarancja zwrotu pieniędzyNie jesteś zadowolony? Poproś o pełny zwrot pieniędzy w ciągu 30 dni od zakupu. Zobacz politykę zwrotów

Wypróbuj sgcPlanner już dziś

Wersja próbna sgcUI zawiera sgcPlanner i każdy inny produkt sgcUI.