分配规则

在版本 12 中引入

分配规则允许您设置文档自动分配给用户。

为了在负责支持工作的员工之间自动分配支持工单,可以使用分配规则。

要访问分配规则,请转到:

首页 > 设置 > 分配规则

1. 如何创建分配规则

要设置自动分配:

  1. 转到分配规则列表,点击新建。
  2. 选择您要自动分配的文档类型(例如 问题)。
  3. 编写将添加到待办事项中的“描述”。
  4. 选择分配的条件。 您可以在 Assign RuleClose RuleUnassign Rule 中编写简单的 Python 表达式以实现自动分配。您将可以访问文档的所有属性,并可以使用 >、<、== 等运算符,以及像 andor 这样的多个条件。

示例:

  • status == "Open"
  • issue_type == "Technical" and priority=="High" and status == "Open"
  1. 选择分配规则。

  • 轮询:按顺序将每个文档分配给一个用户。
  • 负载均衡:将新文档分配给分配数量最少的用户。

选择此分配规则将应用的用户列表:

  • 基于字段:在 v13 中引入,此规则可用于将文档分配给在配置字段中设置的用户。

选择用户链接字段,该字段将决定此分配规则将应用于谁:

  1. 保存。

您可以在描述字段中使用文档的属性,这些属性将成为分配的一部分。优先级更高的分配规则将首先应用。

示例:

高优先级问题 文件上传不起作用 已分配给您。

1.1 多个分配规则

您还可以为每种文档类型设置多个自动分配,优先级最高的将首先应用。

优先级更高的分配规则

1.2 设置分配的截止日期

您可以根据参考文档中的日期字段自动设置分配的截止日期。

示例:

如果您想根据问题的“解决截止日期”来设置问题分配的截止日期,可以通过在分配规则的 Due Date Based On 选项中选择“解决截止日期”字段来实现。

注意:

  • 如果尚未选择“文档类型”,或者所选文档类型没有“日期”或“日期时间”字段,则“基于截止日期”选项将不可用。
  • 当参考文档中的“基于截止日期”字段值更新时,分配/待办事项中的截止日期也会随之更新。
  1. 工作流
  2. 工作流操作

自动化

ERPNext 中的自动化是一项颠覆性的功能,尤其在简化里程碑跟踪、任务分配、重复性任务和事件监控等复杂流程时。这些 ERPNext 的自动化功能不仅节省时间和精力,还能提升整个组织的整体效率和生产力。

  • 分配规则
  • 自动重复
  • 里程碑跟踪

在主数据上设置工作流

工作流通常设置在可提交的文档上。一旦文档被批准,它会根据设置的工作流自动提交。然而,有时企业确实存在需要审批主数据(如物料、物料价格、定价规则等)的场景。

ERPNext 中,这些主数据是不可提交的。因此,即使被拒绝,它们有时仍然处于激活状态,您可以在交易中使用它们。在本文中,我们以物料主数据为例。我们将在物料上设置一个简单的工作流,并使其仅在批准后才激活。为此,请按照以下步骤操作:

  1. 确保您要设置工作流的主数据具有启用/禁用复选框。如果默认情况下不存在此复选框,您需要通过自定义表单创建一个,并按如下方式设置默认值:
  1. 如果复选框是“禁用”,则设为 0
  2. 如果复选框是“启用”,则设为 1

在我们的案例中,物料主数据有一个名为“已禁用”的复选框。我们在物料 DocType 的自定义表单中将默认值设置为 1,如下所示。

这意味着每次创建新物料时,除非被批准,否则默认情况下它将处于禁用状态(如下面的截图所示)。

  1. 接下来,设置工作流。

在状态表中,批准时,请确保将“已禁用”(或已启用)复选框更新为 0(如果是启用,则更新为 1),如下所示。

这将确保每当物料被批准时,物料将自动启用,并且您可以在交易中使用它。

查看下面的 GIF 以详细了解工作流:

设置工作流的简单步骤

当公司对文档有多个审批层级时,可以设置工作流。
ERPNext 中,您可以进入工作流列表 –> 新建 –> 命名工作流并定义:1. 状态 2. 转换规则。

  1. 状态:

当文档被传递到不同审批层级时,每个层级会根据用户角色定义相应的状态。

  1. 转换规则:

