Delphi, C++ Builder y .NET Parte de sgcUI

sgcPlanner, Scheduler, Gantt y Kanban para Delphi, C++ Builder y .NET

Tres vistas del mismo plan. Muéstralo como calendario para el equipo, como diagrama de Gantt para el director de proyecto y como tablero Kanban para quienes hacen el trabajo, todo enlazado a un único objeto de datos. Arrastra una tarjeta a Hecho y la barra del Gantt y el color del calendario la siguen al instante.

VCL, FireMonkey, WinForms, WPF, Avalonia10.000 tareas planificadas automáticamente en 11 ms en Win64Edición .NET Community gratuitaIncluido en sgcUI Enterprise
Demo ProjectPlanner: las mismas tareas en un tablero Kanban, un diagrama de Gantt y un Scheduler

Un plan, tres vistas

Trece funciones para el equipo, el director de proyecto y quienes hacen el trabajo. Las funciones marcadas como registradas no están en la edición .NET Community gratuita.

Un único modelo de datos

Todas las vistas leen y escriben el mismo TsgcPlannerData.

Un único modelo de datos

Tres vistas, un objeto de datos, siempre sincronizados

Un calendario, un diagrama de proyecto y un tablero de tareas no deberían contradecirse nunca. sgcPlanner enlaza cualquier número de vistas a un único objeto de datos, de modo que una tarjeta arrastrada a Hecho en el tablero se dibuja con el color de Hecho en el Gantt y en el Scheduler al instante, una barra movida en el Gantt mueve el evento en el calendario, y un evento creado en el Scheduler se convierte en tarjeta. Cada edición es una sola actualización, así que cada vista se repinta una vez por cada suelta.

  • TsgcPlannerData guarda el plan y cada vista apunta a él mediante Data
  • BarColorMode pbcStatus colorea las barras del Gantt por estado, igual que el tablero
  • SyncSelection comparte el elemento seleccionado mediante SelectedId
  • El mismo modelo funciona sin ninguna vista, en un servicio o en una prueba unitaria
  • De derecha a izquierda para árabe y hebreo: las columnas del Scheduler y del Kanban fluyen desde la derecha, la cuadrícula de tareas del Gantt pasa a la derecha, y MirrorTimeline hace que el eje de tiempo del Gantt también corra desde la derecha
Leer el tema de la ayuda
Demo DataSetPlanner: filas de un dataset y las vistas del plan enlazadas a ellas

Un único modelo de datos

Enlaza un TDataSet, guarda JSON, renderiza PNG

Tu plan ya vive en una base de datos, y sgcPlanner lo encuentra ahí. Una fuente de datos DataSet enlaza el objeto de datos con cualquier TDataSet, como FireDAC, TClientDataSet o dbExpress, carga elementos, recursos y dependencias, sigue los cambios de los datasets y escribe de vuelta las ediciones hechas en las vistas. La persistencia JSON funciona en todas las ediciones y en todas las plataformas, y el renderizador sin ventana dibuja cualquier vista en PNG o SVG en un servidor, Linux64 incluido.

  • TsgcPlannerSource_DataSet asigna los nombres de tus campos mediante ItemFields
  • SaveToFile y LoadFromFile escriben y leen el formato JSON documentado
  • TsgcPlannerRenderer dibuja el Scheduler, el Gantt o el Kanban sin ventana
  • Solo usa la unidad DB, así que funciona en VCL, FireMonkey y aplicaciones de consola
Leer el tema de la ayuda

Un único modelo de datos

Deshacer y rehacer cada cambio del plan

Un arrastre equivocado nunca debería costarle la tarde a un planificador. El objeto de datos registra cada alta, baja, cambio de propiedad y movimiento de un elemento, un recurso, un estado o una dependencia, lo haga quien lo haga: un arrastre en una vista, una edición en el sitio, Smart Paste, el motor de planificación o tu propio código. Todas las vistas enlazadas a los datos comparten un único historial, y un grupo de cambios, como una pasada completa de replanificación, se deshace en un solo paso.

  • Data.Undo con Undo, Redo, CanUndo y CanRedo
  • BeginGroup y EndGroup convierten muchos cambios en un solo paso
  • UndoCaption y RedoCaption nombran el paso siguiente para una opción de menú o una sugerencia
  • Limit limita el historial, y OnChange actualiza los botones
