Model Shifts and Shop Calendars in Business Central
Every date Microsoft Dynamics 365 Business Central computes for a production order ultimately traces back to a work center’s calendar. If that calendar is wrong — a holiday nobody entered, a shift pattern that doesn’t match reality — every schedule built on it inherits the mistake silently. This walkthrough sets one up correctly from a blank shop, in order.
Before you start
You’ll need at least one work center already created (even with capacity and efficiency left at defaults for now — those matter, but the calendar work here is independent of them).
1. Define your work shifts
Work shifts are the reusable labels a calendar’s working days point at — “1st shift,” “2nd shift,” and so on. Even a single-shift shop needs at least one shift code defined before a calendar can reference it.
Search for Work Shifts, and on a blank line enter a code (for example, 1) and a description (1st shift). Add a second line if you run a second shift — you’re just naming them here, not setting times yet.
2. Create the shop calendar and its working days
Search for Shop Calendars, create a new one with a code and description, then open its Working Days action. This is where the actual weekly pattern gets built: one line per working day, naming the shift code from step 1 and that day’s start and end time.
For a straightforward single-shift week, that might be:
- Monday, 07:00–15:00, shift 1
- Tuesday, 07:00–15:00, shift 1
- (repeat through Friday)
For a two-shift day, add two lines for the same weekday, one per shift:
- Monday, 07:00–15:00, shift 1
- Monday, 15:00–23:00, shift 2
Any weekday you don’t add a line for — commonly Saturday and Sunday — is treated as a non-working day with zero available capacity by default. That’s often exactly what you want, but it’s worth stating explicitly rather than assuming: an unlisted day isn’t a gap the system fills in with a guess, it’s a day this calendar considers fully closed.
3. Add holidays
Back on the Shop Calendars page, select your calendar and choose the Holidays action. Each holiday is a line with a start date/time, end date/time, and description — a full day is typically entered as 00:00 through 23:59. Every date you enter here gets zero available capacity, overriding whatever the working-days pattern would otherwise have said about that date.
This step is easy to under-invest in and expensive to skip: a shop calendar with a complete weekly pattern but no holidays will schedule straight through a plant shutdown as if it were a normal working day, and nothing about the resulting schedule will look obviously wrong until someone notices the dates don’t match reality.
4. Assign the calendar to a work center
Open the work center (or machine center) you want this calendar to govern, and set its Shop Calendar Code field to the calendar you just built. This step only points the work center at the calendar’s pattern — it doesn’t yet generate any usable capacity data. That’s the next step.
5. Calculate the work center calendar
From the work center, choose the Calendar action, then Calculate. You’ll be asked for a date range — a full year (for example, January 1 through December 31) is a common choice, since recalculating periodically as the year progresses is normal practice. If you leave the work center filter blank, every work center’s calendar recalculates in one pass; filter to one work center if you only need to refresh that one.
This is the step that actually matters: it’s what explodes the calendar’s weekly pattern and holidays, combined with the work center’s own Capacity and Efficiency fields, into concrete calendar entries — one record per resource per working period, each with a real date, real start/end times, and an effective capacity figure. Every scheduling calculation Business Central performs reads these calculated entries, not the raw calendar pattern directly. Change the calendar, the work center’s capacity, or its efficiency later, and you’ll need to calculate again for the change to take effect anywhere.
6. Verify it
From the same Calendar action, choose Show Matrix to see the calculated result laid out day by day, with the available capacity value shown in the work center’s own unit of measure — typically minutes. Two quick spot-checks are worth doing before trusting the calendar:
- Pick a date you entered as a holiday and confirm it shows zero available capacity.
- Pick an ordinary working day and confirm the capacity figure matches what you’d expect — an eight-hour single shift at 100% efficiency should show 480 minutes; a two-shift day should roughly double that.
If either check looks wrong, the most common causes are a working-days line with the wrong start/end times, a holiday entered on the wrong date, or a calculation that was run before the calendar or work center settings were finished being edited — in which case, fix the underlying setup and recalculate.
One-off closures: recording an absence
For a single unplanned closure — a maintenance window, an unexpected outage — rather than editing the shop calendar itself, use the Absence action from the calendar matrix. Enter the date, start and end time, and a description; the work center’s capacity for that specific window drops by the recorded amount, without touching the underlying shop calendar pattern that governs every other day.
For the concept-level reasoning behind why a calendar this detailed matters — and what happens when the underlying capacity model is wrong — see Modeling Real Capacity: Shifts, Calendars, Efficiency, and Parallel Machines. For how calendar entries feed into the broader capacity model, including the work center and machine center hierarchy, see Work Centers, Machine Centers, and Shop Calendars: BC’s Capacity Model.
For Microsoft’s own step-by-step reference, see Set up shop calendars.