Delphi, C++ Builder & .NET sgcUI의 일부

sgcPlanner, Delphi, C++ Builder & .NET용 스케줄러, 간트 & 칸반

같은 계획을 세 가지 보기로 보여 줍니다. 팀에는 캘린더로, 프로젝트 관리자에게는 간트 차트로, 실제 작업하는 사람에게는 칸반 보드로 보여 주며, 모두 하나의 데이터 객체에 바인딩됩니다. 카드를 완료로 끌면 간트 막대와 캘린더 색상이 즉시 따라옵니다.

VCL, FireMonkey, WinForms, WPF, AvaloniaWin64에서 작업 10,000개를 11ms 만에 자동 일정 계산무료 .NET Community 에디션sgcUI Enterprise에 포함
ProjectPlanner 데모: 같은 작업을 칸반 보드, 간트 차트, 스케줄러로 표시

하나의 계획, 세 가지 보기

팀, 프로젝트 관리자, 실무자를 위한 기능 13가지입니다. Registered로 표시된 기능은 무료 .NET Community 에디션에 포함되지 않습니다.

하나의 데이터 모델

모든 보기가 같은 TsgcPlannerData를 읽고 씁니다.

하나의 데이터 모델

보기 3종, 데이터 객체 하나, 항상 동기화

캘린더, 프로젝트 차트, 작업 보드는 서로 어긋나서는 안 됩니다. sgcPlanner는 여러 보기를 하나의 데이터 객체에 바인딩하므로, 보드에서 완료로 끈 카드는 간트와 스케줄러에 즉시 완료 색상으로 표시되고, 간트에서 옮긴 막대는 캘린더의 이벤트를 옮기며, 스케줄러에서 만든 이벤트는 카드가 됩니다. 각 편집은 한 번의 업데이트이므로 놓을 때마다 모든 보기가 한 번만 다시 그려집니다.

  • TsgcPlannerData가 계획을 보관하고, 각 보기는 Data로 이를 가리킵니다
  • BarColorMode pbcStatus는 보드처럼 간트 막대를 상태별로 색칠합니다
  • SyncSelection은 SelectedId로 선택한 항목을 공유합니다
  • 같은 모델은 보기 없이도 서비스나 단위 테스트에서 동작합니다
  • 아랍어와 히브리어를 위한 오른쪽에서 왼쪽 지원: 스케줄러와 칸반 열이 오른쪽에서부터 흐르고, 간트 작업 그리드가 오른쪽으로 이동하며, MirrorTimeline은 간트 시간 축도 오른쪽에서부터 흐르게 합니다
도움말 항목 읽기
DataSetPlanner 데모: 데이터셋 행과 거기에 바인딩된 계획 보기

하나의 데이터 모델

TDataSet 바인딩, JSON 저장, PNG 렌더링

계획은 이미 데이터베이스에 있고, sgcPlanner는 거기서 만납니다. 데이터셋 소스는 FireDAC, TClientDataSet, dbExpress 같은 모든 TDataSet에 데이터 객체를 바인딩하고, 항목, 리소스, 종속성을 불러오며, 데이터셋의 변경을 따라가고, 보기에서 한 편집을 다시 기록합니다. JSON 저장은 모든 에디션과 모든 플랫폼에서 동작하며, 헤드리스 렌더러는 Linux64를 포함한 서버에서 모든 보기를 PNG나 SVG로 그립니다.

  • TsgcPlannerSource_DataSet은 ItemFields로 필드 이름을 매핑합니다
  • SaveToFile과 LoadFromFile은 문서화된 JSON 형식을 쓰고 읽습니다
  • TsgcPlannerRenderer는 창 없이 스케줄러, 간트, 칸반을 그립니다
  • DB 유닛만 사용하므로 VCL, FireMonkey, 콘솔 애플리케이션에서 동작합니다
도움말 항목 읽기

하나의 데이터 모델

계획에 대한 모든 변경을 실행 취소하고 다시 실행

잘못 놓은 한 번의 드롭 때문에 플래너가 오후를 통째로 잃어서는 안 됩니다. 데이터 객체는 항목, 리소스, 상태, 종속성의 모든 추가, 삭제, 속성 변경, 이동을 누가 하든 기록합니다. 보기에서의 드래그, 제자리 편집, 스마트 붙여넣기, 일정 계산 엔진, 직접 작성한 코드 모두 해당합니다. 데이터에 바인딩된 모든 보기가 하나의 기록을 공유하며, 전체 재일정 계산 같은 변경 묶음은 한 단계로 실행 취소됩니다.

  • Data.Undo의 Undo, Redo, CanUndo, CanRedo
  • BeginGroup과 EndGroup은 여러 변경을 한 단계로 묶습니다
  • UndoCaption과 RedoCaption은 메뉴 항목이나 힌트에 쓸 다음 단계의 이름을 알려 줍니다
  • Limit은 기록의 크기를 제한하고, OnChange로 버튼을 갱신합니다