Leer el tema de la ayuda

Un único modelo de datos

Escribe el título directamente en la vista

Abrir un cuadro de diálogo para renombrar un elemento hace lento el trabajo. Con la edición en el sitio, F2 edita el título del elemento seleccionado en un pequeño editor colocado sobre él, y una cita creada arrastrando sobre un espacio vacío del Scheduler abre su editor de título al instante, de modo que el usuario arrastra y escribe. Funciona igual en el Scheduler, el Gantt y el tablero Kanban, y cada edición queda registrada en el historial de deshacer.

  • InplaceEdit lo activa, viene desactivado por defecto
  • F2 edita el elemento seleccionado, Intro acepta y Escape cancela
  • BeginEdit abre el editor desde tu propia opción de menú
  • IsEditing indica a las teclas del formulario, como Ctrl+Z, que esperen mientras el usuario escribe
Leer el tema de la ayuda

Scheduler: reuniones, personas y salas

TsgcVCLScheduler y TsgcFMXScheduler, y las mismas vistas en .NET.

Vista de día de TsgcVCLScheduler
Vista de semana laboral de TsgcVCLScheduler
Vista de semana de TsgcVCLScheduler
Vista de mes de TsgcVCLScheduler
Vista de agenda de TsgcVCLScheduler
Vista de línea de tiempo de recursos de TsgcVCLScheduler

Scheduler: reuniones, personas y salas

Siete vistas de calendario, personas y salas lado a lado

Los usuarios ya saben cómo debe comportarse un calendario, así que el Scheduler les da las vistas que esperan: día, semana laboral, semana, mes, año, agenda y una línea de tiempo de recursos. La vista de año muestra doce minimeses con cada día sombreado según lo ocupado que esté, y un doble clic abre ese día. Añade personas, salas o máquinas como recursos con su propio color y agrupa el día o la semana por recurso, de modo que una clínica ve a cada médico en una columna y un taller ve cada puesto. El horario laboral, el rango de día visible y la navegación son propiedades y llamadas de una línea.

  • View: psvDay, psvWorkWeek, psvWeek, psvMonth, psvYear, psvAgenda, psvTimeline
  • AddResource con un color, y Options.GroupByResource para una columna por recurso
  • DayStartHour, DayEndHour y SlotMinutes definen la cuadrícula horaria
  • GoToday, Prior, Next y ScrollToTime permiten moverse

La vista Timeline de recursos es registrada; en Community esa vista muestra un aviso.

Leer el tema de la ayuda

Scheduler: reuniones, personas y salas

Arrastra para crear, mover y redimensionar

Reservar una reunión debería sentirse como dibujarla. Arrastra sobre huecos vacíos y el Scheduler crea un evento, y tu manejador OnItemCreate le pone el título o rechaza el hueco. Arrastra un evento a otra hora, otro día u otra columna de recurso, o tira de un borde para cambiar su duración, y cada movimiento se ajusta al tamaño del hueco. Los mismos gestos funcionan en las demás vistas: las barras se mueven y se redimensionan en el Gantt, y las tarjetas cambian de columna en el tablero.

  • OnItemCreate pone nombre a un evento nuevo o lo rechaza
  • Los movimientos y cambios de tamaño se ajustan a Options.SlotMinutes
  • Una vista previa sigue al puntero, la vista se desplaza en sus bordes y Escape cancela
  • Ratón, lápiz y táctil; OnCardMoving puede vetar un movimiento en el tablero
Leer el tema de la ayuda
Vista de mes con una reunión semanal de los martes en cada martes

Scheduler: reuniones, personas y salas Solo registrada

Reuniones recurrentes con reglas estándar

Una reunión semanal o una revisión mensual debería introducirse una sola vez. Dale a un elemento una RRULE de iCalendar y el Scheduler muestra cada repetición en cualquier vista y cualquier periodo. La regla usa el formato RFC 5545 que emplean Google Calendar, Outlook y Apple Calendar, así que los eventos recurrentes conservan su regla al importar o exportar archivos .ics, y tu código puede pedir al objeto de datos las repeticiones de cualquier rango de fechas, por ejemplo para comprobar conflictos en una sala.

  • RecurrenceRule := 'FREQ=WEEKLY;BYDAY=TU' se repite cada martes
  • El inicio y el fin del elemento son la primera repetición
  • GetOccurrences devuelve las repeticiones de cualquier periodo
  • Se importa y se exporta con archivos iCalendar

