PDF报告¶
使用工作室可以编辑现有的 PDF 报表。
默认布局¶
报告的预设版面布局,是在 Studio 之外管理的。您可前往 ,然后在主页的 公司 部份,点击 配置文件版面。版面设定按个别公司而不同,但适用于所有报告。
小技巧
在 配置文档布局`窗口右侧的报告预览中,您可以看到不同设置对报告布局的影响。创建或编辑报告时,点击屏幕左侧的 :guilabel:`打印预览 可以预览报告。
使用以下设置:
Layout: 有七种布局可供选择:
背景:有以下背景可供选择:
空白:不显示任何东西。
模拟标志:在背景显示模拟标志。
自定义:上传自定义背景图片。
文字:有八款字型可供选择:Lato、Roboto、Open Sans、Montserrat、Oswald、Raleway、Tajawal(支援阿拉伯文及拉丁文)、Fira Mono。你可前往 Google 字型网站 预览这些字型。
公司标志:点击 编辑 按钮,上传或更换标志。此操作会将标志加入至 公司 模型的公司记录中。要访问此资料,可前往 ,然后在 公司 部份点击 更新资讯。
颜色:变更报告结构所用的主色及辅助色。默认颜色会根据公司标志颜色自动产生。
地址:公司名称及地址会在 对外报告 的页首显示。可加入多行文字。
标语:此标语会在 对外报告 的页首(适用于浅色、间条色、泡泡、波浪及文件夹版面布局)或页尾显示(适用于实线框及粗线版面布局)。可加入多行文字。
Formát papíru: Definuje výchozí velikost papíru pro sestavy. Můžete vybrat A4 (21 cm × 29,7 cm) a US Letter (21,59 cm × 27,54 cm). To lze také definovat pro jednotlivé sestavy v poli Formát papíru v aplikaci Pracovní prostor.
注解
Další formáty papíru mohou být dostupné v závislosti na tom, které aplikace nebo moduly máte nainstalované, například archy štítků pro aplikaci Skladování nebo identifikační karty akcí pro aplikaci Události.
Vytváření nových PDF sestav¶
Chcete-li vytvořit novou sestavu pro model (např. prodejní objednávky), otevřete model, klikněte na tlačítko (Přepnout Studio) a poté klikněte na Sestavy. Klikněte na Nový a v dialogovém okně, které se otevře, vyberte typ sestavy. To se používá pouze k určení toho, co se zobrazí v záhlaví a zápatí:
创建报告后,您就可以开始 对其进行编辑。
编辑 PDF 报告¶
要访问某个模型可用的报告,请先访问该模型,点击 icon:oi-studio (切换Studio)按钮,然后点击:guilabel:`报告。选择一个现有报告将其打开。
或者,您也可以打开 Studio,点击 报告,然后搜索特定报告或模型。
重要
强烈建议您**复制**标准报告,并在副本中进行修改。要复制报告,请将鼠标指针悬停在报告的右上角,点击 (垂直省略号)图标,然后选择 复制。
选项¶
选择或创建报告后,您可以使用屏幕左侧的选项:
报告编辑器¶
报告编辑器允许您修改报告的内容和格式。
小技巧
您可以使用 撤销`或 :guilabel:`重做`按钮,或使用快捷键`CTRL +
Z和CTRL+Y,来撤销或重做更改。当您离开报告时,更改会自动保存;您也可以使用 保存 按钮手动保存。
您可以通过点击屏幕左侧的 :guilabel:`重置报告`按钮,将报告重置为其标准版本。
重要
编辑报告的页眉和页脚会影响所有的标准报告和自定义报告。
条件区块¶
虚线矩形代表**条件区块**(if/else 语句)。它们用于根据特定条件来显示或隐藏内容。点击区块即可查看条件。
选择一个值以预览其对应的输出,并在必要时进行编辑。
注解
条件只能在 XML 中进行编辑。
其他内容¶
报告中有两种文本内容:
静态文本,即未以蓝色突出显示的文本,可以直接在编辑器中修改。
动态文本,即以蓝色高亮显示的文本,在生成报告时会替换为:doc:`字段 </applications/studio/fields>`值,例如:销售订单编号或报价日期。
您可以使用指令,向报告中添加内容,例如:字段、列表、表格、图像、横幅等。输入 / 打开:ref:powerbox <essentials/html_editor/commands>,然后输入指令名称,或从列表中选择想要的指令。
要在报告中添加静态文本,请在需要的位置键入文本。
要进行更高级的更改,您可以 直接在 XML 中编辑报告。
添加一个字段¶
要添加字段,请输入 / 并选择 字段 命令。在打开的列表中,选择或搜索字段;如果需要,点击字段名称旁边的右箭头以访问相关字段列表。然后,指定在记录中未填写字段时将显示的默认值,并按 Enter。
添加或编辑表格¶
报表中有两种类型的表格:
Statické tabulky, které se používají k zobrazení statického textu nebo polí. U tohoto typu tabulky definujete počet sloupců a řádků při přidávání tabulky.
Dynamické tabulky, které se používají k zobrazení dat z relačních polí. U tohoto typu tabulky definujete pouze počet sloupců při přidávání tabulky. Počet řádků ve vygenerované sestavě bude určen počtem záznamů v souvisejícím modelu, které jsou propojeny s aktuálním modelem.
Example
在销售订单报表中,使用动态表格来显示与销售订单相关的订单行。如果销售订单包含10个订单行,生成的报表中的表格就有10行;如果包含两个订2行,表格就有2行。
添加或编辑静态表格¶
Chcete-li přidat statickou tabulku, zadejte / a vyberte příkaz Tabulka. Určete počet sloupců a řádků pro tabulku. Po přidání tabulky můžete začít s úpravami.
Pomocí nástrojů tabulky můžete vkládat, přesouvat a mazat sloupce a řádky. Umístěte kurzor nad sloupec nebo vlevo od řádku, poté klikněte na fialový obdélník a vyberte možnost.
Chcete-li změnit velikost sloupce, přetáhněte ohraničení sloupce na požadovanou pozici; obnovte všechny sloupce na jejich standardní velikost výběrem možnosti Obnovit velikost z nástrojů tabulky.
在单元格中添加您选择的 字段,或直接输入静态文本。
小技巧
Chcete-li přidat text strukturovaným způsobem bez použití tabulky, můžete použít sloupce. Přidejte sloupce zadáním / a výběrem příslušného příkazu: 2 sloupce, 3 sloupce nebo 4 sloupce.
添加或编辑动态表¶
注解
只有
one2many或many2many类型的关系才能显示为动态表。标准报表中现有的动态表比自己添加的动态表结构更复杂。对于这类表格,可以插入或删除列,但不能移动列或插入、移动或删除行。
要添加动态表,请键入 /,然后选择 动态表格 指令。在打开的列表中,选择或搜索表格将基于的关系,然后按 回车。表格添加完成后,就可以开始编辑了。
您可以使用表格工具插入、移动和删除列,就像 :ref:`静态表 <studio/pdf-reports/static-table>`一样。还可以插入静态行,这些行将出现在生成行的上方或下方。
Chcete-li přidat pole do buňky, odstraňte jakýkoli zástupný text a poté přidejte pole podle vašeho výběru. Dialogové okno, které se otevře, zobrazuje zdrojový objekt pro pole (např. model Řádky objednávky) a seznam dostupných polí.
用您选择的标签替换 列名 标签。
注解
默认行会自动遍历字段内容,为每个字段值在报告中生成一行(例如,每个订单行生成一行)。
格式化¶
要格式化报告中的文本,请选择文本,然后使用 文本编辑器 中的选项格式化文本。
编辑报告的 XML¶
警告
直接修改 XML 可能会在 升级 时导致报告问题。如果出现这种情况,只需将旧数据库中的更改复制到升级后的数据库中即可。
要编辑报告的 XML,请点击左窗格中的 编辑来源。
例子¶
要更改报告中数据的显示方式,可以手动修改字段的默认 小部件 。在下面的示例中,订单日期默认显示日期和时间,而单价默认精确到小数点后两位。
<div class="oe_structure"> <span t-field="doc.date_order"/> <span t-field="doc.price_unit"/> </div>
通过使用 t-options`(本例中为 `小部件 选项),可以修改这些字段,使其分别只显示日期和小数点后四位的精度:
<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>
Název Proforma faktura se používá v závislosti na některých kontextových podmínkách. Pokud tyto podmínky nejsou splněny a stav dokumentu je buď draft nebo sent, použije se Nabídka. Pokud nejsou splněny žádné z těchto podmínek, název sestavy je Objednávka.
在报告中处理图片可能具有挑战性,因为对图片大小和行为的精确控制并不总是显而易见的。您可以使用报告编辑器插入图片字段(通过使用 字段指令),但使用 t-field 指令和附带的 t-options 属性在 XML 中插入图片可以提供更好的大小和定位控制。
例如,以下代码会将该行产品的字段 `image_128`输出为 64px 宽的图片(根据图片的宽高比自动调整高度)。
<span t-field="line.product_id.image_128" t-options-widget="image" t-options-width="64px"/>
图像部件有以下选项:
宽度:图像的宽度,通常以像素或CSS长度单位(如`rem`)表示(留空则为自动宽度)。height:图像的高度,通常以像素或CSS长度单位(如`rem`)表示(留空则为自动高度)。class:应用于`img` 标签的CSS类;可使用`Bootstrap类 <https://getbootstrap.com/docs/5.1/content/tables>`_。alt:图像的替代文本。style:样式属性;与`Bootstrap 类 <https://getbootstrap.com/docs/5.1/content/tables>`_ 相比,它允许您更自由地覆写样式。
这些属性必须包含字符串,即引号内再嵌套引号的文本,例如`t-options-width=“‘64px’”` (或者,也可以是一个有效的Python表达式)。
注解
图像控件不能用于`img`标签。而应在`span` (用于内联内容)或`div` (用于块级内容)节点上设置`t-field`指令。
例如,让我们在报价单表格中添加一个包含产品图片的列:
<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类则创建了一个带有圆角和阴影的缩略图样式边框。