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)数据进行地表物候学分析(时间序列平滑法估算和非平滑算法代码)
1765 3
|
Java BI Scala
6款实用开源报表工具
大数据时代,从海量数据中挖掘出有用的数据,并以较人性化、直观的方式展示这些数据,变得尤为重要。今天小编为大家介绍6款实用的开源报表工具,你可以使用这些工具做出高效,且符合企业需求的报表。
33485 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 发行版...
1664 2
Kubeadm 快速搭建 k8s v1.19.1 集群(Ubuntu Server 20.04 LTS)
|
数据可视化 JavaScript 前端开发
推荐8个炫酷的数据可视化大屏项目
推荐8个炫酷的数据可视化大屏项目
5921 1
|
6月前
|
人工智能 JavaScript Java
基于springboot的大学生创新能力比赛系统
本研究聚焦大学生能力培养系统,结合AI、大数据、区块链及VR/AR等前沿技术,构建个性化、全过程的能力发展框架。通过Java、Spring Boot、MySQL与Vue技术实现系统开发,旨在提升学生综合素质与社会竞争力,推动高等教育改革与创新发展。
|
数据库 索引
索引命名规范
本文介绍了数据库中不同类型的索引命名规则:主键索引命名为pk_字段名,唯一索引命名为uk_字段名,普通索引命名为idx_字段名。pk表示主键,uk表示唯一键,idx表示索引。
977 7
|
机器学习/深度学习 计算机视觉 iOS开发
YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
817 12
|
数据库 数据安全/隐私保护 开发者
Odoo 15开发手册第一章 使用开发者模式快速入门
Odoo提供了一个快速应用开发框架,尤其适合构建商业应用。这类应用通常用于保存业务记录和工作流。Odoo 不仅简化了这类应用的构建,还提供了看板、日历、图表等视图的丰富组件,用于创建难以抗拒的用户界面。
1744 3
Odoo 15开发手册第一章 使用开发者模式快速入门
|
JavaScript 前端开发
JS中访问节点和创建节点的方法都有什么?
JS中访问节点和创建节点的方法都有什么?
226 0
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
454 2