Community muestra un elemento recurrente una sola vez y conserva su regla.

Leer el tema de la ayuda
Demo ICalSubscription: un calendario de festivos fusionado en el Scheduler

Scheduler: reuniones, personas y salas Solo registrada

Google Calendar, Outlook, CalDAV y .ics, de entrada y de salida

Las citas de tus usuarios ya viven en otros calendarios. TsgcPlannerICalendar importa y exporta archivos .ics, el formato de Google Calendar, Outlook y Apple Calendar. Con el puente sgcPlannerWS, una suscripción sigue cualquier URL .ics de solo lectura, como una lista de festivos públicos o un calendario compartido, y tres componentes de sincronización mantienen un plan al día en ambos sentidos con un Google Calendar, con un calendario de Outlook de Microsoft 365 u Outlook.com mediante Microsoft Graph, o con un calendario CalDAV de Nextcloud, iCloud, Fastmail, Radicale o cualquier otro servidor CalDAV. Cada uno lee solo los cambios desde la última sincronización y tiene una regla clara de conflictos.

  • TsgcPlannerICalendar con ImportFromFile y ExportToFile
  • TsgcPlannerICalSubscription con URL y RefreshInterval, usando ETag e If-Modified-Since
  • TsgcPlannerGoogleSync con CalendarId, Direction y AutoSyncInterval
  • TsgcPlannerGraphSync con CalendarId y un AccessToken OAuth2, usando la consulta delta de Graph
  • TsgcPlannerCalDAVSync con CalendarURL, UserName y Password, usando tokens de sincronización y ETags
  • El cambio más reciente gana un conflicto, y OnConflict puede decidir otra cosa

Edición registrada. Los componentes puente también necesitan un sgcWebSockets registrado; en .NET están en esegece.sgcPlanner.sgcWebSockets.

Leer el tema de la ayuda

Scheduler: reuniones, personas y salas

Recordatorios con posponer y descartar

Una reunión que nadie recuerda es una reunión a la que nadie asiste. Dale a un elemento un recordatorio en minutos antes de su inicio, y TsgcPlannerReminders encuentra los recordatorios vencidos y lanza un evento por cada uno. Tu aplicación lo llama desde su propio temporizador y decide cómo se muestra el recordatorio: una ventana emergente, un aviso o un sonido. Un elemento recurrente vuelve a avisar en cada repetición, y un recordatorio se puede posponer o descartar.

  • ReminderMinutes del elemento: -1 para ninguno, 0 al inicio
  • Check lanza OnReminder por cada recordatorio vencido
  • Snooze y Dismiss para la repetición actual o la siguiente
  • Se guarda en JSON y queda registrado en el historial de deshacer
Leer el tema de la ayuda

Scheduler: reuniones, personas y salas

Zonas horarias por elemento

Los equipos repartidos en varias oficinas reservan reuniones en su propia hora local. Cada elemento puede llevar su propia zona horaria, así que una llamada fijada a las 10:00 en Nueva York se mantiene a las 10:00 hora de Nueva York, mientras las vistas muestran todos los elementos en una única zona de visualización. Si cambias la zona de visualización, los elementos pasan a su hora de reloj en la nueva zona, mientras que los elementos flotantes y de todo el día se quedan donde están.

  • Item.TimeZone es la zona de Start y Finish, vacía para un elemento flotante
  • Data.DisplayTimeZone es la zona que muestran las vistas, vacía para la zona local
  • La conversión se hace solo cuando se muestran los elementos
  • Los recordatorios también se ejecutan en la zona de visualización
Leer el tema de la ayuda

Gantt: planifica proyectos y sigue la ruta crítica

TsgcVCLGantt y TsgcFMXGantt: tareas, vínculos, una escala de tiempo y un motor de planificación.

Demo ProjectGantt: árbol WBS con vínculos de fin a inicio y de inicio a inicio

Gantt: planifica proyectos y sigue la ruta crítica Solo registrada

Diagramas de Gantt con dependencias y retardo