例如:销售用户只能创建报价单,并且可以将其保存在草稿状态。然后,可以将其发送给销售经理进行审批,拥有此角色的用户可以批准拒绝该报价单,之后报价单要么进入草稿状态(如果被拒绝),要么进入最终的已批准状态。

错误消息:文档在提交前无法取消。
[这是用户在提交文档前定义了“已取消”状态时常见的错误。文档状态 1 表示文档将在该状态下被提交,因此文档状态 2 的状态应仅在文档状态 1 的状态之后的转换中定义。]
先设置一个简单的工作流,然后告诉我们您对工作流的更多想法!我们乐于看到用户满意!!;)

授权规则

授权规则允许根据定义的条件,在单据上配置自定义的授权/审批流程。

例如:如果销售订单的总额超过 1,000 元,那么即使销售用户拥有“提交”权限,也只能由销售经理进行验证/提交。

同样地,您可以根据净总额、总额、折扣百分比等字段定义授权规则,并指定当满足授权条件时,谁将是单据审批人。

让我们通过一个详细的授权规则示例来更好地理解。

假设销售经理仅需对总额超过 10,000 元的销售订单进行授权。如果销售订单金额低于 10,000 元,那么销售用户也可以提交。这意味着销售用户的“提交”权限将被限制在总额低于 10,000 元的销售订单范围内。

1. 如何创建授权规则

  1. 前往授权规则列表,点击“新建”。
  2. 选择授权规则将适用的交易类型。此功能仅适用于有限的交易类型。
  3. 输入授权金额等。这取决于您在“基于”字段中选择的字段。
  4. 选择“基于”。授权规则将根据在此字段中选择的值来应用。
  5. 选择“适用角色”。这是此授权规则将适用的角色。根据示例,它将是“销售用户”。
  6. 为了更具体,如果您希望将规则应用于特定的销售用户而非所有销售用户,您还可以选择“适用用户”。
  7. 选择“审批角色”。这是可以审批超过授权金额表单的角色。根据我们的示例,它是“销售经理”。
  8. 您还可以选择特定的销售经理。
  9. 保存。

如果销售用户尝试提交金额超过 10,000 元的销售订单,他将收到一条错误消息。

如果您希望限制销售用户提交销售订单,那么与其创建授权规则,不如从角色权限管理器中移除销售用户的“提交”权限。

可应用授权规则的单据

  1. 销售订单
  2. 采购订单
  3. 报价单
  4. 交货单
  5. 销售发票
  6. 采购发票
  7. 采购收货单
  8. 绩效评估

授权条件可基于的字段

  1. 总额
  2. 平均折扣
  3. 按客户折扣
  4. 按物料折扣

限制销售用户只能查看特定客户和交易

当销售用户只需处理指定的潜在客户、客户以及关联这些客户的销售交易时,请使用用户权限。销售员记录适用于目标、佣金和销售团队表,但仅分配销售员本身并不会创建记录级别的访问限制。

本指南以销售用户 Avery Stone 为例。Avery 可以处理 Northstar Retail、Summit Digital Stores 以及两个分配的潜在客户,但不能处理销售组合中的其他部分。

开始之前

  • 您需要系统管理员或同等权限来管理用户和用户权限。
  • 用户必须是系统用户,并拥有其工作所需的角色。
  • 首先创建相关的客户和潜在客户。
  • 决定是按客户逐一维护访问权限,还是通过区域等分组主数据来维护。

角色和用户权限执行不同的任务。 角色授予对文档类型的访问权限。用户权限则限制用户可访问该类型中的哪些记录。

1. 为用户分配所需的销售角色

  1. 打开用户并选择该销售用户。
  2. 打开角色与权限
  3. 启用销售用户
  4. 仅当该人员需要执行相应操作时,才添加其他角色。例如,不要仅仅为了让工作区可见而分配销售经理角色。
  5. 保存该用户。

销售用户角色通常根据配置的角色权限管理器提供对销售主数据和交易的访问权限。在后续步骤中添加的用户权限将缩小该访问范围。

2. 打开用户权限

转到用户和权限 > 用户权限,然后选择添加用户权限

您也可以打开该用户,然后使用权限 > 设置用户权限。两种方式都会创建相同的用户权限记录。