도움말 항목 읽기

하나의 데이터 모델

보기에서 바로 제목 입력

항목 이름을 바꾸려고 대화 상자를 여는 것은 작업 속도를 떨어뜨립니다. 제자리 편집을 사용하면 F2로 선택한 항목 위에 놓인 작은 편집기에서 제목을 편집할 수 있고, 스케줄러의 빈 공간을 끌어서 만든 약속은 제목 편집기가 바로 열리므로 사용자는 끌고 입력하면 됩니다. 스케줄러, 간트, 칸반에서 똑같이 동작하며, 모든 편집은 실행 취소 기록에 남습니다.

  • InplaceEdit로 켜며, 기본값은 꺼짐입니다
  • F2는 선택한 항목을 편집하고, Enter는 확정하며, Escape는 취소합니다
  • BeginEdit로 직접 만든 메뉴 항목에서 편집기를 엽니다
  • IsEditing은 사용자가 입력하는 동안 Ctrl+Z 같은 폼 키가 기다리도록 알려 줍니다
도움말 항목 읽기

스케줄러: 회의, 사람, 회의실

TsgcVCLScheduler와 TsgcFMXScheduler, 그리고 .NET의 동일한 보기.

TsgcVCLScheduler 일 보기
TsgcVCLScheduler 주중 보기
TsgcVCLScheduler 주 보기
TsgcVCLScheduler 월 보기
TsgcVCLScheduler 아젠다 보기
TsgcVCLScheduler 리소스 타임라인 보기

스케줄러: 회의, 사람, 회의실

캘린더 보기 7종, 사람과 회의실을 나란히

사용자는 캘린더가 어떻게 동작해야 하는지 이미 알고 있으므로, 스케줄러는 기대하는 보기를 제공합니다. 일, 주중, 주, 월, 연, 아젠다, 리소스 타임라인입니다. 연 보기는 열두 개의 미니 달력에 각 날짜를 바쁜 정도에 따라 음영으로 표시하며, 더블 클릭하면 그날이 열립니다. 사람, 회의실, 장비를 고유한 색상의 리소스로 추가하고 일이나 주를 리소스별로 묶으면, 병원에서는 의사별로 열이 나뉘고 작업장에서는 작업 구역별로 나뉩니다. 근무 시간, 표시되는 일 범위, 탐색은 속성과 한 줄 호출로 처리합니다.

  • View: psvDay, psvWorkWeek, psvWeek, psvMonth, psvYear, psvAgenda, psvTimeline
  • 색상을 지정한 AddResource와 리소스마다 열 하나를 만드는 Options.GroupByResource
  • DayStartHour, DayEndHour, SlotMinutes가 시간 그리드를 결정합니다
  • GoToday, Prior, Next, ScrollToTime으로 이동합니다

리소스 타임라인 보기는 Registered 에디션 기능이며, Community에서는 안내 메시지가 표시됩니다.

도움말 항목 읽기

스케줄러: 회의, 사람, 회의실

끌어서 만들고, 이동하고, 크기 조절

회의 예약은 그림을 그리듯 해야 합니다. 빈 슬롯을 가로질러 끌면 스케줄러가 이벤트를 만들고, OnItemCreate 핸들러가 제목을 지정하거나 해당 슬롯을 거부합니다. 이벤트를 다른 시간, 날짜, 리소스 열로 끌거나 가장자리를 당겨 길이를 바꿀 수 있으며, 모든 이동은 슬롯 크기에 맞춰집니다. 같은 동작이 다른 보기에서도 통합니다. 간트에서는 막대를 이동하고 크기를 조절하며, 보드에서는 카드를 열 사이로 옮깁니다.

  • OnItemCreate가 새 이벤트의 이름을 정하거나 거부합니다
  • 이동과 크기 조절은 Options.SlotMinutes에 맞춰집니다
  • 포인터를 따라 미리 보기가 표시되고, 가장자리에서 보기가 스크롤되며, Esc 키로 취소합니다
  • 마우스, 펜, 터치를 지원하며, OnCardMoving으로 보드에서의 이동을 거부할 수 있습니다
도움말 항목 읽기
매주 화요일마다 주간 화요일 스탠드업이 표시된 월 보기

스케줄러: 회의, 사람, 회의실 Registered 에디션 전용

표준 규칙으로 만드는 반복 회의

주간 스탠드업이나 월간 리뷰는 한 번만 입력하면 됩니다. 항목에 iCalendar RRULE을 지정하면 스케줄러가 모든 보기와 모든 기간에서 각 발생을 표시합니다. 이 규칙은 Google Calendar, Outlook, Apple Calendar가 사용하는 RFC 5545 형식이므로, .ics 파일을 가져오고 내보내도 반복 이벤트가 규칙을 유지합니다. 코드에서는 데이터 객체에 임의 기간의 발생을 요청해 예를 들어 회의실 충돌을 확인할 수 있습니다.

  • RecurrenceRule := 'FREQ=WEEKLY;BYDAY=TU'는 매주 화요일에 반복합니다
  • 항목의 Start와 Finish가 첫 번째 발생입니다
  • GetOccurrences는 임의 기간의 발생을 반환합니다
  • iCalendar 파일로 가져오고 내보냅니다