El Gantt muestra un árbol de desglose del trabajo con filas de resumen, hitos y progreso en cada barra, y dibuja los vínculos entre tareas como flechas. Vincula tareas desde el código o arrastrando desde el final de una barra a otra, elige fin a inicio, inicio a inicio, fin a fin o inicio a fin, y añade un retardo en tiempo laborable. La escala de tiempo hace zoom desde 5 minutos hasta años.

  • Desglose del trabajo mediante ParentId, acumulado con UpdateSummaries
  • AddDependency con TsgcPlannerDependencyKind: pdkFS, pdkSS, pdkFF, pdkSF
  • Lag contado sobre el calendario laboral
  • Milestone y Progress en cada elemento, TimeScale para el zoom

Community almacena y guarda los vínculos pero no los dibuja, y arrastrar para vincular es registrada.

Leer el tema de la ayuda
Gantt con la ruta crítica resaltada y los festivos sombreados según el calendario laboral

Gantt: planifica proyectos y sigue la ruta crítica Solo registrada

Planificación automática y ruta crítica

Cuando una tarea se retrasa, el director de proyecto necesita la nueva fecha de fin ya, no después de una tarde moviendo barras. El motor de planificación coloca cada tarea lo antes posible tras sus predecesoras en el calendario laboral, saltándose los días no laborables y los festivos, calcula la holgura de cada tarea y marca la ruta crítica, la cadena de tareas que fija el final del proyecto. Ejecútalo a petición, tras cada edición o sobre un objeto de datos sin ninguna vista.

  • Schedule ejecuta el motor, AutoSchedule lo ejecuta tras cada edición
  • ShowCriticalPath resalta las tareas que determinan la fecha de fin
  • TotalSlack da los minutos laborables que una tarea puede retrasarse
  • El calendario laboral define WorkDays, WorkTime y Holidays

En Community, Schedule lanza EsgcPlannerError y ShowCriticalPath no tiene efecto.

Leer el tema de la ayuda
Gantt con barras grises de línea base bajo las barras actuales y dos tareas con retraso

Gantt: planifica proyectos y sigue la ruta crítica Solo registrada

Las líneas base muestran el retraso de un vistazo

Los interesados rara vez preguntan cuál es el plan; preguntan cuánto se ha desviado. Guarda una línea base cuando se apruebe el plan y el Gantt la dibuja como una barra fina bajo cada barra actual, de modo que una tarea retrasada se ve sin leer una sola fecha. Las fechas de la línea base se guardan con los elementos, se salvan en JSON y se intercambian con Microsoft Project XML, y tu código puede leerlas para construir su propio informe de desviaciones.

  • SetBaseline copia Start y Finish de cada elemento en una sola actualización
  • ShowBaseline dibuja las barras de la línea base
  • BaselineStart y BaselineFinish en cada elemento
  • Se guarda en JSON y se lee desde Microsoft Project XML

Community almacena y guarda las fechas de la línea base pero no las dibuja; SetBaseline lanza EsgcPlannerError.

Leer el tema de la ayuda

Gantt: planifica proyectos y sigue la ruta crítica Solo registrada

Intercambia planes con Microsoft Project

Las oficinas de proyectos reciben planes de Microsoft Project y los devuelven. TsgcPlannerMSProject importa y exporta Microsoft Project XML (MSPDI), el formato XML que Project abre y guarda, con tareas, vínculos, calendario, recursos, asignaciones y líneas base. Una importación puede reemplazar el plan o fusionarse con él, y un documento mal formado lanza un error con su número de línea. Importar 10.000 tareas con 15.000 vínculos tardó 264 ms en una medición de desarrollo en Win64. Los recursos y las asignaciones llegan junto con las tareas.

  • ImportFromFile, ImportFromStream y ImportFromString
  • ExportToFile escribe el XML que abre Microsoft Project
  • ImportMode: pmiReplace (por defecto) o pmiMerge
  • Un XML mal formado lanza EsgcPlannerError con el número de línea

No está en la edición Community, donde JSON es el formato de archivo.

Leer el tema de la ayuda

Gantt: planifica proyectos y sigue la ruta crítica

Una escala de tiempo de tres niveles y un histograma de recursos

