I'm trying to set a task to either be wholly complete by 1st Dec, if not then start after 1st Jan (i.e. don't start at all if it can't be completed by 1st Dec). I don't want to split the task.
Is there a way to do that?
Thanks in advance
In MSP, there is no general-purpose way to do that using automatic scheduling with traditional logical restraints, constraints and calendars.
It is easily done using targeted resource leveling. e.g. make a "December Blackout" task using resource "DBO" for the whole month of December (scheduled using constraint and no logic links). Give the task a priority of 1000. Also assign resource DBO for any tasks that must finish before or start after the blackout period. In Resource Leveling options, ensure that "Leveling can create splits in remaining work" is un-checked, then level the resource either manually or automatically.
You can always use manual-mode scheduling or leads/lags/constraints to manipulate dates as well. Aside from the fact that such techniques are trivial for the present question, they would in general be considered bad practice.