Community 에디션은 반복 항목을 한 번만 표시하고 규칙은 유지합니다.

도움말 항목 읽기
공휴일 캘린더가 스케줄러에 병합된 ICalSubscription 데모

스케줄러: 회의, 사람, 회의실 Registered 에디션 전용

Google Calendar, Outlook, CalDAV, .ics 가져오기와 내보내기

사용자의 일정은 이미 다른 캘린더에 있습니다. TsgcPlannerICalendar는 Google Calendar, Outlook, Apple Calendar의 형식인 .ics 파일을 가져오고 내보냅니다. sgcPlannerWS 브리지를 사용하면 공휴일 목록이나 공유 캘린더 같은 읽기 전용 .ics URL을 구독할 수 있고, 동기화 컴포넌트 세 개가 계획을 Google Calendar 하나, Microsoft Graph를 통한 Microsoft 365 또는 Outlook.com의 Outlook 캘린더 하나, 또는 Nextcloud, iCloud, Fastmail, Radicale 등 모든 CalDAV 서버의 CalDAV 캘린더 하나와 양방향으로 일치시킵니다. 각 컴포넌트는 마지막 동기화 이후의 변경만 읽으며 명확한 충돌 규칙을 갖습니다.

  • TsgcPlannerICalendar의 ImportFromFile과 ExportToFile
  • TsgcPlannerICalSubscription의 URL과 RefreshInterval, ETag와 If-Modified-Since 사용
  • TsgcPlannerGoogleSync의 CalendarId, Direction, AutoSyncInterval
  • TsgcPlannerGraphSync의 CalendarId와 OAuth2 AccessToken, Graph delta 쿼리 사용
  • TsgcPlannerCalDAVSync의 CalendarURL, UserName, Password, 동기화 토큰과 ETag 사용
  • 충돌 시 나중에 변경한 쪽이 우선하며, OnConflict로 다르게 결정할 수 있습니다

Registered 에디션. 브리지 컴포넌트에는 Registered sgcWebSockets도 필요하며, .NET에서는 esegece.sgcPlanner.sgcWebSockets에 있습니다.

도움말 항목 읽기

스케줄러: 회의, 사람, 회의실

스누즈와 해제를 지원하는 알림

아무도 기억하지 못하는 회의에는 아무도 참석하지 않습니다. 항목에 시작 몇 분 전에 울리는 알림을 지정하면, TsgcPlannerReminders가 기한이 된 알림을 찾아 각각에 대해 이벤트를 발생시킵니다. 애플리케이션이 자체 타이머에서 이를 호출하고, 팝업, 토스트, 소리 등 알림을 보여 주는 방식을 결정합니다. 반복 항목은 매 발생마다 다시 알리며, 알림은 스누즈하거나 해제할 수 있습니다.

  • 항목의 ReminderMinutes: -1은 없음, 0은 시작 시점
  • Check는 기한이 된 모든 알림에 대해 OnReminder를 발생시킵니다
  • Snooze와 Dismiss는 현재 또는 다음 발생에 적용됩니다
  • JSON으로 저장되며 실행 취소 기록에 남습니다
도움말 항목 읽기

스케줄러: 회의, 사람, 회의실

항목별 시간대

여러 사무실에 흩어진 팀은 각자의 현지 시간으로 회의를 잡습니다. 각 항목은 자체 시간대를 가질 수 있으므로 뉴욕 10:00에 잡은 통화는 뉴욕 시간 10:00으로 유지되고, 보기는 모든 항목을 하나의 표시 시간대로 보여 줍니다. 표시 시간대를 바꾸면 항목은 새 시간대의 벽시계 시간으로 이동하며, 부동 항목과 종일 항목은 그대로 있습니다.

  • Item.TimeZone은 Start와 Finish의 시간대이며, 부동 항목은 비어 있습니다
  • Data.DisplayTimeZone은 보기가 보여 주는 시간대이며, 비어 있으면 로컬 시간대입니다
  • 변환은 항목을 표시할 때만 이루어집니다
  • 알림도 표시 시간대에서 실행됩니다
도움말 항목 읽기

간트: 프로젝트를 계획하고 크리티컬 패스를 따라가기

TsgcVCLGantt와 TsgcFMXGantt: 작업, 링크, 시간 눈금, 일정 계산 엔진.

ProjectGantt 데모: 종료-시작 및 시작-시작 링크가 있는 WBS 트리

간트: 프로젝트를 계획하고 크리티컬 패스를 따라가기 Registered 에디션 전용

종속성과 지연 시간을 갖춘 간트 차트

