PDF 報告¶
利用 Studio,你可 編輯現有 PDF 報告 (例如發票、報價單等),或 建立新的報告。
預設版面設計¶
報告的預設版面佈局,是在 Studio 之外管理的。你可前往 ,然後在主頁的 公司 部份,按一下 配置文件版面。版面設定按個別公司而不同,但適用於所有報告。
小訣竅
你可在 配置文件版面 視窗右側的報告預覽中,看到不同設定會如何影響報告的版面配置。建立或編輯報告時,你可按一下畫面左方的 預覽列印,查看報告預覽。
有以下設定可用:
版面佈局:有七種佈局可供選擇:
背景:有以下背景可供選擇:
空白:不顯示任何東西。
模擬標誌:在背景顯示模擬標誌。
自訂:上載自訂背景圖片。
文字:有八款字型可供選擇:Lato、Roboto、Open Sans、Montserrat、Oswald、Raleway、Tajawal(支援阿拉伯文及拉丁文)、Fira Mono。你可前往 Google 字型網站 預覽這些字型。
公司標誌:按一下 編輯 按鈕,上載或更換標誌。此操作會將標誌加入至 公司 模型的公司記錄中。要存取此資料,可前往 ,然後在 公司 部份按一下 更新資訊。
顏色:變更報告結構所用的主色及輔助色。預設顏色會根據公司標誌顏色自動產生。
地址:公司名稱及地址會在 對外報告 的頁首顯示。可加入多行文字。
標語:此標語會在 對外報告 的頁首(適用於淺色、間條色、泡泡、波浪及文件夾版面佈局)或頁尾顯示(適用於實線框及粗線版面佈局)。可加入多行文字。
紙張格式:此設定定義報告所用的預設紙張尺寸。可選擇 A4 (21 厘米 × 29.7 厘米)或 美式信紙`(21.59 厘米 × 27.54 厘米)。你也可在 :ref:`Studio <studio/pdf-reports/edit-options> 的 紙張格式 欄位中,為個別報告設定所用紙張格式。
備註
視乎安裝的應用程式或模組,可能還有其他紙張格式可供選擇。例如:庫存應用程式的標籤紙、活動應用程式的活動名牌/識別證等。
建立新的 PDF 報告¶
要為個別 模型 (例如:銷售單)建立新的報告,請進入該模型,按一下 :icon:`oi-studio`(:guilabel:`切換 Studio`)按鈕,然後按 報告。按一下 新增,然後在彈出的視窗中,選擇報告類型。此選項只用於設定頁首及頁尾顯示的內容:
建立報告後,便可開始 編輯。
編輯 PDF 報告¶
要存取某個模型的可用報告,請進入該模型,按一下 :icon:`oi-studio`(:guilabel:`切換 Studio`)按鈕,然後按 報告。選擇任何一份現有報告,以開啟它。
或者,你也可開啟 Studio,按一下 報告,然後搜尋特定報告或模型。
重要
強烈建議你先 複製 標準報告,然後在複製的副本中進行修改。要複製報告,請將滑鼠游標停留在報告的右上角,然後按一下 )圖示,並選擇 複製。
選項¶
選取或建立報告後,可使用螢幕左方的選項,執行以下操作:
更改 報告名稱:新的名稱將會套用至所有地方,包括 Studio、表單檢視畫面的 )圖示下的 列印 選單,以及 PDF 檔案名稱等。
修改 紙張格式:若未有選擇任何選項,會使用 預設版面佈局 所定義的格式。
在列印選單顯示:將報告加入至表單檢視畫面中的 列印 選單。
從附件重新載入:首次產生報告時,將報告儲存為記錄的一項附件,而之後每次產生報告時,都重新載入原始版本。此設定是因應發票文件的法律要求,亦主要是在此情況下使用。
只限群組可見:只允許指定的 使用者群組 可查看及使用此 PDF 報告。
編輯來源:直接在 XML 檔案 中修改報告。
重設報告:捨棄所有對報告所做的修改,將其重設為標準版本。
預覽列印:產生及下載報告預覽。
報告編輯器¶
你可使用報告編輯器,修改報告的內容及格式。
小訣竅
你可使用相關按鈕,還原 及 重做 變更,亦可使用鍵盤快捷鍵
CTRL+Z及CTRL+Y。你離開報告畫面時,變更會自動儲存。或者,你也可按一下 儲存 按鈕,手動儲存變更。
你可按一下螢幕左方的 重設報告 按鈕,將報告重設為標準版本。
重要
編輯報告的頁首及頁尾,會影響所有標準報告及自訂報告。
條件區塊¶
虛線方框代表 條件區塊 (if/else 條件語句),可用於根據特定條件,顯示或隱藏指定內容。按一下區塊可查看已設定的條件。
選擇一個值,以預覽其對應的輸出,並根據需要進行編輯。
備註
條件只可在 XML 檔案中編輯。
其他內容¶
報告可以有兩種文字內容:
靜態文字,即並非以藍色突出標示的文字,可直接在編輯器中修改。
動態文字,即以藍色突出標示的文字,在產生報告時會變換為 欄位 值,例如:銷售單號碼、報價單日期等。
你可使用指令,為報告加入各種內容,例如:欄位、清單、表格、圖片、橫幅等。鍵入 / (斜線)以開啟 powerbox,然後輸入指令名稱,或從清單中選擇想要的指令。
若想在報告中加入靜態文字,請在所需位置直接輸入文字。
若要進行較進階的修改,可 直接在 XML 檔案中編輯報告。
加入欄位¶
要新增欄位,請鍵入 /`(斜線)並選擇 :guilabel:`欄位 指令,然後在顯示的清單中,選擇或搜尋所需欄位。如有需要,可按一下欄位名稱旁邊的右箭嘴,存取相關欄位清單。之後,指定一個若某項記錄未有填寫該欄位資料時,所顯示的預設值,最後按 輸入 鍵。
加入或編輯表格¶
報告可以有兩種類型的表格:
加入或編輯靜態表格¶
若要新增靜態表格,請鍵入 /`(斜線)並選擇 :guilabel:`表格 指令。設定表格的直欄及資料列數目。加入表格後,便可開始編輯。
你可利用表格工具,插入、移動或刪除直欄及資料列。將滑鼠游標放在直欄最上方,或資料列的左側,然後按一下紫色方框,選擇適用的選項。
要調整欄寬,可將直欄邊框拖曳至所需位置。若要將所有直欄重設為標準欄寬,請在表格工具中選擇 重設大小。
在儲存格中,加入你想要的欄位,或直接輸入以新增靜態文字。
小訣竅
若想以結構化方式呈現文字,但不想使用表格,可使用文本分欄功能。要加入欄,請鍵入 /`(斜線)並選擇適用的指令::guilabel:`2 欄 、 3 欄 或 4 欄。
加入或編輯動態表格¶
備註
動態表格只可顯示
一對多(one2many)及多對多(many2many)類型的關係。標準報告中已有的動態表格,結構會比你自己新增的動態表格更為複雜。此類表格可插入或刪除直欄,但不可移動直欄,也不可插入、移動或刪除資料列。
要加入動態表格,請鍵入 /`(斜線),然後選擇 :guilabel:`動態表格 指令。在顯示的清單中,選擇或搜尋你想表格建基於的關係,然後按 輸入 鍵。加入表格後,便可開始編輯。
如同 靜態表格 一樣,你可利用表格工具,插入、移動或刪除直欄。你也可插入靜態資料列,放在系統產生的資料列的上方或下方。
要加入欄位至儲存格,請刪除所有佔位文字,然後新增 你想要的欄位。系統會顯示一個對話框,顯示該欄位的來源物件(例如 訂單資料行 模型)以及可用欄位清單。
將 直欄名稱 標籤,改為你想要的標籤。
備註
預設資料列會自動寫入欄位內容,就欄位的每個值,都會在報告中產生一個資料列。例如:每行訂單資料行都會產生一個資料列。
格式設定¶
要為報告中的文字設定格式,請選取相關文字,然後使用 文字編輯器 中的選項,設定其格式。
編輯報告 XML¶
警告
直接修改 XML 檔案,可能會導致報告在 升級 過程出現問題。如果發生這種情況,只需將舊資料庫中的變更,複製至升級後的資料庫即可。
要編輯報告的 XML,請按一下左側面板的 編輯來源。
例子¶
要變更報告顯示數據的方式,你可手動修改欄位的預設 小工具。在下面的範例中,「訂單日期」預設顯示日期及時間,而「單價」預設精確度為小數點後兩位數。
<div class="oe_structure"> <span t-field="doc.date_order"/> <span t-field="doc.price_unit"/> </div>
透過使用 t-options (在本例中為 widget 選項),這些欄位可修改成只顯示日期,以及小數點後四位數精確度:
<div class="oe_structure"> <span t-field="doc.date_order" t-options="{'widget': 'date'}"/> <span t-field="doc.price_unit" t-options="{'widget': 'float', 'precision': 4}"/> </div>
若想按特定條件顯示或隱藏內容,可在報告的 XML 中,手動加入 if/else 條件控制語句。
例如,若想在沒有標籤的情況下,隱藏自訂資料表格,可使用 t-if 屬性定義所需條件,該條件會被計算得出真假值,即 True (真)或 False (假)。如果引用中沒有標籤,該表格不會顯示。
<!-- table root element -->
<table class="table" t-if="len(doc.tag_ids) > 0">
<!-- thead = table header, the row with column titles -->
<thead>
<!-- table row element -->
<tr>
<!-- table header element -->
<th>ID</th>
<th>Name</th>
</tr>
</thead>
<!-- table body, the main content -->
<tbody>
<!-- we create a row for each subrecord with t-foreach -->
<tr t-foreach="doc.tag_ids" t-as="tag">
<!-- for each line, we output the name and price as table cells -->
<td t-out="tag.id"/>
<td t-out="tag.name"/>
</tr>
</tbody>
</table>
若想在 t-if 語句計算結果為 False 時,顯示其他內容區塊,可使用 t-else 語句指定。 t-else 程式碼段落在文件結構中,必須緊接 t-if 程式碼段落之後。 t-else 的屬性無需設定任何條件。例如,我們可以顯示一個簡短訊息,指出引用中沒有標籤:
<!-- table root element -->
<table class="table" t-if="len(doc.tag_ids) > 0">
<!-- thead = table header, the row with column titles -->
<thead>
<!-- table row element -->
<tr>
<!-- table header element -->
<th>ID</th>
<th>Name</th>
</tr>
</thead>
<!-- table body, the main content -->
<tbody>
<!-- we create a row for each subrecord with t-foreach -->
<tr t-foreach="doc.tag_ids" t-as="tag">
<!-- for each line, we output the name and price as table cells -->
<td t-out="tag.id"/>
<td t-out="tag.name"/>
</tr>
</tbody>
</table>
<div class="text-muted" t-else="">No tag present on this document.</div>
使用 t-if / t-else 語句後,報告編輯器便能知道這些部份不會同時出現,並且應該以條件區塊形式顯示:
你可使用編輯器切換不同條件,以預覽相應的輸出:
若想運用多個選項,也可使用 t-elif 指令,加入中間條件。例如,銷售單報告的標題可用此方法,按照底層參照文件的條件變化,去顯示不同的標題。
<h2 class="mt-4">
<span t-if="env.context.get('proforma', False) or is_pro_forma">Pro-Forma Invoice # </span>
<span t-elif="doc.state in ['draft','sent']">Quotation # </span>
<span t-else="">Order # </span>
<span t-field="doc.name">SO0000</span>
</h2>
「 形式發票 」標題會根據具體情況使用。若未能符合這些條件,而且文件狀態為 草稿 或 已傳送 ,標題會顯示為「 報價單 」。若以上條件全部不符合,報告標題會顯示為「 訂單 」。
要在報告中使用圖片,可以頗具挑戰性,因為圖片大小及行為未必能夠容易精確控制。你可以使用報告編輯器,透過 欄位 指令插入圖片欄位;不過,在 XML 中使用 t-field 指令及相應的 t-options 屬性去插入圖片欄位,能夠更好地控制圖片尺寸及擺放位置。
例如,以下程式碼將資料行產品的 image_128 欄位,輸出為寬度 64 像素(px)的圖片。(圖片高度會根據圖片的寬高比自動調整。)
<span t-field="line.product_id.image_128" t-options-widget="image" t-options-width="64px"/>
圖片小工具有以下選項可用:
width:圖片寬度,通常以像素(px)或 CSS 長度單位(例如rem)表示,留空表示自動寬度。height:圖片高度,通常以像素(px)或 CSS 長度單位(例如rem)表示,留空表示自動高度。class:套用至img標籤的 CSS 類(class),支援使用 Bootstrap 類 。alt:圖片的替代文字style:style 樣式屬性,比使用 Bootstrap 類 更自由地覆蓋樣式。
這些屬性必須使用字串,即:用雙重引號括住的文字,例如 t-options-width="'64px'" ,或者使用有效的 Python 表達式。
備註
圖片小工具不可用於 img 標籤。請改用 t-field 指令,將其設定在 span (適用於嵌入文中內容)或 div (適用於區塊級別內容)節點之中。
例如,我們可在報價單的表格加入直欄,以顯示產品圖片:
<table class="table table-sm o_main_table table-borderless mt-4">
<thead style="display: table-row-group">
<tr>
<th>Image</th>
<th name="th_description" class="text-start">Description</th>
<th>Product Category</th>
<th name="th_quantity" class="text-end">Quantity</th>
<th name="th_priceunit" class="text-end">Unit Price</th>
[...]
<t t-foreach="lines_to_report" t-as="line">
<t t-set="current_subtotal" t-value="current_subtotal + line.price_subtotal"/>
<tr t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''">
<t t-if="not line.display_type">
<td>
<span t-field="line.product_template_id.image_128"
t-options-widget="'image'"
t-options-width="'64px'"
t-options-class="'rounded-3 shadow img-thumbnail'"
/>
</td>
<td name="td_name"><span t-field="line.name">Bacon Burger</span></td>
<td t-out="line.product_id.categ_id.display_name"/>
t-options-width 屬性將圖片寬度限制為 64 像素,而 t-options-class 中使用的 Bootstrap 類,會建立一個類似縮圖、帶有圓角及陰影的邊框。