Odoo自定义报表 - 浅析

简介: 大家好, 在Odoo(原OpenERP 开源ERP)架构中,有自定义报表开发【Custom Report Engine】这一功能,但无论在海外还是国内的网站上很难找到相关的解释与介绍。所以,我们整理了相关开发介绍至本博文中。

大家好,

在Odoo(原OpenERP 开源ERP)架构中,有自定义报表开发【Custom Report Engine】这一功能,但无论在海外还是国内的网站上很难找到相关的解释与介绍。所以,我们整理了相关开发介绍至本博文中。

首先,需要讲解的是 Custom Report Engine 的机制。Odoo自定义报表架构是通过读取模块中report目录下的model文件和report目录下的context文件。来获取自定义报表所需的参数,系统通过这些基本参数,渲染出我们平日里所看到的报表。

Financial Report 财务报表

  • 通过简单地(XML)进行编辑
  • 只可以对aml对象进行控制
  • 只允许对一段时间内的数据进行求和

Custom Report 自定义财务报表

  • 更加灵活
  • 通过Python进行开发

那么,这些参数有哪些呐?

**> @api.model
def get_title(self):
**
说明: 此项目用以定义自定义报表的抬头,主要用途是在系统前端显示自定义报表名称,方便用户查看。
**> @api.model
def get_name(self):
**
说明: 此项目用以定义自定义报表的名称,但此名称将不会显示在前端视图上,它主要的功能是定义了此自定义报表的专属名称,方便之后的Context进行抓取和使用。同时,其他方法,也可以通过叫此名称来调用此模板。

**> @api.model
def get_template(self):
**
说明:此项目用以定义自定义报表所需要使用的模板。因OpenERP原生架构中,自带3大模板,可以渲染出相应的基本视图。其意义在于,方便开发者减少代码编写量。很多,重复的代码,可以直接通过继承的方式获得,而无需全部重新编写。这也是OpenERP(Odoo)架构中继承机制的完美应用。

**> @api.model
def get_report_type(self):
**
说明:此项用以定义报表的类型
(例如:date_range (Profit & Loss), no_date_range (Balance Sheet), date_range_extended (Aged Partner Balances), date_range_cash (Cash Method by default), no_comparison (General Ledger), 当然,您可以添加自己的类型!)
这里定义的报表类型,对报表的意义非常大。data_range说明,此报表可以使用日期期间工具,对报表内的数据进行过滤、筛选、求和等。如果,选择date_range_cash,意味着,报表中的数据将仅仅统计现金账户上的数据,而不会抓取全局数据。同时,现在财务记账机制中有现金收付制和权责发生制,通过定义不同的类型,来实现基于两种制度的报表数据统计计算。

*
*> @api.model
def get_lines(self, context_id, line_id=None):
**
在展开一行时使用Line_ID参数。如果设置了Line_ID,则该方法将返回只有对应于此Line_ID及其域的线。此方法将行返回为字典列表。每个字典对应于一行。在显示时,这些行会与它们需要的顺序相同。

每一行的字典,需要包含以下项目:
id : 所以,它可以为footnotes, unfolding,提供参考,同时如果有动作, active_id 也需要在这里定义.
name : 需要显示的名称
type : 行的类型. 这里定义鼠标点击时,对此行的动作。(行所支持的类型,包含:account_id, line, tax_id, unreconciled_aml,bank_statement_id, partner_id, move_line_id, too_many, payment. 当然,您也可以自行添加)
footnotes : 如果为某一行的名称或者某处定义了 footnotes,(这个定义是来自报表context). 字典 {column_number : footnote_id}将会被自动创建,同时在报表上会显示出相应的footnote
unfoldable : 定义此行是否可以被展开
unfolded : 定义此行默认为已经展开(fetched from context) 仅当unfoldable = True可用
columns : 具有列值的列表.
level : 定义布局.
action_id : 当点击报表行时会触发的动作
colspan : 如果,你希望动作可以跨越多个列,请定义此项.

报告contexts是每个报告和每个用户一次性的临时模型。你需要为每个自定义报表创建一个新的contexts模型。它的接口应该是 :_inherit = "account.report.context.common"

**> def get_report_obj(self):
**

**> def get_columns_names(self):
@api.multi
**

**> def get_columns_types(self):
**
列的类型可以是 : text, date or number

在报告可用前,还有最后几个步骤:

1.修改模型account.report.context.common 中的字典方法 对象 .
_report_name_to_report_model() :
添加一项 name_of_your_report: name_of_the_model
_report_model_to_report_context() :
添加一项 name_of_the_model: name_of_the_context_model
last_step