간트는 요약 행이 있는 작업 분할 구조 트리를 보여 주고, 모든 막대에 마일스톤과 진행률을 표시하며, 작업 사이의 링크를 화살표로 그립니다. 코드로 작업을 연결하거나 한 막대의 끝에서 다른 막대로 끌어서 연결하고, 종료-시작, 시작-시작, 종료-종료, 시작-종료 중에서 선택하며, 근무 시간 기준의 지연 시간을 추가할 수 있습니다. 시간 눈금은 5분부터 수년까지 확대/축소됩니다.

  • ParentId를 통한 작업 분할 구조, UpdateSummaries로 요약 집계
  • TsgcPlannerDependencyKind를 사용하는 AddDependency: pdkFS, pdkSS, pdkFF, pdkSF
  • 근무 캘린더 기준으로 계산되는 Lag
  • 모든 항목의 Milestone과 Progress, 확대/축소용 TimeScale

Community 에디션은 링크를 저장하지만 그리지는 않으며, 끌어서 링크하는 기능은 Registered 에디션 기능입니다.

도움말 항목 읽기
크리티컬 패스가 강조 표시되고 근무 캘린더의 공휴일이 음영 처리된 간트

간트: 프로젝트를 계획하고 크리티컬 패스를 따라가기 Registered 에디션 전용

자동 일정 계산과 크리티컬 패스 확인

작업 하나가 지연되면 프로젝트 관리자는 막대를 오후 내내 옮기는 대신 새 종료일을 바로 알아야 합니다. 일정 계산 엔진은 근무 캘린더에서 비근무일과 공휴일을 건너뛰며 모든 작업을 선행 작업 직후에 가능한 한 빨리 배치하고, 각 작업의 여유 시간을 계산하며, 프로젝트 종료를 결정하는 작업 체인인 크리티컬 패스를 표시합니다. 필요할 때, 편집할 때마다, 또는 보기가 없는 데이터 객체에서 실행할 수 있습니다.

  • Schedule은 엔진을 실행하고, AutoSchedule은 편집할 때마다 실행합니다
  • ShowCriticalPath는 종료일을 좌우하는 작업을 강조 표시합니다
  • TotalSlack은 작업이 지연될 수 있는 근무 분을 알려 줍니다
  • 근무 캘린더는 WorkDays, WorkTime, Holidays를 설정합니다

Community 에디션에서는 Schedule이 EsgcPlannerError를 발생시키고 ShowCriticalPath는 효과가 없습니다.

도움말 항목 읽기
현재 막대 아래에 회색 기준선 막대가 있고 작업 두 개가 지연된 간트

간트: 프로젝트를 계획하고 크리티컬 패스를 따라가기 Registered 에디션 전용

기준선으로 지연을 한눈에 확인

이해관계자는 계획이 무엇인지보다 얼마나 움직였는지를 묻습니다. 계획이 승인될 때 기준선을 저장하면 간트가 이를 각 현재 막대 아래에 얇은 막대로 그려 주므로, 날짜를 하나도 읽지 않고도 지연된 작업이 보입니다. 기준선 날짜는 항목과 함께 저장되고, JSON으로 저장되며, Microsoft Project XML과 교환되고, 코드에서 읽어 자체 차이 보고서를 만들 수 있습니다.

  • SetBaseline은 한 번의 업데이트로 모든 항목의 Start와 Finish를 복사합니다
  • ShowBaseline은 기준선 막대를 그립니다
  • 모든 항목의 BaselineStart와 BaselineFinish
  • JSON으로 저장하고 Microsoft Project XML에서 읽습니다

Community 에디션은 기준선 날짜를 저장하지만 그리지는 않으며, SetBaseline은 EsgcPlannerError를 발생시킵니다.

도움말 항목 읽기

간트: 프로젝트를 계획하고 크리티컬 패스를 따라가기 Registered 에디션 전용

Microsoft Project와 계획 교환

프로젝트 사무실은 Microsoft Project에서 계획을 받아 다시 보냅니다. TsgcPlannerMSProject는 Project가 열고 저장하는 XML 형식인 Microsoft Project XML(MSPDI)을 가져오고 내보내며, 작업, 링크, 캘린더, 리소스, 할당, 기준선을 포함합니다. 가져오기는 계획을 대체하거나 병합할 수 있고, 형식이 잘못된 문서는 줄 번호와 함께 오류를 발생시킵니다. 링크 15,000개가 있는 작업 10,000개를 가져오는 데 Win64 개발 측정에서 264ms가 걸렸습니다. 리소스와 할당도 작업과 함께 들어옵니다.

  • ImportFromFile, ImportFromStream, ImportFromString
  • ExportToFile은 Microsoft Project가 여는 XML을 씁니다
  • ImportMode: pmiReplace(기본값) 또는 pmiMerge
  • 잘못된 형식의 XML은 줄 번호와 함께 EsgcPlannerError를 발생시킵니다

JSON이 파일 형식인 Community 에디션에는 없습니다.

도움말 항목 읽기

