Skip to Content
Menu
This question has been flagged

Hello,

The Balance Sheet report was accidentally deleted from Accounting > Configuration > Accounting Reports in Odoo.

We tried to recreate the report manually, but we are now getting the following error when trying to access it (see attached screenshot):

Does anyone know how to fix this issue?

Is there a proper way to restore the original Balance Sheet report, or do we need to clean up specific report line codes that may still exist in the database?


Thanks in advance!

Avatar
Discard
Best Answer

Quick Fix Options:

  1. Best Option – Restore Default Report:
    • Go to Apps, enable Developer Mode, search for “accounting reports” and upgrade the Accounting module.
    • This will restore the original Balance Sheet and fix broken references.
  2. Manual Cleanup (Advanced):
    • If you recreated the report manually, some report line codes might conflict.
    • You can check and clean them from Reporting > Management > Report Line Templates or directly from the database (if you're comfortable).

Recommendation:

Always use module upgrade to restore default reports instead of manual creation.

Let me know if you need step-by-step help upgrading the module.

Avatar
Discard
Author

Hello,

I tried the first Option and I am getting this error:

RPC_ERROR

Odoo Server Error

Occured on model ir.module.module and id 15 on 2025-05-21 06:16:03 GMT

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 537, in _tag_root
f(rec)
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 443, in _tag_record
self._tag_record(child_rec, extra_vals={inverse_name: record.id})
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 443, in _tag_record
self._tag_record(child_rec, extra_vals={inverse_name: record.id})
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 437, in _tag_record
record = model._load_records([data], self.mode == 'update')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/models.py", line 5451, in _load_records
records = self._load_records_create([data['values'] for data in to_create])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/models.py", line 5355, in _load_records_create
records = self.create(vals_list)
^^^^^^^^^^^^^^^^^^^^^^
File "<decorator-gen-0>", line 2, in create
File "/usr/lib/python3/dist-packages/odoo/api.py", line 480, in _model_create_multi
return create(self, arg)
^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/models.py", line 4959, in create
records = self._create(data_list)
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/models.py", line 5143, in _create
cr.execute(SQL(
File "/usr/lib/python3/dist-packages/odoo/sql_db.py", line 354, in execute
res = self._obj.execute(query, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "account_report_line_code_uniq"
DETAIL: Key (report_id, code)=(4, FA) already exists.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/http.py", line 1954, in _transactioning
return service_model.retrying(func, env=self.env)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 137, in retrying
result = func()
^^^^^^
File "/usr/lib/python3/dist-packages/odoo/http.py", line 1921, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/http.py", line 2168, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_http.py", line 329, in _dispatch
result = endpoint(**request.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/http.py", line 727, in route_wrapper
result = endpoint(self, *args, **params_ok)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/dataset.py", line 40, in call_button
action = call_kw(request.env[model], method, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/api.py", line 517, in call_kw
result = getattr(recs, name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/decorator.py", line 232, in fun
return caller(func, *(extras + args), **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 75, in check_and_log
return method(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 671, in button_immediate_upgrade
return self._button_immediate_function(self.env.registry[self._name].button_upgrade)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 604, in _button_immediate_function
registry = modules.registry.Registry.new(self._cr.dbname, update_module=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/decorator.py", line 232, in fun
return caller(func, *(extras + args), **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/tools/func.py", line 97, in locked
return func(inst, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/modules/registry.py", line 131, in new
odoo.modules.load_modules(registry, force_demo, status, update_module)
File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 475, in load_modules
processed_modules += load_marked_modules(env, graph,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 363, in load_marked_modules
loaded, processed = load_module_graph(
^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 226, in load_module_graph
load_data(env, idref, mode, kind='data', package=package)
File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 70, in load_data
tools.convert_file(env, package.name, filename, idref, mode, noupdate, kind)
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 608, in convert_file
convert_xml_import(env, module, fp, idref, mode, noupdate)
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 679, in convert_xml_import
obj.parse(doc.getroot())
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 594, in parse
self._tag_root(de)
File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 550, in _tag_root
raise ParseError('while parsing %s:%s, somewhere inside\n%s' % (
odoo.tools.convert.ParseError: while parsing /usr/lib/python3/dist-packages/odoo/addons/account_reports/data/balance_sheet.xml:3, somewhere inside
<record id="balance_sheet" model="account.report">
<field name="name">Balance Sheet</field>
<field name="filter_date_range" eval="False"/>
<field name="filter_analytic_groupby" eval="True"/>
<field name="filter_unfold_all" eval="True"/>
<field name="filter_journals" eval="True"/>
<field name="filter_multi_company">selector</field>
<field name="default_opening_date_filter">today</field>
<field name="custom_handler_model_id" ref="model_account_balance_sheet_report_handler"/>
<field name="column_ids">
<record id="balance_sheet_balance" model="account.report.column">
<field name="name">Balance</field>
<field name="expression_label">balance</field>
</record>
</field>
<field name="line_ids">
<record id="account_financial_report_total_assets0" model="account.report.line">
<field name="name">ASSETS</field>
<field name="hierarchy_level">0</field>
<field name="code">TA</field>
<field name="horizontal_split_side">left</field>
<field name="aggregation_formula">CA.balance + FA.balance + PNCA.balance</field>
<field name="children_ids">
<record id="account_financial_report_current_assets_view0" model="account.report.line">
<field name="name">Current Assets</field>
<field name="code">CA</field>
<field name="aggregation_formula">BA.balance + REC.balance + CAS.balance + PRE.balance</field>
<field name="children_ids">
<record id="account_financial_report_bank_view0" model="account.report.line">
<field name="name">Bank and Cash Accounts</field>
<field name="code">BA</field>
<field name="groupby">account_id</field>
<field name="foldable" eval="True"/>
<field name="domain_formula">sum([('account_id.account_type', '=', 'asset_cash')])</field>
</record>
<record id="account_financial_report_receivable0" model="account.report.line">
<field name="name">Receivables</field>
<field name="code">REC</field>
<field name="groupby">account_id</field>
<field name="foldable" eval="True"/>
<field name="domain_formula">sum([('account_id.account_type', '=', 'asset_receivable'), ('account_id.non_trade', '=', False)])</field>
</record>
<record id="account_financial_report_current_assets0" model="account.report.line">
<field name="name">Current Assets</field>
<field name="code">CAS</field>
<field name="groupby">account_id</field>
<field name="foldable" eval="True"/>
<field name="domain_formula">sum(['|', ('account_id.account_type', '=', 'asset_current'), '&amp;', ('account_id.account_type', '=', 'asset_receivable'), ('account_id.non_trade', '=', True)])</field>
</record>
<record id="account_financial_report_prepayements0" model="account.report.line">
<field name="name">Prepayments</field>
<field name="code">PRE</field>
<field name="groupby">account_id</field>
<field name="foldable" eval="True"/>
<field name="domain_formula">sum([('account_id.account_type', '=', 'asset_prepayments')])</field>
</record>
</field>
</record>
<record id="account_financial_report_fixed_assets_view0" model="account.report.line">
<field name="name">Plus Fixed Assets</field>
<field name="code">FA</field>
<field name="groupby">account_id</field>
<field name="foldable" eval="True"/>
<field name="domain_formula">sum([('account_id.account_type', '=', 'asset_fixed')])</field>
</record>
<record id="account_financial_report_non_current_assets_view0" model="account.report.line">
<field name="name">Plus Non-current Assets</field>
<field name="code">PNCA</field>
<field name="groupby">account_id</field>
<field name="foldable" eval="True"/>
<field name="domain_formula">sum([('account_id.account_type', '=', 'asset_non_current')])</field>
</record>
</field>
</record>
<record id="account_financial_report_liabilities_view0" model="account.report.line">
<field name="name">LIABILITIES</field>
<field name="hierarchy_level">0</field>
<field name="code">L</field>
<field name="horizontal_split_side">right</field>
<field name="expression_ids">
<record id="account_financial_report_liabilities_view0_balance" model="account.report.expression">
<field name="label">balance</field>
<field name="engine">aggregation</field>
<field name="formula">CL.balance + NL.balance</field>
<field name="green_on_positive" eval="False"/>
</record>
</field>
<field name="children_ids">
<record id="account_financial_report_current_liabilities0" model="account.report.line">
<field name="name">Current Liabilities</field>
<field name="code">CL</field>
<field name="expression_ids">
<record id="account_financial_report_current_liabilities0_balance" model="account.report.expression">
<field name="label">balance</field>
<field name="engine">aggregation</field>
<field name="formula">CL1.balance + CL2.balance</field>
<field name="green_on_positive" eval="False"/>
</record>
</field>
<field name="children_ids">
<record id="account_financial_report_current_liabilities1" model="account.report.line">
<field name="name">Current Liabilities</field>
<field name="code">CL1</field>
<field name="groupby">account_id</field>
<field name="foldable" eval="True"/>
<field name="expression_ids">
<record id="account_financial_report_current_liabilities1_balance" model="account.report.expression">
<field name="label">balance</field>
<field name="engine">domain</field>
<field name="formula" eval="['|', ('account_id.account_type', 'in', ('liability_current', 'liability_credit_card')), '&amp;', ('account_id.account_type', '=', 'liability_payable'), ('account_id.non_trade', '=', True)]"/>
<field name="subformula">-sum</field>
<field name="green_on_positive" eval="False"/>
</record>
</field>
</record>
<record id="account_financial_report_current_liabilities_payable" model="account.report.line">
<field name="name">Payables</field>
<field name="code">CL2</field>
<field name="groupby">account_id</field>
<field name="foldable" eval="True"/>
<field name="expression_ids">
<record id="account_financial_report_current_liabilities_payable_balance" model="account.report.expression">
<field name="label">balance</field>
<field name="engine">domain</field>
<field name="formula" eval="[('account_id.account_type', '=', 'liability_payable'), ('account_id.non_trade', '=', False)]"/>
<field name="subformula">-sum</field>
<field name="green_on_positive" eval="False"/>
</record>
</field>
</record>
</field>
</record>
<record id="account_financial_report_non_current_liabilities0" model="account.report.line">
<field name="name">Plus Non-current Liabilities</field>
<field name="code">NL</field>
<field name="groupby">account_id</field>
<field name="foldable" eval="True"/>
<field name="expression_ids">
<record id="account_financial_report_non_current_liabilities0_balance" model="account.report.expression">
<field name="label">balance</field>
<field name="engine">domain</field>
<field name="formula" eval="[('account_id.account_type', '=', 'liability_non_current')]"/>
<field name="subformula">-sum</field>
<field name="green_on_positive" eval="False"/>
</record>
</field>
</record>
</field>
</record>
<record id="account_financial_report_equity0" model="account.report.line">
<field name="name">EQUITY</field>
<field name="hierarchy_level">0</field>
<field name="code">EQ</field>
<field name="horizontal_split_side">right</field>
<field name="aggregation_formula">UNAFFECTED_EARNINGS.balance + RETAINED_EARNINGS.balance</field>
<field name="children_ids">
<record id="account_financial_unaffected_earnings0" model="account.report.line">
<field name="name">Unallocated Earnings</field>
<field name="code">UNAFFECTED_EARNINGS</field>
<field name="aggregation_formula">CURR_YEAR_EARNINGS.balance + PREV_YEAR_EARNINGS.balance</field>
<field name="children_ids">
<record id="account_financial_current_year_earnings0" model="account.report.line">
<field name="name">Current Year Unallocated Earnings</field>
<field name="code">CURR_YEAR_EARNINGS</field>
<field name="aggregation_formula"/>
<field name="expression_ids">
<record id="account_financial_current_year_earnings_pnl" model="account.report.expression">
<field name="label">pnl</field>
<field name="engine">aggregation</field>
<field name="formula">NEP.balance</field>
<field name="date_scope">from_fiscalyear</field>
<field name="subformula">cross_report</field>
</record>
<record id="account_financial_current_year_earnings_alloc" model="account.report.expression">
<field name="label">alloc</field>
<field name="engine">domain</field>
<field name="formula" eval="[('account_id.account_type', '=', 'equity_unaffected')]"/>
<field name="date_scope">from_fiscalyear</field>
<field name="subformula">-sum</field>
</record>
<record id="account_financial_current_year_earnings_balance" model="account.report.expression">
<field name="label">balance</field>
<field name="engine">aggregation</field>
<field name="formula">CURR_YEAR_EARNINGS.pnl + CURR_YEAR_EARNINGS.alloc</field>
</record>
</field>
</record>
<record id="account_financial_previous_year_earnings0" model="account.report.line">
<field name="name">Previous Years Unallocated Earnings</field>
<field name="code">PREV_YEAR_EARNINGS</field>
<field name="expression_ids">
<record id="account_financial_previous_year_earnings0_allocated_earnings" model="account.report.expression">
<field name="label">allocated_earnings</field>
<field name="engine">domain</field>
<field name="formula" eval="[('account_id.account_type', '=', 'equity_unaffected')]"/>
<field name="subformula">-sum</field>
<field name="date_scope">from_beginning</field>
</record>
<record id="account_financial_previous_year_earnings0_balance_domain" model="account.report.expression">
<field name="label">balance_domain</field>
<field name="engine">domain</field>
<field name="formula" eval="[('account_id.account_type', 'in', ('income', 'income_other', 'expense_direct_cost', 'expense', 'expense_depreciation'))]"/>
<field name="subformula">-sum</field>
<field name="date_scope">from_beginning</field>
</record>
<record id="account_financial_previous_year_earnings0_balance" model="account.report.expression">
<field name="label">balance</field>
<field name="engine">aggregation</field>
<field name="formula">PREV_YEAR_EARNINGS.balance_domain + PREV_YEAR_EARNINGS.allocated_earnings - CURR_YEAR_EARNINGS.balance</field>
</record>
</field>
</record>
</field>
</record>
<record id="account_financial_retained_earnings0" model="account.report.line">
<field name="name">Retained Earnings</field>
<field name="code">RETAINED_EARNINGS</field>
<field name="aggregation_formula">CURR_RETAINED_EARNINGS.balance + PREV_RETAINED_EARNINGS.balance</field>
<field name="groupby" eval="False"/>
<field name="foldable" eval="False"/>
<field name="children_ids">
<record id="account_financial_retained_earnings_line_1" model="account.report.line">
<field name="name">Current Year Retained Earnings</field>
<field name="code">CURR_RETAINED_EARNINGS</field>
<field name="groupby">account_id</field>
<field name="foldable" eval="True"/>
<field name="expression_ids">
<record id="account_financial_retained_earnings_current" model="account.report.expression">
<field name="label">balance</field>
<field name="engine">domain</field>
<field name="formula" eval="[('account_id.account_type', '=', 'equity')]"/>
<field name="subformula">-sum</field>
<field name="date_scope">from_fiscalyear</field>
</record>
</field>
</record>
<record id="account_financial_retained_earnings_line_2" model="account.report.line">
<field name="name">Previous Years Retained Earnings</field>
<field name="code">PREV_RETAINED_EARNINGS</field>
<field name="expression_ids">
<record id="account_financial_retained_earnings_total" model="account.report.expression">
<field name="label">total</field>
<field name="engine">domain</field>
<field name="formula" eval="[('account_id.account_type', '=', 'equity')]"/>
<field name="subformula">-sum</field>
</record>
<record id="account_financial_retained_earnings_balance" model="account.report.expression">
<field name="label">balance</field>
<field name="engine">aggregation</field>
<field name="formula">PREV_RETAINED_EARNINGS.total - CURR_RETAINED_EARNINGS.balance</field>
</record>
</field>
</record>
</field>
</record>
</field>
</record>
<record id="account_financial_report_liabilities_and_equity_view0" model="account.report.line">
<field name="name">LIABILITIES + EQUITY</field>
<field name="hierarchy_level">0</field>
<field name="code">LE</field>
<field name="horizontal_split_side">right</field>
<field name="expression_ids">
<record id="account_financial_report_liabilities_and_equity_view0_balance" model="account.report.expression">
<field name="label">balance</field>
<field name="engine">aggregation</field>
<field name="formula">L.balance + EQ.balance</field>
<field name="green_on_positive" eval="False"/>
</record>
</field>
</record>
<record id="account_financial_report_off_sheet" model="account.report.line">
<field name="name">OFF BALANCE SHEET ACCOUNTS</field>
<field name="hierarchy_level">0</field>
<field name="code">OS</field>
<field name="groupby">account_id</field>
<field name="foldable" eval="True"/>
<field name="hide_if_zero" eval="1"/>
<field name="domain_formula">-sum([('account_id.account_type', '=', 'off_balance')])</field>
</record>
</field>
</record>

- As for this one: Reporting > Management > Report Line Templates I can't find the location

Related Posts Replies Views Activity
2
Jun 25
955
2
Mar 25
850
0
Feb 23
2640
1
May 22
3646
1
Mar 21
2724