| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 3270 |
| Technical Name |
l10n_ro_account_report_sheet |
| License | OPL-1 |
| Website | https://www.nexterp.ro |
| Versions | 19.0 |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 3270 |
| Technical Name |
l10n_ro_account_report_sheet |
| License | OPL-1 |
| Website | https://www.nexterp.ro |
| Versions | 19.0 |
Romania - Account Sheet / Journal Registry
Romanian account sheet & journal registry on top of Odoo's account.report engine, with counterpart column
Overview
This module adds the Romanian
Registru Jurnal / Fișa de cont report on top of Odoo's native
account.report engine, plus a Print RO button on the General
Ledger that opens a print wizard for PDF / XLSX / CSV export with
per-account opening and closing balances.
The same wizard serves both use cases:
- Registru Jurnal — every posted line of the period grouped by account, with per-account initial and final balance rows.
- Fișa de cont — pick one or several accounts in the wizard (Many2many) and the export contains one page / sheet per account.
What's added on top of Odoo's General Ledger:
- Country-scoped GL variant — registered as a variant of the
stock General Ledger (
root_report_id=account_reports.general_ledger_report) and country-scoped to Romania (country_id = base.ro). Adds a Counterpart column populated byl10n_ro_account_counterpartvial10n_ro_counterpart_idon each line. - Print RO button — added to the GL toolbar when the active company's fiscal country is Romania; snapshots the current GL options (period, journals, search bar, unfolded lines) and opens the print wizard with the right defaults.
- Three export formats — PDF (chunked rendering merged via
PyPDF2 / pypdf), Excel (one sheet per account for Fișa de cont,
one sheet per month or quarter for Registru Jurnal when the
Splitoption is set) and CSV.
Built & supported by NextERP Romania
Romanian Odoo specialists, here for the long run — from implementation to localization and day-to-day production support.
What we do
Odoo Solutions
From quick-start rollouts to multi-company deployments and custom modules built for your processes.
Romanian Localization
SAF-T (D406), e-Factura, e-Transport, D300 / D390 / D394, ANAF integration, full chart of accounts and fiscal positions.
Our Services
Implementation, customization, migration, integration, support and consultancy — Romanian-speaking, SLA-backed.
Features
Romania - Journal Registryreport variant — registered as a variant of the stock General Ledger (root_report_id=account_reports.general_ledger_report), country-scoped to Romania (country_id = base.ro). Columns: Date, Partner, Counterpart, Currency, Debit, Credit, Balance.- Counterpart column — the custom handler
l10n.ro.account.general.ledger.report.handleroverrides_report_custom_engine_general_ledgerto enrich each AML-level row with thecodeofl10n_ro_counterpart_id. Print RObutton — injected via_custom_options_initializerwhenever the active company'saccount_fiscal_country_id.code == "RO". The button snapshots the current GL options (period, journals, account filter, search bar, unfolded lines) as JSON and opens the print wizard.- Print wizard (
l10n.ro.account.report.print.wizard) — two report types (Account Sheet vs. Journal Registry) and three output formats (XLSX, PDF, CSV). The Excel split option produces one sheet per month or quarter with per-account opening / closing balances recomputed for each sub-period. - P&L vs. B/S initial balance — opening balances for
income / expense accounts sum activity from the start of the
fiscal year (via
compute_fiscalyear_dates); for asset / liability / equity / off-balance accounts the opening sums all prior activity. - Chunked PDF rendering — accounts are batched so each
wkhtmltopdf render stays under
PDF_MAX_LINES_PER_CHUNK = 5000AML lines (mitigates theulimit -n 1024open-files ceiling for multi-million-line periods); chunks are merged via PyPDF2 / pypdf.
Configuration
The module is plug-and-play: no master data has to be created
specifically for the Romania Account Sheet / Journal Registry. A
few prerequisites have to be in place so the variant and the
Print RO button behave as expected:
- Romanian fiscal country — the
Print RObutton is appended to the GL options only whenenv.company.account_fiscal_country_id.code == "RO". Set the fiscal country on Settings → Companies if it is not already set to Romania. - Counterpart computation — install
l10n_ro_account_counterpart(declared as a dependency, installed automatically); it populatesaccount_move_line.l10n_ro_counterpart_id, which the custom handler reads to fill the Counterpart column on the variant and in the wizard exports. - Extra account types — depends on
l10n_ro_account_extra_typesfor the income / expense sub-types used by the wizard when computing the fiscal-year opening balance for P&L accounts. - Fiscal-year configuration — the wizard's opening balance for
income / expense accounts is summed from the start of the
fiscal year computed via
company.compute_fiscalyear_dates(date_from). Configure the company's fiscal year start (defaults to January 1) on Settings → Companies so the per-account initial balance matches the year you expect. - Posted entries only — the SQL fetcher filters on
parent_state = 'posted', so unposted moves do not appear in the wizard exports. - PDF dependencies — the chunked PDF rendering requires
PyPDF2 (>=2
PdfMerger, 1.xPdfFileMerger) or the renamedpypdfpackage. The wizard probes each in turn and raises aUserErrorif none is installed.
Access to the wizard is granted via
account.group_account_user (declared in
security/ir.model.access.csv); no further role configuration is
required.
How it works
Reaching the report
Open Odoo's stock General Ledger via
Accounting → Reporting → General Ledger. For companies whose
fiscal country is Romania the variant selector at the top of the
report exposes Romania - Journal Registry, which is registered
as a variant of the General Ledger (root_report_id =
account_reports.general_ledger_report).
The variant inherits Odoo's native pagination, drill-down to
account.move, search bar and built-in PDF / XLSX export from
account_reports, and adds a Counterpart column populated from
l10n_ro_counterpart_id on each line.
Print RO button
Whenever the active company's fiscal country is Romania, a Print RO button is appended to the GL toolbar (both on the stock GL and on the RO variant). Clicking it:
- Snapshots the current GL options (period, journals, account
filter, search bar, unfolded lines) as JSON onto
l10n.ro.account.report.print.wizard.options_json. - Tries to pre-fill the wizard's
account_idsfrom the GL state — either fromoptions["account_ids"](explicit account filter), the search-bar text resolved againstaccount.account.display_name, or any unfolded-line key encodingaccount_id|<id>. - Opens the wizard in a modal dialog.
Wizard fields
| Field | Meaning |
|---|---|
| Report type | Account Sheet (one page / sheet per selected account) or Journal Registry (every account in the period) |
| Output format | Excel, PDF or CSV (defaults to Excel) |
| Split (XLSX) | Only shown for Journal Registry + XLSX — single sheet, one sheet per month or one sheet per quarter |
| Accounts | Many2many on account.account; required for Account Sheet, ignored for Journal Registry |
What happens on Generate
- The wizard parses the GL options snapshot to recover the date range, the journal ids and any account filter; missing values fall back to current-year and all-journals-of-the-company.
- A single SQL query fetches every posted AML in the period
joined to its account, move, counterpart account, partner and
currency, ordered by
account_code, date, move.name, aml.id. A second query computes opening balances per account, with P&L accounts summed from the fiscal-year start (compute_fiscalyear_dates) and B/S accounts summed from the beginning of time. - A running cumulated balance is computed per account in Python and the lines are grouped by account.
- The selected renderer is invoked:
- XLSX — one sheet per account (Account Sheet), or one sheet per month / quarter (Journal Registry + Split) with per-account opening / closing balances recomputed for each sub-period, or a single sheet with per-account sub-headers.
- CSV — single file with a header block per account and a blank separator row between accounts.
- PDF — accounts are batched into chunks bounded by
PDF_MAX_LINES_PER_CHUNK = 5000AML lines, each rendered via the QWeb template and merged via PyPDF2 / pypdf.
- The generated file is streamed back through
/web/contentfor immediate download.
If no AML matches the filter the wizard raises a UserError
instead of producing an empty file.
Versions
19.0.0.1.0 (2026-05-24)
- Changelog tracking starts at this release.
Discover the NextERP suite
Other modules from the same publisher, built to work together.
NextERP Romania
Odoo implementation, customization, Romanian localization and long-term support since 2018.
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module