간트: 프로젝트를 계획하고 크리티컬 패스를 따라가기

3단 시간 눈금과 리소스 히스토그램

긴 계획은 헤더에 맥락이 더 많을수록 읽기 쉽고, 과다 배정된 사람은 계획을 공개하기 전에 눈에 띄어야 합니다. 간트 시간 눈금은 예를 들어 주 위에 월, 일 위에 주를 두는 식으로 세 번째 단을 보여 줄 수 있습니다. 차트 아래의 히스토그램 창은 눈금마다 각 리소스가 근무 시간 대비 얼마나 많은 작업을 맡았는지 그리며, 100%를 넘는 부분은 크리티컬 색상으로 칠합니다.

  • TimeScale.TierCount 3은 맨 위 단을 추가하며, 그 레이블은 TopFormat으로 지정합니다
  • ShowHistogram과 HistogramHeight로 창을 표시합니다
  • HistogramResourceId는 리소스 하나를 보여 주거나, 모든 리소스를 각자의 색상으로 쌓아 보여 줍니다
  • 창은 차트의 스크롤과 확대/축소를 따라갑니다
도움말 항목 읽기

칸반: 계획을 따라가는 보드

TsgcVCLKanban과 TsgcFMXKanban: 상태마다 열 하나, 간트와 같은 데이터를 사용합니다.

상태 열 다섯 개, 태그, 담당자 이니셜, 마감일, 진행률 막대가 있는 칸반 보드

칸반: 계획을 따라가는 보드

팀이 실제로 일할 수 있는 작업 보드

실무자가 원하는 것은 차트가 아니라 보드입니다. 칸반 보기는 상태마다 열 하나를 만들고 개수 배지와 접기 화살표를 제공하며, 각 카드에는 제목, 태그, 리소스 이니셜, 마감일, 진행률이 표시됩니다. 카드를 다른 열에 놓으면 공유 데이터에서 상태와 순위가 바뀌어 간트와 스케줄러가 즉시 업데이트되고, 코드에서는 모든 이동을 실행 전에 거부할 수 있습니다. 보드는 다른 보기와 같은 라이트 또는 다크 테마를 따릅니다.

  • ColumnSource는 상태에서 열을 만들거나 직접 지정한 Columns를 사용합니다
  • CardOptions로 카드에 표시할 내용을 선택합니다
  • OnCardMoving이 놓기를 허용하거나 거부합니다
  • 열 너비와 접기는 모든 에디션에서 동작합니다
도움말 항목 읽기
TaskBoard 데모: 열 다섯 개, 리소스별 스윔레인 세 개, 제한을 넘은 열 하나

칸반: 계획을 따라가는 보드 Registered 에디션 전용

스윔레인과 WIP 제한으로 작업 흐름 유지

스윔레인은 리소스, 상위 작업, 태그별로 가로 띠를 나누어 사람이나 에픽마다 한 행을 제공하며, 진행 중 작업(WIP) 제한은 모든 레인을 합산해 각 열의 상한을 정합니다. 경고 모드에서는 제한을 넘은 열이 표시되고, 차단 모드에서는 제한을 넘게 되는 카드를 놓을 수 없습니다. 열 8개와 레인 6개에 카드 5,000장을 배치하는 데 Win64에서 5ms가 걸렸습니다.

  • SwimlaneBy: pslResource, pslParent, pslTag
  • 열 항목마다 WIPLimit, 0이면 제한 없음
  • WIPMode: pwmWarn은 열을 표시하고, pwmBlock은 놓기를 거부합니다
  • 레인과 제한은 다른 보기와 같은 데이터에서 동작합니다

Community 에디션은 SwimlaneBy와 WIP 제한을 무시하며, 열, 너비, 접기는 동작합니다.

도움말 항목 읽기

접근성

UI Automation을 통한 화면 읽기 프로그램, 키보드, 고대비 지원, 별도 설정이 필요 없습니다.

접근성

마우스 없이 읽고 조작할 수 있는 플래너의 모든 보기

sgcPlanner는 스케줄러, 타임라인, 간트, 칸반 보기를 Microsoft UI Automation에 노출합니다. 날짜, 레인, 열, 시간이 있는 항목, 간트 종속성이 모두 포함됩니다. 마우스로 끌어서 하는 모든 작업은 키보드로도 할 수 있습니다.

  • 스케줄러와 타임라인: Ins는 포커스된 슬롯에 항목을 추가하고, Del은 삭제하며, Ctrl+화살표는 항목을 이동하고, Ctrl+Shift+화살표는 종료 시간을 변경합니다
  • 간트: Ctrl+Left와 Ctrl+Right는 작업을 한 눈금 이동하고, Ctrl+K는 종속성을 시작하며, Ctrl+Shift+K는 포커스된 작업의 종속성을 차례로 순회합니다
  • 칸반: Ctrl+Left와 Ctrl+Right는 카드를 인접한 열로 이동하고, Ctrl+Up과 Ctrl+Down은 순서를 바꿉니다
  • Windows 고대비 테마에서는 애플리케이션의 항목 색이 윤곽선이 있는 시스템 색으로 대체되므로, 어떤 정보도 색에만 의존하지 않습니다

