单据状态

Frappe 使用“文档状态”(Docstatus)的概念来跟踪交易的状态。文档状态始终为以下三个值之一:

  1. 草稿(值:0)
  2. 已提交(值:1)
  3. 已取消(值:2)

不可提交的文档将始终保持在“草稿”状态。可提交的文档可以选择从草稿状态进入“已提交”状态,然后进入“已取消”状态。

处于已提交和已取消状态的文档无法编辑,但有一个例外:对于个别字段,我们可以明确允许编辑,即使文档处于已提交状态。

在后端代码中,我们有一个辅助类 DocStatus,可以按如下方式使用:

import frappe
from frappe.model.docstatus import DocStatus

draft_invoice_names = frappe.get_list(
 "Sales Invoice",
 filters={"docstatus": DocStatus.draft()},
 pluck="name"
)

invoice_doc = frappe.get_doc("Sales Invoice", draft_invoice_names[0])
invoice_doc.docstatus == DocStatus.draft() # -> True
invoice_doc.docstatus.is_draft() # -> True
invoice_doc.docstatus.is_submitted() # -> False
invoice_doc.docstatus.is_cancelled() # -> False

invoice_doc.submit()
invoice_doc.docstatus == DocStatus.submitted() # -> True
invoice_doc.docstatus.is_draft() # -> False
invoice_doc.docstatus.is_submitted() # -> True
invoice_doc.docstatus.is_cancelled() # -> False

invoice_doc.cancel()
invoice_doc.docstatus == DocStatus.cancelled() # -> True
invoice_doc.docstatus.is_draft() # -> False
invoice_doc.docstatus.is_submitted() # -> False
invoice_doc.docstatus.is_cancelled() # -> True

文档状态以整数值的形式存储在数据库的每个 DocType 表中。