2.您还可以自定义报表的搜索视图,并将其与您的需求相适应。

创建一个新的report_type 以满足您的需要,例如“'journal_filter'”。将字段添加到与要添加的筛选器对应的上下文(context)对象 。
例如:journal_id = fields.Many2one('account.journal') 通过为过滤器添加下拉菜单来修改模板 'accountReports.searchView'
template2

3.为报表创建客户端操作和菜单项

您可以添加自己的行类型,并更改它将出现在报表上的方式和内容。为此,继承和修改'account.report_financial_line' 模板. 若要触发动作,请使用 'oe-account-web-action'类并 :

使用data-res-model 和 data-active-id 来打开对象的表单视图.
使用 data-action-name来触发相应动作.
您可以选择添加dataforce-context 属性来强制当前context通过动作传递.
请使用data-action-id 来触发动作.

目录
相关文章
|
编解码 算法 定位技术
GEE时序——利用sentinel-2(哨兵-2)数据进行地表物候学分析(时间序列平滑法估算和非平滑算法代码)
GEE时序——利用sentinel-2(哨兵-2)数据进行地表物候学分析(时间序列平滑法估算和非平滑算法代码)
1518 3
|
Java BI Scala
6款实用开源报表工具
大数据时代,从海量数据中挖掘出有用的数据,并以较人性化、直观的方式展示这些数据,变得尤为重要。今天小编为大家介绍6款实用的开源报表工具,你可以使用这些工具做出高效,且符合企业需求的报表。
33033 0
|
Kubernetes 网络协议 Ubuntu
Kubeadm 快速搭建 k8s v1.19.1 集群(Ubuntu Server 20.04 LTS)
安装准备工作安装环境要求:角色 实验环境 生产环境 操作系统 master cpu/内存:2 Core/2G cpu/内存:2 Core/4G linux 内核 4.4+ node cpu/内存:1 Core/2G cpu/内存:4 Core/16G linux 内核 4.4+ 备注 Node:应根据需要运行的容器数量进行配置; Linux 操作系统基于 x86_64 架构的各种 Linux 发行版...
1568 2
Kubeadm 快速搭建 k8s v1.19.1 集群(Ubuntu Server 20.04 LTS)
|
2月前
|
人工智能 JavaScript Java
基于springboot的大学生创新能力比赛系统
本研究聚焦大学生能力培养系统,结合AI、大数据、区块链及VR/AR等前沿技术,构建个性化、全过程的能力发展框架。通过Java、Spring Boot、MySQL与Vue技术实现系统开发,旨在提升学生综合素质与社会竞争力,推动高等教育改革与创新发展。
|
人工智能 数据可视化 程序员
史上最全盘点:一文告诉你低代码(Low-Code)是什么?为什么要用?
在后疫情时代,低代码(Low-Code)+ 人工智能(AI)的组合被认为是加速社会数字化转型的重要技术。低代码通过可视化和模型驱动的理念,结合云原生和多端体验技术,显著提升了开发效率和灵活性。它不仅让专业开发者受益,还使业务人员成为“平民开发者”,弥补了专业人才缺口。此外,低代码平台能够快速响应市场变化,帮助企业构建各种应用,如四川某制造企业仅用一个月就搭建出一套内部协作和生产监控系统。结合AI的能力,低代码平台还能实现智能化的建议和优化,进一步提升用户体验和开发速度。
|
9月前
|
机器学习/深度学习 计算机视觉 iOS开发
YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
563 12
|
8月前
|
人工智能 网络安全 开发工具
vscode代码推送到github库菜鸡专用教程
vscode代码推送到github库菜鸡专用教程
|
数据库 数据安全/隐私保护 开发者
Odoo 15开发手册第一章 使用开发者模式快速入门
Odoo提供了一个快速应用开发框架,尤其适合构建商业应用。这类应用通常用于保存业务记录和工作流。Odoo 不仅简化了这类应用的构建,还提供了看板、日历、图表等视图的丰富组件,用于创建难以抗拒的用户界面。
1425 3
Odoo 15开发手册第一章 使用开发者模式快速入门
|
数据可视化 前端开发 JavaScript
Echarts+JS实现数据分析可视化大屏!!附源码!!
Echarts+JS实现数据分析可视化大屏!!附源码!!
|
JavaScript
在Vue中,子组件向父组件传递数据
【7月更文挑战第13天】
494 6