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,按一下 報告,然後搜尋特定報告或模型。

重要

強烈建議你先 複製 標準報告,然後在複製的副本中進行修改。要複製報告,請將滑鼠游標停留在報告的右上角,然後按一下 )圖示,並選擇 複製

複製 PDF 報告

選項

選取或建立報告後,可使用螢幕左方的選項,執行以下操作:

  • 更改 報告名稱:新的名稱將會套用至所有地方,包括 Studio、表單檢視畫面的 )圖示下的 列印 選單,以及 PDF 檔案名稱等。

  • 修改 紙張格式:若未有選擇任何選項,會使用 預設版面佈局 所定義的格式。

  • 在列印選單顯示:將報告加入至表單檢視畫面中的 列印 選單。

  • 從附件重新載入:首次產生報告時,將報告儲存為記錄的一項附件,而之後每次產生報告時,都重新載入原始版本。此設定是因應發票文件的法律要求,亦主要是在此情況下使用。

  • 只限群組可見:只允許指定的 使用者群組 可查看及使用此 PDF 報告。

  • 編輯來源:直接在 XML 檔案 中修改報告。

  • 重設報告:捨棄所有對報告所做的修改,將其重設為標準版本。

  • 預覽列印:產生及下載報告預覽。

報告編輯器

你可使用報告編輯器,修改報告的內容及格式。

小訣竅

  • 你可使用相關按鈕,還原重做 變更,亦可使用鍵盤快捷鍵 CTRL + ZCTRL + Y

  • 你離開報告畫面時,變更會自動儲存。或者,你也可按一下 儲存 按鈕,手動儲存變更。

  • 你可按一下螢幕左方的 重設報告 按鈕,將報告重設為標準版本。

重要

編輯報告的頁首及頁尾,會影響所有標準報告及自訂報告。

條件區塊

虛線方框代表 條件區塊 (if/else 條件語句),可用於根據特定條件,顯示或隱藏指定內容。按一下區塊可查看已設定的條件。

查看已套用至區塊的條件。

選擇一個值,以預覽其對應的輸出,並根據需要進行編輯。

預覽另一項條件的輸出結果。

備註

條件只可在 XML 檔案中編輯。

其他內容

報告可以有兩種文字內容:

  • 靜態文字,即並非以藍色突出標示的文字,可直接在編輯器中修改。

  • 動態文字,即以藍色突出標示的文字,在產生報告時會變換為 欄位 值,例如:銷售單號碼、報價單日期等。

你可使用指令,為報告加入各種內容,例如:欄位、清單、表格、圖片、橫幅等。鍵入 / (斜線)以開啟 powerbox,然後輸入指令名稱,或從清單中選擇想要的指令。

若想在報告中加入靜態文字,請在所需位置直接輸入文字。

若要進行較進階的修改,可 直接在 XML 檔案中編輯報告

加入欄位

要新增欄位,請鍵入 /`(斜線)並選擇 :guilabel:`欄位 指令,然後在顯示的清單中,選擇或搜尋所需欄位。如有需要,可按一下欄位名稱旁邊的右箭嘴,存取相關欄位清單。之後,指定一個若某項記錄未有填寫該欄位資料時,所顯示的預設值,最後按 輸入 鍵。

選擇一個相關聯欄位。
加入或編輯表格

報告可以有兩種類型的表格:

  • 靜態表格,用於顯示靜態文字或欄位。若使用此類表格,需要在新增表格時,定義直欄及資料列。

  • 動態表格,用於顯示取自 關係欄位 的資料。若使用此類表格,新增表格時只需定義直欄。系統產生的報告中,資料列的行數會取決於與目前模型相關聯的相關模型中,有多少項記錄。

    Example

    舉例,在銷售單報告中,可使用動態表格去顯示與該銷售單相關聯的訂單資料行。若銷售單有 10 行訂單資料行,在系統產生的報告中,表格將會有 10 行資料列。如果只有 2 行訂單資料行,表格將只會有 2 列,餘此類推。

加入或編輯靜態表格

若要新增靜態表格,請鍵入 /`(斜線)並選擇 :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 類,會建立一個類似縮圖、帶有圓角及陰影的邊框。

在報價單表格加入直欄,以顯示產品圖片。