作者:aaaa | 来源:互联网 | 2023-10-13 13:18
在动作中增加打印菜单,并实现打印功能。官网上的教程有些地方说的并不清楚,现在整理一下,待以后用到好翻。这里做一个最简单、最基础的例子:我要在员工字典中增加打印按钮,并实现打印。为了
在动作中增加打印菜单,并实现打印功能。
官网上的教程有些地方说的并不清楚,现在整理一下,待以后用到好翻。
这里做一个最简单、最基础的例子:我要在员工字典中增加打印按钮,并实现打印。
为了清晰一点,我单独创建一个模块,目录结构如下:
如果有多处需要这种自定义打印按钮,实现打印功能的,可以单独创建打印模块,方便管理。
主要起作用的就是report_employee.py 和 report_employee.xml 两个文件,
先上代码,再说明需要注意的点
report_employee.py
# -*- coding: utf-8 -*-#
# -------------------------------------------------------------------------------
# Name: custom_report_demo
# Author: CAO.T.F
# Date: 2019/4/1
# Description:
# -------------------------------------------------------------------------------
from odoo import models, fields, api, _
class ReportEmployee(models.AbstractModel):
_name = "report.custom_report_demo.hr_employee_pdf"
def _get_data(self):
sql = "select * from hr_employee"
self._cr.execute(sql)
emp = self._cr.dictfetchall()
# print(emp)
return emp
@api.model
def _get_report_values(self, docids, data=None):
# print(docids) # docids :选中的记录的id,可作为参数传出,供其他方法使用
return {
"data": "TEST DEMO",
"employee": self._get_data()
}
model 类型为 AbstractModel
_name 必须以 report. 开头,后面接模块文件夹名.报表模板名
execute() 执行了SQL语句
return self._cr.dictfetchall() 返回字典型结果集
return self._cr.fetchall() 返回列表型结果集
_get_report_values 必须有,里面的参数 docids 是选中的记录的id,这样写就行了,只要你选择了记录,docids就会有值。
report_employee.xml
string="Employee Report PDF"
model="hr.employee"
report_type="qweb-pdf"
name="custom_report_demo.hr_employee_pdf"
file="custom_report_demo.hr_employee_pdf"
attachment_use="True"
/>
model=”hr.employee” 是将按钮放在模型为 hr.employee 的视图中
string = “Employee Report PDF” 是形成的PDF 的文件名
report_type = “qweb-pdf” 是生成的报表类型,还可以用 qweb-html
name 和 file 值为 模块文件夹名.报表模板名
最重要的是不要忘记在 init 文件中引用 report 文件夹
最重要的是不要忘记在 init 文件中引用 report 文件夹
最重要的是不要忘记在 init 文件中引用
report 文件夹
2020 05 26 补充:
在odoo13中可用,附代码 https://download.csdn.net/download/tsoTeo/12462338