Odoo10參考系列 QWeb報表

2021-08-18 12:22:57 字數 4035 閱讀 2084

報表是寫在html / qweb中,像odoo中的所有普通檢視。你可以使用普通qweb 流程控制工具。pdf的渲染是通過wkhtmltopdf執行的。

如果要在某個模型上建立報表,則需要定義該報表和它將使用的報表模板。如果您願意,還可以為該報表指定特定的報**式。最後,如果您需要訪問更多的模型,您可以定義乙個自定義報表類,讓您訪問模板中的更多模型和記錄

每個報表都必須通過報告操作(在odoo10參考系列--操作(actions)中有介紹)宣告。

為簡單起見,可以使用快捷方式元素來定義報表,而不必手動設定操作及其環境。可以具有以下屬性:

id

生成的記錄的外部id

name(強制性的)

僅僅當查詢一些列表中某個列表記錄時作為報表的乙個記憶/描述是有用的

model(強制性的)

你報表將從事的模型

report_type(強制性的)

要麼是針對pdf報表的qweb-pdf要不是針對html的qweb-html

report_name

報表的名稱(它將是pdf輸出的名稱)

groups

many2many欄位到允許檢視/使用當前報表的組中

attachment_use

如果設定為true,則報告將使用attachment表示式生成的名稱作為記錄的附件儲存;如果您只需要生成一次報告(例如出於法律原因),您可以使用它

attachment

定義報表名稱的python表示式;記錄作為變數object是可訪問的

*****format

你希望使用的報**式的外部id(如果不指定預設為公司的報**式)

例子:

最小的模板看起來像:

this object's name is 

呼叫external_layout將在報表中新增預設頁首和頁尾。pdf正文將是內部的內容。模版的id必須是報表宣告中指定的名稱; 例如上面報表中的account.report_invoice。由於這是乙個qweb模板,你可以訪問所有被模版接收的docs物件的字段。

報表中有一些特定的變數可以訪問,主要是:

docs

當前報表的記錄

doc_ids

docs記錄的id列表

doc_model

docs記錄模型

time

來自python標準庫的time參考

user

使用者列印報表的res.user記錄

res_company

當前user的公司記錄

如果您希望訪問模板中的其他記錄/模型,則需要乙個自定義報表

如果您希望將報表轉換為合作夥伴的語言,則需要定義兩個模板:

然後你可以從你的主模版中呼叫翻譯檔案,這個模版帶有乙個設定語言**(例如fren_us)或者記錄欄位的屬性t-lang。你也將需要重新瀏覽與適當的上下文相關的記錄,如果你使用的是可譯的字段(如國家名、銷售條件等)

警告如果你的報告模板不使用翻譯的記錄字段,再瀏覽其他語言記錄是不必要的,會影響效能

例如,讓我們看看銷售模組的銷售訂單報表:

invoice and shipping address:invoice address:<...>

the主模版呼叫翻譯使用doc.partner_id.lang作為t-lang引數的模版,那麼它將用合作夥伴的原因渲染。這樣,每個銷售訂單將以相應客戶的語言列印。 如果您只想翻譯文件的主體,但將頁首和頁尾保留在預設的語言中,可以用以下方式呼叫報表的外部布局:

提示

請注意,這只有在呼叫外部模版是有效的,你將不能通過設定乙個在xml節點上的t-lang屬性而不是t-call屬性去翻譯檔案的一部分。 如果你要翻譯模板的一部分,你可以使用這個模版部分來建立乙個外部模版並從使用t-lang屬性的主模版中呼叫它。

可以將更多引數作為查詢字串傳遞

報**式是report.*****format的記錄幷包含以下屬性:

name(強制性的)

僅僅當查詢一些列表中某個列表記錄時作為報表的乙個記憶/描述是有用的

description

對格式的小描述

format

要麼是乙個預定義的格式(a0 to a9, b0 to b10, legal, letter, tabloid,...) 要麼是custom;預設是a4格式。如果定義頁面尺寸,則不能使用非自定義格式

dpi

輸出的dpi;預設是90

margin_top,margin_bottom,margin_left,margin_right

公釐的邊距尺寸

page_height,page_width

公釐的頁面尺寸

orientation豎向

header_line

布林值以顯示標題行

header_spacing

公釐的頭間距

例子:

french bank check

custom

80175

portrait33

33380

報表模型有乙個預設的get_html函式用以查詢乙個名叫report.

module.report_name

的模版。如果它存在,它將使用它去呼叫qweb引擎;否則將使用乙個通用的函式。如果您希望通過在模板(例如,像其他模型的記錄)中包含更多的內容來定製報表,你可以定義這個模型,重寫函式render_html並在docargs字典中傳遞物件:

from odoo import api, models

class particularreport(models.abstractmodel):

_name = 'report.module.report_name'

@api.model

def render_html(self, docids, data=none):

report_obj = self.env['report']

report = report_obj._get_report_from_name('module.report_name')

docargs =

return report_obj.render('module.report_name', docargs)

報表由報表模組動態生成,可以通過url直接訪問:

例如, 您可以通過html方式訪問銷售訂單報報表: http:///report/html/sale.report_saleorder/38

或者你可以訪問pdf版本:http:///report/pdf/sale.report_saleorder/38

odoo10 系統特點

odoo 系統特 點 免 費 且 開放 源 對開發商的依賴風險。豐 富的功能模組 官方提供了豐富的功能模組,銷售管理 客戶關係管理 crm 專案管理 採購管理 財務管理 庫存管理 生產管理 人力資管理等功能模組。世 界領先的模組化技術 模組化技術架構,各功能模組可以單獨使用,允許先使用部分功能,再擴...

odoo10基本方法

基本方法 create方法 在資料表中插入一條記錄 或新建乙個物件的resource 格式 def create self,cr,uid,vals,context 引數 vals 待新建記錄的字段值,是乙個字典。返回值 新建記錄的id search方法 查詢符合條件的記錄 格式 def search...

Odoo10實戰一 模組建立

一 配置準備 我們在odoo10原始碼的debian目錄下找到odoo.conf檔案,這就是odoo10的配置檔案。我們可以拷貝它到專案根目錄下進行修改,然後在pycharm中指定專案的啟動配置為根目錄下的odoo.conf。也可以直接修改debian目錄下的odoo.conf,指定專案啟動目錄為這...