Los planes largos se leen mejor con más contexto en el encabezado, y las personas sobrecargadas deberían verse antes de publicar el plan. La escala de tiempo del Gantt puede mostrar un tercer nivel, por ejemplo el mes sobre las semanas sobre los días. Un panel de histograma en la parte inferior del gráfico dibuja, para cada marca, cuánto trabajo tiene cada recurso frente a su tiempo laborable, y la parte que supera el 100% se pinta con el color crítico.

  • TimeScale.TierCount 3 añade un nivel superior, con TopFormat para sus etiquetas
  • ShowHistogram y HistogramHeight muestran el panel
  • HistogramResourceId muestra un recurso, o todos los recursos apilados, cada uno con su color
  • El panel sigue el desplazamiento y el zoom del gráfico
Leer el tema de la ayuda

Kanban: tableros que siguen al plan

TsgcVCLKanban y TsgcFMXKanban: una columna por estado, sobre los mismos datos que el Gantt.

Tablero Kanban con cinco columnas de estado, etiquetas, iniciales de responsable, fechas de vencimiento y barras de progreso

Kanban: tableros que siguen al plan

Un tablero de tareas desde el que tu equipo puede trabajar

Quienes hacen el trabajo quieren un tablero, no un gráfico. La vista Kanban construye una columna por estado, con un contador y una flecha para plegar, y cada tarjeta muestra su título, etiquetas, iniciales del recurso, fecha de vencimiento y progreso. Soltar una tarjeta en otra columna cambia su estado y su posición en los datos compartidos, así que el Gantt y el Scheduler se actualizan al instante, y tu código puede vetar cualquier movimiento antes de que ocurra. El tablero sigue el mismo tema claro u oscuro que las demás vistas.

  • ColumnSource construye las columnas a partir de los estados, o de tus propias Columns
  • CardOptions elige qué muestra una tarjeta
  • OnCardMoving acepta o rechaza una suelta
  • El ancho de columna y el plegado funcionan en todas las ediciones
Leer el tema de la ayuda
Demo TaskBoard: cinco columnas, tres carriles por recurso y una columna por encima de su límite

Kanban: tableros que siguen al plan Solo registrada

Los carriles y los límites WIP mantienen fluido el trabajo

Los carriles lo dividen en bandas horizontales por recurso, tarea padre o etiqueta, de modo que cada persona o epic tiene su fila, y los límites de trabajo en curso (WIP) acotan cada columna, contando todos los carriles. En modo aviso se marca una columna que supera su límite; en modo bloqueo no se puede soltar una tarjeta que rompería el límite. Distribuir 5.000 tarjetas en 8 columnas y 6 carriles tardó 5 ms en Win64.

  • SwimlaneBy: pslResource, pslParent o pslTag
  • WIPLimit por columna, 0 para sin límite
  • WIPMode: pwmWarn marca la columna, pwmBlock rechaza la suelta
  • Los carriles y los límites funcionan sobre los mismos datos que las demás vistas

Community ignora SwimlaneBy y los límites WIP; las columnas, los anchos y el plegado funcionan.

Leer el tema de la ayuda

Accesibilidad

UI Automation para lectores de pantalla, teclado y alto contraste, sin configuración.

Accesibilidad

Cada vista del planificador, legible y manejable sin ratón

sgcPlanner expone las vistas Scheduler, Timeline, Gantt y Kanban a Microsoft UI Automation: días, carriles y columnas, los elementos con sus horas y las dependencias de Gantt. Todo lo que se arrastra con el ratón también se puede hacer con el teclado.

  • Scheduler y Timeline: Ins añade un elemento en el intervalo con el foco, Supr lo elimina, Ctrl+flechas mueven el elemento y Ctrl+Mayús+flechas cambian su final
  • Gantt: Ctrl+Izquierda y Ctrl+Derecha mueven la tarea una marca, Ctrl+K inicia una dependencia y Ctrl+Mayús+K recorre las dependencias de la tarea con el foco
  • Kanban: Ctrl+Izquierda y Ctrl+Derecha mueven la tarjeta a la columna contigua, Ctrl+Arriba y Ctrl+Abajo la reordenan
  • Con un tema de alto contraste de Windows, los colores de los elementos de la aplicación se sustituyen por colores del sistema con contornos, de modo que ninguna información depende solo del color

La accesibilidad está activada por defecto en todas las ediciones, también en la edición Community gratuita, en VCL en todas las versiones de Delphi y C++Builder desde Delphi 7 hasta Delphi 13, en FireMonkey en Windows, y en WinForms, WPF y Avalonia. En Delphi y C++Builder, AccessibleName y AccessibleDescription establecen el nombre y la descripción expuestos a UI Automation, y en .NET lo hacen el nombre accesible y el texto de ayuda estándar de cada framework. Consulta los informes de conformidad de accesibilidad (en inglés).

