显示或隐藏内容

一个打印格式往往需要应对多种情况:已付款和未付款的发票、本地订单和出口订单、有税号和无税号的客户。与其为每种情况各做一个格式,不如给那些只在某些时候才需要打印的部分加上条件。

适用于 Frappe v16 及更高版本。

可以在哪里添加条件

对象 设置项 打印时机
一个区块 可见性 > 条件 条件为真时
一个字段或块 可见性 > 条件 条件为真时
一个表格 可见性 > 条件 条件为真时
表格的行 可见性 > 满足以下条件时显示行 该行满足条件时
表格的列 列设置 > 满足以下条件时显示列 文档满足条件时

条件留空则始终打印。

编写条件

条件是一段简短的 Python 表达式。用 doc 表示你正在打印的文档,用 doc.fieldname 表示它的字段:

doc.status == "Paid"

字段名是 字段 选项卡中的名称,而不是标签。例如“客户名称”字段是 doc.customer_name。

你可以使用比较运算符(==、!=、>、<、>=、<=)、and、or、not、in,以及函数 int、float 和 round。条件中不能使用其他 Python 函数。

示例

doc.status == "Paid"                       # only on paid invoices
doc.status != "Paid"                       # only on unpaid invoices
doc.discount_amount > 0                    # only when there is a discount
doc.currency != "USD"                      # only for foreign currency
doc.customer_group == "Export"             # only for export customers
doc.tax_id                                 # only when a tax ID is filled in
not doc.is_return                          # hide on credit notes
doc.status in ("Overdue", "Unpaid")        # one of several values
doc.grand_total >= 10000 and doc.po_no     # both must be true
doc.total_qty > 100                        # only large orders

表格行

在 满足以下条件时显示行 中,用 row 表示正在打印的行:

row.qty > 0                    # skip zero quantity rows
row.item_group == "Products"   # only products
not row.is_free_item           # hide free items

表格列

满足以下条件时显示列 是针对整个文档检查一次,而不是逐行检查,所以使用 doc:

doc.discount_amount            # show the discount column only when there is a discount
doc.currency != "USD"          # show an exchange rate column for foreign currency

print_settings 保存了站点的打印设置,因此条件可以跟随站点范围的开关:

print_settings.print_taxes_with_zero_amount or doc.total_taxes_and_charges

实时查看

在预览中选定一个文档后,编辑器会在你输入时检查条件,并在下方显示以下之一:

标记 含义
当前可见 该文档满足条件。它将被打印。
当前隐藏 条件为假。该文档不会打印它。
无法检查此条件 条件有错误。将鼠标悬停在标记上可查看。
加载文档以查看实时状态 尚未选择预览文档。

在页面上,隐藏的部分会显示为灰色。在 图层 选项卡中,任何带条件的部分都有一个眼睛图标,将鼠标悬停在其上会显示条件。

条件出错时

  • 如果条件不是有效的 Python,例如缺少引号,保存并应用 会停止并显示哪个条件有误。
  • 如果条件有效但在打印时失败,例如使用了不存在的字段,该部分仍会 照常打印,以免信息丢失。错误会记录一次到 错误日志 中,标题为“打印格式条件失败”,并附上格式名称。
  • 字段
  • 表格