From 82cac9c40fd8f621e12274518dbfa523aa29419e Mon Sep 17 00:00:00 2001 From: Shllokkk Date: Tue, 31 Mar 2026 00:48:09 +0530 Subject: [PATCH 1/6] feat: introduce print formats for financial statements --- .../balance_sheet_standard/__init__.py | 0 .../balance_sheet_standard.json | 33 +++++++++++++++++++ .../cash_flow_statement_standard/__init__.py | 0 .../cash_flow_statement_standard.json | 33 +++++++++++++++++++ .../p&l_statement_standard/__init__.py | 0 .../p&l_statement_standard.json | 33 +++++++++++++++++++ 6 files changed, 99 insertions(+) create mode 100644 erpnext/accounts/print_format/balance_sheet_standard/__init__.py create mode 100644 erpnext/accounts/print_format/balance_sheet_standard/balance_sheet_standard.json create mode 100644 erpnext/accounts/print_format/cash_flow_statement_standard/__init__.py create mode 100644 erpnext/accounts/print_format/cash_flow_statement_standard/cash_flow_statement_standard.json create mode 100644 erpnext/accounts/print_format/p&l_statement_standard/__init__.py create mode 100644 erpnext/accounts/print_format/p&l_statement_standard/p&l_statement_standard.json diff --git a/erpnext/accounts/print_format/balance_sheet_standard/__init__.py b/erpnext/accounts/print_format/balance_sheet_standard/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/accounts/print_format/balance_sheet_standard/balance_sheet_standard.json b/erpnext/accounts/print_format/balance_sheet_standard/balance_sheet_standard.json new file mode 100644 index 00000000000..a218c108d8f --- /dev/null +++ b/erpnext/accounts/print_format/balance_sheet_standard/balance_sheet_standard.json @@ -0,0 +1,33 @@ +{ + "absolute_value": 0, + "align_labels_right": 0, + "creation": "2026-03-30 20:20:56.195531", + "custom_format": 1, + "default_print_language": "en", + "disabled": 0, + "docstatus": 0, + "doctype": "Print Format", + "font_size": 14, + "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Company\") %}: {%= filters.company %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Currency\") %}:\n\t\t\t\t{%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Period Based On\") %}: \n\t\t\t\t{%= filters.filter_based_on %}\n\t\t\t
\n\n\t\t\t{% if (filters.filter_based_on === \"Fiscal Year\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n\t\t\t\t
\n\n\t\t\t{% } else if (filters.filter_based_on === \"Date Range\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_start_date) %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_end_date) %}\n\t\t\t\t
\n\t\t\t{% } %}\n\t\t
\n\t
\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= row.account_name || row.section %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", + "idx": 0, + "line_breaks": 0, + "margin_bottom": 15.0, + "margin_left": 15.0, + "margin_right": 15.0, + "margin_top": 15.0, + "modified": "2026-03-31 00:35:16.443813", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Balance Sheet Standard", + "owner": "Administrator", + "page_number": "Hide", + "pdf_generator": "chrome", + "print_format_builder": 0, + "print_format_builder_beta": 0, + "print_format_for": "Report", + "print_format_type": "JS", + "raw_printing": 0, + "report": "Balance Sheet", + "show_section_headings": 0, + "standard": "Yes" +} diff --git a/erpnext/accounts/print_format/cash_flow_statement_standard/__init__.py b/erpnext/accounts/print_format/cash_flow_statement_standard/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/accounts/print_format/cash_flow_statement_standard/cash_flow_statement_standard.json b/erpnext/accounts/print_format/cash_flow_statement_standard/cash_flow_statement_standard.json new file mode 100644 index 00000000000..ca3c4d696e5 --- /dev/null +++ b/erpnext/accounts/print_format/cash_flow_statement_standard/cash_flow_statement_standard.json @@ -0,0 +1,33 @@ +{ + "absolute_value": 0, + "align_labels_right": 0, + "creation": "2026-03-31 00:46:27.932456", + "custom_format": 1, + "default_print_language": "en", + "disabled": 0, + "docstatus": 0, + "doctype": "Print Format", + "font_size": 14, + "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Company\") %}: {%= filters.company %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Currency\") %}:\n\t\t\t\t{%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Period Based On\") %}: \n\t\t\t\t{%= filters.filter_based_on %}\n\t\t\t
\n\n\t\t\t{% if (filters.filter_based_on === \"Fiscal Year\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n\t\t\t\t
\n\n\t\t\t{% } else if (filters.filter_based_on === \"Date Range\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_start_date) %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_end_date) %}\n\t\t\t\t
\n\t\t\t{% } %}\n\t\t
\n\t
\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= row.account_name || row.section %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", + "idx": 0, + "line_breaks": 0, + "margin_bottom": 15.0, + "margin_left": 15.0, + "margin_right": 15.0, + "margin_top": 15.0, + "modified": "2026-03-31 01:13:26.318158", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Cash Flow Statement Standard", + "owner": "Administrator", + "page_number": "Hide", + "pdf_generator": "chrome", + "print_format_builder": 0, + "print_format_builder_beta": 0, + "print_format_for": "Report", + "print_format_type": "JS", + "raw_printing": 0, + "report": "Cash Flow", + "show_section_headings": 0, + "standard": "Yes" +} diff --git a/erpnext/accounts/print_format/p&l_statement_standard/__init__.py b/erpnext/accounts/print_format/p&l_statement_standard/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/accounts/print_format/p&l_statement_standard/p&l_statement_standard.json b/erpnext/accounts/print_format/p&l_statement_standard/p&l_statement_standard.json new file mode 100644 index 00000000000..9b7771a3ea3 --- /dev/null +++ b/erpnext/accounts/print_format/p&l_statement_standard/p&l_statement_standard.json @@ -0,0 +1,33 @@ +{ + "absolute_value": 0, + "align_labels_right": 0, + "creation": "2026-03-31 00:39:51.067431", + "custom_format": 1, + "default_print_language": "en", + "disabled": 0, + "docstatus": 0, + "doctype": "Print Format", + "font_size": 14, + "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Company\") %}: {%= filters.company %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Currency\") %}:\n\t\t\t\t{%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Period Based On\") %}: \n\t\t\t\t{%= filters.filter_based_on %}\n\t\t\t
\n\n\t\t\t{% if (filters.filter_based_on === \"Fiscal Year\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n\t\t\t\t
\n\n\t\t\t{% } else if (filters.filter_based_on === \"Date Range\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_start_date) %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_end_date) %}\n\t\t\t\t
\n\t\t\t{% } %}\n\t\t
\n\t
\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= row.account_name || row.section %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", + "idx": 0, + "line_breaks": 0, + "margin_bottom": 15.0, + "margin_left": 15.0, + "margin_right": 15.0, + "margin_top": 15.0, + "modified": "2026-03-31 00:39:51.067431", + "modified_by": "Administrator", + "module": "Accounts", + "name": "P&L Statement Standard", + "owner": "Administrator", + "page_number": "Hide", + "pdf_generator": "chrome", + "print_format_builder": 0, + "print_format_builder_beta": 0, + "print_format_for": "Report", + "print_format_type": "JS", + "raw_printing": 0, + "report": "Profit and Loss Statement", + "show_section_headings": 0, + "standard": "Yes" +} From ac7e5271b0a96bf0e13142c1af3dad5b21dd9a90 Mon Sep 17 00:00:00 2001 From: Shllokkk Date: Tue, 31 Mar 2026 14:33:03 +0530 Subject: [PATCH 2/6] feat: print format for report trial balance --- .../trial_balance_standard/__init__.py | 0 .../trial_balance_standard.json | 33 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 erpnext/accounts/print_format/trial_balance_standard/__init__.py create mode 100644 erpnext/accounts/print_format/trial_balance_standard/trial_balance_standard.json diff --git a/erpnext/accounts/print_format/trial_balance_standard/__init__.py b/erpnext/accounts/print_format/trial_balance_standard/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/accounts/print_format/trial_balance_standard/trial_balance_standard.json b/erpnext/accounts/print_format/trial_balance_standard/trial_balance_standard.json new file mode 100644 index 00000000000..1a88cde8226 --- /dev/null +++ b/erpnext/accounts/print_format/trial_balance_standard/trial_balance_standard.json @@ -0,0 +1,33 @@ +{ + "absolute_value": 0, + "align_labels_right": 0, + "creation": "2026-03-31 01:22:21.137577", + "custom_format": 1, + "default_print_language": "en", + "disabled": 0, + "docstatus": 0, + "doctype": "Print Format", + "font_size": 14, + "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Company\") %}: {%= filters.company %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Currency\") %}:\n\t\t\t\t{%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"From Date\") %}: \n\t\t\t\t{%= frappe.datetime.str_to_user(filters.from_date) %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"To Date\") %}: \n\t\t\t\t{%= frappe.datetime.str_to_user(filters.to_date) %}\n\t\t\t
\n\t\t
\n\t
\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\tconst styling = i === 0 ? \"\" : \"width: 9em\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= row.account_name || row.section %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", + "idx": 0, + "line_breaks": 0, + "margin_bottom": 15.0, + "margin_left": 15.0, + "margin_right": 15.0, + "margin_top": 15.0, + "modified": "2026-03-31 15:04:47.032520", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Trial Balance Standard", + "owner": "Administrator", + "page_number": "Hide", + "pdf_generator": "chrome", + "print_format_builder": 0, + "print_format_builder_beta": 0, + "print_format_for": "Report", + "print_format_type": "JS", + "raw_printing": 0, + "report": "Trial Balance", + "show_section_headings": 0, + "standard": "Yes" +} From fa0a9085cab191c3aff4f21f1d6a438f22730661 Mon Sep 17 00:00:00 2001 From: Shllokkk Date: Tue, 31 Mar 2026 17:33:55 +0530 Subject: [PATCH 3/6] fix: minor text issues in print --- .../balance_sheet_standard/balance_sheet_standard.json | 4 ++-- .../cash_flow_statement_standard.json | 4 ++-- .../p&l_statement_standard/p&l_statement_standard.json | 4 ++-- .../trial_balance_standard/trial_balance_standard.json | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/erpnext/accounts/print_format/balance_sheet_standard/balance_sheet_standard.json b/erpnext/accounts/print_format/balance_sheet_standard/balance_sheet_standard.json index a218c108d8f..662d2565904 100644 --- a/erpnext/accounts/print_format/balance_sheet_standard/balance_sheet_standard.json +++ b/erpnext/accounts/print_format/balance_sheet_standard/balance_sheet_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Company\") %}: {%= filters.company %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Currency\") %}:\n\t\t\t\t{%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Period Based On\") %}: \n\t\t\t\t{%= filters.filter_based_on %}\n\t\t\t
\n\n\t\t\t{% if (filters.filter_based_on === \"Fiscal Year\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n\t\t\t\t
\n\n\t\t\t{% } else if (filters.filter_based_on === \"Date Range\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_start_date) %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_end_date) %}\n\t\t\t\t
\n\t\t\t{% } %}\n\t\t
\n\t
\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= row.account_name || row.section %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", + "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Company\") %}: {%= filters.company %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Currency\") %}:\n\t\t\t\t{%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Period Based On\") %}: \n\t\t\t\t{%= filters.filter_based_on %}\n\t\t\t
\n\n\t\t\t{% if (filters.filter_based_on === \"Fiscal Year\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n\t\t\t\t
\n\n\t\t\t{% } else if (filters.filter_based_on === \"Date Range\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_start_date) %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_end_date) %}\n\t\t\t\t
\n\t\t\t{% } %}\n\t\t
\n\t
\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n\t {%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-03-31 00:35:16.443813", + "modified": "2026-03-31 17:25:22.282171", "modified_by": "Administrator", "module": "Accounts", "name": "Balance Sheet Standard", diff --git a/erpnext/accounts/print_format/cash_flow_statement_standard/cash_flow_statement_standard.json b/erpnext/accounts/print_format/cash_flow_statement_standard/cash_flow_statement_standard.json index ca3c4d696e5..2130f060ccb 100644 --- a/erpnext/accounts/print_format/cash_flow_statement_standard/cash_flow_statement_standard.json +++ b/erpnext/accounts/print_format/cash_flow_statement_standard/cash_flow_statement_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Company\") %}: {%= filters.company %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Currency\") %}:\n\t\t\t\t{%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Period Based On\") %}: \n\t\t\t\t{%= filters.filter_based_on %}\n\t\t\t
\n\n\t\t\t{% if (filters.filter_based_on === \"Fiscal Year\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n\t\t\t\t
\n\n\t\t\t{% } else if (filters.filter_based_on === \"Date Range\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_start_date) %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_end_date) %}\n\t\t\t\t
\n\t\t\t{% } %}\n\t\t
\n\t
\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= row.account_name || row.section %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", + "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Company\") %}: {%= filters.company %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Currency\") %}:\n\t\t\t\t{%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Period Based On\") %}: \n\t\t\t\t{%= filters.filter_based_on %}\n\t\t\t
\n\n\t\t\t{% if (filters.filter_based_on === \"Fiscal Year\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n\t\t\t\t
\n\n\t\t\t{% } else if (filters.filter_based_on === \"Date Range\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_start_date) %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_end_date) %}\n\t\t\t\t
\n\t\t\t{% } %}\n\t\t
\n\t
\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-03-31 01:13:26.318158", + "modified": "2026-03-31 17:26:56.411191", "modified_by": "Administrator", "module": "Accounts", "name": "Cash Flow Statement Standard", diff --git a/erpnext/accounts/print_format/p&l_statement_standard/p&l_statement_standard.json b/erpnext/accounts/print_format/p&l_statement_standard/p&l_statement_standard.json index 9b7771a3ea3..51cdf702372 100644 --- a/erpnext/accounts/print_format/p&l_statement_standard/p&l_statement_standard.json +++ b/erpnext/accounts/print_format/p&l_statement_standard/p&l_statement_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Company\") %}: {%= filters.company %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Currency\") %}:\n\t\t\t\t{%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Period Based On\") %}: \n\t\t\t\t{%= filters.filter_based_on %}\n\t\t\t
\n\n\t\t\t{% if (filters.filter_based_on === \"Fiscal Year\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n\t\t\t\t
\n\n\t\t\t{% } else if (filters.filter_based_on === \"Date Range\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_start_date) %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_end_date) %}\n\t\t\t\t
\n\t\t\t{% } %}\n\t\t
\n\t
\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= row.account_name || row.section %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", + "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Company\") %}: {%= filters.company %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Currency\") %}:\n\t\t\t\t{%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Period Based On\") %}: \n\t\t\t\t{%= filters.filter_based_on %}\n\t\t\t
\n\n\t\t\t{% if (filters.filter_based_on === \"Fiscal Year\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n\t\t\t\t
\n\n\t\t\t{% } else if (filters.filter_based_on === \"Date Range\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_start_date) %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_end_date) %}\n\t\t\t\t
\n\t\t\t{% } %}\n\t\t
\n\t
\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-03-31 00:39:51.067431", + "modified": "2026-03-31 17:26:30.738073", "modified_by": "Administrator", "module": "Accounts", "name": "P&L Statement Standard", diff --git a/erpnext/accounts/print_format/trial_balance_standard/trial_balance_standard.json b/erpnext/accounts/print_format/trial_balance_standard/trial_balance_standard.json index 1a88cde8226..7c6521e79df 100644 --- a/erpnext/accounts/print_format/trial_balance_standard/trial_balance_standard.json +++ b/erpnext/accounts/print_format/trial_balance_standard/trial_balance_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Company\") %}: {%= filters.company %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Currency\") %}:\n\t\t\t\t{%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"From Date\") %}: \n\t\t\t\t{%= frappe.datetime.str_to_user(filters.from_date) %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"To Date\") %}: \n\t\t\t\t{%= frappe.datetime.str_to_user(filters.to_date) %}\n\t\t\t
\n\t\t
\n\t
\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\tconst styling = i === 0 ? \"\" : \"width: 9em\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= row.account_name || row.section %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", + "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Company\") %}: {%= filters.company %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Currency\") %}:\n\t\t\t\t{%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"From Date\") %}: \n\t\t\t\t{%= frappe.datetime.str_to_user(filters.from_date) %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"To Date\") %}: \n\t\t\t\t{%= frappe.datetime.str_to_user(filters.to_date) %}\n\t\t\t
\n\t\t
\n\t
\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\tconst styling = i === 0 ? \"\" : \"width: 9em\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-03-31 15:04:47.032520", + "modified": "2026-03-31 17:26:50.930090", "modified_by": "Administrator", "module": "Accounts", "name": "Trial Balance Standard", From e8777a1e349c0059220837122445c51c415784c6 Mon Sep 17 00:00:00 2001 From: Shllokkk Date: Sun, 12 Apr 2026 13:33:18 +0530 Subject: [PATCH 4/6] refactor: print templates for financial statements --- .../report/balance_sheet/balance_sheet.html | 225 +++++++++++++++++- .../accounts/report/cash_flow/cash_flow.html | 225 +++++++++++++++++- .../profit_and_loss_statement.html | 225 +++++++++++++++++- .../report/trial_balance/trial_balance.html | 211 +++++++++++++++- 4 files changed, 882 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.html b/erpnext/accounts/report/balance_sheet/balance_sheet.html index d4ae54d4f38..5774bb07a0b 100644 --- a/erpnext/accounts/report/balance_sheet/balance_sheet.html +++ b/erpnext/accounts/report/balance_sheet/balance_sheet.html @@ -1 +1,224 @@ -{% include "accounts/report/financial_statements.html" %} +{% + const report_columns = report + .get_columns_for_print() + .filter(col => !col.hidden); + + if (report_columns.length > 8) { + frappe.throw( + __("Too many columns. Export the report and print it using a spreadsheet application.") + ); + } +%} + + + +
+ +
+
+ {%= __(report.report_name) %} +
+
+ + {% if (subtitle && subtitle.trim()) { %} +
+ {{ subtitle }} +
+ {% } else { %} +
+
+
+ {%= __("Company") %}: {%= filters.company %} +
+
+ {%= __("Currency") %}: + {%= filters.presentation_currency || erpnext.get_currency(filters.company) %} +
+
+ +
+
+ {%= __("Period Based On") %}: + {%= filters.filter_based_on %} +
+ + {% if (filters.filter_based_on === "Fiscal Year") { %} +
+ {%= __("Start Year") %}: {%= filters.from_fiscal_year %} +
+
+ {%= __("End Year") %}: {%= filters.to_fiscal_year %} +
+ + {% } else if (filters.filter_based_on === "Date Range") { %} +
+ {%= __("Start Date") %}: + {%= frappe.datetime.str_to_user(filters.period_start_date) %} +
+
+ {%= __("End Date") %}: + {%= frappe.datetime.str_to_user(filters.period_end_date) %} +
+ {% } %} +
+
+ {% } %} + +
+ + + + {% for (let i = 0, l = report_columns.length; i < l; i++) { %} + {% + const col = report_columns[i]; + const align = i === 0 ? "text-left" : "text-right"; + %} + + {% } %} + + + + + {% for (let j = 0, k = data.length; j < k; j++) { %} + {% + const row = data[j]; + + let row_class = ""; + if (!(row.parent_account || row.parent_section)) { + row_class = "financial-statements-important"; + } + if (!(row.account_name || row.section)) { + row_class += " financial-statements-blank-row"; + } + %} + + + {% for (let i = 0, l = report_columns.length; i < l; i++) { %} + {% + const col = report_columns[i]; + const value = row[col.fieldname]; + const align = i === 0 ? "text-left" : "text-right"; + %} + + + {% } %} + + {% } %} + +
+ {%= col.label %} +
+ {% if (i === 0) { %} + + {%= String(row.account_name || row.section || "").replace(/^['"]|['"]$/g, "") %} + + {% } else if (!is_null(value)) { %} + {%= frappe.format(value, col, {}, row) %} + {% } %} +
+
+ +

+ {%= __("Printed on {0}", [ + frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string()) + ]) %} +

+ +
\ No newline at end of file diff --git a/erpnext/accounts/report/cash_flow/cash_flow.html b/erpnext/accounts/report/cash_flow/cash_flow.html index d4ae54d4f38..6b11aea5e54 100644 --- a/erpnext/accounts/report/cash_flow/cash_flow.html +++ b/erpnext/accounts/report/cash_flow/cash_flow.html @@ -1 +1,224 @@ -{% include "accounts/report/financial_statements.html" %} +{% + const report_columns = report + .get_columns_for_print() + .filter(col => !col.hidden); + + if (report_columns.length > 8) { + frappe.throw( + __("Too many columns. Export the report and print it using a spreadsheet application.") + ); + } +%} + + + +
+ +
+
+ {%= __(report.report_name) %} +
+
+ + {% if (subtitle && subtitle.trim()) { %} +
+ {{ subtitle }} +
+ {% } else { %} +
+
+
+ {%= __("Company") %}: {%= filters.company %} +
+
+ {%= __("Currency") %}: + {%= filters.presentation_currency || erpnext.get_currency(filters.company) %} +
+
+ +
+
+ {%= __("Period Based On") %}: + {%= filters.filter_based_on %} +
+ + {% if (filters.filter_based_on === "Fiscal Year") { %} +
+ {%= __("Start Year") %}: {%= filters.from_fiscal_year %} +
+
+ {%= __("End Year") %}: {%= filters.to_fiscal_year %} +
+ + {% } else if (filters.filter_based_on === "Date Range") { %} +
+ {%= __("Start Date") %}: + {%= frappe.datetime.str_to_user(filters.period_start_date) %} +
+
+ {%= __("End Date") %}: + {%= frappe.datetime.str_to_user(filters.period_end_date) %} +
+ {% } %} +
+
+ {% } %} + +
+ + + + {% for (let i = 0, l = report_columns.length; i < l; i++) { %} + {% + const col = report_columns[i]; + const align = i === 0 ? "text-left" : "text-right"; + %} + + {% } %} + + + + + {% for (let j = 0, k = data.length; j < k; j++) { %} + {% + const row = data[j]; + + let row_class = ""; + if (!(row.parent_account || row.parent_section)) { + row_class = "financial-statements-important"; + } + if (!(row.account_name || row.section)) { + row_class += " financial-statements-blank-row"; + } + %} + + + {% for (let i = 0, l = report_columns.length; i < l; i++) { %} + {% + const col = report_columns[i]; + const value = row[col.fieldname]; + const align = i === 0 ? "text-left" : "text-right"; + %} + + + {% } %} + + {% } %} + +
+ {%= col.label %} +
+ {% if (i === 0) { %} + + {%= String(row.account_name || row.section || "").replace(/^['"]|['"]$/g, "") %} + + {% } else if (!is_null(value)) { %} + {%= frappe.format(value, col, {}, row) %} + {% } %} +
+
+ +

+ {%= __("Printed on {0}", [ + frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string()) + ]) %} +

+ +
\ No newline at end of file diff --git a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.html b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.html index d4ae54d4f38..6b11aea5e54 100644 --- a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.html +++ b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.html @@ -1 +1,224 @@ -{% include "accounts/report/financial_statements.html" %} +{% + const report_columns = report + .get_columns_for_print() + .filter(col => !col.hidden); + + if (report_columns.length > 8) { + frappe.throw( + __("Too many columns. Export the report and print it using a spreadsheet application.") + ); + } +%} + + + +
+ +
+
+ {%= __(report.report_name) %} +
+
+ + {% if (subtitle && subtitle.trim()) { %} +
+ {{ subtitle }} +
+ {% } else { %} +
+
+
+ {%= __("Company") %}: {%= filters.company %} +
+
+ {%= __("Currency") %}: + {%= filters.presentation_currency || erpnext.get_currency(filters.company) %} +
+
+ +
+
+ {%= __("Period Based On") %}: + {%= filters.filter_based_on %} +
+ + {% if (filters.filter_based_on === "Fiscal Year") { %} +
+ {%= __("Start Year") %}: {%= filters.from_fiscal_year %} +
+
+ {%= __("End Year") %}: {%= filters.to_fiscal_year %} +
+ + {% } else if (filters.filter_based_on === "Date Range") { %} +
+ {%= __("Start Date") %}: + {%= frappe.datetime.str_to_user(filters.period_start_date) %} +
+
+ {%= __("End Date") %}: + {%= frappe.datetime.str_to_user(filters.period_end_date) %} +
+ {% } %} +
+
+ {% } %} + +
+ + + + {% for (let i = 0, l = report_columns.length; i < l; i++) { %} + {% + const col = report_columns[i]; + const align = i === 0 ? "text-left" : "text-right"; + %} + + {% } %} + + + + + {% for (let j = 0, k = data.length; j < k; j++) { %} + {% + const row = data[j]; + + let row_class = ""; + if (!(row.parent_account || row.parent_section)) { + row_class = "financial-statements-important"; + } + if (!(row.account_name || row.section)) { + row_class += " financial-statements-blank-row"; + } + %} + + + {% for (let i = 0, l = report_columns.length; i < l; i++) { %} + {% + const col = report_columns[i]; + const value = row[col.fieldname]; + const align = i === 0 ? "text-left" : "text-right"; + %} + + + {% } %} + + {% } %} + +
+ {%= col.label %} +
+ {% if (i === 0) { %} + + {%= String(row.account_name || row.section || "").replace(/^['"]|['"]$/g, "") %} + + {% } else if (!is_null(value)) { %} + {%= frappe.format(value, col, {}, row) %} + {% } %} +
+
+ +

+ {%= __("Printed on {0}", [ + frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string()) + ]) %} +

+ +
\ No newline at end of file diff --git a/erpnext/accounts/report/trial_balance/trial_balance.html b/erpnext/accounts/report/trial_balance/trial_balance.html index d4ae54d4f38..be3fa7a205b 100644 --- a/erpnext/accounts/report/trial_balance/trial_balance.html +++ b/erpnext/accounts/report/trial_balance/trial_balance.html @@ -1 +1,210 @@ -{% include "accounts/report/financial_statements.html" %} +{% + const report_columns = report + .get_columns_for_print() + .filter(col => !col.hidden); + + if (report_columns.length > 8) { + frappe.throw( + __("Too many columns. Export the report and print it using a spreadsheet application.") + ); + } +%} + + + +
+ +
+
+ {%= __(report.report_name) %} +
+
+ + {% if (subtitle && subtitle.trim()) { %} +
+ {{ subtitle }} +
+ {% } else { %} +
+
+
+ {%= __("Company") %}: {%= filters.company %} +
+
+ {%= __("Currency") %}: + {%= filters.presentation_currency || erpnext.get_currency(filters.company) %} +
+
+ +
+
+ {%= __("From Date") %}: + {%= frappe.datetime.str_to_user(filters.from_date) %} +
+
+ {%= __("To Date") %}: + {%= frappe.datetime.str_to_user(filters.to_date) %} +
+
+
+ {% } %} + +
+ + + + {% for (let i = 0, l = report_columns.length; i < l; i++) { %} + {% + const col = report_columns[i]; + const align = i === 0 ? "text-left" : "text-right"; + const styling = i === 0 ? "" : "width: 9em"; + %} + + {% } %} + + + + + {% for (let j = 0, k = data.length; j < k; j++) { %} + {% + const row = data[j]; + + let row_class = ""; + if (!(row.parent_account || row.parent_section)) { + row_class = "financial-statements-important"; + } + if (!(row.account_name || row.section)) { + row_class += " financial-statements-blank-row"; + } + %} + + + {% for (let i = 0, l = report_columns.length; i < l; i++) { %} + {% + const col = report_columns[i]; + const value = row[col.fieldname]; + const align = i === 0 ? "text-left" : "text-right"; + %} + + + {% } %} + + {% } %} + +
+ {%= col.label %} +
+ {% if (i === 0) { %} + + {%= String(row.account_name || row.section || "").replace(/^['"]|['"]$/g, "") %} + + {% } else if (!is_null(value)) { %} + {%= frappe.format(value, col, {}, row) %} + {% } %} +
+
+ +

+ {%= __("Printed on {0}", [ + frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string()) + ]) %} +

+ +
\ No newline at end of file From 5858b140712e296e72189d95f4ca9a6dee7f7cfb Mon Sep 17 00:00:00 2001 From: Shllokkk Date: Fri, 24 Apr 2026 12:41:13 +0530 Subject: [PATCH 5/6] fix: styling in trial_balance.html and print format --- .../trial_balance_standard.json | 4 ++-- .../report/trial_balance/trial_balance.html | 13 +++++++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/erpnext/accounts/print_format/trial_balance_standard/trial_balance_standard.json b/erpnext/accounts/print_format/trial_balance_standard/trial_balance_standard.json index 7c6521e79df..019f59be876 100644 --- a/erpnext/accounts/print_format/trial_balance_standard/trial_balance_standard.json +++ b/erpnext/accounts/print_format/trial_balance_standard/trial_balance_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Company\") %}: {%= filters.company %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Currency\") %}:\n\t\t\t\t{%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"From Date\") %}: \n\t\t\t\t{%= frappe.datetime.str_to_user(filters.from_date) %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"To Date\") %}: \n\t\t\t\t{%= frappe.datetime.str_to_user(filters.to_date) %}\n\t\t\t
\n\t\t
\n\t
\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\tconst styling = i === 0 ? \"\" : \"width: 9em\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", + "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n {% if (subtitle && subtitle.trim()) { %}\n
\n {{ subtitle }}\n
\n {% } else { %}\n
\n
\n
\n {%= __(\"Company\") %}: {%= filters.company %}\n
\n
\n {%= __(\"Currency\") %}:\n {%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n
\n
\n\n
\n
\n {%= __(\"From Date\") %}:\n {%= frappe.datetime.str_to_user(filters.from_date) %}\n
\n
\n {%= __(\"To Date\") %}:\n {%= frappe.datetime.str_to_user(filters.to_date) %}\n
\n
\n
\n {% } %}\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\tconst styling = i === 0 ? \"\" : \"width: 9em\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n\n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n\n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n\n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n\n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-03-31 17:26:50.930090", + "modified": "2026-04-24 12:40:37.484173", "modified_by": "Administrator", "module": "Accounts", "name": "Trial Balance Standard", diff --git a/erpnext/accounts/report/trial_balance/trial_balance.html b/erpnext/accounts/report/trial_balance/trial_balance.html index be3fa7a205b..f3f029abcdd 100644 --- a/erpnext/accounts/report/trial_balance/trial_balance.html +++ b/erpnext/accounts/report/trial_balance/trial_balance.html @@ -50,15 +50,20 @@ font-weight: 500; } - .report-subtitle { - margin: 10px 0 14px; - } + .report-subtitle { + margin: 10px 0 14px; + } .text-center { text-align: center; } + .text-right { text-align: right; font-variant-numeric: tabular-nums; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } + .text-left { text-align: left; } .text-bold { font-weight: 700; } @@ -82,7 +87,7 @@ color: #7c7c7c; } - .report-table tbody td { + .report-table tbody td.text-left { vertical-align: top; word-wrap: break-word; } From e82b4d9ca73e1774b5d5d9ff93ecf738f22999ff Mon Sep 17 00:00:00 2001 From: Shllokkk Date: Wed, 6 May 2026 17:45:33 +0530 Subject: [PATCH 6/6] fix: add filter subtitle in print formats --- .../balance_sheet_standard/balance_sheet_standard.json | 4 ++-- .../cash_flow_statement_standard.json | 4 ++-- .../p&l_statement_standard/p&l_statement_standard.json | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/erpnext/accounts/print_format/balance_sheet_standard/balance_sheet_standard.json b/erpnext/accounts/print_format/balance_sheet_standard/balance_sheet_standard.json index 662d2565904..9529a0cb45d 100644 --- a/erpnext/accounts/print_format/balance_sheet_standard/balance_sheet_standard.json +++ b/erpnext/accounts/print_format/balance_sheet_standard/balance_sheet_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Company\") %}: {%= filters.company %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Currency\") %}:\n\t\t\t\t{%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Period Based On\") %}: \n\t\t\t\t{%= filters.filter_based_on %}\n\t\t\t
\n\n\t\t\t{% if (filters.filter_based_on === \"Fiscal Year\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n\t\t\t\t
\n\n\t\t\t{% } else if (filters.filter_based_on === \"Date Range\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_start_date) %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_end_date) %}\n\t\t\t\t
\n\t\t\t{% } %}\n\t\t
\n\t
\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n\t {%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", + "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t{% if (subtitle && subtitle.trim()) { %}\n
\n {{ subtitle }}\n
\n {% } else { %}\n
\n
\n
\n {%= __(\"Company\") %}: {%= filters.company %}\n
\n
\n {%= __(\"Currency\") %}:\n {%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n
\n
\n\n
\n
\n {%= __(\"Period Based On\") %}:\n {%= filters.filter_based_on %}\n
\n\n {% if (filters.filter_based_on === \"Fiscal Year\") { %}\n
\n {%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n
\n
\n {%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n
\n\n {% } else if (filters.filter_based_on === \"Date Range\") { %}\n
\n {%= __(\"Start Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_start_date) %}\n
\n
\n {%= __(\"End Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_end_date) %}\n
\n {% } %}\n
\n
\n {% } %}\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n\t {%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-03-31 17:25:22.282171", + "modified": "2026-05-06 17:40:39.605807", "modified_by": "Administrator", "module": "Accounts", "name": "Balance Sheet Standard", diff --git a/erpnext/accounts/print_format/cash_flow_statement_standard/cash_flow_statement_standard.json b/erpnext/accounts/print_format/cash_flow_statement_standard/cash_flow_statement_standard.json index 2130f060ccb..fd95794a0f9 100644 --- a/erpnext/accounts/print_format/cash_flow_statement_standard/cash_flow_statement_standard.json +++ b/erpnext/accounts/print_format/cash_flow_statement_standard/cash_flow_statement_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Company\") %}: {%= filters.company %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Currency\") %}:\n\t\t\t\t{%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Period Based On\") %}: \n\t\t\t\t{%= filters.filter_based_on %}\n\t\t\t
\n\n\t\t\t{% if (filters.filter_based_on === \"Fiscal Year\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n\t\t\t\t
\n\n\t\t\t{% } else if (filters.filter_based_on === \"Date Range\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_start_date) %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_end_date) %}\n\t\t\t\t
\n\t\t\t{% } %}\n\t\t
\n\t
\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", + "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n {% if (subtitle && subtitle.trim()) { %}\n
\n {{ subtitle }}\n
\n {% } else { %}\n
\n
\n
\n {%= __(\"Company\") %}: {%= filters.company %}\n
\n
\n {%= __(\"Currency\") %}:\n {%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n
\n
\n\n
\n
\n {%= __(\"Period Based On\") %}:\n {%= filters.filter_based_on %}\n
\n\n {% if (filters.filter_based_on === \"Fiscal Year\") { %}\n
\n {%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n
\n
\n {%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n
\n\n {% } else if (filters.filter_based_on === \"Date Range\") { %}\n
\n {%= __(\"Start Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_start_date) %}\n
\n
\n {%= __(\"End Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_end_date) %}\n
\n {% } %}\n
\n
\n {% } %}\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-03-31 17:26:56.411191", + "modified": "2026-05-06 17:42:07.113775", "modified_by": "Administrator", "module": "Accounts", "name": "Cash Flow Statement Standard", diff --git a/erpnext/accounts/print_format/p&l_statement_standard/p&l_statement_standard.json b/erpnext/accounts/print_format/p&l_statement_standard/p&l_statement_standard.json index 51cdf702372..b1a379b0b47 100644 --- a/erpnext/accounts/print_format/p&l_statement_standard/p&l_statement_standard.json +++ b/erpnext/accounts/print_format/p&l_statement_standard/p&l_statement_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Company\") %}: {%= filters.company %}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Currency\") %}:\n\t\t\t\t{%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t\t{%= __(\"Period Based On\") %}: \n\t\t\t\t{%= filters.filter_based_on %}\n\t\t\t
\n\n\t\t\t{% if (filters.filter_based_on === \"Fiscal Year\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n\t\t\t\t
\n\n\t\t\t{% } else if (filters.filter_based_on === \"Date Range\") { %}\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Start Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_start_date) %}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"End Date\") %}: \n\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.period_end_date) %}\n\t\t\t\t
\n\t\t\t{% } %}\n\t\t
\n\t
\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", + "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n {% if (subtitle && subtitle.trim()) { %}\n
\n {{ subtitle }}\n
\n {% } else { %}\n
\n
\n
\n {%= __(\"Company\") %}: {%= filters.company %}\n
\n
\n {%= __(\"Currency\") %}:\n {%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n
\n
\n\n
\n
\n {%= __(\"Period Based On\") %}:\n {%= filters.filter_based_on %}\n
\n\n {% if (filters.filter_based_on === \"Fiscal Year\") { %}\n
\n {%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n
\n
\n {%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n
\n\n {% } else if (filters.filter_based_on === \"Date Range\") { %}\n
\n {%= __(\"Start Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_start_date) %}\n
\n
\n {%= __(\"End Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_end_date) %}\n
\n {% } %}\n
\n
\n {% } %}\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-03-31 17:26:30.738073", + "modified": "2026-05-06 17:42:47.344321", "modified_by": "Administrator", "module": "Accounts", "name": "P&L Statement Standard",