Leer el tema de la ayuda

Mira sgcPlanner en acción

sgcPlanner dentro de las demos de la suite sgcUI: aplicaciones completas que funcionan sin conexión con datos simulados integrados.

Medido con cargas de trabajo reales

Mediciones de desarrollo de compilaciones release Win64 a 1920 x 1080. Win32 es entre 1,5 y 1,7 veces más lento.

MediciónResultadoCondiciones
Planificación automática de 10.000 tareas (1.000 resúmenes, 3 niveles) con 15.000 vínculos y 30 festivos, ruta crítica incluida11 msCompilación release Win64
Fotograma del Gantt al desplazarse por 10.000 tareas con 15.000 vínculos11 msCompilación release Win64, 1920 x 1080
Distribución Kanban de 5.000 tarjetas en 8 columnas y 6 carriles5 msCompilación release Win64
Distribución de la vista de semana del Scheduler con 2.000 elementos con hora1 msCompilación release Win64
Importación de 10.000 tareas con 15.000 vínculos desde MS Project XML264 msCompilación release Win64

Fuente: el tema de la ayuda que documenta estas cifras.

Quién construye con sgcPlanner

Software de proyectos e ingeniería

Oficinas de proyectos y empresas de ingeniería

Planifica un proyecto como un desglose del trabajo, vincula las tareas y deja que el motor las planifique en el calendario de la empresa mientras la ruta crítica muestra qué determina la fecha de fin. Guarda una línea base al aprobar y el retraso se ve bajo cada barra. Los planes llegan desde Microsoft Project y vuelven a él como XML, y las mismas tareas aparecen en un tablero para el equipo.

  • Gantt con dependencias
  • Planificación automática y ruta crítica
  • Líneas base
  • MS Project XML
Ejecuta la demo ProjectGantt

Sistemas de reservas y citas

Clínicas, talleres y reserva de salas

Muestra a cada médico, puesto o sala de reuniones como su propia columna y deja que el personal reserve arrastrando sobre huecos libres. Las citas recurrentes salen de reglas estándar, los festivos llegan mediante una suscripción .ics y el puente de Google Calendar mantiene al día el calendario propio de cada profesional. La fuente DataSet escribe cada reserva directamente en tus tablas. El personal ve las mismas reservas en todas las vistas.

  • Vistas y recursos del Scheduler
  • Recurrencia
  • Enlace con DataSet
  • Sincronización con Google Calendar
Ejecuta la demo TeamScheduler

Herramientas de seguimiento de tareas y soporte

Equipos ágiles y centros de servicio

Da al equipo un tablero Kanban con un carril por persona y límites de trabajo en curso por columna, y da al responsable un Gantt de las mismas incidencias. Mover una tarjeta a Hecho recolorea la barra y el evento del calendario al instante, porque las tres vistas comparten un único objeto de datos. Las imágenes de estado para un correo nocturno se pueden renderizar sin ventana en un servidor.

  • Kanban
  • Carriles y límites WIP
  • Vistas sincronizadas
  • Renderizado sin ventana
Ejecuta la demo TaskBoard

Un Team Scheduler en pocas líneas

La misma API en Delphi, C++ Builder y C#: dos personas, una reunión diaria a partir de una regla de recurrencia y una vista de semana que deja a los usuarios arrastrar nuevas reuniones.

Un Scheduler VCL de semana: dos personas como recursos, una reunión diaria a partir de una regla de recurrencia, arrastrar para crear.

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.

Leer el tema de la ayuda →

El mismo Scheduler en 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));
}

Leer el tema de la ayuda →

La versión en C# para 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

Leer el tema de la ayuda →

Gantt en Delphi

Tres tareas, dos vínculos, una línea base, la ruta crítica y el motor de planificación (las funciones del Gantt de aquí son de la edición registrada).

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.

Las reglas de recurrencia y las llamadas Schedule y SetBaseline del Gantt son funciones de la edición registrada. La edición Community gratuita muestra un elemento recurrente una sola vez.

Ejecuta las demos de sgcPlanner

Los ejecutables de las demos compiladas están en sgcUI_bin.zip, sin instalar nada. El código fuente de cada demo se incluye en el paquete, para Delphi, C++ Builder y .NET.

