PDF 報告¶
With Studio, you can edit existing PDF reports (e.g., invoices, quotations, etc.) or create new ones.
預設版面設計¶
報告的預設版面佈局,是在 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 類,會建立一個類似縮圖、帶有圓角及陰影的邊框。