一个打印格式往往需要应对多种情况:已付款和未付款的发票、本地订单和出口订单、有税号和无税号的客户。与其为每种情况各做一个格式,不如给那些只在某些时候才需要打印的部分加上条件。
适用于 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,例如缺少引号,保存并应用 会停止并显示哪个条件有误。
- 如果条件有效但在打印时失败,例如使用了不存在的字段,该部分仍会 照常打印,以免信息丢失。错误会记录一次到 错误日志 中,标题为“打印格式条件失败”,并附上格式名称。