ProjectPlanner

ProjectPlanner

Gantt, Kanban y Scheduler sobre un objeto de datos, siempre sincronizados.

TeamScheduler

TeamScheduler

Siete vistas con la vista de año, grupos de recursos, reuniones recurrentes, recordatorios, zonas horarias, deshacer y rehacer y edición en el sitio.

Solo registrada ProjectGantt

Vínculos, planificación automática, ruta crítica, líneas base, Microsoft Project XML, una escala de tiempo de tres niveles y el histograma de recursos.

Solo registrada TaskBoard

Columnas de estado, carriles por recurso y límites WIP en un tablero Kanban.

DataSetPlanner

DataSetPlanner

Elementos, recursos y dependencias enlazados a TDataSets, con las ediciones escritas de vuelta.

Solo registrada ICalendarSync

Importa y exporta archivos .ics.

ICalSubscription

Solo registrada ICalSubscription

Sigue una URL .ics de solo lectura, como una lista de festivos.

Solo registrada GoogleCalendarSync

Sincronización en ambos sentidos con un Google Calendar mediante sgcWebSockets.

Solo registrada OutlookCalendarSync

Sincronización en ambos sentidos con un calendario de Outlook de Microsoft 365 u Outlook.com mediante Microsoft Graph.

Solo registrada CalDAVSync

Sincronización en ambos sentidos con un calendario CalDAV, como Nextcloud, iCloud, Fastmail o Radicale.

HeadlessReport

Renderiza las vistas en archivos de imagen sin ventana.

PlannerFMX

Las tres vistas en una aplicación FireMonkey.

Demos compiladas

Ejecutables listos para usar de cada producto sgcUI, sin nada que instalar.

Descargar sgcUI_bin.zip →

Dónde se incluye sgcPlanner

sgcPlanner forma parte de sgcUI Enterprise y también se vende por separado. sgcPlanner también está incluido en el paquete All-Access.

Paquete individual de sgcPlanner

€249 / desarrollador, código fuente completo, 1 año de actualizaciones.

Comprar sgcPlanner → Ver precios →

sgcUI Enterprise

Los 14 productos sgcUI, desde €699.

Ver Enterprise →

.NET

La edición .NET tiene el mismo precio. Hay una edición Community gratuita en NuGet como esegece.sgcPlanner.Community.

Ver precios →

La edición Community gratuita es esegece.sgcPlanner.Community en NuGet. La tabla muestra qué incluye.

FunciónCommunity (gratuita)Registrada
Vistas de día, semana laboral, semana, mes y agenda del Scheduler✓✓
Árbol de tareas del Gantt, resúmenes, hitos y progreso✓✓
Columnas Kanban, plegado y opciones de tarjeta✓✓
Arrastrar y soltar en todas las vistas✓✓
Enlace con DataSet, JSON, temas y PNG y SVG sin ventana✓✓
Vista de año del Scheduler✓✓
Recordatorios y zonas horarias por elemento✓✓
Deshacer y rehacer, edición en el sitio✓✓
Escala de tiempo del Gantt de tres niveles e histograma de recursos✓✓
Recurrencia−✓
Vista Timeline de recursos del Scheduler−✓
Flechas de dependencia y arrastrar para vincular−✓
Planificación automática, ruta crítica y líneas base−✓
Carriles y límites WIP−✓
iCalendar y Microsoft Project XML−✓
Sincronización con Google Calendar, Outlook y CalDAV y suscripción iCal (sgcPlannerWS)−✓

Frameworks y plataformas compatibles

Componentes de sgcPlanner

