How Can We Help?
QWeb 報表設定篇
產生『序號』與『總數量』
使用 _index 參數即可自動生成序號
<t t-foreach="o.lines" t-as="p">
<span t-esc="p_index">
</t>
也可使用迴圈來產生(不建議)
<t t-set="i" t-value="1" /> <t t-foreach="o.lines" t-as="p"> <span t-esc="i"> <t t-set="i" t-value="i+1"/> </t>
if 判斷式
條件為 True 時
<t t-if="o.partner_id.parent_id"> <t t-if="o.partner_id.company_type == 'company'">
條件為 False 時
<t t-if="not o.partner_id.parent_id"> <t t-if="o.partner_id.company_type != 'company'">
計算『總數量』
總數量也是使用迴圈來處理的
原先的產品數量是這樣處理
<t t-foreach="o.lines" t-as="p"> <span t-esc="p.quantity">
先設定變數 i = 0,每個產品的數量會加入 i,最後輸出即為總數量
<t t-set="i" t-value="0" /> <t t-foreach="o.lines" t-as="p"> <span t-esc="i"> <t t-set="i" t-value="i+p.quantity"/> </t> <t t-esc="i" />
自訂紙張尺寸
首先需『啟用開發者模式』
接著到『設定』/『技術』/『動作』/『報表』/『Paper Format』
可以看到已經內建了幾種紙張尺寸了
如果報表中有呼叫系統內建的 Header,需要增加『上邊界』的大小
如果報表中無呼叫系統內建的 Header,『上邊界』的大小可設定為 8mm
PS:有一個 Bug 需要注意,雖然可從此處直接設定相關報表,但如果從此處移除相關報表時,也會將相關報表一併刪除!
命名下載報表的名稱
正常來說,下載報表的檔名會是『Odoo 報表名稱.pdf 』
如果報表名稱是『揀貨單明細』,檔案名稱就會是『揀貨單明細.pdf』
雖然使用上沒有問題,但生成多個檔案時,就會以揀貨單明細.pdf、揀貨單明細-1.pdf、揀貨單明細-2.pdf…..的方式呈現
不確定是否是 Bug,Save as Attachment Prefix 的設定並不會套用在下載檔案上
解決方案是安裝 Custom report filenames 這個 App,在報表中會多出『Download filename』這個欄位
可使用『揀_${o.name}.pdf』這樣的格式直接產生『揀_WH1-OUT-12149.pdf』
目前還不確定如何產生日期,使用 time 或 strftime 時會跳出未定義,或許可以修改 APP 的程式碼加入 import time 或 import datetime 就可以使用了
參考資料:
[8.0] How can I create a custom report filename for Odoo (eg. SO039_2015_04_25.pdf)?
‘Save as attachment prefix’ doesn’t work?
How to generate serial number and total quantity in qweb report without parser file ?
Set font to whole Page in Odoo Qweb Reports
Odoo: How to include a ‘page break’ / second page in custom report (pdf)?
Download filename 參考格式:
訂購單_${o.name}.pdf
可用
訂購單_${o.name}_.strftime(“%Y-%m-%d”).pdf
後方的 .strftime(“%Y-%m-%d”) 不會生效
${(object.name or ”).replace(‘/’,’_’)}_${object.state == ‘draft’ and ‘draft’ or ” +’.xls’}
可用
${(object.client_order_ref or ”).replace(‘/’,’_’)}_
未測試
(object.state in (‘progress’,’manual’,’done’)) and ((object.name or ”).replace(‘/’,”)+’-‘+ time.ctime().split()[4] +’.pdf’)
後方的 time.ctime().split()[4] 不會生效