首页 > 其他分享 >Odoo自定义报表 - 浅析

Odoo自定义报表 - 浅析

时间:2023-09-25 13:36:06浏览次数:43  
标签:报表 自定义 浅析 context Odoo report id 定义

大家好,

在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

 

 

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

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

 

 

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

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

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

 

标签:报表,自定义,浅析,context,Odoo,report,id,定义
From: https://www.cnblogs.com/pythonClub/p/17727738.html

相关文章

  • Odoo 报表2
    在模块中新建名为report的python文件创建__main.xml文件<reportid=“account_invoices”model=“account.invoice”string=“Invoices”report_type=“qweb-pdf”name=“account.report_invoice”file=“account.report_invo......
  • odoo报表3
    定义odoo中的报表,是创建一张数据库视图。数据库视图和表的联系和区别联系:数据库中的数据都是存储在表中,视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。区别:1、视......
  • FlashDuty Changelog 2023-09-21 | 自定义字段和开发者中心
    FlashDuty:一站式告警响应平台,前往此地址免费体验!自定义字段FlashDuty已支持接入大部分常见的告警系统,我们将推送内容中的大部分信息放到了Lables进行展示。尽管如此,我们用户还是会有一些扩展或定制性的需求,比如人工标记一个故障是否为误报。因此我们提供了自定义字段功能,......
  • 自定义表单设计之一
    0、背景10年前入职一家单位时,还没有上商用OA。按领导要求做一个自定义表单模块和现有工作流对接。当我做完自定义表单后,集团又统一上OA系统,此模块就再也没有使用,但是开发的过程还是比较锻炼人的,当时参考了泛微的EC6。1、界面展示1.1显示效果1.2表单设计界面-HTML模式1.3自定义表......
  • odoo中的PDF报表
     1.定义PDF报表解析类.模型类解析类代码 fromodooimportapi,modelsclassParticularReport(models.AbstractModel):_name='report.hr_teacher.teacher_info_report_pdf'@api.modeldef_get_report_values(self,docids,data=None):p......
  • MySQL可以查询自定义字段
     有时,为了方便起见,我们希望添加一列固定值来帮助查看MySQL中的数据,但又不希望这列出现在MySQL中。举个例子:mysql>createtablestudent(namevarchar(20));mysql>insertintostudentvalues('张三');    如果直接查询,结果如下:mysq>select*fromstudent;+--------+......
  • FlashDuty Changelog 2023-09-21 | 自定义字段和开发者中心
    FlashDuty:一站式告警响应平台,前往此地址免费体验!自定义字段FlashDuty已支持接入大部分常见的告警系统,我们将推送内容中的大部分信息放到了Lables进行展示。尽管如此,我们用户还是会有一些扩展或定制性的需求,比如人工标记一个故障是否为误报。因此我们提供了自定义字段功能,来进一......
  • [FAQ] eggjs/egg 自定义 favicon.ico
     从 egg项目配置里找到这一段代码:https://github.com/eggjs/egg/blob/master/config/config.default.js#L205C21-L205C74/***Theoptionof`siteFile`middleware**Youcanmapsomefilesusingthisoptions,itwillresponseimmdiatelywhenmatchi......
  • 微信小程序自定义tabbar遮挡scroll-view问题
    在使用小程序开发时,底部为自定义导航栏,在使用scroll-view滚动页面时,滚动到底部时最后一条或多条数据被导航栏遮挡,如下:解决方案:1.获取用户手机宽度和高度letdeviceWidth=wx.getSystemInfoSync().windowWidth;//获取屏幕宽度letdeviceHeight=wx.getSystemInfoSync().win......
  • 自定义属性编辑器
    1,编写实体类Address.javapackagecom.mashibing.selfEditor;publicclassAddress{privateStringprovice;privateStringcity;privateStringtown;publicStringgetProvice(){returnprovice;}publicvoidsetProvice(Stringprovice)......