3. 允许分配给销售用户的客户

为用户组合中的每个客户创建一个用户权限:

  1. 用户中,选择该销售用户。
  2. 允许设置为客户
  3. 中,选择一个允许的客户。
  4. 保存该用户权限。
  5. 为每个额外的客户重复此操作。

例如,Avery 对 Northstar Retail 和 Summit Digital Stores 分别拥有权限。ERPNext 会合并同一主数据的权限,因此 Avery 可以访问任一客户。

为何这也限制了销售交易

客户与报价、销售订单、交货单和销售发票等文档相关联。当用户的角色应用用户权限时,客户限制会传递到这些关联文档中。

这意味着您通常不需要为每个销售订单或销售发票创建单独的用户权限。维护好客户组合,限制就会跟随客户关联关系生效。

4. 单独添加潜在客户权限

潜在客户还不是客户。因此,客户权限无法决定用户可以访问哪些尚未转化的潜在客户。

为每个分配的潜在客户创建一个单独的用户权限:

  1. 选择同一个销售用户。
  2. 允许设置为潜在客户
  3. 中选择允许的潜在客户。
  4. 保存并为该用户的其他潜在客户重复此操作。

当潜在客户转化后,将生成的客户添加到用户的客户权限中。根据您的保留策略审查旧的潜在客户权限。

5. 将限制应用于关联的文档类型

当客户权限应限制所有包含客户关联的受支持文档时,请保持应用于所有文档类型为启用状态。

仅当权限必须应用于特定文档类型时,才清除此选项。清除后,在适用于中选择该文档类型。例如,将客户权限限制为仅适用于销售订单,则不会在报价、交货单和销售发票上提供相同的限制。

6. 审查完整的组合

打开用户权限列表并按用户筛选。确认每个允许的客户和每个未转化的潜在客户都只出现一次。

在此示例中,Avery 可以访问:

  • Northstar Retail 和 Summit Digital Stores;
  • 关联到这些客户的销售交易;以及
  • 潜在客户 CRM-LEAD-2026-00001 和 CRM-LEAD-2026-00002。

Avery 不应获得包含组合中其他部分的宽泛客户、客户组或区域权限。宽泛的权限会扩大访问范围,而不是覆盖单个客户权限。

7. 在移交账户前验证访问权限

不要假设保存的权限会产生预期的结果。

  1. 打开该用户。
  2. 选择权限 > 查看允许的文档
  3. 检查客户、潜在客户、报价、销售订单、交货单和销售发票。
  4. 确认允许的记录出现,且无关的客户不会出现。
  5. 测试用户实际会使用的列表视图和报表。

作为最终的安全检查,请使用具有相同角色和权限的非管理员测试用户登录。系统管理员和管理员账户可以绕过限制,不适合用于验证销售人员的体验。

访问权限如何确定

配置项 控制内容
销售用户角色 可用的销售单据类型和操作
客户用户权限 用户可以访问的客户及与客户关联的交易
潜在客户用户权限 用户可以访问的特定未转化潜在客户
应用于所有单据类型 允许的值是否限制所有支持的关联单据类型
适用于 将一个用户权限限制在选定的单据类型上
启用严格用户权限 控制具有空白限制链接的记录是否仍然可见

当有多个客户时

单个客户权限精确且易于审计,但当客户组合发生变化时需要维护。如果客户和潜在客户按区域清晰划分,请改为为相应的区域创建用户权限。除非启用了隐藏子级,否则父级区域也可以包含子级区域。

仅当分组主数据与实际访问边界匹配时才使用它。如果客户组主要用于定价或报表,并且包含属于多个销售人员的客户,则不要将其用于访问控制。

客户或区域为空的记录

检查系统设置中的启用严格用户权限。当启用严格权限时,具有空白限制链接的记录将被隐藏。当未启用时,限制链接为空的记录可能仍然可见。

在启用此设置之前,请检查集成和旧数据中是否缺少客户或区域值。测试对所有团队的影响,因为这是一个系统级别的设置。

故障排除