접근성은 무료 Community 에디션을 포함한 모든 에디션에서 기본으로 켜져 있으며, Delphi 7부터 Delphi 13까지 모든 Delphi 및 C++Builder 버전의 VCL, Windows의 FireMonkey, 그리고 WinForms, WPF, Avalonia에서 지원됩니다. Delphi와 C++Builder에서는 AccessibleName과 AccessibleDescription이 UI Automation에 노출되는 이름과 설명을 설정하고, .NET에서는 각 프레임워크의 표준 접근성 이름과 도움말 텍스트가 같은 역할을 합니다. 접근성 적합성 보고서를 참조하세요.

도움말 항목 읽기

sgcPlanner 동작 보기

sgcUI 제품군 데모 속의 sgcPlanner: 내장 시뮬레이션 데이터로 오프라인에서 실행되는 완전한 애플리케이션입니다.

실제 워크로드에서 측정

1920 x 1080에서 Win64 릴리스 빌드를 개발 중 측정한 결과입니다. Win32는 약 1.5배에서 1.7배 느립니다.

측정 항목결과조건
링크 15,000개와 공휴일 30개가 있는 작업 10,000개(요약 1,000개, 3단계)의 자동 일정 계산, 크리티컬 패스 포함11msWin64 릴리스 빌드
링크 15,000개가 있는 작업 10,000개를 스크롤할 때의 간트 프레임11msWin64 릴리스 빌드, 1920 x 1080
열 8개와 레인 6개에 카드 5,000장을 배치하는 칸반 레이아웃5msWin64 릴리스 빌드
시간 지정 항목 2,000개가 있는 스케줄러 주 보기, 레이아웃1msWin64 릴리스 빌드
MS Project XML에서 링크 15,000개가 있는 작업 10,000개 가져오기264msWin64 릴리스 빌드

출처: 이 수치를 설명하는 도움말 항목.

sgcPlanner로 개발하는 사람들

프로젝트 및 엔지니어링 소프트웨어

프로젝트 사무실과 엔지니어링 회사

프로젝트를 작업 분할 구조로 계획하고, 작업을 연결하면 엔진이 회사 캘린더에 맞춰 일정을 계산하며, 크리티컬 패스가 종료일을 좌우하는 요소를 보여 줍니다. 승인 시점에 기준선을 저장하면 모든 막대 아래에 지연이 표시됩니다. 계획은 Microsoft Project에서 가져오고 XML로 다시 내보내며, 같은 작업이 팀을 위한 보드에도 나타납니다.

  • 종속성이 있는 간트
  • 자동 일정 계산과 크리티컬 패스
  • 기준선
  • MS Project XML
ProjectGantt 데모 실행

예약 및 약속 시스템

병원, 작업장, 회의실 예약

의사, 작업 구역, 회의실을 각각 하나의 열로 보여 주고, 직원이 빈 슬롯을 가로질러 끌어서 예약하게 합니다. 반복 약속은 표준 규칙으로 만들고, 공휴일은 .ics 구독으로 받으며, Google Calendar 브리지는 담당자 본인의 캘린더와 일치시킵니다. 데이터셋 소스는 모든 예약을 테이블에 바로 다시 기록합니다. 직원은 모든 보기에서 같은 예약을 봅니다.

  • 스케줄러 보기와 리소스
  • 반복
  • DataSet 바인딩
  • Google Calendar 동기화
TeamScheduler 데모 실행

작업 추적 및 헬프 데스크 도구

애자일 팀과 서비스 데스크

팀에는 사람별 스윔레인과 열별 진행 중 작업 제한이 있는 칸반 보드를, 관리자에게는 같은 티켓의 간트를 제공하세요. 카드를 완료로 옮기면 세 보기가 하나의 데이터 객체를 공유하므로 막대와 캘린더 이벤트의 색상이 즉시 바뀝니다. 야간 이메일에 넣을 상태 이미지는 서버에서 헤드리스로 렌더링할 수 있습니다.

  • 칸반
  • 스윔레인과 WIP 제한
  • 동기화된 보기
  • 헤드리스 렌더링
TaskBoard 데모 실행

몇 줄로 만드는 팀 스케줄러

Delphi, C++ Builder, C#에서 같은 API를 사용합니다. 두 사람, 반복 규칙으로 만든 매일 스탠드업, 사용자가 새 회의를 끌어서 만들 수 있는 주 보기입니다.

VCL 주 스케줄러: 두 사람을 리소스로 두고, 반복 규칙으로 매일 스탠드업을 만들며, 끌어서 생성합니다.

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.

도움말 항목 읽기 →

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));
}

도움말 항목 읽기 →

WinForms용 C# 버전.

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

도움말 항목 읽기 →

Delphi의 간트