ComponenteQué hace
TsgcPlannerDataEl modelo compartido: elementos, recursos, estados, dependencias y calendario laboral.
TsgcVCLScheduler, TsgcFMXSchedulerVistas de día, semana laboral, semana, mes, año, agenda y línea de tiempo.
TsgcVCLGantt, TsgcFMXGanttÁrbol de tareas, barras, vínculos, motor de planificación, ruta crítica y líneas base.
TsgcVCLKanban, TsgcFMXKanbanColumnas de estado, tarjetas, carriles y límites WIP.
TsgcPlannerSource_DataSetPlan desde un TDataSet.
TsgcPlannerICalendar, TsgcPlannerMSProjectLee y escribe archivos iCalendar .ics y Microsoft Project XML (registrada).
TsgcPlannerRendererSalida PNG y SVG sin ventana.
TsgcPlannerGoogleSync, TsgcPlannerGraphSync, TsgcPlannerCalDAVSync, TsgcPlannerICalSubscription (sgcPlannerWS)Sincronización en ambos sentidos con Google Calendar, con Outlook y Microsoft 365 mediante Microsoft Graph y con servidores CalDAV, y suscripciones iCal, mediante sgcWebSockets. Solo registrada.
DestinoComponentePlataformas
Delphi 7 a 13, VCLScheduler, Gantt, KanbanWin32 y Win64
Delphi XE6 a 13, FireMonkeyTsgcFMXScheduler, TsgcFMXGantt, TsgcFMXKanbanWindows, macOS, iOS y Android
C++ Builder 2007 a 13Vistas VCL y FMXCabeceras .hpp generadas y bibliotecas estáticas
Delphi 10.2 a 13, independiente del frameworkDatos, motores, JSON, iCalendar, Microsoft Project, renderizadorLinux64, por ejemplo para renderizar planes en un servidor
.NET Framework 4.7.2, .NET 8, 9 y 10TsgcWinFormsScheduler, Gantt y Kanban, y sus equivalentes WPF y AvaloniaWinForms, WPF, Avalonia, PNG y SVG sin ventana

Preguntas frecuentes

Sí, en la edición registrada. TsgcPlannerMSProject lee y escribe Microsoft Project XML (MSPDI) con tareas, vínculos, calendario, recursos, asignaciones y líneas base. El formato admitido es el XML, así que guarda el plan como XML en Project.

Sí, en ambos sentidos. Google Calendar se sincroniza mediante TsgcPlannerGoogleSync, los calendarios de Outlook de Microsoft 365 y Outlook.com se sincronizan mediante Microsoft Graph con TsgcPlannerGraphSync, y los calendarios CalDAV, como Nextcloud, iCloud, Fastmail o Radicale, se sincronizan con TsgcPlannerCalDAVSync. Cualquier otro calendario que publique una URL .ics se pueden seguir en solo lectura con TsgcPlannerICalSubscription, y los archivos .ics se importan y exportan con TsgcPlannerICalendar. Los puentes necesitan la edición registrada y sgcWebSockets.

La ayuda publica mediciones de desarrollo de compilaciones release Win64: planificar automáticamente 10.000 tareas con 15.000 vínculos tardó 11 ms, y un fotograma al desplazarse por esas mismas 10.000 tareas tardó 11 ms. Una distribución Kanban de 5.000 tarjetas tardó 5 ms. Win32 es entre 1,5 y 1,7 veces más lento.

Las tres vistas con arrastrar y soltar, resúmenes, hitos, progreso, el calendario laboral, enlace con DataSet, JSON y salida sin ventana. La recurrencia, la planificación automática, las dependencias dibujadas, la ruta crítica, las líneas base, la vista Timeline, los carriles, los límites WIP, iCalendar, Microsoft Project XML y los puentes son registrados.

Sí. TsgcPlannerSource_DataSet enlaza el objeto de datos con cualquier TDataSet, como FireDAC, TClientDataSet o dbExpress. Carga elementos, recursos y dependencias mediante asignaciones de campos, sigue los cambios de los datasets y escribe de vuelta las ediciones hechas en las vistas.

Sí, mediante FireMonkey: TsgcFMXScheduler, TsgcFMXGantt y TsgcFMXKanban funcionan desde Delphi XE6 en Windows, macOS, iOS y Android. En Linux64 el modelo de datos, los motores, JSON, iCalendar, Microsoft Project XML y el renderizador compilan desde Delphi 10.2.

Sí. TsgcPlannerRenderer dibuja el Scheduler, el Gantt o el Kanban de un objeto de datos en PNG o SVG sin ventana, en Windows o Linux64, con el tema claro o el oscuro.

Ayuda de sgcPlanner

3,000+Desarrolladores
20+Años
761+Componentes
30+Integraciones de API
5Plataformas
Garantía de devolución de 30 días¿No estás satisfecho? Solicita un reembolso completo en los 30 días posteriores a la compra. Ver política de reembolso

Prueba sgcPlanner hoy

La prueba de sgcUI incluye sgcPlanner y todos los demás productos sgcUI.