ERP5 手册/入门
待办事项:需要专家校对和扩展。
ERP 代表企业资源规划
(FIXME:"ERP 系统" 做了什么?你能用一句话概括吗?)
(FIXME:什么样的人会使用 ERP?)
(FIXME:改写这令人费解的英语...)
ERP 系统相当复杂 - 它们必须尽可能地实现公司的业务逻辑。ERP5 与其他 ERP 系统(开源和闭源)的区别在于其从最低 - 理论 - 层面的连贯性。它基于一个完善的理论模型,要理解 ERP5 的关键概念,就需要简要地理解这个模型。当然,也需要对技术方面有基本的了解。
ERP5 定义了业务管理的抽象模型。得益于干净的抽象层,可以以一致的方式实现新的或专门的业务模块。这种抽象的业务模型既可以用于表示内部管理活动,也可以用于表示跨公司群体的商业和管理活动。
ERP5 抽象模型基于 5 类
- 资源:资源描述了业务流程中的抽象资源(例如,个人的技能、货币、原材料、产品)。节点之间的关系允许定义 BOM(基本对象模型)以及原型。
- 节点:节点是一个可以接收资源量并发送资源量的地方。节点可以与物理实体相关联(例如,接收原材料、加工并发送原材料的工厂)或抽象实体(例如,可以接收资金的银行账户)。库存是一种节点。元节点是包含其他节点的节点。公司是一个元节点。项目既是资源又是节点。
- 移动:移动描述了在给定时间和给定持续时间内资源量在两个节点之间移动。例如,移动可以将原材料从库存发送到工厂,另一个移动可以将资金从一个账户发送到另一个账户。
- 路径:路径允许定义节点访问其最终可能需要的资源的方式。价格和商业配置文件可以附加到路径,以定义从给定制造商处采购的给定资源的默认价格。路径还可以定义工厂从库存获取资源的方式。路径有开始日期和结束日期。路径可以用来表示个人分配给临时项目的分配。
- 项目:项目描述了资源的物理实例。移动可以扩展为一系列可追踪的项目移动。项目还可以定义如何实际运送给定数量的资源(例如,包裹、每个集装箱中物品的序列号等)。
这五类足以代表从化工厂到制造、贸易或服务的各种业务,并且可以模拟组织中发生的一切。例如
- 销售商品是指以给定价格(路径)将一定数量的产品(资源)从我们的公司(节点)移动到买方(节点)。
- 会计分录是指在两个账户(节点)之间移动一些资金(资源)。
- 电话是员工时间(资源)在两个通话者之间的移动。
- 培训是指从无处(意外!)到受训者的技能(资源)的移动。
这听起来很抽象,但这也正是它如此强大的原因......
用这种方式对现实进行建模,我们使用相同的属性来描述非常不同的东西:每个移动都有其源和目的地,以及一些变化(例如,在销售交易中,源是货物出货的物理位置,而源部分是销售货物的拥有者)。我们可以使用标准的、优化的 API 来计算结果。
关键问题始终是:我们有多少(这或那)。在这个模型中,节点并没有真正的“内容”;当我们想知道仓库中有多少货物,或者账户上有多少金额,或者我们的支持人员花多少时间接听电话时,我们会将所有传入和传出节点的移动量加起来。为此,我们使用一个标准的“getInventory”方法,它可以满足所有这类目的。
仿真功能是 ERP5 最强大的功能之一,尽管它们完全隐藏在用户面前。其理念是,那些应该对未来产生影响 - 或者换句话说,那些将导致其他移动的移动 - 会配备所谓的“规则”,这些规则用于生成“仿真移动”,而仿真移动又可以有自己的规则并生成进一步的仿真移动,从而“模拟”我们业务的未来。当未来变成现在,是时候创建真正的移动时,我们使用仿真移动来检查什么,多少,为谁等等。
最好用一个例子来解释:如果我们接受销售订单,我们知道我们迟早会发货;一旦发货,我们就会想要开票;一旦开票,我们就会收到货款。因此,销售订单被分解成几行,每行代表一种产品的交付,每行都会生成一个代表发货的仿真移动。发货然后生成模拟的发票行,等等。
这样做的益处是双重的
- 一旦我们接受了订单,我们就可以直接从系统中获得财务预测。
- 当我们开始打包时,我们可以以任何我们喜欢的方式汇总订单 - 我们不必按订单打包,而是可以为每条产品线生成一个单独的打包清单,或者将同一个客户的所有订单合并到一个大的清单中,甚至可以同时进行 - 例如,为同一个客户在上个月订购的相同产品线的产品创建单独的打包清单。关键是为我们的 ERP5 配备适当配置的“构建器”来完成这项工作。
在 ERP5 中,所有对象都被放入 ZODB(Zope 对象数据库)中,并且它们在 SQL 数据库(在 MySQL RDBMS 上运行)中被索引。这种做法可以实现快速的对象搜索和访问,另一方面也可以方便地操作对象。
报表允许用户生成模块中存储数据的摘要和规范。报表可以以两种形式生成:OpenOffice.org 文档或PDF 表格。
报表与特定模块相关联。如果该模块定义了任何报表,则在标准模块视图表单上,在包含该模块数据的列表框中,报表图标将出现在工具栏中。(如果没有数据,图标仍然会显示 :))
虽然报表以这种方式与模块相关联,并且人们期望找到与模块相关的数据,但实际上它们可能包含任何类型的数据。
创建报表的详细指南可以在 ERP5 Wiki 页面上找到,包括 OpenOffice 报表 和 PDF 报表。 还有一个关于 如何将创建的报表添加到 ERP5 站点 的指南。
ERP 系统逻辑可能非常复杂 - 任何脚本都可以附加到系统中的任何对象。在负载过重的系统上,服务器资源可能会过载。这种方法的优势在于,顾问或应用程序管理员可能希望能够逐个设置一些脚本,或者选择一些特殊条件,这些条件将在调用某些操作之前发生。
ERP5 提供了一个内置的后台进程调用系统,称为CMFActivity。借助此系统,可以优先处理资源密集型任务并将其放到后台。它们将以任何所需的顺序,一次一个地被调用,这样机器的资源就不会被过度使用。在调用这些任务后,在与该对象直接相关的对象的界面上会出现一个图标,通知用户该对象正在等待一个待处理的活动进行处理。
在配置正确的系统上,CMFActivity可以发送有关任务失败的消息。开发人员和顾问能够附加一个特殊的控制台(从 Zope,甚至从系统 shell)来观察、取消或强制执行活动。
从技术意义上讲,每个放入活动的 tasks 都是 SQL 表中的一行。这里描述了每个对象的活动将运行什么,活动是什么以及其他属性。CMFActivity支持任务队列的集群和负载均衡。
关于深入的后台进程调用的描述,请参见 ERP5 wiki 页面 HowToUseTheCmfActivityTool.
ERP5 系统基于类别,用于定义系统中对象的分类和描述性关系。
类别可以通过 Zope 界面访问和配置。为此,请访问
[your_site]/portal_categories
(用户“zope”可以从左上角的“我的收藏夹”下拉菜单中访问)
你会看到一个很长的“基本类别”列表。点击其中的任何一个,你会看到它有很多字段,你目前不需要了解它们。在“操作”下拉菜单下,有一个选项可以创建子类别。然后可以创建子子类别,并为每个子子类别创建子子子类别,以此类推,无限循环。
一些基本类别(地区、站点、组、职能、技能……)用于分类,因此您可以在其中构建树结构;另一些(来源、目的地、从属关系……)用于设置对象之间的关系,它们不需要任何子类别。
系统使用特殊的访问器访问类别,这使得类别可翻译。
通过在给定的基本类别中定义树结构,顾问可以设置所需的深度的分类。分类类别的例子有
- 地区 - 用于说明人员居住地或组织的总部所在地
- 技能 - 用于说明谁可以做什么
- 数量单位 - 用于定义资源的数量单位
- 交付方式 - 用于描述订单的运输方式
- 间隙 - 用于一般会计计划
ERP5 中这种类别机制的妙处在于,您可以根据自己的需要将一个对象分配给一个或多个类别,并且“类别成员资格”的概念一直延伸到基本类别树的顶端(这意味着,如果一个对象属于类别“a/b/c”,那么它也属于类别“a/b”和“a”。这样,您可以设置一个类别树
skill/dance skill/dance/latino skill/dance/latino/samba skill/dance/latino/salsa skill/dance/latino/rumba skill/dance/classic skill/dance/classic/waltz skill/dance/classic/tango skill/dance/ballet skill/coding/c
然后将人员分配到类别
- Joan
- skill/dance/latino/samba
- skill/dance/classic/tango
- Mary
- skill/dance/latino
- Paul
- skill/dance/ballet
- Peter
- skill/coding/c
现在,如果您询问系统谁可以跳桑巴舞 - 您会得到 Joan,拉丁美洲 - 您会得到 Mary 和 Joan,古典/探戈 - Joan,古典 - Joan 也是;询问谁可以跳任何舞 - 您会得到 Mary、Joan 和 Paul;如果您想知道谁完全不会跳舞,您也可以得到答案。所有这些都是通过使用自动生成的访问器方法完成的,无需任何麻烦。
要查看实际效果,请转到“人员”模块并打开该模块列表框的“域树”模式;从下拉列表中选择“技能”,然后您可以浏览您的舞蹈资源。
如果您计划开办舞蹈学校,那么该系统非常适合您。
请查看 了解列表框 部分,了解更多详细信息和一些屏幕截图。
与分类使用相反,一些类别用于关系系统。假设我们有一个组织对象ACME和一个销售订单对象SO-1。我们可以使用来源类别来定义SO-1和ACME之间的关系。销售系统是这样实现的,来源类别意味着商品将从ACME发送。
最常用的关系类别有
- 来源
- 来源部分
- 目的地
- 目的地部分
- 父级
有关使用关系的详细说明,请参见此处:http://wiki.erp5.org/HowToConfigureRelationField
TODO: How reader shall identify distinction between categories in portal_categories?
工作流程是 ERP5 的关键概念之一。它们在所有地方使用,用于所有事情。它们之所以如此重要,是因为工作流程代表一个流程 - 而业务中完成的所有事情都是流程。工作流程可以表示任何流程,例如,编辑和发布文章、招聘人员、接收和处理销售订单、记账等。
- 状态和转换
当一个对象由工作流程管理时,这意味着它受此工作流程代表的流程的约束。一个流程由一些状态和状态之间的转换组成,可以用图形很好地表示出来,其中方框表示状态,箭头表示转换。工作流程有一个初始状态,对象在创建时就会进入这个状态。如果进行了转换,它会将状态更改为该转换的目标状态。然后可以进行另一次转换,以此类推,直到对象到达没有更多转换的状态。
ERP5 标准界面在主表单中显示对象的“工作流程状态”,并在“操作”下拉列表中显示可用的转换。
- 安全性
工作流程执行的一个重要操作是管理对象的访问权限。例如,处于“草稿”状态的文章应该只对作者(读写)可见,而“已发布”的文章应该对所有人可见,但不能由任何人编辑。可以为每个工作流程状态分别定义和设置访问权限。
- 条件
转换只能对在系统中具有某些权限的用户可用 - 例如,您必须是“主编”才能发布文章。如果您不是,那么您的操作框中将不会出现“发布”操作。转换也可以依赖于其他对象属性 - 只有包含一些文本的文章才能提交发表,只有当贷方和借方相等时,记账条目才能确认。
- 副作用
工作流程转换可以有“副作用” - 在进行转换时要执行的操作。按照我们的发布工作流程,当文档被发布时,系统可以向所有订阅者发送电子邮件通知。一个更面向业务的例子是,当确认销售订单时,系统会生成一张计划发票。
- 交互工作流程
这是一种不同类型的流程 - 它没有状态,也没有转换。相反,它有“交互”,当对对象执行某个操作时触发。交互式流程基本上是实现副作用更干净、更便携的方式 - 如果我们希望在发布文档时发送通知,可以通过调整发布流程来实现,但我们也可以添加一个交互式流程,并将其中的“发送通知”交互与发布流程的“发布”操作挂钩。
- 编辑流程
这是一个特殊流程,它与 ERP5 中几乎所有对象都挂钩。它比较独特,因为它只有一个状态 - “当前” - 以及一个返回到同一状态的转换。每次编辑对象时都会执行此转换;该流程的唯一目的是记录对象的更改历史。
有关详细说明和技术信息,请参见 http://wiki.erp5.org/HowToUseAndDefineWorkflows。
请参考这篇文章
http://wiki.erp5.org/HowToDesignSecurity
了解有关如何为 ERP5 应用程序设计安全性的指南,并参考此
http://wiki.erp5.org/HowTo/HowToUseNewSecurity
了解如何实现。