问题 检查内容
用户仍然可以看到所有客户 检查是否存在更宽泛的客户、客户组或区域权限。确认用户的角色已启用应用用户权限。
用户无法打开任何销售交易 确认销售用户角色授予了读取权限,并且交易包含允许的客户。
用户可以看到链接为空的不相关记录 检查缺失的客户或区域值以及启用严格用户权限设置。
分配的潜在客户丢失 单独创建潜在客户用户权限。客户权限不涵盖未转化的潜在客户。
报表显示的数据超出预期 使用受限用户测试报表。检查自定义或脚本报表,确认它们应用了权限感知查询。
经理无法查看销售人员的客户组合 为经理添加所需的更宽泛权限。销售人员层级不会自动取代用户权限。

常见问题解答

将用户链接到销售人员就足够了吗?

销售人员分配支持销售归属、目标和佣金报告。对于记录级别的限制,请使用用户权限。

我必须将每个销售订单都添加到用户权限中吗?

允许该客户,并保持启用应用于所有单据类型。受支持的客户关联交易将继承该限制。

一个销售人员可以有多个客户和潜在客户吗?

可以。为每个允许的值创建一个用户权限,或者当客户组合遵循区域层级时,使用合适的区域。

销售经理可以看到所有记录吗?

可以,如果他们的角色和用户权限授予了更宽泛的访问权限。请单独测试经理,而不是假设销售人员树控制可见性。

  • 用户权限
  • 基于角色的权限
  • 添加用户
  • 销售人员
  • 系统设置

销售周期中项目费率变化百分比

ERPNext 可以验证物料在从销售订单流转到交货单或销售发票时,其价格是否发生变化。当已确认的订单价格在履行和开票过程中应保持一致时,请使用此控制功能。

开始之前

确认:

  • 物料价格及预期的价格表。
  • 有权批准价格例外情况的角色。
  • 您的流程是需要警告还是强制阻止。
  • 应如何处理合法的修改和退货。

此设置不能替代定价治理。请记录价格何时可能发生变化以及谁可以批准。

配置价格验证

  1. 打开销售设置。
  2. 打开物料价格设置部分。
  3. 启用在整个销售周期内保持相同价格
  4. 如果未保持相同价格则执行的操作设置为:
  • 警告:允许在通知用户后保存。
  • 阻止:阻止不一致的价格。
  1. 当选择“阻止”时,如果您的版本提供该字段,请选择允许覆盖此操作的角色。
  2. 保存。

测试控制功能

  1. 使用物料价格创建并提交一个销售订单。
  2. 根据该销售订单创建一张交货单或销售发票。
  3. 点击高亮的铅笔图标以打开完整的物料行。
  4. 更改价格。
  5. 保存并确认 ERPNext 会根据销售设置警告或阻止此更改。

物料代码前的圆点可快速显示库存可用性:绿色表示有库存,红色表示缺货。

当价格合法变更时

使用能够保留审计轨迹的工作流程:

  • 当商业协议在履行前发生变化时,修改已确认的销售订单。
  • 当支持的提交后工作流程适合此变更时,使用“更新物料”。
  • 在更正已提交的发票时,创建贷项通知单或退货单。
  • 仅在政策允许时,使用授权的覆盖功能。

不要为了匹配总额而静默更改下游价格。

定价来源如何相互作用

交易价格可能受到以下因素影响:

  • 物料价格和价格表。
  • 定价规则。
  • 促销方案。
  • 物料级别的加成或折扣。
  • 额外折扣。
  • 货币换算。
  • 在权限允许的情况下手动输入的价格。

相同价格验证会比较映射的销售周期价格。它不会阻止所有可能的上游定价配置。

重要设置

设置 效果
在整个销售周期内保持相同价格 启用与上游价格的比较
操作:警告 显示警告但允许用户继续
操作:阻止 阻止价格更改
覆盖角色 允许授权用户在支持的情况下绕过“阻止”
允许用户编辑价格表价格 控制“价格表价格”字段的编辑,而非整个销售周期策略

故障排除

问题 检查内容
未出现警告 确认下游单据是从销售订单映射而来,并且设置已保存
授权用户无法覆盖 确认配置的角色和用户的已分配角色
价格在映射前已更改 检查物料价格、定价规则、折扣、货币和源单据
退货或贷项更正被阻止 使用适当的退货或修改工作流程
用户混淆了“价格”和“价格表价格” 解释参考价格、加成、折扣和最终交易价格

