Error - Not able to print at all after upgrade to v14.62.3

After an update of Frappe/Erpnext to ERPNext: v14.62.2 (version-14) & Frappe Framework: v14.62.4 (version-14) on our Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-91-generic x86_64) Server we are not able to print any document anymore.

When selecting a print button, the print preview screen pops up throwing an error:

pymysql.err.OperationalError: (1054, “Unknown column ‘header_script’ in ‘field list’”)

the full error:

### App Versions
{
	"erpnext": "14.62.3",
	"frappe": "14.65.0",
	"hrms": "16.0.0-dev",
	"payments": "0.0.1",
	"the_factory_suite": "0.0.1"
}
### Route
print/Sales Invoice/ISF-INV-23/24-00059

### Traceback
Traceback (most recent call last):
  File "apps/frappe/frappe/app.py", line 95, in application
    response = frappe.api.handle()
  File "apps/frappe/frappe/api.py", line 55, in handle
    return frappe.handler.handle()
  File "apps/frappe/frappe/handler.py", line 47, in handle
    data = execute_cmd(cmd)
  File "apps/frappe/frappe/handler.py", line 85, in execute_cmd
    return frappe.call(method, **frappe.form_dict)
  File "apps/frappe/frappe/__init__.py", line 1603, in call
    return fn(*args, **newargs)
  File "apps/frappe/frappe/www/printview.py", line 325, in get_html_and_style
    html = get_rendered_template(
  File "apps/frappe/frappe/www/printview.py", line 176, in get_rendered_template
    letter_head = frappe._dict(get_letter_head(doc, no_letterhead, letterhead) or {})
  File "apps/frappe/frappe/www/printview.py", line 399, in get_letter_head
    return frappe.db.get_value(
  File "apps/frappe/frappe/database/database.py", line 556, in get_value
    result = self.get_values(
  File "apps/frappe/frappe/database/database.py", line 653, in get_values
    out = self._get_values_from_table(
  File "apps/frappe/frappe/database/database.py", line 880, in _get_values_from_table
    return query.run(as_dict=as_dict, debug=debug, update=update, run=run, pluck=pluck)
  File "apps/frappe/frappe/query_builder/utils.py", line 87, in execute_query
    result = frappe.db.sql(query, params, *args, **kwargs)  # nosemgrep
  File "apps/frappe/frappe/database/database.py", line 239, in sql
    self._cursor.execute(query, values)
  File "env/lib/python3.10/site-packages/pymysql/cursors.py", line 158, in execute
    result = self._query(query)
  File "env/lib/python3.10/site-packages/pymysql/cursors.py", line 325, in _query
    conn.query(q)
  File "env/lib/python3.10/site-packages/pymysql/connections.py", line 549, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "env/lib/python3.10/site-packages/pymysql/connections.py", line 779, in _read_query_result
    result.read()
  File "env/lib/python3.10/site-packages/pymysql/connections.py", line 1157, in read
    first_packet = self.connection._read_packet()
  File "env/lib/python3.10/site-packages/pymysql/connections.py", line 729, in _read_packet
    packet.raise_for_error()
  File "env/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "env/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.OperationalError: (1054, "Unknown column 'header_script' in 'field list'")

### Request Data
{
	"type": "POST",
	"args": {
		"doc": "{\"name\":\"ISF-INV-23/24-00059\",\"owner\":\"XXX\",\"creation\":\"2024-01-09 09:37:12.983504\",\"modified\":\"2024-02-08 10:46:37.665758\",\"modified_by\":\"XXX\",\"docstatus\":1,\"idx\":0,\"title\":\"XXX\",\"naming_series\":\"XX\",\"customer\":\"XXX\",\"customer_name\":\"XXX",\"tax_id\":\"XXX\",\"company\":\"XXX\",\"company_tax_id\":\"XXX\",\"posting_date\":\"2024-01-08\",\"posting_time\":\"16:23:29.11156\",\"set_posting_time\":1,\"due_date\":\"2024-01-08\",\"is_pos\":0,\"is_consolidated\":0,\"is_return\":0,\"update_billed_amount_in_sales_order\":0,\"update_billed_amount_in_delivery_note\":1,\"is_debit_note\":0,\"amended_from\":\"XXX\",\"cost_center\":\"XXX\",\"project\":\"XXX\",\"project_name\":\"XXX\",\"currency\":\"EUR\",\"conversion_rate\":1,\"selling_price_list\":\"XXX\",\"price_list_currency\":\"EUR\",\"plc_conversion_rate\":1,\"ignore_pricing_rule\":0,\"update_stock\":0,\"total_qty\":1,\"total_rr\":XXX,\"total_net_weight\":0,\"base_total\":XXX,\"base_net_total\":XXX,\"total\":XXX,\"net_total\":XXX,\"tax_category\":\"\",\"taxes_and_charges\":\"XXX\",\"base_total_taxes_and_charges\":5063.27,\"total_taxes_and_charges\":XXX\"base_grand_total\":XXX,\"base_rounding_adjustment\":0,\"base_rounded_total\":0,\"base_in_words\":\"EUR XXX.\",\"grand_total\":XXX,\"rounding_adjustment\":0,\"use_company_roundoff_cost_center\":0,\"rounded_total\":0,\"in_words\":\"XXX\",\"total_advance\":0,\"outstanding_amount\":0,\"disable_rounded_total\":1,\"apply_discount_on\":\"Grand Total\",\"base_discount_amount\":0,\"is_cash_or_non_trade_discount\":0,\"additional_discount_percentage\":0,\"discount_amount\":0,\"other_charges_calculation\":\"<div class=\\\"tax-break-up\\\" style=\\\"overflow-x: auto;\\\">\\n\\t<table class=\\\"table table-bordered table-hover\\\">\\n\\t\\t<thead>\\n\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t<th class=\\\"text-left\\\">Item</th>\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t<th class=\\\"text-right\\\">Taxable Amount</th>\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t<th class=\\\"text-right\\\">VAT 21% @ 21.0</th>\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t</tr>\\n\\t\\t</thead>\\n\\t\\t<tbody>\\n\\t\\t\\t\\n\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t<td>XXX</td>\\n\\t\\t\\t\\t\\t<td class=\\\"text-right\\\">\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t€ 24.110,80\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t</td>\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t<td class=\\\"text-right\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(21.0%)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t€ 5.063,27\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t</td>\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\n\\t\\t</tbody>\\n\\t</table>\\n</div>\",\"total_billing_hours\":0,\"total_billing_amount\":0,\"base_paid_amount\":0,\"paid_amount\":0,\"base_change_amount\":0,\"change_amount\":0,\"allocate_advances_automatically\":0,\"only_include_allocated_payments\":0,\"write_off_amount\":0,\"base_write_off_amount\":0,\"write_off_outstanding_amount_automatically\":0,\"redeem_loyalty_points\":0,\"loyalty_points\":0,\"loyalty_amount\":0,\"customer_address\":\"XXX\",\"address_display\":\"XXX\\n XXX\\nEmail: facturen@fbo.productions.be<br>\",\"territory\":\"Belgium\",\"shipping_address_name\":\"XXX\",\"shipping_address\":\"XXX<br>\\n XXX<br>\\nXXX<br>\\nEmail: XXX<br>\",\"company_address\":\"XXX\",\"company_address_display\":\"XXX\\n XXX<br>\\nXXX<br>\\nPhone: XXX\",\"ignore_default_payment_terms_template\":0,\"payment_terms_template\":\"C.O.D./0 days\",\"po_no\":\"\",\"debit_to\":\"XXX\",\"party_account_currency\":\"EUR\",\"is_opening\":\"No\",\"against_income_account\":\"XXX\",\"rr_grand_total\":0,\"amount_eligible_for_commission\":24110.8,\"commission_rate\":0,\"total_commission\":0,\"letter_head\":\"XXX\",\"group_same_items\":0,\"language\":\"en-GB\",\"status\":\"Paid\",\"customer_group\":\"XXX\",\"is_internal_customer\":0,\"is_discounted\":0,\"remarks\":\"No Remarks\",\"repost_required\":0,\"doctype\":\"Sales Invoice\",\"items\":[{\"name\":\"be5d4a99c2\",\"owner\":\"XXX\",\"creation\":\"2024-01-09 09:37:12.983504\",\"modified\":\"2024-02-06 16:44:43.211325\",\"modified_by\":\"XXX\",\"docstatus\":1,\"idx\":1,\"has_item_scanned\":0,\"item_code\":\"XXX\",\"item_name\":\"XXX\",\"description\":\"XXX\",\"item_group\":\"XXX\",\"brand\":\"XXX\",\"image\":\"\",\"qty\":1,\"stock_uom\":\"One Time\",\"uom\":\"One Time\",\"conversion_factor\":1,\"stock_qty\":1,\"price_list_rate\":XXX,\"base_price_list_rate\":XXX,\"margin_type\":\"\",\"margin_rate_or_amount\":0,\"rate_with_margin\":0,\"discount_percentage\":XX,\"discount_amount\":XXX,\"base_rate_with_margin\":0,\"rate\":XXX,\"amount\":XXX,\"rr\":XXX,\"rr_amount\":XXX,\"base_rate\":XXX,\"base_amount\":XXX,\"stock_uom_rate\":XXX,\"is_free_item\":0,\"grant_commission\":1,\"net_rate\":XXX,\"net_amount\":XXX,\"base_net_rate\":XXX,\"base_net_amount\":XXX,\"delivered_by_supplier\":0,\"income_account\":\"XXX\",\"is_fixed_asset\":0,\"expense_account\":\"XXX\",\"enable_deferred_revenue\":0,\"weight_per_unit\":0,\"total_weight\":0,\"warehouse\":\"XXX\",\"incoming_rate\":0,\"allow_zero_valuation_rate\":0,\"item_tax_rate\":\"{}\",\"actual_batch_qty\":0,\"actual_qty\":0,\"sales_order\":\"XXX\",\"so_detail\":\"25fad33bfa\",\"delivered_qty\":0,\"delivery_date\":\"2024-01-08\",\"cost_center\":\"XXX\",\"page_break\":0,\"note\":\"XXX\",\"parent\":\"XXX\",\"parentfield\":\"items\",\"parenttype\":\"Sales Invoice\",\"doctype\":\"Sales Invoice Item\"}],\"packed_items\":[],\"payment_schedule\":[{\"name\":\"0d4eab7f6b\",\"owner\":\"XXX\",\"creation\":\"2024-01-09 09:37:12.983504\",\"modified\":\"2024-02-06 16:44:43.211325\",\"modified_by\":\"XXX\",\"docstatus\":1,\"idx\":1,\"payment_term\":\"C.O.D./0days\",\"due_date\":\"2024-01-08\",\"invoice_portion\":100,\"discount_type\":\"Percentage\",\"discount_date\":\"2024-01-08\",\"discount\":0,\"payment_amount\":29174.07,\"outstanding\":XXX,\"paid_amount\":0,\"discounted_amount\":0,\"base_payment_amount\":29174.07,\"parent\":\"XXX\",\"parentfield\":\"payment_schedule\",\"parenttype\":\"Sales Invoice\",\"doctype\":\"Payment Schedule\"}],\"pricing_rules\":[],\"taxes\":[{\"name\":\"df7f9ea197\",\"owner\":\"XXX\",\"creation\":\"2024-01-09 09:37:12.983504\",\"modified\":\"2024-02-06 16:44:43.211325\",\"modified_by\":\"XXX\",\"docstatus\":1,\"idx\":1,\"charge_type\":\"On Net Total\",\"account_head\":\"XXX\",\"description\":\"VAT 21% @ 21.0\",\"included_in_print_rate\":0,\"included_in_paid_amount\":0,\"cost_center\":\"XXX\",\"rate\":21,\"tax_amount\":XXX,\"total\":XXX,\"tax_amount_after_discount_amount\":XXX,\"base_tax_amount\":XXX,\"base_total\":XXX,\"base_tax_amount_after_discount_amount\":XXX,\"item_wise_tax_detail\":\"{\\\"XXX\\\":[XXX]}\",\"dont_recompute_tax\":0,\"parent\":\"XXX\",\"parentfield\":\"taxes\",\"parenttype\":\"Sales Invoice\",\"doctype\":\"Sales Taxes and Charges\"}],\"timesheets\":[],\"payments\":[],\"advances\":[],\"sales_team\":[],\"__onload\":{\"make_payment_via_journal_entry\":0},\"__last_sync_on\":\"2024-02-08T10:53:47.890Z\"}",
		"print_format": "Standard",
		"no_letterhead": 0,
		"letterhead": "XXX",
		"settings": "{}",
		"_lang": "en-GB"
	},
	"headers": {},
	"error_handlers": {},
	"url": "/api/method/frappe.www.printview.get_html_and_style"
}

### Response Data
{
	"exception": "pymysql.err.OperationalError: (1054, \"Unknown column 'header_script' in 'field list'\")"
}

Note: I’ve replaced the actual data of this particular invoice by XXX

I presume the error is in the Letterhead-part of the Print Layout. When I want to check the available letterheads these are empty. I can see the existing letterheads but they contain no data:

Schermafbeelding 2024-02-08 om 12.24.12

Any Idea how to fix this?

This is the Console Output from my browser:

> POST http://XXX/api/method/frappe.www.printview.get_html_and_style 500 (INTERNAL SERVER ERROR)
send @ libs.bundle.6XLVBACU.js:5495
ajax @ libs.bundle.6XLVBACU.js:5243
frappe.request.call @ desk.bundle.DTXBAXFE.js:33919
frappe.call @ desk.bundle.DTXBAXFE.js:33775
get_print_html @ print.js:678
preview @ print.js:411
Promise.then (async)
(anonymous) @ desk.bundle.DTXBAXFE.js:31194
frappe.run_serially @ desk.bundle.DTXBAXFE.js:31192
show @ print.js:203
(anonymous) @ print.js:27
dispatch @ libs.bundle.6XLVBACU.js:2802
elemData.handle @ libs.bundle.6XLVBACU.js:2690
trigger @ libs.bundle.6XLVBACU.js:4746
(anonymous) @ libs.bundle.6XLVBACU.js:4792
each @ libs.bundle.6XLVBACU.js:228
each @ libs.bundle.6XLVBACU.js:116
trigger @ libs.bundle.6XLVBACU.js:4791
change_to @ desk.bundle.DTXBAXFE.js:48540
(anonymous) @ desk.bundle.DTXBAXFE.js:48826
with_page @ desk.bundle.DTXBAXFE.js:48796
(anonymous) @ desk.bundle.DTXBAXFE.js:48819
with_doctype @ desk.bundle.DTXBAXFE.js:2046
show @ desk.bundle.DTXBAXFE.js:48818
render_page @ desk.bundle.DTXBAXFE.js:38552
render @ desk.bundle.DTXBAXFE.js:38535
route @ desk.bundle.DTXBAXFE.js:38442
await in route (async)
push_state @ desk.bundle.DTXBAXFE.js:38664
Promise.finally.frappe.route_flags @ desk.bundle.DTXBAXFE.js:38585
set_route @ desk.bundle.DTXBAXFE.js:38574
frappe.set_route @ desk.bundle.DTXBAXFE.js:38728
print_doc @ form.bundle.FTPUR4QT.js:6623
(anonymous) @ form.bundle.FTPUR4QT.js:1590
(anonymous) @ desk.bundle.DTXBAXFE.js:39625
dispatch @ libs.bundle.6XLVBACU.js:2802
elemData.handle @ libs.bundle.6XLVBACU.js:2690

and

> Traceback (most recent call last):
  File "apps/frappe/frappe/app.py", line 95, in application
    response = frappe.api.handle()
  File "apps/frappe/frappe/api.py", line 55, in handle
    return frappe.handler.handle()
  File "apps/frappe/frappe/handler.py", line 47, in handle
    data = execute_cmd(cmd)
  File "apps/frappe/frappe/handler.py", line 85, in execute_cmd
    return frappe.call(method, **frappe.form_dict)
  File "apps/frappe/frappe/__init__.py", line 1603, in call
    return fn(*args, **newargs)
  File "apps/frappe/frappe/www/printview.py", line 325, in get_html_and_style
    html = get_rendered_template(
  File "apps/frappe/frappe/www/printview.py", line 176, in get_rendered_template
    letter_head = frappe._dict(get_letter_head(doc, no_letterhead, letterhead) or {})
  File "apps/frappe/frappe/www/printview.py", line 399, in get_letter_head
    return frappe.db.get_value(
  File "apps/frappe/frappe/database/database.py", line 556, in get_value
    result = self.get_values(
  File "apps/frappe/frappe/database/database.py", line 653, in get_values
    out = self._get_values_from_table(
  File "apps/frappe/frappe/database/database.py", line 880, in _get_values_from_table
    return query.run(as_dict=as_dict, debug=debug, update=update, run=run, pluck=pluck)
  File "apps/frappe/frappe/query_builder/utils.py", line 87, in execute_query
    result = frappe.db.sql(query, params, *args, **kwargs)  # nosemgrep
  File "apps/frappe/frappe/database/database.py", line 239, in sql
    self._cursor.execute(query, values)
  File "env/lib/python3.10/site-packages/pymysql/cursors.py", line 158, in execute
    result = self._query(query)
  File "env/lib/python3.10/site-packages/pymysql/cursors.py", line 325, in _query
    conn.query(q)
  File "env/lib/python3.10/site-packages/pymysql/connections.py", line 549, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "env/lib/python3.10/site-packages/pymysql/connections.py", line 779, in _read_query_result
    result.read()
  File "env/lib/python3.10/site-packages/pymysql/connections.py", line 1157, in read
    first_packet = self.connection._read_packet()
  File "env/lib/python3.10/site-packages/pymysql/connections.py", line 729, in _read_packet
    packet.raise_for_error()
  File "env/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "env/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.OperationalError: (1054, "Unknown column 'header_script' in 'field list'")

I’ve done a bench update --requirements to solve this issue but that did not work for the first time…

I tried:

  1. bench update
  2. bench update --reset
  3. bench update --requirements

and after these 3 runs we are back… I don’t know what went wrong… so if somebody could explain, that would be great!

bench update --requirements doesn’t migrate your DB schema.

When you did bench update it also ran bench migrate (it’s subcommand) so your DB schema got migrated finally.

1 Like