Inside the ERP Accounting Module: General Ledger Structure and Core Capabilities
A 65-person specialty manufacturer moved off QuickBooks Enterprise not because QuickBooks was slow, but because their chart of accounts had become unmanageable: 340 accounts, many duplicated across three product lines because there was no clean way to tag a transaction by both account type and product line at once. Their new ERP's general ledger let them separate the account (what kind of transaction) from a set of dimensions (which product line, which location, which cost center), and the chart of accounts shrank back down to about 90 accounts, with product-line and location reporting handled through dimension tags instead of duplicate account codes.
What the general ledger module actually structures
The general ledger is the backbone every other financial module posts into, and its core job is deceptively simple to state and genuinely hard to design well: record every financial transaction as a balanced debit and credit against a chart of accounts, in a way that supports both statutory financial reporting and the internal reporting the business actually needs to run itself.
Chart of accounts design
The chart of accounts is the list of every account the GL can post to, assets, liabilities, equity, revenue, expenses, each broken into as much or as little detail as the business needs. The mistake the manufacturer above made, and a common one, is using account codes to capture information that should live in a separate dimension instead, creating "Revenue - Product Line A," "Revenue - Product Line B," "Revenue - Product Line C" as three separate accounts, rather than one "Revenue" account tagged with a product-line dimension. The dimension approach scales; the duplicate-account approach doesn't, because every new product line, location, or cost center multiplies the account list instead of just adding a tag value.
Multi-dimensional posting
Most modern ERP general ledgers support posting transactions with multiple simultaneous dimensions, department, location, project, product line, independent of the account itself. This is what lets a single "Office Supplies" expense account produce a report broken down by department without needing a separate account for each one. It's also what makes multi-entity consolidation manageable: a transaction tagged with an entity dimension can roll up into consolidated reporting while still supporting entity-level statutory reporting separately.
Sub-ledgers and GL integration
Accounts receivable, accounts payable, and fixed assets typically run as sub-ledgers, detailed transaction-level records that summarize up into the GL rather than posting every individual invoice as a separate GL line. This matters practically: a company with 3,000 customer invoices a month doesn't want 3,000 separate GL entries. The AR sub-ledger holds the detail, and a summarized batch posts to the GL, while the sub-ledger remains available to drill into for any individual invoice.
Core capabilities worth evaluating specifically
- Multi-currency support: for any business with international customers, vendors, or subsidiaries, the GL needs to handle transaction-date exchange rates, revaluation of open balances, and realized and unrealized gain-loss postings correctly, not as an afterthought bolt-on.
- Period close controls: the ability to lock a closed period against further postings, with a formal reopen-and-approve workflow if a correction is genuinely needed, rather than allowing silent backdated entries into a period that's already been reported on.
- Automated recurring and allocation entries: monthly depreciation, prepaid expense amortization, and overhead allocations should run as scheduled system processes, not manual journal entries rebuilt from a spreadsheet every month.
- Financial statement reporting: the ability to build a balance sheet and income statement directly from the chart of accounts and dimension structure, ideally without exporting to Excel for the final formatting step, which is where errors tend to creep in unnoticed.
A worked example: consolidating three locations
Take a business with three retail locations, each historically running its own QuickBooks file. Consolidated reporting meant someone manually exporting each file's trial balance and combining them in a spreadsheet every month, a process that took roughly two days and was prone to mapping errors when one location's chart of accounts had drifted slightly from the other two. Moving all three into one ERP instance with a location dimension collapses that to real time: each location still posts its own transactions and can pull its own P&L, but consolidated reporting is just the same report run without the location filter, available the moment the last transaction posts rather than two days after month-end.
Approval workflows and posting controls
Beyond the structural elements above, a general ledger module also needs configurable approval thresholds: a $200 office supply purchase might post automatically, while a $15,000 equipment purchase requires a manager's sign-off before it hits the books, and a journal entry adjusting revenue recognition might require controller-level approval regardless of dollar amount. Getting these thresholds right at implementation matters more than it might seem. Set them too loose, and the GL becomes a place where errors and even fraud can slip through unnoticed until an audit; set them too tight, and routine transactions bottleneck on an approver who becomes a constant scheduling obstacle. Most implementations benefit from starting with tighter thresholds and loosening them gradually as the team demonstrates it can be trusted with more autonomy, rather than the reverse.
Reversing entries and correcting mistakes after posting
Even with tight approval controls, mistakes reach the GL: a transaction posted to the wrong department, a duplicate vendor payment entered twice. A well-designed GL module handles this through a formal reversing entry, a new transaction that exactly offsets the original, rather than editing or deleting the original posting. This preserves a complete, unbroken audit trail; anyone reviewing the ledger later can see both the mistake and its correction, with a timestamp and the name of who made each entry, rather than a silently altered number that looks like it was always correct. Direct editing of posted transactions is one of the clearest red flags an auditor looks for, since it removes the very trail that proves the books weren't manipulated after the fact.
Where the accounting module hands off to reporting tools
Most ERPs ship with basic built-in financial statement templates, adequate for a straightforward balance sheet and income statement, but companies with more complex reporting needs, board decks blending financial and operational metrics, multi-entity comparative reporting, frequently pair the GL with a dedicated financial reporting tool (tools like Jet Reports, Prophix, or the ERP vendor's own advanced reporting add-on) that pulls directly from the GL's dimensional structure. This is worth planning for at the chart-of-accounts design stage rather than after the fact, since a reporting tool is only as capable as the dimension structure underneath it lets it be; a GL with no location or department dimension can't retroactively produce a location-by-location report no matter how sophisticated the reporting layer on top of it is.
Getting the chart of accounts right before go-live
Chart of accounts design is one of the few ERP decisions that's genuinely expensive to change after go-live, because every historical transaction is tagged against the structure that existed at the time. It's worth spending real time on this specifically before implementation starts, not during it: decide what needs to be an account versus a dimension, decide the dimension list up front (product line, location, department, project, whichever apply), and resist the temptation to import the old system's chart of accounts wholesale just because it's familiar. A messy legacy chart of accounts, migrated as-is into a new ERP, just reproduces the old problem inside new software.