常见问题解答

此设置是否适用于不相关的独立发票?

它旨在验证关联销售周期中的价格。独立发票没有可比较的销售订单价格。

我应该选择“警告”还是“阻止”?

如果例外情况常见且稍后审查,请使用“警告”。如果必须在保存单据前获得批准,请使用“阻止”。

角色能否覆盖“阻止”?

可以,当您的 ERPNext 版本中提供了覆盖角色字段并已配置时。

此设置会阻止定价规则吗?

不会。定价规则仍然是价格计算的一部分。请测试组合工作流程。

  • 销售设置
  • 销售订单
  • 提交后修改销售订单
  • 定价规则
  • 应用折扣

客户、联系人与地址关系

客户、联系人和地址描述了同一业务关系的不同部分。客户是您销售的对象,联系人是您沟通的对象,地址是用于开票、发货或其他目的的地点。

将它们作为独立的关联记录保存,可以让一个客户拥有多个联系人和多个地点,而无需创建重复的客户账户。

这三条记录如何协同工作

记录 代表 示例
客户 用于报价、订单、发票、付款、信用控制和报告的商业主体 顶峰数字商店
联系人 您与之沟通的个人 摩根·李,采购经理
地址 一个物理或邮寄地点 海港大道开票办公室
> 通常的关系如下所示:

客户
↳ 关联到一个或多个 联系人
↳ 关联到一个或多个 地址

联系人和地址并不存储在客户内部。它们是通过链接连接的独立记录。这一点很重要,因为当关系真实存在时,同一个联系人或地址可以链接到另一个支持的主体。

为什么它们是分开的?

即使公司的人员或地点发生变化,它仍然可以是同一个客户。将记录分开反映了这一现实。

  • 一个客户可以有多个联系人。 采购经理可能接收报价,而应付账款联系人则接收发票。
  • 一个客户可以有多个地址。 总部可能用于开票,而货物则交付到仓库或零售分店。
  • 人员和地点可以独立变化。 您可以更换联系人,或添加一个送货地点,而无需创建另一个客户并分割销售历史记录。
  • 交易可以使用适当的组合。 一份销售订单可以使用一个联系人和发货地址,而同一客户的后续订单则可以使用另一个。

仅当该主体必须被视为独立的商业或会计关系时,才创建另一个客户。不要仅仅因为新员工、新办公室或新交货点就创建新客户。

示例

新星电子贸易公司向顶峰数字商店销售产品。ERPNext 可以按如下方式建模该关系:

  • 客户: 顶峰数字商店
  • 主要联系人: 摩根·李,采购经理
  • 其他联系人: 泰勒·布鲁克斯,应付账款
  • 首选开票地址: 海港大道办公室
  • 首选发货地址: 子午线大道仓库

当用户为顶峰数字商店创建报价或销售订单时,ERPNext 可以获取摩根·李和首选地址。当该交易需要时,用户仍然可以选择泰勒·布鲁克斯或其他关联地址。

如何选择主要记录

主要设置告诉 ERPNext 哪个关联记录应作为常规默认值使用。它们不会阻止用户选择其他关联记录。

主要联系人

在通常应为关联客户获取的联系人上启用是主要联系人。如果客户有多个联系人,请将此设置用于通常接收销售沟通的人员。

联系人也有主要电子邮件和主要电话的选择。这些回答的是不同的问题:

  • 是主要联系人 为关联方选择首选人员。
  • 主要电子邮件主要电话 在该人员的联系人记录中选择首选详细信息。

首选开票和发货地址

一个地址可以标记为首选开票地址首选发货地址,或两者都是。

  • 首选开票地址是发票和开票沟通的常规地点。
  • 首选发货地址是常规的送货目的地。

这些可能是不同的地点。例如,客户可能从其总部支付发票,但在仓库接收货物。

在交易中的选择

当在支持的销售交易中选择客户时,ERPNext 会使用符合条件的关联记录及其主要或首选设置来提供默认值。用户可以将这些默认值替换为链接到同一客户的其他联系人或地址。

当客户有多个关联记录时,请明确设置主要标志。这可以避免依赖碰巧可用的任何符合条件的记录。

