Я пытаюсь перенести модуль с Odoo 10 на 12, но он показывает мне эту ошибку, и я не понимаю, почему:
Field 'state' used in attributes must be present in view but is missing
Не могли бы вы помочь мне решить эту проблему:
Field 'state' used in attributes must be present in view but is missing:
- 'state' in attrs = "{'invisible': ['|','|',('journal_entry_ids', '!=', []), ('state', '=', 'confirm'),('type', '!=', 'bank')]}"
- 'state' in attrs = "{'invisible': ['|','|',('journal_entry_ids', '=', []), ('state', '=', 'confirm'),('type', '!=', 'bank')]}"
Error context:
View `account.bank.statement.form.reconciliation`
[view_id: 1684, xml_id: n/a, model: account.bank.statement, parent_id: 462]
None while parsing /home/PycharmProjects/Odoo12/bank_reconciliation/views/account_view.xml:4, near
<record id = "view_bank_statement_form_reconciliation" model = "ir.ui.view">
<field name = "name">account.bank.statement.form.reconciliation</field>
<field name = "model">account.bank.statement</field>
<field name = "inherit_id" ref = "account.view_bank_statement_form"/>
<field name = "arch" type = "xml">
<data>
<field name = "date" position = "after">
<field name = "type" invisible = "1"/>
</field>
<xpath expr = "//button[1]" position = "attributes">
<attribute name = "attrs">{'invisible': [('type', '!=', 'cash')]}</attribute>
</xpath>
<xpath expr = "//field[@name='line_ids']/tree/field[@name='bank_account_id']" position = "after">
<field name = "type" invisible = "1"/>
<button name = "select_account_move_line" type = "object" icon = "fa-registered" attrs = "{'invisible': ['|','|',('journal_entry_ids', '!=', []), ('state', '=', 'confirm'),('type', '!=', 'bank')]}"/>
</xpath>
<xpath expr = "//field[@name='line_ids']/tree/field[@name='bank_account_id']" position = "after">
<button name = "cancel_reconciliation" type = "object" icon = "fa-chain-broken" attrs = "{'invisible': ['|','|',('journal_entry_ids', '=', []), ('state', '=', 'confirm'),('type', '!=', 'bank')]}"/>
</xpath>
<xpath expr = "//field[@name='line_ids']" position = "inside">
<form string = "Statement Line" create = "false">
<group col = "4">
<field name = "statement_id"/>
<field name = "date"/>
<field name = "name"/>
<field name = "ref"/>
<field name = "partner_id"/>
<field name = "amount"/>
<field name = "journal_currency_id" invisible = "1"/>
<field name = "sequence"/>
<field name = "note"/>
</group>
<notebook colspan = "4">
<page string = "Ecritures liées">
<field name = "move_line_ids">
<tree readonly = "1">
<field name = "name"/>
<field name = "account_id"/>
<field name = "move_id"/>
<field name = "date"/>
<field name = "debit" sum = "Débit"/>
<field name = "credit" sum = "Crédit"/>
</tree>
</field>
</page>
</notebook>
</form>
</xpath>
</data>
</field>
</record>
Ошибка говорит о том, что атрибут "состояние" отсутствует в родительском представлении, но он присутствует.
Вот родительский вид:
<record id = "view_bank_statement_form" model = "ir.ui.view">
<field name = "name">account.bank.statement.form</field>
<field name = "model">account.bank.statement</field>
<field name = "priority">1</field>
<field name = "arch" type = "xml">
<form string = "Bank Statement">
<header>
<field name = "all_lines_reconciled" invisible = "1" />
<button name = "%(action_bank_reconcile_bank_statements)d" string = "Reconcile" type = "action" class = "oe_highlight" attrs = "{'invisible':['|','|',('all_lines_reconciled','=',True),('line_ids','=',[]),('state', '!=', 'open')]}"/>
<button name = "check_confirm_bank" string = "Validate" type = "object" class = "oe_highlight" attrs = "{'invisible':['|','|',('all_lines_reconciled','=',False),('line_ids','=',[]),('state', '!=', 'open')]}"/>
<field name = "state" widget = "statusbar" statusbar_visible = "open,confirm"/>
</header>
...
</field>
</record>






Когда вы пишете что-то вроде этого:
<xpath expr = "//field[@name='line_ids']/tree/field[@name='bank_account_id']" position = "after">
...
</xpath>
Все, что вы туда добавляете, связано с комоделью поля x2many line_ids и его древовидным представлением. Поэтому, если вы добавляете новое поле/кнопку с параметром attrs, вы должны убедиться, что атрибуты слева от доменов находятся внутри древовидного представления line_ids, а не внутри формы account.bank.statement.
Таким образом, вы должны добавить состояние поля в древовидное представление поля line_ids:
<xpath expr = "//field[@name='line_ids']/tree/field[@name='bank_account_id']" position = "after">
<field name = "type" invisible = "1"/>
<field name = "state" invisible = "1"/>
<button name = "select_account_move_line" type = "object" icon = "fa-registered" attrs = "{'invisible': ['|','|',('journal_entry_ids', '!=', []), ('state', '=', 'confirm'),('type', '!=', 'bank')]}"/>
<button name = "cancel_reconciliation" type = "object" icon = "fa-chain-broken" attrs = "{'invisible': ['|','|',('journal_entry_ids', '=', []), ('state', '=', 'confirm'),('type', '!=', 'bank')]}"/>
</xpath>
Кстати, вы повторяете одно и то же xpath дважды, что сбивает с толку и работает медленнее для Odoo, поэтому я сгруппировал его в один, который имеет больше смысла.
Спасибо за разъяснения, теперь понял.