top of page
Search

The Chart of Accounts in F&O: Why I Always Start Here

Beau Schwieso
11 minutes ago
8 min read

Every discovery I run, somebody wants to start with the fun stuff. Warehousing, production, the Power BI dashboard the CFO saw at a conference. I get it. Nobody wakes up excited about the general ledger.


I start with the chart of accounts anyway. Everything else on a Dynamics 365 Finance & Operations project eventually posts to it, and if we get it wrong we find out six months later when inventory posting won't validate and the controller can't run the divisional P&L she was promised.


So here's the whole thing in one post: what the chart of accounts is in F&O, why leaving a legacy chart behind is harder than people expect, what I do about it, and the questions that come up once a finance team gets past the basics.


What it is, using a mailing address

If you've spent your career in Dynamics GP, QuickBooks, Sage, or something homegrown, you think of the chart of accounts as a list of account numbers. In F&O it's four pieces that work together, and the easiest way I've found to explain it is a mailing address.

A legacy account number like 6100-020-05 is an address written as one long word. The 6100 is freight expense, the 020 is the department, the 05 is the location. Everyone in finance learned to read it. In F&O, that address gets split into separate fields.


The main account is the street.

It answers "what." Cash, receivables, inventory, revenue, freight. Each main account has a type. The ones you can post to are Profit and loss, Revenue, Expense, Balance sheet, Asset, Liability, and Equity. There are two you can't post to: Total, which adds up a range of accounts for you, and Reporting, which only exists for Brazilian statutory statements. Every main account also gets a main account category, and that category is what feeds the financial reports and Power BI content Microsoft ships in the box.


Financial dimensions are the city and the zip code.

They answer "where" and "who." Department, cost center, business unit, location, project, and whatever else you want to slice numbers by. Some dimensions are custom lists you type in yourself. Others are entity-backed, meaning they borrow their values from master data that already exists. Add a new site or a new project and it shows up as a valid dimension value without anybody maintaining a second list.


The account structure is the postal rulebook.

It says which dimensions go with which range of main accounts, which values are allowed, and whether a field can be left blank. One structure can hold a main account plus up to 10 dimensions. Nobody should get close to that. If you need a dimension only in certain cases, say a project on a particular set of expense accounts, you bolt on an advanced rule instead of stuffing it into the base structure. Advanced rules can technically take a combination to 16 segments. If you're anywhere near 16, stop and rethink.


The ledger is your company's post office.

Each legal entity has one, and it's where you attach the chart of accounts, the account structures, the fiscal calendar, and your accounting and reporting currencies. The chart itself can be shared by many legal entities. Hold onto that, because it comes back later.


Street, city, zip, rulebook, post office. If you remember that much, you understand the F&O chart of accounts better than most people walking into their first project.


Why leaving the legacy chart is harder than it looks

Splitting one long number into clean fields sounds like an obvious upgrade. In practice it's the part of a finance implementation most likely to start an argument. Here's why.


The old numbers are how people think

Ask a senior accountant about freight for the Nashville warehouse and they won't say "freight, Nashville." They'll say "6250-040." After fifteen years, the code is the language. When you tell them the department and location are leaving the account number, some of them hear "we're taking away your words."


The math makes it worse before it makes it better. A legacy chart with 1,800 accounts often collapses to 250 or 300 main accounts once the departments and locations move into dimensions. That's a good outcome. It also looks like you deleted 1,500 things.


The old chart is carrying junk

Every legacy chart has accounts created for a one-time project in 2011, duplicates that two people set up without talking to each other, and accounts that exist because a report once needed them. Nobody wants to be the one who says an account can go.

You have to be that person, and early. Once a main account has been used in a ledger account combination in F&O, it cannot be deleted. Reversing the transaction doesn't help. Your only options are to suspend it or rename it to something like DONOTUSE. Before go-live, cleanup is free. After go-live, it's permanent clutter.


The reports were built on the old numbers

The month-end binder, the board deck, the bank covenant calculation, the commission spreadsheet somebody built with a VLOOKUP against the account string. All of it assumes the old numbering. If nobody writes those reports down during discovery, you'll deliver a chart that's technically correct and useless to the people who close the books.


Last year stops matching this year

Comparing this year's Nashville freight to last year's now requires a crosswalk: one row per legacy account, mapped to a main account plus its dimension values. That mapping becomes your data migration spec, your historical balance load, and the thing you hand the auditors. It's also the deliverable nobody puts hours against.


Every module has to obey the rulebook