更改主要联系人或首选地址会影响未来文档中使用的默认值。它不会重写已提交交易中存储的联系人、地址或已渲染的地址文本。

常见错误

常见错误 更好的做法
为每个分支机构创建新的客户 除非每个分支机构是独立的商业或会计主体,否则应使用关联地址。
在客户名称中填写个人详细信息 创建联系人并将其关联到客户。
仅使用地址类型来选择默认项 明确设置首选账单和发货标志。
假设主要联系人是唯一的联系人 保留所有相关联系人的关联,并根据每笔交易选择适当的联系人。
在默认项更改后编辑已提交的文档 在未来的文档中使用新的默认项。已提交的文档保留其记录的详细信息。

常见问题解答

一个客户可以有多个联系人和地址吗?

的。这是拥有多名员工、多个办公室、仓库或交货地点的组织的常见设置。

联系人或地址可以没有客户而存在吗?

的。两者都可以独立存在,并在之后进行关联。

同一个联系人可以关联到多个客户吗?

是的,当该联系人确实代表多个主体时。请仔细检查主要设置,因为它属于联系人记录。

用户可以覆盖主要选择吗?

的。主要和首选记录提供默认值。用户可以为特定交易选择其他符合条件的关联记录。

  • 客户
  • 联系人
  • 地址
  • 地址模板
  • 潜在客户、联系人和客户之间的区别

工作流过渡任务

注意:将在版本 16 中添加

简介

工作流转换任务是在工作流的状态转换期间可以执行的操作。每个工作流转换可以链接到一组转换任务。

每个工作流转换任务可以包含以下类型的任务:

  1. 应用定义的操作(由每个 Frappe 应用通过 hooks.py 指定)
  2. 服务器脚本
  3. Webhooks

除此之外,每个转换任务可以是以下两种模式之一:

  1. 同步:这是转换任务的默认模式。当状态转换启动时,所有转换任务会逐个运行。即使其中一个任务失败,转换也会被撤销。
  2. 异步:可以通过勾选“异步”复选框来启用此模式。每个异步转换任务在状态转换完成后运行,这意味着它对状态完成没有影响,并且会在单独的后台作业中独立运行。

应用定义的操作

每个 Frappe 应用通过 ‘workflow_methods’ 钩子来定义它们。

通过 workflow_methods 钩子定义的任何点分路径方法必须接受 doc: Document 作为参数,该参数是正在应用转换的文档。

应用定义的任务示例如下:

# hooks.py
workflow_methods = [{"name": "Create a customer", "method":
                     "myapp.shop.doctype.kirana.create_customer"}]

# myapp/shop/doctype/kirana.py
def create_customer(doc):
    customer = frappe.new_doc("Customer")
    customer.customer_name = "Customer " + doc.name
    customer.customer_type = "Individual"

    customer.save()

如果任何应用提供了这些任务,它们将出现在“任务”下拉菜单中。

如果您是最终用户,您无法自行创建应用定义的操作,必须使用下面提到的服务器脚本。

服务器脚本

这些脚本也接受 doc: Document 参数,并且可以使用“工作流任务”脚本类型进行设置。

然后,这些脚本必须在转换任务中进行链接:

Webhooks

可以通过将 Webhook 的“文档事件”字段设置为 ‘workflow_transition’ 来创建它们:

然后,这些 Webhook 必须在转换任务中进行链接:

  • 工作流状态
  • 工作流操作
  • 工作流

工作流操作

版本 11 中引入

“工作流操作”是一个集中位置,您可以在此跟踪和管理所有需要在工作流上执行的待处理操作。

仅当您创建的工作流中勾选了“发送邮件提醒”复选框时,工作流操作才会发送邮件通知。

要访问工作流操作,请前往:

首页 > 设置 > 工作流操作

如果用户有资格对某些工作流执行操作,系统将向该用户发送包含相关文档附件的邮件。用户可以从邮件中 ApproveReject 该工作流。

此外,用户还会在其工作流操作列表中看到相应条目:

注意:

  • 您可以为每个状态下的工作流操作设置邮件模板。该模板可能包含一条消息,提示用户继续执行下一步工作流操作。
  • 对于过渡到可选状态的情况,不会创建工作流操作。
  1. 工作流
  2. 分配规则