작업 세 개, 링크 두 개, 기준선, 크리티컬 패스, 일정 계산 엔진입니다(여기서 사용하는 간트 기능은 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.

반복 규칙과 간트의 Schedule, SetBaseline 호출은 Registered 에디션 기능입니다. 무료 Community 에디션은 반복 항목을 한 번만 표시합니다.

sgcPlanner 데모 실행하기

컴파일된 데모 실행 파일은 sgcUI_bin.zip에 있으며 설치가 필요 없습니다. 모든 데모의 소스는 Delphi, C++ Builder, .NET용으로 패키지에 포함되어 있습니다.

ProjectPlanner

ProjectPlanner

간트, 칸반, 스케줄러가 하나의 데이터 객체에서 항상 동기화됩니다.

TeamScheduler

TeamScheduler

연 보기를 포함한 보기 7종, 리소스 그룹, 반복 회의, 알림, 시간대, 실행 취소와 다시 실행, 제자리 편집.

Registered 에디션 전용 ProjectGantt

링크, 자동 일정 계산, 크리티컬 패스, 기준선, Microsoft Project XML, 3단 시간 눈금, 리소스 히스토그램.

Registered 에디션 전용 TaskBoard

칸반 보드의 상태 열, 리소스별 스윔레인, WIP 제한.

DataSetPlanner

DataSetPlanner

항목, 리소스, 종속성을 TDataSet에 바인딩하고 편집 내용을 다시 기록합니다.

Registered 에디션 전용 ICalendarSync

.ics 파일을 가져오고 내보냅니다.

ICalSubscription

Registered 에디션 전용 ICalSubscription

공휴일 목록 같은 읽기 전용 .ics URL을 따라갑니다.

Registered 에디션 전용 GoogleCalendarSync

sgcWebSockets를 통해 Google Calendar 하나와 양방향으로 동기화합니다.

Registered 에디션 전용 OutlookCalendarSync

Microsoft Graph를 통해 Microsoft 365 또는 Outlook.com의 Outlook 캘린더 하나와 양방향으로 동기화합니다.

Registered 에디션 전용 CalDAVSync

Nextcloud, iCloud, Fastmail, Radicale 같은 CalDAV 캘린더 하나와 양방향으로 동기화합니다.

HeadlessReport

창 없이 보기를 이미지 파일로 렌더링합니다.

PlannerFMX

FireMonkey 애플리케이션의 세 가지 보기.

컴파일된 데모

sgcUI 제품 전체의 실행 파일을 제공하며, 설치가 필요 없습니다.

sgcUI_bin.zip 다운로드 →

sgcPlanner가 포함된 곳

sgcPlanner는 sgcUI Enterprise에 포함되며 단독으로도 판매됩니다. 또한 All-Access 번들에도 포함됩니다.

sgcPlanner 단일 패키지

€249 / 개발자, 전체 소스 코드, 1년 업데이트.

sgcPlanner 구매 → 가격 보기 →

sgcUI Enterprise

sgcUI 제품 14개 전체, €699부터.

Enterprise 보기 →

.NET

.NET 에디션도 가격이 같습니다. 무료 Community 에디션은 NuGet에 다음 이름으로 있습니다: esegece.sgcPlanner.Community.

가격 보기 →

무료 Community 에디션은 NuGet의 esegece.sgcPlanner.Community입니다. 포함 내용은 표에서 확인하세요.

기능Community (무료)Registered 에디션
스케줄러 일, 주중, 주, 월, 아젠다 보기✓✓
간트 작업 트리, 요약, 마일스톤, 진행률✓✓
칸반 열, 접기, 카드 옵션✓✓
모든 보기의 드래그 앤 드롭✓✓
DataSet 바인딩, JSON, 테마, 헤드리스 PNG 및 SVG✓✓
스케줄러 연 보기✓✓
알림과 항목별 시간대✓✓
실행 취소와 다시 실행, 제자리 편집✓✓
3단 간트 시간 눈금과 리소스 히스토그램✓✓
반복−✓
스케줄러 리소스 타임라인 보기−✓
종속성 화살표와 끌어서 링크−✓
자동 일정 계산, 크리티컬 패스, 기준선−✓
스윔레인과 WIP 제한−✓
iCalendar와 Microsoft Project XML−✓
Google Calendar, Outlook, CalDAV 동기화와 iCal 구독(sgcPlannerWS)−✓

지원 프레임워크 및 플랫폼

sgcPlanner의 컴포넌트

컴포넌트기능
TsgcPlannerData공유 모델: 항목, 리소스, 상태, 종속성, 근무 캘린더.
TsgcVCLScheduler, TsgcFMXScheduler일, 주중, 주, 월, 연, 아젠다, 타임라인 보기.
TsgcVCLGantt, TsgcFMXGantt작업 트리, 막대, 링크, 일정 계산 엔진, 크리티컬 패스, 기준선.
TsgcVCLKanban, TsgcFMXKanban상태 열, 카드, 스윔레인, WIP 제한.
TsgcPlannerSource_DataSetTDataSet에서 가져오는 계획.
TsgcPlannerICalendar, TsgcPlannerMSProjectiCalendar .ics 파일과 Microsoft Project XML을 읽고 씁니다(Registered).
TsgcPlannerRenderer헤드리스 PNG 및 SVG 출력.
TsgcPlannerGoogleSync, TsgcPlannerGraphSync, TsgcPlannerCalDAVSync, TsgcPlannerICalSubscription (sgcPlannerWS)sgcWebSockets를 통한 Google Calendar, Microsoft Graph 기반 Outlook과 Microsoft 365, CalDAV 서버와의 양방향 동기화, 그리고 iCal 구독. Registered 전용.
대상컴포넌트플랫폼
Delphi 7부터 13, VCL스케줄러, 간트, 칸반Win32 및 Win64
Delphi XE6부터 13, FireMonkeyTsgcFMXScheduler, TsgcFMXGantt, TsgcFMXKanbanWindows, macOS, iOS, Android
C++ Builder 2007부터 13VCL 및 FMX 보기생성된 .hpp 헤더와 정적 라이브러리
Delphi 10.2부터 13, 프레임워크 중립데이터, 엔진, JSON, iCalendar, Microsoft Project, 렌더러Linux64, 예를 들어 서버에서 계획을 렌더링할 때
.NET Framework 4.7.2, .NET 8, 9, 10TsgcWinFormsScheduler, 간트, 칸반, 그리고 WPF와 Avalonia 대응 컴포넌트WinForms, WPF, Avalonia, 헤드리스 PNG 및 SVG

자주 묻는 질문

예, Registered 에디션에서 가능합니다. TsgcPlannerMSProject는 작업, 링크, 캘린더, 리소스, 할당, 기준선이 포함된 Microsoft Project XML(MSPDI)을 읽고 씁니다. 지원되는 형식은 XML이므로 Project에서 계획을 XML로 저장하세요.

네, 양방향으로 가능합니다. Google Calendar는 TsgcPlannerGoogleSync로 동기화되고, Microsoft 365와 Outlook.com의 Outlook 캘린더는 Microsoft Graph를 통해 TsgcPlannerGraphSync로, Nextcloud, iCloud, Fastmail, Radicale 같은 CalDAV 캘린더는 TsgcPlannerCalDAVSync로 동기화됩니다. .ics URL을 게시하는 다른 모든 캘린더는 TsgcPlannerICalSubscription으로 읽기 전용으로 따라갈 수 있고, .ics 파일은 TsgcPlannerICalendar로 가져오고 내보냅니다. 브리지에는 Registered 에디션과 sgcWebSockets가 필요합니다.

도움말에는 Win64 릴리스 빌드의 개발 측정값이 게시되어 있습니다. 링크 15,000개가 있는 작업 10,000개의 자동 일정 계산은 11ms, 같은 작업 10,000개를 스크롤할 때의 프레임은 11ms였습니다. 카드 5,000장의 칸반 레이아웃은 5ms였습니다. Win32는 약 1.5배에서 1.7배 느립니다.

드래그 앤 드롭이 되는 세 가지 보기, 요약, 마일스톤, 진행률, 근무 캘린더, DataSet 바인딩, JSON, 헤드리스 출력이 포함됩니다. 반복, 자동 일정 계산, 그려지는 종속성, 크리티컬 패스, 기준선, 타임라인 보기, 스윔레인, WIP 제한, iCalendar, Microsoft Project XML, 브리지는 Registered 기능입니다.

예. TsgcPlannerSource_DataSet은 FireDAC, TClientDataSet, dbExpress 같은 모든 TDataSet에 데이터 객체를 바인딩합니다. 필드 맵으로 항목, 리소스, 종속성을 불러오고, 데이터셋의 변경을 따라가며, 보기에서 한 편집을 다시 기록합니다.

예, FireMonkey를 통해 가능합니다. TsgcFMXScheduler, TsgcFMXGantt, TsgcFMXKanban은 Delphi XE6부터 Windows, macOS, iOS, Android에서 실행됩니다. Linux64에서는 데이터 모델, 엔진, JSON, iCalendar, Microsoft Project XML, 렌더러가 Delphi 10.2부터 컴파일됩니다.

예. TsgcPlannerRenderer는 Windows나 Linux64에서 창 없이 데이터 객체의 스케줄러, 간트, 칸반을 라이트 또는 다크 테마의 PNG나 SVG로 그립니다.

sgcPlanner 도움말

3,000+개발자
20+년
761+컴포넌트
30+API 통합
5플랫폼
30일 환불 보장만족하지 않으세요? 구매 후 30일 이내에 전액 환불을 요청하세요. 환불 정책 보기

지금 sgcPlanner를 체험해 보세요

sgcUI 체험판에는 sgcPlanner와 다른 모든 sgcUI 제품이 포함되어 있습니다.