如何按条件显示/隐藏顶部打印菜单项?Odoo发票报表适配
解决Odoo报表打印菜单项仅对'in_invoice'类型可见的问题
嘿,我明白你遇到的问题了——原来想用menu属性控制报表打印项的可见性,但这个属性根本不是干这个的,它是用来关联报表到某个顶级菜单入口的,没法引用object对象判断记录类型,所以才会报错。下面给你两种靠谱的解决方案:
方案一:用报表的binding_domain属性直接过滤(推荐)
Odoo的报表定义支持binding_domain属性,它可以直接指定哪些记录能看到这个报表的打印选项。只需要在你的报表XML里加上这个属性,设置过滤条件为发票类型等于in_invoice就行。
修改后的报表代码:
<report id="account_att" model="account.invoice" string="Att" report_type="qweb-pdf" name="account.report_att" attachment="('Att'+(object.number or '').replace('/','')+'.pdf')" print_report_name="'Att for '+(object._get_printed_report_name())" binding_domain="[('type', '=', 'in_invoice')]" />
这个方法的好处是一劳永逸:不管是在表单视图的打印菜单,还是列表视图的批量打印里,只有类型为in_invoice的发票才会显示这个报表选项,不需要额外修改视图。
方案二:继承表单视图,控制打印按钮可见性
如果你需要更精细的控制(比如只在特定表单视图里隐藏按钮),可以继承发票的表单视图,给对应的打印按钮添加可见性条件。
示例代码:
<record id="account_invoice_form_inherit" model="ir.ui.view"> <field name="name">account.invoice.form.inherit</field> <field name="model">account.invoice</field> <field name="inherit_id" ref="account.invoice_form"/> <field name="arch" type="xml"> <!-- 定位到报表对应的打印按钮,修改其可见性 --> <xpath expr="//div[@name='button_box']/button[@name='%(account_att)d']" position="attributes"> <attribute name="attrs">{'invisible': [('type', '!=', 'in_invoice')]}</attribute> </xpath> </field> </record>
这个方法是直接在表单视图的按钮上设置规则:当发票类型不是in_invoice时,该打印按钮会自动隐藏。需要注意的是,这里的%(account_att)d是你的报表ID的动态引用,确保和你定义的报表ID一致。
内容的提问来源于stack exchange,提问作者SkiBY
相关产品推荐
相关产品推荐