Account structures don't just check manual journal entries. They check every posting from every module. Inventory, customer and vendor posting profiles, fixed assets, project categories, expense reports, the payroll integration. If the structure says cost center is required on expense accounts, every one of those postings needs a way to supply one, which usually means default dimensions on the master record. Miss that and you've built a machine that produces validation errors all day.


Why I start here

The chart of accounts is the one decision every other workstream is waiting on. Supply chain can't finish inventory posting until they know which main accounts exist and which dimensions are required. Data migration can't load customers, vendors, items, or fixed assets without knowing which default dimensions to stamp on each record. Nobody can design a financial report. Even security depends on it if you plan to restrict who can post to which dimension values.


It's also the most expensive thing to change late. You can add a dimension to a structure after go-live, but posted transactions never get it. You can suspend a main account, but you can't remove it. Once posting profiles and default dimensions are built on top of a structure, reworking that structure is a re-implementation of the finance module with a nicer name.


The conversation also tells me more about the client than any other session. When I ask "what do you need to report on?" the answer reveals whether they have a management reporting problem, a statutory problem, a data hygiene problem, or all three at once. The rest of the project plan comes out of that hour.


What I do about it

DISCLAIMER*** None of this is law. It's what has held up across enough projects that I stopped second-guessing it.


Cap the dimensions at what people will actually filter a trial balance by. Four to six is where most mid-market companies land. Each one you add multiplies the possible combinations, slows down data entry, and adds a field somebody has to default correctly on every master record. If you're arguing about whether something should be a dimension, it probably shouldn't.


Keep the main account list short and make the dimensions carry the detail. When someone tries to sneak a department or a location back into the account number, ask them which report breaks without it. Then wait.


Pick a numbering convention with room to grow. Most clients land on four to six digit main accounts grouped by type, 1xxxx for assets, 2xxxx for liabilities, and so on. Leave gaps, because you will add accounts. Two F&O specific traps here. Account structure ranges compare values as text, not numbers, so a range of 1..2000 does not include the value 4. Keep every value in a segment the same length and pad with leading zeros. Also, keep the segment delimiter (a hyphen by default) out of your main account numbers and dimension values. Changing the delimiter later is a background data maintenance job you'd rather never run.


Use entity-backed dimensions when the values already exist as master data. Sites, warehouses, projects, and workers are the usual ones. Don't build a custom Location list that duplicates your inventory sites, because the two lists will drift apart within a year. Customer and vendor are the exception. They're technically available as dimensions, but they generate enormous numbers of combinations and the subledgers already track them. If a client insists on customer in the ledger, do what Microsoft's own documentation shows: put it in an advanced rule scoped to the revenue accounts, not in the base structure.

Build one account structure for the balance sheet and one for the P&L. The balance sheet almost never needs cost center or department. The P&L almost always does. Two structures, sometimes three, beats one giant structure riddled with "blank allowed" exceptions.


Decide about blanks on purpose. Every blank you allow becomes a "none" bucket on a report. That's fine when it's a real decision. It's a problem when it's the default because nobody talked about it.


Lock down the control accounts. Receivables, payables, inventory, and fixed assets should only ever be hit from their subledgers. Turn on "Do not allow manual entry" on those main accounts. It blocks manual journals, imports, and anything that defaults the account directly, so the only way in is through a posting profile. The first time someone posts a manual journal to inventory and the subledger stops tying out, you'll understand why. If you need an adjustment, post it to a separate adjustment account and total the two together on the report.

Set default dimensions on master data before you load a single transaction. Defaults on customers, vendors, items, fixed assets, workers, and projects are what let the system fill in dimension values by itself. Load open AR, open AP, and inventory before those defaults exist and you'll be fixing dimension values one line at a time.


Assign main account categories. They take twenty minutes and they're what make the default financial reports and dashboards work.


Test posting from every module in a sandbox, not just GL journals. Post a sales order, a purchase order, an inventory adjustment, a fixed asset acquisition, and a project expense. Any dimension error means your account structure and your default dimensions disagree, and that's a conversation for before go-live.


Build the crosswalk on day one and keep it current. One row per legacy account, mapped to main account plus dimensions. It does triple duty as the migration mapping, the history load spec, and the audit trail from the old books to the new ones.


The finance teams that come out of this well are the ones who accept early that the old smart-coded chart isn't making the trip, and that the new structure will change how they talk about their numbers. Getting them there is a conversation about habits, not a configuration task, and that's why it's the first thing on my calendar.


If you're walking into an F&O discovery, bring three things: your current chart, your month-end reporting package, and a list of every report that leaves the finance department. Show up with those and the chart of accounts session turns into a design workshop instead of a negotiation.


May your ledgers always be balanced,

DynamicsDad

 
 
 

Comments


bottom of page