Skip to content

Scheduling Direction

Source code
TypeScript ts
import { GANTT_ALAP_DEMO } from './gantt-advanced-data';
import { loadAdvancedGanttDemo } from './GanttAdvancedVanillaDemo';

export function load(parentSelector: string) {
  return loadAdvancedGanttDemo(parentSelector, GANTT_ALAP_DEMO);
}
Vue vue
<template>
  <GanttAdvancedDemo :demo="GANTT_ALAP_DEMO" />
</template>

<script setup lang="ts">
import GanttAdvancedDemo from './GanttAdvancedDemo.vue';
import { GANTT_ALAP_DEMO } from './gantt-advanced-data';
</script>
React tsx
import React from 'react';
import GanttAdvancedDemo from './GanttAdvancedReactDemo';
import { GANTT_ALAP_DEMO } from './gantt-advanced-data';

export default function GanttAlap() {
  return <GanttAdvancedDemo demo={GANTT_ALAP_DEMO} />;
}
Angular ts
import { Component, NO_ERRORS_SCHEMA, ViewEncapsulation } from '@angular/core';
import { RevoGrid } from '@revolist/angular-datagrid';
import { GanttAdvancedAngularBase } from './GanttAdvancedAngularBase';
import { GANTT_ALAP_DEMO } from './gantt-advanced-data';

@Component({
  selector: 'gantt-alap-grid',
  standalone: true,
  // Allows Angular demos to bind RevoGrid plugin props that are not wrapper inputs.
  schemas: [NO_ERRORS_SCHEMA],
  imports: [RevoGrid],
  template: `<revo-grid style="min-height: 560px" [theme]="theme" [hideAttribution]="true" [plugins]="plugins" [source]="tasks" [columns]="columns" [gantt]="ganttConfig" [ganttDependencies]="dependencies" [ganttCalendars]="calendars" [ganttResources]="resources" [ganttAssignments]="assignments"></revo-grid>`,
  encapsulation: ViewEncapsulation.None,
})
export class GanttAlapGridComponent extends GanttAdvancedAngularBase {
  protected readonly demo = GANTT_ALAP_DEMO;
}

Forward scheduling is the default and behaves like Microsoft Project’s ASAP (As Soon As Possible) direction. Automatic tasks are placed as early as their dependencies and constraints allow.

grid.gantt = {
scheduling: {
scheduleFrom: 'project-start',
projectStartDate: '2026-04-06',
},
};

When projectStartDate is set, automatic root tasks start from that anchor unless a dependency or constraint moves them later.

Backward scheduling behaves like Microsoft Project’s ALAP (As Late As Possible) project-finish direction:

grid.gantt = {
scheduling: {
scheduleFrom: 'project-finish',
projectFinishDate: '2026-06-30',
},
};

Automatic tasks without successors are placed as late as possible against projectFinishDate; predecessors are pulled earlier to satisfy outgoing dependencies. If projectFinishDate is omitted, the scheduler uses the latest task finish in the current data.

Use project-finish scheduling for ALAP-style plans:

grid.gantt = {
scheduling: {
scheduleFrom: 'project-finish',
projectFinishDate: '2026-04-30',
},
};
grid.source = [
{
id: 'build',
name: 'Build',
durationDays: 3,
},
{
id: 'release',
name: 'Release',
durationDays: 1,
},
];
grid.ganttDependencies = [{
id: 'build-release',
predecessorTaskId: 'build',
successorTaskId: 'release',
type: 'finish-to-start',
lagDays: 0,
}];

Expected result: release is placed as late as possible against 2026-04-30; build is pulled earlier so the FS relationship remains valid.

See the Project-finish ALAP demo for a visible backward-scheduled chain anchored to a project finish date.