OpenERP 应用和开发基础(1-5)


OpenERP 应用和开发基础 (0.2 版) 作者:老肖 msn: saiwai76@hotmail.com mail: xiangfu.xiao@gmail.com QQ: 1417063315 更新日期: 2010 年 1 月,完成 0.1 版,即第六至第十章内容 2010 年 3 月,完成 0.2 版,即第一至第五章内容 2010 年 4 月,全面修订后全文发布 目录 第一章 OpenERP 介绍 ...................................................................................................................................... 1 第一节 OpenERP 的历史 .......................................................................................................................... 1 第二节 OpenERP 的架构 .......................................................................................................................... 2 一、 OpenERP 应用系统架构 .......................................................................................................... 2 二、 OpenERP 应用服务器架构 ...................................................................................................... 3 三、 PostgreSQL 数据库简介........................................................................................................... 3 第三节 OpenERP 功能和应用简介 .......................................................................................................... 4 一、 OpenERP 功能模块 .................................................................................................................. 4 二、 OpenERP 的用户群 .................................................................................................................. 7 第四节 OpenERP 开发简介 ...................................................................................................................... 7 一、 数据访问功能开发 ................................................................................................................... 7 二、 工作流和报表开发 ................................................................................................................... 9 第五节 为什么选择 OpenERP ................................................................................................................ 12 第二章 进销存业务概述 ................................................................................................................................. 14 第一节 采购业务概述 ............................................................................................................................. 14 第二节 销售业务概述 ............................................................................................................................. 15 第三节 采购、销售的财务处理 ............................................................................................................. 16 第四节 仓库管理业务概述 ..................................................................................................................... 18 第三章 OpenERP 基础业务设置 .................................................................................................................... 19 第一节 业务伙伴信息设置 ..................................................................................................................... 19 一、 理解业务伙伴 ......................................................................................................................... 19 二、 业务伙伴联系信息 ................................................................................................................. 20 三、 业务伙伴购销信息 ................................................................................................................. 21 四、 业务伙伴事件 ......................................................................................................................... 22 五、 业务伙伴财务信息 ................................................................................................................. 22 第二节 产品信息设置 ............................................................................................................................. 23 一、 产品模块配置 ......................................................................................................................... 23 二、 产品一般信息 ......................................................................................................................... 26 三、 产品供应和仓储信息 ............................................................................................................. 27 四、 产品价格和供应商信息 ......................................................................................................... 28 五、 产品描述和包装 ..................................................................................................................... 29 六、 产品财务信息 ......................................................................................................................... 30 第三节 财务数据设置 ............................................................................................................................. 30 一、 会计年度设置 ......................................................................................................................... 31 二、 会计科目表设置 ..................................................................................................................... 31 三、 分类账(Journal)设置.......................................................................................................... 33 四、 税种设置 ................................................................................................................................. 34 第四节 库存信息设置 ............................................................................................................................. 36 一、 理解 OpenERP 的库存管理 ................................................................................................... 36 二、 库位和仓库设置 ..................................................................................................................... 37 三、 设置最小库存规则 ................................................................................................................. 38 四、 库存移动(stock_move) ...................................................................................................... 39 五、 装箱单(Packing List) ......................................................................................................... 40 六、 库存盘点 ................................................................................................................................. 41 第四章 进销存案例实施 ................................................................................................................................. 42 第一节 模块安装 ..................................................................................................................................... 42 第二节 财务数据设置 ............................................................................................................................. 44 一、 设置会计科目表 ..................................................................................................................... 44 二、 设置分类账(Journal)和税种.............................................................................................. 46 第三节 业务伙伴和产品信息设置 ......................................................................................................... 47 第四节 采购业务测试 ............................................................................................................................. 47 一、 采购订单 ................................................................................................................................. 47 二、 采购财务处理 ......................................................................................................................... 49 三、 采购付款 ................................................................................................................................. 51 四、 采购入库处理 ......................................................................................................................... 52 第五节 销售业务测试 ............................................................................................................................. 53 一、 销售订单 ................................................................................................................................. 53 二、 销售订单财务处理 ................................................................................................................. 56 三、 销售出库处理 ......................................................................................................................... 58 第六节 财务报表确认 ............................................................................................................................. 58 第五章 OpenERP 数据导出和导入 ................................................................................................................ 60 第一节 数据库备份和恢复 ..................................................................................................................... 60 第二节 CSV 数据导出导入..................................................................................................................... 60 一、 数据导出 ................................................................................................................................. 61 二、 数据导入 ................................................................................................................................. 62 第三节 会计科目数据导入 ..................................................................................................................... 64 一、 科目类型导入 ......................................................................................................................... 64 二、 会计科目导入 ......................................................................................................................... 65 第四节 XML 数据导入导出 ................................................................................................................... 68 一、 XML 数据导入 ....................................................................................................................... 68 二、 XML 数据导出 ....................................................................................................................... 69 第五节 PostgreSQL 数据库数据导出导入............................................................................................. 69 第六章 OpenERP 开发入门 ............................................................................................................................ 72 第一节 基本概念 ..................................................................................................................................... 72 第二节 实例演练 ..................................................................................................................................... 74 一、 创建请假单对象 ..................................................................................................................... 74 二、 创建视图 ................................................................................................................................. 75 三、 创建菜单和系统动作(Action)........................................................................................... 77 四、 测试 ......................................................................................................................................... 79 五、 视图编辑器 ............................................................................................................................. 80 第三节 深入数据库 ................................................................................................................................. 81 第七章 OpenERP 的工作流开发 .................................................................................................................... 84 第一节 理解工作流(Workflow) ......................................................................................................... 84 第二节 实作工作流 ................................................................................................................................. 85 一、 修改对象和视图 ..................................................................................................................... 85 二、 创建工作流、活动和迁移 ..................................................................................................... 87 三、 测试工作流 ............................................................................................................................. 91 第三节 复杂工作流实例分析 ................................................................................................................. 91 第四节 企业流程(Enterprise Process) ..................................................................................................... 93 第八章 OpenERP 的报表开发 ........................................................................................................................ 96 第一节 OpenERP 报表开发的预备知识 ................................................................................................ 96 一、 报表开发工具 ......................................................................................................................... 96 二、 XSL 简介................................................................................................................................. 97 第二节 OpenERP 报表简介 .................................................................................................................... 98 一、 基于 sxw 或 odt 模板的报表.................................................................................................. 98 二、 基于 xsl+xml 模板的报表 ...................................................................................................... 99 第三节 报表中文化解决方法 ............................................................................................................... 100 一、 让报表显示汉字 ................................................................................................................... 100 二、 让报表说中文 ....................................................................................................................... 101 第四节 实作报表 ................................................................................................................................... 101 一、 编写 RML 文件..................................................................................................................... 101 二、 编写报表对象代码及 XML 文件......................................................................................... 102 三、 测试 ....................................................................................................................................... 103 第九章 OpenERP 的权限设置 ...................................................................................................................... 105 第一节 OpenERP 权限机制简介 .......................................................................................................... 105 第二节 组的权限设置方法 ................................................................................................................... 106 第三节 OpenERP 的预设权限组(Group).............................................................................................. 108 第四节 Domain 条件表达式 ................................................................................................................. 109 一、 Domain 条件表达式的应用场合.......................................................................................... 109 二、 Domain 条件表达式写法.......................................................................................................111 第十章 OpenERP 翻译方法 .......................................................................................................................... 112 第一节 资源术语翻译 ........................................................................................................................... 112 第二节 通用术语翻译 ........................................................................................................................... 114 第三节 批量翻译或纠正翻译 ............................................................................................................... 115 第四节 OpenERP 国际化原理浅析 ...................................................................................................... 118 第十一章 OpenERP 模块开发 ...................................................................................................................... 120 第一节 OpenERP 模块结构 .................................................................................................................. 120 一、 安装示例代码 ....................................................................................................................... 120 二、 请假模块结构 ....................................................................................................................... 121 第二节 理解 OpenERP 的代码 ............................................................................................................. 122 一、 对象定义 ............................................................................................................................... 122 二、 视图、动作及菜单定义 ....................................................................................................... 124 三、 工作流和报表定义 ............................................................................................................... 125 四、 权限定义 ............................................................................................................................... 125 第三节 服务端动作(Server Action)....................................................................................................... 125 一、 配置 Server Action ................................................................................................................ 125 二、 配置 OpenERP Mail.............................................................................................................. 126 三、 测试通知 Mail....................................................................................................................... 127 四、 更多 Server Action ................................................................................................................ 128 第十二章 超强的继承功能 ........................................................................................................................... 130 第十三章 基于 XML-RPC 的集成................................................................................................................ 130 OpenERP 应用和开发基础 1 第一章 OpenERP 介绍 OpenERP 是一款基于 Python 语言的开源 ERP 和 CRM 软件。它和 Java 软件一样,是跨平台的,而且, 同时支持 C/S 和 B/S 两种架构形式。在官方标准发布版中有 100 多个模块。涵盖财务管理、采购/销售管理、 库存管理、MRP、CRM、人力资源管理、销售点管理、项目管理等众多功能。在 OpenERP 的开源社区上, 目前有超过 500 个由开源社区贡献的模块,涵盖各个行业的管理解决方案。 本章将先介绍 OpenERP 的历史,其次介绍 OpenERP 的功能概要,而后介绍 OpenERP 的架构和开发 概要,最后介绍 OpenERP 和别的 ERP 软件的比较。 第一节 OpenERP 的历史 OpenERP 由比利时的“比尔x盖茨”Fabien Pinckaers 所创建。Fabien Pinckaers 现年 30 岁,他 13 岁开 始学习编程序,2002 年当他还在 Louvain-la-Neuve 大学土木工程系学习时,创办了 Tiny Sprl 公司。Tiny Sprl 公司总部位于有 150 年历史的比利时城市 Louvain 的近郊,那里有比利时最大的计算机学院,法语鲁文大 学(Catholic)计算机系。下图为 Fabien Pinckaers 的近照,旁边的白色房子即为 Tiny SPRL 公司的总部。 Tiny Sprl 公司的第一个产品就是开发 Tiny ERP,即后来的 OpenERP。OpenERP 最初由 Fabien Pinckaers 一个人开发,现在,截至 2009 年底,Tiny Sprl 公司有 75 名专职开发人员。官方发布的标准功能模块超过 100 个,由开源社区 Open Object Community 提供的功能模块超过 500 个。OpenERP 的功能涵盖财务管理、 采购/销售管理、库存管理、MRP、CRM、人力资源管理、销售点管理、项目管理等众多方面。OpenERP 已经不仅仅是一个 ERP 软件,而是涵盖各个行业的、非常容易定制化的全面管理解决方案。OpenERP 的 核心和所有模块都是开放源代码的,你可以自由使用、修改和发布,只要你也保证开源即可。 现在,截至 2009 年底,OpenERP 的用户群遍及 45 个国家,每天的下载量超过 1000 份。始于 2008 年的金融危机,各公司都开始考虑低成本的管理软件,给 Tiny SPRL 公司极大机遇。2009 年上半年开始, Tiny SPRL 公司的每个月的盈利以 10%以上的速度增长。2009 年上半年,公司盈利 60 万欧元。2009 年底, 公司获得 300 万欧元风投融资,结合自身资金,公司预计 2010 年投入 400 万欧元扩张规模。商业杂志趋 势(Trends)预估,Tiny Sprl 公司的获利将在 2011 年攀至 1050 万欧元。 中国 OpenERP 社区,从 2007 年开始介绍 OpenERP 到中国,主要论坛在这里:http://www.shine-it.net/ 。 目前中国 OpenERP 社区已经完成了 OpenERP 主要模块的中文翻译工作,完成了报表的汉化,翻译了大部 分的用户手册。工作成果参看这里,HornERP 开源项目:http://code.google.com/p/hornerp/ 。 OpenERP 应用和开发基础 2 第二节 OpenERP 的架构 一、 OpenERP 应用系统架构 OpenERP 应用系统,大的来说,分成三层,即数据库服务器、应用服务器、客户端。 x 数据库服务器,OpenERP 采用开源数据库服务器,PostgreSQL database server。数据库服务器存 放所有业务数据和绝大部分配置数据。OpenERP 的配置数据和一般说的软件配置数据不同,如 用户界面显示,每个界面上要显示什么对象的哪个字段,按什么风格显示,在 OpenERP 也是配 置数据。在 OpenERP 中,用户界面不是通过 HTML 或其他程序代码生成,而是直接存放在数据 库中。运行时直接从数据库中提取数据,渲染成你看到的界面。 x OpenERP 应用服务器,应用服务包含所有业务逻辑代码。包括最简单的 CRUD 代码,以及复杂 的查询条件等。业务逻辑由各业务对象实现,你可以通过远程调用(Net-RPC 或 XML-RPC)直 接调用对象的方法。如大多数业务对象都有 CRUD 四个方法,你可以远程调用对象的 CRUD 方 法,从而实现数据库访问。 x GUI-Client,这是一个客户端,直接连接在应用服务器上。OpenERP 官方提供的 GUI-Client 是 GTK-Client,即基于 GTK(Graphics Tools Kit)图形界面工具包开发的界面软件。开源社区也有人 在开发基于 QT 图形界面工具包的客户端软件。OpenERP 的客户端不含任何业务逻辑代码,也不 包含任何界面代码,即所谓的“瘦客户端”。OpenERP 的 Client 的功能是,通过调用 OpenERP 应用服务器的各对象的方法,从数据库中取得界面数据(XML 格式定义的界面),以及业务数据, 合并二者,渲染成用户界面,在屏幕上显示出来。GUI-Client 是将界面渲染成通常的窗口界面风 格,和 Java 或.Net 编写的界面程序类似。 x Web-Client,这也是一个客户端,不同的是,它把来自数据库的界面和业务数据渲染成 HTML 格式的网页形式,因此你可以通过 IE、Firefox 等浏览器访问。 OpenERP 应用和开发基础 3 从这个架构图可以看到,还可以把 Web-Client(从用户角度看,其实是 Web-Server)和 Appache HTTP Server 集成,从而为 Internet 用户提供 Https 的安全访问模式。当需要合作伙伴访问公司的部分数据时,这 个功能很有用。 二、 OpenERP 应用服务器架构 OpenERP 技术上最闻名的恐怕是它的灵活的模块化设计了。它整个应用服务器由松散的模块构成,模 块间的耦合度非常低。怎样松散耦合,是软件设计中的一个困难问题,OpenERP 这点在 ERP 软件中做的 最好。 OpenERP 的应用服务器有这么几部分构成: x ORM,Object Relation Mapping,负责数据对象到数据库的访问。在 OpenERP 的业务对象中,你不必 写一行数据库访问代码,就自动具备 CRUD 的数据库访问功能。 x BMD,Base Module Distribution,是一个基础模块,必不可少。其他模块,你可以自己任意添加,开 源社区有超过 500 个以上的可用模块。 x Report Engine,负责生成各种报表。目前支持的报表格式有 PDF,OpenOffice,HTML 三种。 x Workflow Engine,工作流引擎。支持任意复杂度的工作流,OE 的工作流使用 XML 格式文件定义, 目前也提供简单的图形化工作流编辑工具。 x WebService,提供网络调用接口。目前支持 Net-RPC、XML-RPC 两种。 关于 OpenERP 核心对象结构,请参考这里 http://doc.openerp.com/_images/pom_3_0_3.png 三、 PostgreSQL 数据库简介 PostgreSQL 是以加州大学伯克利分校计算机系开发的 POSTGRES,版 本 4.2 为基础的对象关系型数据 库管理系统(ORDBMS)。PostgreSQL 被公认为世界上最先进的开放源码的数据库系统,它的许多领先的 概念,在晚了好些年后,陆续出现在商业数据库中。PostgreSQL 目前最新的版本是 2009 年 12 月份发布的 8.4.2,它的官方网站在这里:http://www.postgresql.org/ 。 POSTGRES 开发始于 1986 年,它是由加州大学伯克利分校 Michael Stonebraker 领导的,由美国防务 高级研究项目局(DARPA),美国陆军研究办公室(ARO),美国国家科学基金(NSF),以及 ESL, Inc 共 同赞助的数据库研究项目。POSTGRES 1987 年发布了第一个演示版,并且在 1988 年的 ACM-SIGMOD 大 OpenERP 应用和开发基础 4 会上展出。1989 年 6 月发布了版本 1 给一些外部用户使用。为了回应用户对第一版规则系统的批评,作者 重新设计了规则系统,并于 1990 年 6 月发布了使用新规则系统的版本 2。版本 3 于 1991 年发布,增加了 多存储管理器的支持,并且改进了查询执行器,重写了规则系统。从那以后,随后的版本直到 Postgres95 发 布前工作都集中在移植性和可靠性上。1993 年,随着用户数的成倍增涨,Postres 数据库的支持成本越来越 大,项目组在发布了 Postres4.2 后终止了项目。 POSTGRES 发布后在许多研究、生产系统中得到了应用。财务数据分析系统,喷气引擎性能监控软件 包,小行星跟踪数据库,医疗信息数据库和一些地理信息系统。POSTGRES 还被许多大学用于教学用途。 后来,Illustra Information Technologies Illustra Information Technologies (后来并入 Informix,后者现在被 IBM 收购了)拿到代码并使之商业化,发布了 Informix 数据库。 1994 年,Andrew Yu 和 Jolly Chen 向 POSTGRES 中增加了 SQL 语言解释器,并优化了全体代码。随 后以 Postgres95 的版本号、以开放源码的形式发布到互联网上供大家使用。Postgres95 所有源代码都是完 全的 ANSI C。和 Postres4.2 相比,Postgres95 代码量减少了 25%,修正了许多错误,大幅提高了代码性能 和代码维护性。Postgres95 版本 1.0.x 进行 Wisconsin Benchmark 测试时大概比 POSTGRES 4.2 快 30-50%。 1996 年,Postgres95 改名为 PostgreSQL,版本定为 6.0。今天,PostgreSQL 的最新版本是 8.4.2。下面 列出一些有公开报道的使用 PostgreSQL 数据库的机构。 x Affymetrix:(www.affymetrix.com),一个生物技术研究公司,为基因研究工业提供艺术级的研究工具, 在他们的 Transcriptome 项目中用 PostgreSQL 存储那些从高密度 GeneChip 序列中生成的海量 RNA 表达实验。 x Afilias:(www.nic.info),一个域名注册提供商,目前管理互联网上新发布的第一个扩展 .INFO。它是 一个位于爱尔兰的公司,管理着超过 900,000 个域名以及超过一千万条记录,这些数据都是存放在以 PostgreSQL 为后端的数据库中。 x BASF:(www.basf.com),巴斯福,世界上最大的化工公司,使用 PostgreSQL 为他们的美国农业综合 业的电子商务网站存储数据。 x Cognitivity:(http://www.cognitivity.com/),在线学习提供商,它们使用 PostgreSQL 用于他们的表现软 件和管理软件。 x Journyx:(http://www.journyx.com),世界公认的基于 web 的时间和开销跟踪的服务商,拥有超过一百 万最终用户。他们将 PostgreSQL 用于他们所有 unix 平台上的内部数据库操作(Linux, BSD, AIX, Solaris, 以及很快还有 MacOS X)。 x Royal,现代 Royal 打字机公司,他们的在线电子商务网站什么东西都用 PostgreSQL 存储。 x The American Chemical Society,美国化学社区,(www.acs.org),世界上最大的专业化学组织,拥有 超过 165,000 个成员,以及一个每天有超过一千二百万人访问的网站。他们的刊物档案馆存储了 125 年的所有出版物(两千五百万页,超过 1T 的数据),用的是 PostgreSQL。(目前已知 PostgreSQL 最大 的数据库)。 x Tsutaya,日本最大的视频节目租赁连锁店,用 PostgreSQL 存储他们超过几个 G,几百万条记录的数 据,以及做他们的商业信息数据库。 第三节 OpenERP 功能和应用简介 一、 OpenERP 功能模块 OpenERP 目前的功能模块很多,详细参考这里:http://www.openerp.com/discover/features.html。摘录部 分如下: Enterprise Modules(企业管理模块) * Sales * Purchase OpenERP 应用和开发基础 5 * Services Management * Invoicing * Point of Sales Logistics(物料管理) * Warehouse Management * Shipping Management * Manufacturing * Quality & Repairs * Products and pricelists Accounting & Finance(财务管理) * Accounting * Analytic Accounting * Budgets * Payments Management * Asset Management * Bank interfaces Human Resources(人力资源管理) * Expenses * Skills Management * Holidays * Attendances CRM & SRM(客户和供应商关系管理) * Customer Relationship Mgt. * Mail Gateway * Portals * Direct Marketing * Phone Calls Project Management(项目管理) * Operational Management * Financial Management * Timesheets Daily Productivity(日常工作管理) * Integrated DMS * Outlook/Thunderbird * Getting Things Done * Calendars Efficient Communication(沟通工具) * Wiki * Webmail OpenERP 应用和开发基础 6 * Dashboards * Alerts Business Process Management(业务流程管理) * End-User Processes * Workflow Engine Association Management * Membership * Events Organization * Fund Raising IT Companies(IT 公司管理工具) * Bug Tracker * Scrum Methodology Fully Customizable(灵活的定制化功能) * Report Designer * View Editor * Workflow Editor * Configurable Actions Ergonomy * Web & Application Interfaces * Gantt & Calendars * Dynamic Graphs * Integrated Documentation Flexible * Modules System * Web-Services eCommerce * Integrated eCommerce * EDI Business Intelligence * Olap Database * Cube Designer * Data Browser Miscelleanous Tools * Networks * Ideas * Lunch * Voip OpenERP 应用和开发基础 7 二、 OpenERP 的用户群 根据 OpenERP 总部掌握的信息,有据可查的正在使用 OpenERP 的机构超过 250 个,遍布 20 多个国 家。根据公开报道,有下面一些著名机构正在使用 OpenERP。 x 法国国家行政学校(简称 ENA),孕育法国政治精英与大企业 CEO 的摇篮。从这所学校诞生了两位法 国总统,分别是希拉克和德斯坦。ENA 委托 Bull 公司经过详细的市场研究后,选择了 OpenERP 作为 学校的全面管理系统。该管理系统,包括实施 OpenERP 现成功能、定制化开发、和原来系统的集成 接口开发,历经 3 年完成。系统用户数 1500 人。 x 比利时商会(CCI,Chambers of Commerce and Industry of Belgium),CCI 在比较了 SAP、Navision 后, 看中了 OpenERP 无需编程就能实现极其灵活的模块化和个性化配置,从而选择 OpenERP。它们特别 看中 OpenERP 的工作流编辑器,视图编辑器,对象编辑器和 Action 编辑器。CCI 实施了成员管理、 分支机构管理、事件和培训管理等 13 个模块。项目历时 1 年,用户数 70。 x 卢森堡银行培训机构(IFBL, Institut de Formation Bancaire Luxembourg), 经历过两个集成项目的失败 后,他们选择了 OpenERP,用于计划和培训管理。系统历时 1 年完成,用户数有,培训总部 40 人, 银行各分支机构用户约 1000 人。 x Medical,medical 是一个基于 OpenERP 平台开发的医院管理信息系统(HIS)和电子病例系统(EMR) 的开源项目,目前已经在阿根廷等国家医院使用。详细信息参考这里:http://medical.sourceforge.net/ 。 中国的 OpenERP 用户群,笔者所掌握的有: x 上海某二甲医院,该医院选用 OpenERP 进行 1000 多种物料和医用耗材的库存及科室领用管理。利用 OpenERP 现成的产品、库存、部门、人员等管理功能,自己开发了领料单等功能,在 2 个月之内就 完成了系统开发、配置、部署以及培训,正式上线使用。系统使用科室 60,用户数约 200。 x 深圳某顾问公司,他们选用 OpenERP 管理公司产品、进销存业务、项目、人员、财务等。系统在 3 个月内正式上线使用,目前用户数 17 人。 x 温州某液压厂,他们选用 OpenERP 管理总部及全国各地的分仓库存。 第四节 OpenERP 开发简介 企业管理软件中,最常见的功能要求是数据访问。如员工信息查询修改,产品订单编辑等。其次是工 作流开发。工作流是企业层级协作关系在软件中的体现,如请假单审批,销售订单审批等,在管理软件中 都是以工作流来实现。再次是报表开发。系统中的数据,需要以各种形式汇总统计、输出到纸上,送交不 同的人或机构。 一、 数据访问功能开发 OpenERP 不仅是一个 ERP 软件,它还是一个高效率的管理功能开发工具。作为 ERP 软件,它提供了 很多现成的功能,涵盖标准 ERP 概念中的各项功能。此外,当需要适应企业特别情况,开发新功能时, OpenERP 非常简单、高效。先说数据访问功能,如产品订单编辑,通常需要一个数据对象,这里是订单, 一个视图,即用户界面,还要一个触发动作,通常是菜单或按钮,当用户点击菜单时,系统弹出用户界面, 显示、编辑数据。这个方式也就是众所周知的 MVC 模式。OpenERP 的功能开发遵循彻底的 MVC 模式。 数据对象是 Model,在 OpenERP 中,使用 Python 代码实现 Model。如下是一个请假单的代码。 class qingjia_qingjd(osv.osv): _name = 'qingjia.qingjd' OpenERP 应用和开发基础 8 _description = '请假单' _columns = { 'shenqr': fields.many2one('hr.employee', '申请人', required=True), 'tians': fields.float('请假天数', required=True), 'kaisrq': fields.date('开始日期', required=True), 'shiyou': fields.text('请假事由'), 'active': fields.boolean('有效'), 'state': fields.selection([('draft','草稿'),('wait_prove','待批'),('proved','已批'),('rejected','被拒')], '状态', required=True) } qingjia_qingjd() 可能你也看出来了,这个代码中其实就是定义了请假单对象的几个字段。在 OpenERP 中,简单的对象, 你只要定义对象的各个字段,系统会自动为你创建数据库表,自动生成 CRUD 的数据库操作代码。因此, 只要上述代码,你不必另外在数据库中创建 Table,也不必写 Insert、Select、Delete、Update 等数据库操作 代码,这些都留给 OpenERP 帮你去搞定。 接下来是用户界面的开发,即 View。OpenERP 中,用户界面的开发不要写任何代码。它是用 XML 格式定义用户界面。如下是请假单查询界面和请假单编辑、审批界面。 这两个界面,在 OpenERP 中,你只要写如下几行 XML 即可。 请假单 OpenERP 应用和开发基础 9 qingjia.qingjd tree 最后是触发菜单的开发,在 OpenERP 中,叫做 Action,也就是 MVC 中的 C,Controller。OpenERP 的 Action 也不用写代码,是用 XML 定义的。 上述请假菜单,只需下述几行 XML 即可。 请假申请 我的请假单 qingjia.qingjd [('shenqr.user_id','=',uid)] 二、 工作流和报表开发 OpenERP 的工作流采用 XML 定义。可以定义工作流的节点,任意复杂的流转条件。如下图的复杂工 作流,OpenERP 都能很容易实现。 OpenERP 应用和开发基础 10 OpenERP 也支持可视化工作流编辑,下图是 OpenERP 的工作流编辑画面。 OpenERP 应用和开发基础 11 报表开发,OpenERP 支持三种报表形式,一是 PDF 报表,二是 OpenOffice 文档报表,三是图形报表。 下图是前述例子的 PDF 形式请假单: 下图是 OpenERP 的图形化报表。 OpenERP 应用和开发基础 12 关于 OpenERP 的详细开发方法,请参看本书后续各章节。 第五节 为什么选择 OpenERP ERP 软件很多,OpenERP 有什么优势呢。四个字概括,价廉物美。 首先,OpenERP 是开源软件。ERP 软件实施的成本构成中, 业务及需求分析:0 – 10% 软件授权(License):20 – 30% 系统集成:50% -- 70% 其他:10% 其中,系统集成包括,系统配置,基础数据设置,二次开发,数据恢复,用户培训等。 OpenERP 是开源软件,您可以任意下载源代码,任意修改,不需要授权费。和商业软件相比,您立即 节省 20—30%的费用。 其次,OpenERP 的系统集成成本是所有 ERP 软件中最低的。一是,基于 OpenERP 部署系统就像搭积 木一样简单。OpenERP 的模块化是公认最灵活、耦合度最低的。每个功能都是一个独立模块,你可以像搭 积木一样,根据功能需要,逐步增加模块。二是,OpenERP 二次开发效率最高。这得益于 OpenERP 是用 Python 语言开发的。OpenERP 是世界上唯一一款用 Python 开发的 ERP 软件。据测算,Python 语言的开发 效率是 Java 语言的 5—10 倍。这意味着,同样的二次开发要求,OpenERP 只需要基于 Java 的 ERP 软件的 1/5 甚至 1/10 的开发时间。因此,在 ERP 实施的系统集成阶段,您又可以节约一大笔资金。 第三,丰富的功能模块。OpenERP 有超过 500 个功能模块,涵盖企业管理中的各个方面,涉及各个行 业。而且,这些模块都是开源的,您可以任意使用、修改。在全球超过 1000 位开发人员的参与下,模块 数还在不断增加中。 第四,全球各行业的案例证明,OpenERP 是稳定的。OpenERP 从 2002 年开始,历经 8 年发展,有报 导的客户遍及全球 20 多个国家。大的客户有法国国家行政学校,有 1500 个用户。法国邮政,卢森堡银行, 美国最大的白色家电公司惠而浦等。有报导的行业有,金融保险、生产制造、食品、服务业、教育、娱乐、 OpenERP 应用和开发基础 13 书店、在线拍卖等。 注:关于 Python 和 Java 开发效率的详细对比,您可以查看这里: http://www.developertutorials.com/tutorials/python/python-and-java-a-side-by-side-comparison-8-01-13/pag e1.html OpenERP 应用和开发基础 14 第二章 进销存业务概述 第一节 采购业务概述 采购(purchasing):是指企业在一定的条件下从供应市场获取产品或服务作为企业资源,以保证企业 生产及经营活动正常开展的一项企业经营活动。根据各行业采购工作的通性和个性,可将采购管理工作分 为四类: x 生产性采购,就是采购这个物品是直接为了公司生产运营所需。而生产性采购又分为两类, 第 1 类是原材料性采购(MRP 性物料采购)。所采购的此类物料是本企业所生产的产品的组成部分或中间 体产品。第 2 类是零配件的采购(MRO 性采购,就是维修,维护、修理、运作),这些零配件是为了 保障机器能正常生产运作所需要的维修、更换配件。 x 商贸性采购,像沃尔玛这样的零售商,它们的采购不属于生产性采购,属于商贸性采购。商贸性采购 和生产性采购最大的区别是,批发商、零售商在采购物品时,采购什么商品并不十分重要,重要的是 采购的东西必须保证能赚钱。笔笔都得赚钱,不赚钱就没有必要采购进货。西瓜不赚钱,可以采购苹 果。但是对于生产性采购来讲就不行,这个产品我们公司只能用这个原材料。我做饼干的,只能买面 粉,不能说面粉太贵就不买了,不买就停产了。所以生产性并不保证每次采购都赚钱,而且采购的盈 利性也不能直接反应出来的。 x 一般日常用品性采购,像办公用品采购,还有行政采购等。其特点是采购品类繁杂,但采购金额小。 其所采购的物品主要是保障公司的正常行政办公所用。 x 项目性采购,有时候,我们的采购工作属于项目性采购,比如说买一台设备,盖一个车间等。项目性 采购的主要特点是一次性。很少有重复性的采购。这就意味着每次采购的流程都得重新开始,以往的 经验和关系很少能用到。 一般的 ERP 软件,都只支持生产性采购中的 MRP 性物料采购,专业采购软件,可能支持所有类型的 采购业务。OpenERP 的采购,主要也是 MRP 性物料采购。不过,可能存在其它模块支持别的采购管理, 如办公用品的请领、采购。本书的采购,如不特别说明,指的是 MRP 性物料采购。 采购的日常工作有,接收采购计划、询价/议价、决定、下 PO(采购单)、审核、跟催、收货、付款、 退货。相关的单据有:请购单、采购计划、采购单、询价单,进货单等。简单的说,采购部门接收其它各 部门的采购要求,定期汇总采购物品,作成采购计划。根据采购计划,分别和相应的供应商询价、议价。 向选定的供应商下单(通常是传真,供应商签字后再回传回来)。而后跟踪供应商及时发货,货到后验货、 入库。货有问题的话,要求供应商换货、退货。 采购的财务处理,供应商的发票送至财务部门。采购部门向财务部门申请付款,或者出具供应商签字 确认过的采购单复印件至财务部门,代替付款申请。仓库收货后将入库单亦送至财务部门。财务部门凭此 三单(采购部门的付款申请、供应商发票、仓库的入库单),核对三单一致后,记录会计帐务,制定付款 计划,按计划付款。 当采用 OpenERP 后,典型的采购流程大致是这样的。仓管员分析库存,对于低于库存警戒线的物品, 提出采购申请(系统里叫 Procurement Orders)。或者,如果库存管理模块中配置了最小库存规则,那么, 系统每天自动计算,低于最小库存的产品,系统自动产生采购申请。如果是自产的产品,不是外购的产品, 则系统自动生成生产单,生产单根据 BOM 计算所需物料,如果物料不足,系统再生成采购申请。采购员 汇集采购申请(通常是将同一供应商的采购申请合并成一张采购订单);或者,直接在系统中新建一张采 购单,输入要采购的物品的规格型号、价格等,而后和供应商 Email 或电话沟通,进一步敲定价格等。采 购员提交采购单,经理审批。审批后,采购员打印采购单,传真给供应商,供应商签字确认,回传。采购 员点击采购单上的“供应商通过”按钮,表示供应商已确认。此时,系统自动生成 2 张单子,一是供应商 OpenERP 应用和开发基础 15 凭证(Invoice),送至财务部门,财务部门据此审核供应商发票并安排付款计划。当财务收到供应商发票, 确认供应商凭证后,系统会自动生成此采购业务对应的记账凭证。二是收货单(Incoming Packing List), 送至仓管部门,仓管部门据此验货、收货。 付款并核销的处理。当出纳付完采购款项后,可以在 OpenERP 中输入付款记录,并选择要冲减的采 购凭证。这样,系统会自动生成付款会计分录,并自动核销(Reconcile)应付款。应付款核销后,显示在 业务伙伴画面的对应供应商的应付款项会被冲减。采购订单上也会标记该订单已付款。 关于预付款的处理。有些采购要求预付部分款项,此时,采购部门要向财务部门出具预付申请单。在 OpenERP 软件中,目前应该还不支持预付申请。作为实践中的补充措施,可以有两种处理办法,一种是手 工的,即手工填写预付申请单,交由财务,财务据此付款,并手工录入预付款的记账凭证。二是使用电子 邮件。预付申请是一种内部单据,可以使用企业内部电子邮件作为内部单据的高效流转方式。采购员发送 预付申请邮件给主管和财务,主管回复邮件确认,而后财务也回复邮件确认。财务打印最后的确认邮件, 作为内部单据原始凭证,以此记账。这种方式,首先需要严格管理邮件,保证电子邮件的安全,其次,企 业的财务制度要承认电子邮件作为内部凭证的有效性。 第二节 销售业务概述 企业的销售工作是非常重要的,销售旺盛,才能带动其他部门和工作的快速发展。企业的销售工作, 通常分成两大块,营销管理和销售管理。营销管理是为了实现各种组织目标,创造、建立和保持与目标市 场之间的有益交换和联系而设计的方案的分析、计划、执行和控制。销售管理是计划、执行及控制企业的 销售活动,以达到企业的销售目标。简而言之,营销是在企业和目标市场间营造一个良好的交换气氛,销 售是在企业和目标市场间完成具体的产品交换。 营销管理的工作有:(1)发现和评价市场机会;(2)细分市场和选择目标市场;(3)发展市场营销组合和 决定市场营销预算;(4)执行和控制市场营销计划。通常,在 ERP 软件中,对营销工作的支持是 CRM(客 户关系管理)模块的功能。 销售管理的工作有:(1)制定销售计划及相应的销售策略;(2)建立销售组织并对销售人员进行培训;(3) 制定销售人员的个人销售指标,将销售计划转化为销售业绩;(4)对销售计划的成效及销售人员的工作表现 进行评估。在 ERP 软件中,对销售管理工作的支持,通常也是 CRM 模块的范畴。ERP 软件中的销售模块, 通常是指,对具体的销售业务工作的支持,即报价、成交、发货、收款、记账的具体业务工作的支持。 ERP 软件里的销售,通常是指面向机构的销售,而不是面向普通消费者的零售。零售在 ERP 软件中, 通常是 POS(Point Of Sale)模块的功能。面向机构的销售业务的基本过程是:挂牌标价→洽谈业务→签 订合同→收取货款和发运商品→开具发票及提单→提供售后服务和客户回访。 x 挂牌标价。企业向外发布产品和价格信息。 x 洽谈业务。挂牌标价后,企业销售人员就开始和有购买意向的客户进行交易条件的洽谈。 x 签订合同,销售订单是销售合同的一种。 x 收取货款和发运商品。 x 开具增值税专用发票。 x 开具发货单。发货单是购货方提取商品的凭证,也是供货方开展销售业务的内部凭证。 x 提供售后服务和客户回访。商品售出以后,企业应根据具体情况提供良好的售后服务,如送货上门、 安装调试、维修保养、使用指导等等。除此之外,还应定期回访,听取顾客对产品及服务的建议和意 见,以便更好地改进产品、完善服务。在软件中,这部分销售相关的内容通常属于 CRM(客户关系 管理)的范畴。 当基于 OpenERP 处理销售业务时,大致流程是这样的。销售人员收到客户购买意向后,通常是在系 统中新建一张报价单,将客户需要的产品型号、价格、付款条件、发运方式等信息录入系统。打印或 Email 报价单给客户,要求客户确认。如果是新客户,可能还要销售经理、财务等审核客户信誉、订单风险等问 OpenERP 应用和开发基础 16 题。系统目前不支持新客户及订单风险的审核流程。作为系统补充,可以采用手工审核的方式。当和客户 敲定订单相关事宜,公司内部各项审核要求也通过后,确认报价单,报价单就变成了销售订单。这时,系 统会自动生成一张销售凭证(Customer Invoice),送交财务部门,财务部门根据该凭证开发票及记账。系 统还会自动生成出货单,送交仓库,仓库凭此出货。如果销售订单上有些产品是“按订单生产”(即有订 单才启动生产,对应的,另一种方式是“按库存生产”,即不管有无订单,都生产,产成品存入仓库。), 则系统会自动生成该产品的生产单(Product Order)。如果需要更复杂的销售订单处理流程,例如,超过一 定金额的要销售主管或者总经理审核,则必须定制销售订单的工作流。这可以在“系统管理”菜单下修改 销售订单的工作流,或者直接修改代码中的工作流定义的 XML 文件。 销售业务中的单据主要有销售订单、增值税专用发票和发货单。增值税专用发票的内容有,购货方单 位名称、纳税人登记号、开户银行及账号等。增值税专用发票的联次及其用途: x 第一联为存根联,由销货方留存备查。销货方在使用专用发票时,必须按规定保持各联号码连续完整, 不得从专用发票本上撕下。 x 第二联为发票联,供购货方作记账使用,只属于商事凭证。 x 第三联为税款抵扣联,是购货方计算进项税额的证明,也是向税款征收机关进行税款抵扣的依据,由 购货方持有。 x 第四联为记账联,是销货方核算销售额和销项税额的主要依据。 下图为增值税发票样例。 发货单是购货方提取商品的凭证,也是供货方开展销售业务的内部凭证。发货单各联次及其用途如下: x 第一联为记卡联,销售员记卡留存。 x 第二联为提货联,购货方凭此提货。 x 第三联为收款联,财务凭此收款记账。 第三节 采购、销售的财务处理 先说采购记账。例如北京鹏瑞公司,是一商贸类型的公司,他们从北京维佳科技公司购入 A 产品 100 OpenERP 应用和开发基础 17 件,单价 1500,单价未含税,增值税 17%。那么,对应这笔业务,会计上通常做如下会计分录: 借: 1402 在途物资 150000 2015 应交税费 - 201501 应交增值税(进项税) 25500 贷:2011 应付帐款 - 201101 维佳科技公司 175500 采购商品入库时,会计分录: 借: 1036 库存商品 150000 贷: 1402 在途物资 150000 根据付款条件,财务编制付款计划。到了付款日,出纳开具转帐支票去银行付款。根据转帐支票的留底, 会计上记账如下: 借: 2011 应付帐款 - 201101 维佳科技公司 175500 贷:1002 银行存款 175500 采用 OpenERP 后,确认采购单时,系统会自动生成采购凭证。财务部门确认采购凭证时,系统自动 生成上述记账凭证(根据设置的不同,也可以不自动生成,而是手工录入)。采购商品入库时(确认入库 单时),系统自动生成入库会计分录。出纳付完款后,可以手工录入付款凭证。也可以利用系统的对账单 功能,输入付款额,选择未支付发票(Invoice),冲销(Reconcile)发票上的应付账款,系统自动生成付 款的记账凭证。 再说说销售记账。鹏瑞公司向上海福达公司销售 A 产品 10 件,单价 2000。对应这笔业务,会计上记 账如下: 借:1014 应收账款 - 101401 上海福达公司 21700 贷: 6001 主营业务收入 20000 2015 应交税费 - 201501 应交增值税(销项税) 1700 销售商品出库时,销售实际成本发生,必须结转销售成本,记账如下。传统手工记账时,销售成本的 结算通常是月末时进行。使用 OpenERP 的话,商品出库时(出库单确认时),系统自动生成销售成本结算 分录。 借: 6015 主营业务成本 15000 贷: 1036 库存商品 15000 当对方付款后,根据银行回单,会计上记账如下: 借: 1002 银行存款 21700 贷: 1014 应收账款 - 101401 上海福达公司 21700 采用 OpenERP 后,确认销售订单时,系统会自动生成销售凭证。财务部门确认销售凭证时,系统自 动生成上述记账凭证(根据设置的不同,也可以不自动生成,而是手工录入)。出纳收到款后,可以手工 录入收款凭证。也可以利用系统的对账单功能,录入收款额,选择应收发票(Invoice),冲销(Reconcile) 发票上的应收账款,系统自动生成收款的记账凭证。 如果采用 ERP 软件处理购销业务中的财务管理,首先必须建立会计科目表(Chart Of Account)。上述 简单的购销业务,需要建立下述科目表: 科目代码 科目名称 1001 库存现金 1002 银行存款 1036 库存商品 OpenERP 应用和开发基础 18 1014 应收账款 101401 上海福达公司 2011 应付账款 201101 维佳科技公司 2015 应交税费 201501 应交增值税(销项税) 201502 应交增值税(进项税) 6001 主营业务收入 在后续章节中,将会介绍怎么在 OpenERP 中设置科目表,怎么设置业务伙伴、产品,以及怎么完成采购、 销售业务,购销业务怎么自动财务处理。 第四节 仓库管理业务概述 仓库管理也叫仓储管理,英文 Warehouse Management,简称 WM,指的是对仓储货物的收发、结存等 活动的有效控制。其目的是为企业保证仓储货物的完好无损,确保生产经营活动的正常进行,并在此基础 上对各类货物的活动状况进行分类记录,以明确的图表方式表达仓储货物在数量、品质方面的状况,以及 目前所在的地理位置、部门、订单归属和仓储分散程度等情况的综合管理形式。注意仓库管理和库存管理 的区别。库存管理,英文 Inventory Management,是根据外界对库存的要求、企业订购的特点,预测、计 划和执行一种补充库存的行为,并对这种行为进行控制,重点在于确定如何订货,订购多少,何时定货。 库存管理的主要工作是规划和保证最合适的库存。仓库管理的主要工作是处理物品入库、出库以及在库保 管等具体的业务工作。 仓库管理的基本业务包括:商品入库、商品出库、库房管理等。库房的管理,要根据商品类型的不同, 将仓库分成若干库区(Location),分区管理。例如,合格品区、收货区、辅助区、不合格品区。商品储存 货架要设置存货卡,商品进出要遵循先进先出的原则。 商品入库是商品进入仓储时所进行的商品接收、卸货、搬运、清点数量、检查质量和办理入库手续等 一系列活动的总称。商品入库作业包括商品接运、商品验收、办理入库交接手续等一系列业务活动。商品 接运是指仓库对于通过铁路、水运、公路、航空等方式运达的商品,进行接收和提取的工作。商品验收, 包括数量点收和质量检验两方面的验收。入库手续主要是指交货单位与库管员之间所办理的交接工作。包 括商品的检查核对,事故的分析、判定,双方认定,在交库单上签字。仓库一面给交货单位签发接收凭证; 一面登记入库,并将入库凭证交给会计入账。 商品出库业务,是仓库根据业务部门或存货单位开出的商品出库凭证(提货单、调拨单),按其所列 商品编号、名称、规格、型号、数量等项目,组织商品出库一系列工作的总称。商品出库的形式有: x 送货,仓库根据货主单位预先送来的“商品调拨通知单”,通过发货作业,把应发商品交由运输部门 送达收货单位,这种发货形式就是通常所说的送货制。 x 自提,由收货人或其代理持“商品调拨通知单”直接到库提取,仓库凭单发货,这种发货形式就是仓 库通常所说的提货制。它具有“提单到库,随到随发,自提自运”的特点。 x 过户,是一种就地划拨的形式,商品虽未出库,但是所有权已从原存货户转移到新存货户。仓库必须 根据原存货单位开出的正式过户凭证,才予办理过户手续。 x 取样,货主单位出于对商品质量检验、样品陈列等需要,到仓库提取货样。仓库也必须根据正式取样 凭证才予发给样品,并做好账务记载。 x 转仓,货主单位为了业务方便或改变储存条件,需要将某批库存商品自甲库转移到乙库,这就是转仓 的发货形式。仓库也必须根据货主单位开出的正式转仓单,才予办理转仓手续。 商品出库程序包括核单备料→复核→包装→点交→登账→现场和档案的清理过程。 x 核单备料,如属自提商品,须检查有无财务部门准许发货的签章。 OpenERP 应用和开发基础 19 x 复核,复核内容包括品种数量是否准确,商品质量是否完好,配套是否齐全,技术证件是否齐备,外 观质量和包装是否完好,等等。复核后保管员和复核员应在“商品调拨通知单”上签名。 x 包装,要写明收货单位、到站、发货号、本批总件数、发货单位等。 x 点交,商品经复核后,如果是本单位内部领料,则将商品和单据当面点交给提货人,办清交接手续; 如系送料或将商品调出本单位办理托运的,则与送料人员或运输部门办理交接手续,当面将商品交点 清楚。交清后,提货人员应在出库凭证上签章。 x 登帐,保管员应在出库单上填写实发数、发货日期等内容,并签名。然后将出库单连同有关证件资料, 及时交给货主,以使货主办理货款结算。保管员把留存的一联出库凭证交给实物明细账登记人员登记 做账。 x 现场清理,包括清理库存商品、库房、场地、设备和工具等;档案清理是指对收发、保养、盈亏数量 和库位、垛位安排等情况进行分析。 仓库管理的常见单据有,商品入库单、商品送货单、物料入库单、物料出库单、物料盘点表、物料退仓单、 借物登记表。 第三章 OpenERP 基础业务设置 要使用信息系统管理进(采购)、销(销售)、存(库存管理)业务,首先要将业务系统中的各种管理 对象数字化。在进销存中,基础的业务对象包括业务伙伴、产品、仓库、财务科目等。例如,销售业务中, 信息系统要生成一张销售订单,销售订单上包括客户信息(卖给谁、送货地址等)、产品信息(销售什么 产品,什么型号,什么价格等)、仓库信息(从哪个仓库出货)、财务信息(本笔业务借记什么、贷记什么, 应收款多少等)。必须事先将业务对象数字化,信息系统才能快速、简单的支持业务操作,管理业务过程。 x 业务伙伴:向谁采购,销售给谁,这些业务伙伴的信息要预先设置好。 x 产品:采购什么,销售什么,这些产品信息要预先设置好。 x 仓库:当有多个仓库,每个仓库还分多个库区时,不同类型的产品存放在哪个库区,销售时从哪个仓 库发货。更智能一点,库存低于多少时希望系统自动提醒补货。这些仓库相关信息要预先设置好。 x 财务:采购、销售都需要财务记账,需要资金的收支管理。财务相关信息要预先设置好,系统才能记 账。 目前 OpenERP 的界面汉化存在多个版本,一个是官方的 5.07 版的汉化,一个是 HornERP (http://code.google.com/p/hornerp/ )对 5.06 版的汉化。两个版本术语不尽一致,且两个版本都存在一些 翻译欠准确的术语。为了减少术语翻译带来的理解困难,本章采用英文界面介绍。 第一节 业务伙伴信息设置 OpenERP 的业务伙伴,包括任何和自己有关的单位、个人。可以是客户,也可以是供应商。一个业务 伙伴可以有多个地址,如联络地址、发票地址、送货地址、各办公场所的地址等。如果安装了 base_contact 模块,每个地址可以有多个工作职位及对应的联系人。每个联系人可以有多个工作职位、从属于多个业务 伙伴,甚至不属于任何业务伙伴(私人地址)。 一、 理解业务伙伴 业务伙伴和联系地址。业务伙伴的主要信息存放在数据表 res_partner 里,一个业务伙伴有多个联系地 OpenERP 应用和开发基础 20 址,联系地址信息保存在数据表 res_partner_address 里。res_partner 和 res_partner_address 是 One2Many 关 系。 业务伙伴的价格表和库位属性。可以为每一个业务伙伴设定一个采购价格表和销售价格表。价格表定 义专属于该业务伙伴的产品价格,通常是基于产品公开报价的折扣率。稍有遗憾的是,OpenERP 只能针对 单个业务伙伴分别设定价格表,不能针对某一类业务伙伴设定价格表。业务伙伴的库位属性,当从供应商 进货或销售给客户时,OpenERP 不是直接增加或减少库存数量,而是记录从供应商库位到公司库位的库存 移动,以及从公司库位到客户库位的库存移动。业务伙伴的库位属性就是设定此处的供应商库位和客户库 位,可以是虚拟的库位,也可以是供应商或客户的真实库位。 业务伙伴的财务属性。当和业务伙伴发生交易时,会产生应收、应付款,应收应付款在财务上记录在 哪个会计科目上?这就是业务伙伴的财务属性设置。此外,业务伙伴的财务属性中还会显示业务伙伴的应 收应付总额,银行帐号等信息。 二、 业务伙伴联系信息 在 General 页,包括业务伙伴的联系人,地址,电话等信息。 x Customer:如果勾上,表示该业务伙伴是客户,在销售订单上允许选择该客户。 x Supplier:如果勾上,表示该业务伙伴是供应商,在采购订单上允许选择该客户。 x Title:业务伙伴头衔,诸如公司、医院、区政府等。头衔在业务伙伴的“Configuration”菜单中设置。 在发送给业务伙伴的信函或订单中会出现该头衔。 x Language:语言,会影响发给客户的订单上的显示语言。国内伙伴,一般都设成“中文”。 x Type:联系人的头衔,诸如先生、小姐、女士等。在“Configuration”菜单中设置。 x Function:联系人职位,诸如总经理、销售员等。在“Configuration”菜单中设置。 x Address Type:地址类型,诸如送货地址,发票地址等。有 5 种地址类型:(default,Default), (invoice,Invoice),(delivery,Delivery),(contact,Contact),(other,Other)。Default,默认,当没有其他地 址时使用此地址。Invoice,发票,系统生成采购、销售等的财务票据时,使用此地址。Delivery,发 货,系统生成送货单时,使用此地址。Contact、Other,供其他用处,系统中未使用。当系统生成单 据时,会自动使用相应类型的地址。 x Categories:分类,一个业务伙伴可以属于多个分类。在“Configuration”菜单中设置。分类可以是树 状结构,如下图所示: 业务伙伴联系信息画面。 OpenERP 应用和开发基础 21 三、 业务伙伴购销信息 购销信息在“Sales & Purchases”页面。 OpenERP 应用和开发基础 22 x Dedicated Salesman:专任销售人员。你可以安排专门销售员跟踪该客户。 x Main Company:业务伙伴所属母公司。 x Sale Pricelist:针对该客户的销售用价格表。价格表处理折扣问题,如某消暑产品,针对某大客户, 在公开报价基础上,夏秋两季打 8.5 折,冬春两季打 6 折。当设置好该价格表,销售订单中,将根据 价格表中的规则自动计算给该客户的价格。价格表在产品模块中设置。 x Purchase Pricelist:针对该供应商的采购用价格表。当设置好该价格表,采购订单中,将根据价格表 中的规则自动计算产品的采购价格。 x Customer Location:客户库区,销售给该客户的产品应发往的库区。可以是真实库区,也可以是一个 虚拟库区。OpenERP 采用独特的“复式库存”管理库存,因此,即使客户没有真实库区,也必须设 置一个虚拟库区。库区(Location)在库存管理模块中设置。 x Supplier Location:供应商库区,概念同上。 四、 业务伙伴事件 销售人员跟踪客户的过程中,会经常和客户联系。或者拜访、或者电话、或者 Email。和客户联系时, 会发现客户的某些潜在需求,或是客户不满。和客户的这种沟通以及客户的需求或者态度变化,在 OpenERP 中使用事件(Event)来记录管理。当销售订单确认时,系统也会自动生成该业务伙伴的“购买事件”记录 于此。 x Date:事件发生的日期 x Events:事件标题 x State Of Mind:客户态度。客户态度的选项在“Configuration”菜单中设置。 x Partner Relation:客户关系类型。 x User:跟踪该事件的职员。 点击事件,进入事件编辑画面,可以记录事件的详细信息。 五、 业务伙伴财务信息 x Account Receivable:和客户发生的销售业务记账凭证中,应收账款对应的会计科目。通常是“1014 应 收账款”总账科目下的以客户单位名称为名的二级科目。该科目在财务模块中设置。简单情况下,也 OpenERP 应用和开发基础 23 可以将所有客户都设成“1014 应收账款”科目,设置方法在“管理员”下的“属性”菜单中设置属 性。销售业务中,系统会根据这里的设置自动生成会计分录。 x Account Payable:和业务伙伴发生的采购业务记账凭证中,应付账款对应的会计科目。通常是“2011 应付账款”总账科目下的以客户单位名称为名的二级科目。 x Fiscal Position:应税设定。通常,在产品信息中设定销售、采购该产品应缴纳的税种。之后,在销售 订单、采购订单中,系统会自动采用产品上设定的税种计税。但是,有时候,同一产品,针对不同类 型客户,其计税方式不同。例如,某产品内销时要计消费税,但外销时不计消费税。那么,对于外销 客户,应该采用不同于产品上设定的计税方法计税。Fiscal Position 就是处理这种情况的。当指定客户 的应税设定后,系统会根据应税设定中指定的替换规则将产品中设定的税种换成别的税种计算税额。 应税设定在财务模块中设置。 x Payment Term:付款条件,如 30 日内付全款,或者 10 日内付 30%,20 日内再付 30%,余款 2 月内 付清。当设置好付款方式后,如该客户未按时付款,系统会自动报警。付款条件在财务模块中设置。 x Total Receivable:该业务伙伴的应收账款总额。 x Total Payable:该业务伙伴的应付账款的总额。 x Credit Limit:该业务伙伴的信用额度。 x Bank Details:该业务伙伴银行帐号相关信息,用于增税发票等单据。 第二节 产品信息设置 一、 产品模块配置 产品模块安装时的配置步骤,有一个”Configure Sale Order Logistic”(配置销售订单物流方式)的画面。 说明如下。 x Packing Default Policy: 有两个选项:Direct Deliverry、All at Once。这个选项影响销售订单的发货策 略。Direct Deliverry 使得只要仓库有货,即使不足订单要求的量,也立即发货(允许部分多次发货)。 All at Once 使得,仓库中必须有足够订单要求的量,才能发货(一次性足额发货)。这里的选项只是 OpenERP 应用和开发基础 24 销售订单的默认方式,在销售订单上还可以修改。 x Shipping Default Policy: 有两个选项:Invoice Based on Deliveries、Invoice Based on Sales Orders。即 根据发货单开票和根据订单开票。前者,当一张订单多次分批发货时,会开出多张发票。后者则不管 分几次发货,一张订单一张发票。这里的设置只是销售订单的默认方式,在销售订单上还可以修改。 x Steps To Deliver a Sale Order: 有两个选项:Delivery Order Only、Packing List & Delivery Order。意思 不是很明白,参看下述英文解释。 By default, Open ERP is able to manage complex routing and paths of products in your warehouse and partner locations. This will configure the most common and simple methods to deliver products to the customer in one or two operations by the worker. 产品单位的配置。菜单 Products Æ Configuration Æ Units of Measure Æ Units of Measure,画面如下。 x Name:单位名称,如个、箱、盒等。 x UoM Category:单位分类,如重量单位,长度单位,PCB 板转换单位等。同一分类的单位间可以互 相转换,不同分类的单位间不能转换。单位分类在菜单 Products Æ Configuration Æ Units of Measure Æ Units of Measure Categories 中设置。 x Factor 和 Rate:1 本单位 = 1 基本单位 * factor。如 1箱=40 个,则可以定义“个”为基本单位,“个” 的 factor=1,“箱”的 factor=40。Rate=1/Factor。 x Rounding Precision:单位换算时的精确度,单位换算后的结果必须是此值的倍数。 价格表(Pricelist)的配置,菜单 Products Æ Pricelists Æ Pricelists。 OpenERP 应用和开发基础 25 x Starte Date 和 End Date:本价格表生效的时间范围。 x Products Listprices Items:价格计算规则,一个价格表可以有多条规则。系统计算产品价格时,按着 Sequence 从小至大依次检查各个规则,如果符合规则条件,则适用该规则计算价格。规则设置画面如 下。 x Rules Test Match:规则适用条件,只有符合本条件,才会使用本规则计算价格。此处的多个条件是 AND 关系。 x Product 和 Product Template:Product 对象继承自 Product Template,目前两者实质是一样的。如果 设置了,表示只有该产品适用本价格计算公式。 x Product Category:如果设置了,表示该产品分类适用本价格计算公式。 x Min. Quantity:只有购销数量大于本设置时才适用本价格计算公式。 x Sequence:规则序号,系统优先适用序号小的规则。 x Price Computation:价格计算公式。 x Based on:价格计算基础值,有 Public Price,Cost Price,Other Pricelist,Partner section of the product form 等选项。Other Pricelist 表示,基于别的价格计算规则算出的值的基础上,再适用本规则的公式。这使 OpenERP 应用和开发基础 26 得多个价格表可以串联使用。Partner section of the product form 表示,基于产品表单的 Supplier Information 中设置的单价计算。 x New Price:价格计算公式是 New Price = Base Price * ( 1 + X ) + Y。 x Rounding Method:价格精度,计算出来的价格自动舍入变成此值的倍数。例如,如果设成 0.05 则计 算所得价格为 45.66 的话,系统会自动转换价格成 45.65;如果设成 100,价格 14567 会转换成 14600。 x Min. Margin 和 Max. Margin:利润范围,如果 min=10, Max=50, 则新价格必须满足:Base Price + 10 < New Price < Base Price + 50,不在此范围的话,系统自动取该范围的上下限作为新价格。 二、 产品一般信息 x Can be sold: 该产品可用于销售,在销售订单中可以选择该产品。 x Can be Purchased: 该产品可以采购,在采购订单中可以选择该产品。 x Rentable Product: 该产品可用于出租。 x Variants: 产品型号,任意文字。 x EAN13: 产品条形码,必须符合条形码格式。 x Product Type: 有三个选项:Stockable Product、Consumable、Service。Stockable Product 是通常的可 库存的产品,要求进行库存管理。Consumable 是低值易耗品,如螺丝钉。低值易耗品可库存,但系 统不记录其库存量,不对它做库存管理(默认为取之不竭的东西)。Service,服务类型的产品,如咨 询服务。 x Procure Method: 生产类型,有 Make to Stock、Make to Order 两个选项。即按库存生产和按订单生产。 属于后者的产品,当有订单时,会根据订单和产品 BOM 自动生成生产订单或采购订单(取决于产品 的 Supply Method),启动产品供应。前者则是当库存低于设定的量时才启动供应。如果是 Service 类 型的产品,且设定为 Make to Order,那么,当有订单时,系统会自动生成该服务项目对应的 Task(任 务,这个时候,产品的 BOM 相当于是项目的 WBS,工作分解结构)。 x Supply method: 供应方式,有两个选项:Produce、Buy。前者的话,当需要补给该产品时(例如库存 低于设定量),系统自动生成生产订单。后者的话,当需要补给时,系统自动生成采购订单。 x Weigths: 记录产品的体积、毛重、净重信息。 x Category: 产品分类。产品分类在“Configuration”菜单中设置。产品分类可以形成树状结构。 x Status: 产品所处生命周期阶段。有 In Development、In Production、End of Lifecycle、Obsolete 几个选 项。 x Product Manager: 产品经理。 OpenERP 应用和开发基础 27 x Real Stock: 产品实际库存,即目前仓库(包括所有仓库)保有的产品实际数量。 x Virtual Stock: 产品预期库存。由于有一些已经确认了的采购订单和销售订单,随着这些订单的入库、 出库,产品的将来库存量会不同。在库存管理模块中,可以查看产品 N 天后的预期库存。这里是考虑 所有已确认的订单而计算的预期库存,不特指哪一天。 x Lots: 生产批号和追踪批号。可以强制要求产品必须有生产批号、进货批号、出货批号。批号在库存 模块中设置。 x UOM: 产品计量单位。产品可能有多个单位,如电池产品,进货时按“箱”计、销售时按“个”和“盒” 计。产品计量单位在“Configuration”菜单中设置。OpenERP 中的产品计量单位可分类,同一类型的 计量单位间可互相换算(不同类型的单位间不可换算)。如电池的三个计量单位(箱、盒、个)可以 设成同一类型,可以设置它们间的换算关系,系统会自动换算。 三、 产品供应和仓储信息 x Customer Lead Time: 客户提前期,从确认客户订单的时点,到能给客户发货的时点的估算时间。通 常是一个平均时间。以天为单位。 x Manufacturing Lead Time: 生产提前期,从本产品的生产订单下单的时点,到产品产出的时间。通常 是一个平均时间。以天为单位。 OpenERP 应用和开发基础 28 x Warranty (months): 产品保证期,以月为单位。 x Storage Localisation: 产品在仓库中的存放位置。如行、列、货架。 x Procurement Location: 采购库位,用于复式库存管理。产品采购引起的库存移动的源库位,通常是 虚拟库位。 x Production Location: 生产库位,用于复式库存管理。产成品入库引起的库存移动的源库位,可以是 车间,也可以是虚拟库位。 x Inventory Location: 盘点库位,用于复式库存管理。产品盘盈或盘亏引起的库存移动的源库位(盘盈)、 目标库位(盘亏)。 四、 产品价格和供应商信息 x Cost Price: 产品标准成本价(采购价)。 x Costing Method: 成本计算方法,有 Standard Price(标准价法)和 Average Price(移动平均法)两种。 x Sale Price: 产品标准售价。 x Variant Price Margin: 产品价格系数。 x Variant Price Extra: 产品价格附加。如果没有设置价格表,则产品的销售价格计算方法是:实际售价 =Sale Price * Variant Price Margin + Variant Price Extra 。如果使用价格表,则实际售价根据价格表的规 则计算,此两字段无用。 OpenERP 应用和开发基础 29 x Supplier Information: 供应商信息(订货提前期、最低采购量、适用价格表等)。当根据补货要求(如 库存量低于最小库存规则设定的数量),系统自动生成采购单时,必须要设置好产品的供应商信息, 否则会发生自动补货异常错误。 x Partner:供应商对应的业务伙伴。 x Priority:当该产品有多个供应商时,Proirity 小的优先考虑。 x Partner Product Name:产品名和采购名(供应商产品名)不同时,此处填入采购用产品名。 x Partner Product Code:供应商产品编码。 x Delivery Delay:从订单确认到仓库收到货所需的天数,自动采购时该时间用于计算下单提前期。 x Minimal Quantity:该供应商所能接收的最低采购批量。 x Quantity 和 Unit Price:根据采购批量设定的采购价格。 五、 产品描述和包装 x 产品描述:有 Description、Sale Description、Purchase Description 三个。后两者会出现于销售、采购 订单的备注里。 x 产品包装:一种产品可以有多种包装形式,如单件、小盒、大盒、箱装等。可以指定每种包装方式的 产品件数、条形码、体积、皮重、毛重、包装材料等。 OpenERP 应用和开发基础 30 六、 产品财务信息 x Income Account: 产品收入科目,产品销售业务的会计分录的贷方,通常是“6001 主营业务收入”。 借方是应收账款。 x Expense Account: 产品成本科目,产品采购业务的会计分录的借方。对于商业流通企业,通常是“1042 在途物资”。贷方是应付账款。 x Stock Output Account: 产品出库科目,产品出库时会计分录的借方,贷方是库存管理中库位设置时指 定的科目。对于商业流通企业,通常是“6015 主营业务成本”,贷方是“1036 库存商品”。 x Stock Input Account: 产品入库科目,产品入库时会计分录的贷方,借方是库存管理中库位设置时指 定的科目。对于商业流通企业,通常是“1042 在途物资”,借方是“1036 库存商品”。 x Sale Taxes: 产品销售时的税种。销售订单默认采用此处的税种计算税额。税种在财务模块中设置。 x Purchase Taxes: 产品采购时的税种。采购订单默认采用此处的税种计算税额。税种在财务模块中设 置。 第三节 财务数据设置 要使用 OpenERP 处理财务业务,需要预先设置如下一些基础数据: x 会计年度(Fiscal Years):在中国,一个会计年度从 1 月 1 日到 12 月 31 日。一个会计年度包含若干会 计分期(Periods)。在中国,一个会计分期是一个自然月,即从每月 1 号到月末。 x 会计科目表(Chart Of Account):除了财政部统一制定的会计制度上规定的总分类科目,还包括企业 自己制定的明细科目。这些科目必须预先导入到系统中。 x 分类账(Journal):这是 OpenERP 用于区分不同业务类型的会计分录的概念。例如,销售相关的分录 都保存在销售分类账(Sale Journal)中。可以自己定义 Journal 用以给分录分类。 OpenERP 应用和开发基础 31 x 税种(Tax):如增值税、消费税、教育附加等不同税种。OpenERP 允许定义税种,税种中定义税额的 计算方法,定义税种对应的财务科目。 x 付款条件(Payment Terms):如订单生效日 30 日后所在月份的月末付款,OpenERP 支持诸如这样的 付款条件设置。此处设置的付款条件可以设置到产品和订单上,这样,到了订单的付款日,系统会自 动提醒出纳注意收款。 x 应税设定(Fiscal Positions):定义规则,将某一税种替换成别的税种。当在给业务伙伴指定应税设定 后,针对该业务伙伴的订单计税时会先按应税设定的规则替换税种后,再计算税额。 下文依次介绍上述基础数据的设置方法。 一、 会计年度设置 安装财务模块(account module)时,在财务模块配置步骤中,有一步是 Create a Fiscal Year。如下画面所 示,此画面创建会计年度。特别注意 Charts of Account 选择“None”,因为每个单位的会计科目都不尽相 同,所以最好以后再设置自己单位的会计科目,此处暂不设。 二、 会计科目表设置 设置会计科目之前,先要设置科目类型(Account Type)。OpenERP 的科目类型,顾名思义,就是会计 科目的类别。科目类型设置菜单是:Configuration Æ Financial Accounting Æ Financial Accounts Æ Account Types ,下图是科目类型定义画面。 x Acc.Type Name: 科目类型名,任意文字。 x Code: 科目类型编码,任意文字。 x Sequence: 科目类型显示顺序号,没什么特别意思。 x Sign on Report: 本类型会计科目在报表上的显示符号(正或负)。 x Deferral Method: 递延方法。本类型会计科目从本期结转至下期时的结转方法。有 None(不结转)、 OpenERP 应用和开发基础 32 Balance(余额结转)、Detail(原样抄至下期)、Unreconciled(未核销)。系统会根据设置的结转方法, 自动将科目结转至下期。如果选择 None,则要自己手工填写结转分录,结转科目。Unreconciled 主要 是指应税账款、应付账款,未核销的应收、应付账款科目应该结转至下期。 x Partner account: 没什么特别意义,仅用于信息显示。 OpenERP 的科目类型设置,除了递延方法,其它的都主要是用于信息显示,对系统处理没什么特别意 义。可以按自己喜好的方式设置科目类型,如按会计六要素,即资产、负债、所有者权益、收入、费用、 利润设置六个科目类型,也可以按别的标准设置。 会计科目设置。会计科目设置菜单是:Configuration Æ Financial Accounting Æ Financial Accounts Æ List of Accounts 。 x Parent: 上级科目。 x Account Type: 科目类型,即前文所述中设置的科目类型。 x Internal Type: 科目内部类型,有 Receivable(应收)、Payable(应付)、View(视图)、Consilidation (联合)、Others(其它)、Closed(已关闭)几个类型。应收账款、应付账款通常是 Receivable、Payable 类型。View 类型通常用于上级科目,即有下级科目的科目其类型设为 View。View 类型的科目不可用 于记账,只可用于汇总。 x Reconcile: 可核销,通常只有应收、应付科目才勾选。勾选了的科目,系统允许通过转帐或付现进行 核销。 x Display History: 勾选的话,系统打印总帐时,会打印科目的明细记录,而不仅仅只打印科目汇总值。 x Default Taxes: 附加于科目上的税种。 x Consolidated Children: 和 Consilidation(联合)类型使用。不是很清楚其用法。 OpenERP 应用和开发基础 33 三、 分类账(Journal)设置 分类账设置菜单是:Configuration Æ Financial Accounting Æ Financial Journals x Type: 分类账类型,有 Sale(销售)、Purchase(采购)、Cash(现金)、Gerneral(通用)、Situation(状 况)五个选项。当确认销售凭证,系统自动生成销售分录时,系统会自动查找“Sale”类型的分类账, 然后生成销售分录。如果系统找不到销售分类账,则此时的处理会报错。因此,系统至少要设置一个 销售分类账。同理,系统至少要设置一个采购分类账(用于系统自动生成采购分录)和现金分类账(用 于系统自动生成收、付款分录)。如果不使用系统的自动生成分录的功能,而是完全手工录入分录, 则不需要设置上述三个分类账。 x View: 分类账显示视图。该视图定义记账凭证录入界面上应显示的分录字段及显示顺序。可以自定义 视图,参见后文“分类账视图定义画面”。 x Entry Sequence: 该分类账的记账凭证的凭证号序列生成器。即每当录入新分录时,系统调用该序列 生成器生成下一个凭证号。由于中国会计要求一个月内的所有凭证都按顺序编号,因此,为了保证同 一序号系列,最好所有分类账都用同一个 Entry Sequence。Entry Sequence 在“管理员”菜单下配置。 x Invoice Sequence: 凭证号用的序列生成器。当分类账用于给凭证(而不是分录)分类时,要求设置该 OpenERP 应用和开发基础 34 序列生成器。 x Default Debit Account: 默认借方科目。当在该分类账上输入分录时,如果已经输入了“贷方”,系统 自动使用这里设置的科目生成“借方”行。本设置主要是辅助分录输入。 x Default Credit Account: 默认贷方科目。当在该分类账上输入分录时,如果已经输入了“借方”,系统 自动使用这里设置的科目生成“贷方”行。本设置主要是辅助分录输入。 x Entry Controls: 设置该分类账允许使用和限制使用的会计科目。这主要用于减少分录输入错误。 分类账视图定义画面: 四、 税种设置 税种设置菜单:Financial Management --> Configuration --> Financial Accounting --> Taxes --> Taxes。 OpenERP 应用和开发基础 35 x Tax Name : a unique name required for this tax (such as 12% Sales VAT ), x Company : a required link to a company associated with the tax, such as the Main Company, x Tax Group : VAT or Other , used to determine which taxes on products can be substituted by taxes on partners, x Tax Type : a required field directing how to calculate the tax: Percent , ``Fixed`` , None or Python Code , (the latter is found in the Compute Code field in the Special Computation tab), x Applicable Type : a required field that indicates whether the base amount should be used unchanged (when the value is True ) or whether it should be processed by Python Code in the Applicable Code field in the Special Computation tab when the value is Code ), x Amount : a required field whose meaning depends on the Tax Type, being a multiplier on the base amount when the Tax Type is Percent , and a fixed amount added to the base amount when the Tax Type is Fixed , x Include in base amount : when checked, the tax is added to the base amount and not shown separately, x Domain : is only used in special developments, not in the core Open ERP system, x Invoice Tax Account :a General Account used to record invoiced tax amounts, which may be the same for several taxes or split so that one tax is allocated to one account, x Refund Tax Account : a General Account used to record invoiced tax refunds, which may be the same as the Invoice Tax Account or, in some tax jurisdictions, must be separated, x Tax on Children : when checked, the tax calculation is applied to the output from other tax calculations specified in the Childs Tax Account field (so you can have taxes on taxes), otherwise the calculation is applied to the base amount on the transaction, x Tax included in Price : when checked, the total value shown includes this tax, x Tax Application : selects whether the tax is applicable to Sale, Purchase or All transactions, x Child Tax Accounts : other tax accounts that can be used to supply the figure for taxation。You can use child taxes when you have a complex tax situation that you want to hide your end users from. For example, you might define a motor mileage expenses product with a composite tax made up of two child taxes – a non-reclaimable private element and a reclaimable business element (which is the case in some European OpenERP 应用和开发基础 36 countries).When your staff come to claim motor mileage, they do not need to know about this taxation, but the accounting impact of their claim will be automatically managed in Open ERP. The fields above apply the taxes that you specify and record them in the general accounts but don’t provide you with the documentation that your tax authorities might need. For this use the Tax Declaration tab to define which Tax Cases should be used for this tax: x Invoices/Base Code : tax case to record the invoiced amount that the tax is based on, x Invoices/Tax Code : tax case to record the invoiced tax amount x Credit Notes/Refund Base Code : tax case to record the refund invoice amount that the tax is based on, x Credit Notes/Refund Tax Code : tax case to record the refund invoice tax amount. 第四节 库存信息设置 一、 理解 OpenERP 的库存管理 首先,OpenERP 是通过记录产品在库存间的移动来记录库存数量的。OpenERP 的数据库中没有库存 数量的字段,它的库存数量是实时计算得来的。OE 的库存管理不记录库存数量,它记录的是库存移动, 记录在 stock_move 表中。例如采购进货时,入库单上的每一条进货明细对应 stock_move 的一条记录,记 录该货物移动的源库位、目标库位,数量,移动日期,移动状态(已发生 or 尚未发生)。计算产品库存时, 汇总该产品的 stock_move,入库减去出库的 Move,即得该产品的总库存。如果只要计算某库位的产品库 存,汇总目标库位是该库位的 move 数量,减去源库位是该库位的数量,即得库存。或许有人要问,采购 入库时,是从供应商处提取货物,记入我方仓库,库存移动的源库位在哪?是的,OpenERP 的库存管理中, 为了解决此类问题,设置了若干虚拟库位,分别对应 Supplier、Customer、Production 等。采购入库时,从 供应商的虚拟库位 Supplier Location 移动到本公司库位,销售出库时,从本公司库位移动到客户的虚拟库 位 Customer Location。生产原料出库时,从公司库位到虚拟库位 Production Location,车间成品入库时,从 Production Location 移动到公司库位。甚至库存盘盈盘亏时,系统记录的是公司库位到虚拟库位 Inventory loss Loction 的库存移动。 在业务伙伴的 Stock Properties 中,可以为每一业务伙伴设置 Supplier Location 和 Customer Location。 Supplier Location、Customer Location 可以是真实的库位,也可以是为了记录库存移动而虚设的库位。在产 品的 Counter-Part Locations Properties 中,可以为每一产品设置 Production Location 和 Inventory loss Loction。 同样的,Production Location、Inventory loss Loction 可以是真实的,也可以是虚设的。例如,可以将每个 生产车间当成一个生产库位进行设置。 其次,关于虚拟库存。虚拟库存在 OpenERP 中叫 virtual stock, futurestock,故名思议,是将来库存, 不是现在的库存(现在的库存叫 real stock)。虚拟库存的概念是,将要进货的数量减去将要出货的数量, 加上现存的数量,即得虚拟库存。因为 2 天内和 10 天内将要进货、出货的数量不同,所以虚拟库存的数 量根据计算日期而异。虚拟库存的意义是,例如,某笔销售业务,客户要在 5 天后提货 100 件。此时,销 售员要检查库存是否足够,但他应该检查的是 5 天后的库存,而不是现在的库存。所以,对实际业务而言, 重要的是虚拟库存,而不是实际库存。 第三,Warehouse 和 Location。Warehouse 是仓库,对应公司真实存在的仓库。一个仓库通常包含若干 个库位(Location),如,合格品区、收货区、辅助区、不合格品区。在 OpenERP 中,Warehouse 包括收货 区、出货区、存货区三个库位。当然,简单情况,可以将三个区设成同一个库位。Location 是库位,库位 可以真实存在,也可以是虚拟的。库位下面还可以包括若干子库位,如下图所示。库存计算、库存移动都 是针对库位的,不是针对仓库的。所以,库位是 OpenERP 库存管理的核心概念。 OpenERP 应用和开发基础 37 第四,库位链。OpenERP 中,可以设置库位链来跟踪货物的移动顺序。例如,假如某仓库的入库程序 是,收货区 Æ 验货区 Æ 存货库区。那么,可以设置库位链:收货区库位 Æ 验货区库位 Æ 存货库区 库位,当收货人确认后,系统自动增加收货区到验货区的库存移动,验货人确认后,系统自动增加验货区 到存货库区的库存移动。也即是,设置好库位链后,货物可以手动或者自动在库位链间移动。 二、 库位和仓库设置 库位设置,菜单 Stock Management Æ Configuration Æ Locations,画面如下。 x Location Type: 库位类别,可选类别有:(supplier,Supplier Location),(view,View),(internal,Internal Location) , (customer,Customer Location) , (inventory,Inventory) , (procurement,Procurement) , (production,Production)。Supplier Location、Customer Location 分别对应采购入库的源库位、销售出库 的目标库位,可用于业务伙伴的 Stock Properties 的设置。View 通常是虚拟库位,用于攘括子库位。 Internal Location 通常是真实的存放货物的库位,和我们一般理解的库区的概念最接近。Inventory 是盘 盈盘亏的库位,库存盘点时,盘盈的话,相当于从 Inventory Location 移动到公司库位,盘亏的话相当 OpenERP 应用和开发基础 38 于从公司库位移动到 Inventory Location。Production 通常对应到生产车间的在产库存。Procurement 用 于产品设置中的 Counter-Part Locations Properties 的 Procurement 库位的设置,具体含义尚不太清楚。 x Inventory Account: 入库、出库时的会计科目。产品出库时会计分录的贷方,产品入库时会计分录的 借方。对于商业流通企业,通常是“1036 库存商品”。 x Parent Location: 父库位。 x Location Address: 库位地址,真实库位的话,可以设置库位地址。 x Icon: 库位显示用图标,没啥含义。 x Chained Location Type: 库位链类型,可选项有:(none,None),(customer,Customer),(fixed,Fixed Location)。None 表示没有库位链,Fixed 表示本库位链接的下一库位是 Chained Location If Fixed 所设 置的库位,Customer 表示本库位链接的下一库位是出入库单上的业务伙伴的“Customer Location”。 x Chained Location If Fixed: 本库位的库位链的下一库位。 x Automatic Move: 是否自动移动到库位链的下一库位,可选值有:('auto', 'Automatic Move'), ('manual', 'Manual Operation'), ('transparent', 'Automatic No Step Added')。Automatic Move,系统自动创建一条本库 位到下一库位的库存移动记录。Manual Operation,要求手工确认后,系统才会创建库位链间的库存移 动记录。Automatic No Step Added,自动沿库位链移动到最终库位,不生成中间各库位间移动的库存 移动记录。 x Chained Delay (days): 移动到下一库位时,延迟天数。 x Localisation: 库位所处地理位置坐标。可以用于计算本库位到客户所在地的距离,从而为客户选择最 佳出货仓库。 仓库设置,菜单 Stock Management Æ Configuration Æ Warehouse,画面如下。 三、 设置最小库存规则 最小库存规则,也叫订货点,设置菜单 Stock Management Æ Automatic Procurements Æ Minimum Stock Rules,画面如下。 x Name: 订货点(OP,Order Point)名称。 x Location: 本订货点适用库位。 x Product: 本订货点适用产品。比较麻烦的是,OpenERP 只能逐个产品设置订货点,不能批量设置。 x Min Quantity: 当库存低于此数量时,启动自动订货流程。系统每天检查库存,如果低于此值,系统 自动生成采购申请。 x Max Quantity: 自动补货数量。当库存低于最小库存时,系统自动补货到此值。 x Qty Multiple: 自动补货时,采购数量调整到此值的倍数。例如,根据 Max Quantity 计算得到补货数 量为 13,Qty Multiple 的值为 5,则系统会自动调整补货数量为 15(Qty Multiple 的倍数)。 x Purchase Order: 当自动生成了采购订单时,此处记录当前补货的订单号。 OpenERP 应用和开发基础 39 四、 库存移动(stock_move) 菜单 Stock Management Æ Traceability Æ Low Level Æ Stock Moves 可以查看库存移动记录。每条库存移动 记录表示一个产品从源库位到目标库位的一次移动。 x Source Location:本库存移动的源库位。 x Dest. Location:本库存移动的目标库位。 x Product:本库存移动的产品。 x Date:本库存移动计划的移动时间,如果移动已经完成,记录实际移动实际。 x Packing List:本库存移动所属的装箱单。 x Production Lot:生产批号,通常是入库或出库时填写,记录本库存移动的产品的生产批号。 x Tracking Lot:跟踪批号,通常是入库或出库时填写,跟踪本库存移动的产品的追溯批号。 OpenERP 应用和开发基础 40 x Splite in production lots:如果本次库存移动的产品含有多个批次,则需要根据批次裂开成多条移动记 录。 x Status :可能的状态有,('draft', 'Draft'), ('waiting', 'Waiting'), ('confirmed', 'Confirmed'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Canceled')。 五、 装箱单(Packing List) 在 OpenERP 中,出库单、入库单、库存调拨单,内部实现都是用 Packing List 对象,对应的数据表是 stock_picking。一个 Packing List 包含若干条库存移动记录(stock_move)。菜单 Stock Management Æ Traceability Æ Low Level Æ Packing x Partner:本装箱单的业务伙伴,如果是入库单,通常是供应商,如果是出库单,通常是客户。 x Shipping Type:可能的值有,('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal'), ('delivery', 'Delivery')。对应着出库单、入库单、库间调拨单、发运单。 x Reference:装箱单名称(编号)。 x Date Order:装箱单生成时间。 x Planned Date:计划时间,即库存移动时间。 x Moves:库存移动明细。 x Split move lines in two:将本装箱单裂开成多张装箱单。 x Status:可能的状态有,('draft', 'Draft'), ('auto', 'Waiting'), ('confirmed', 'Confirmed'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Canceled')。 x Validate:确认装箱单,这会使得装箱单的状态由'Available' 变成’Done’。 x Create invoice:画面右边的 Actions,用于生成本装箱单对应的财务票据。 x Return packing:画面右边的 Actions,用于退货,当本装箱单上的物品不合格,需要退货时,适用此 功能。 OpenERP 应用和开发基础 41 六、 库存盘点 菜单 Stock Management Æ Periodical Inventory 用于库存盘点。OpenERP 的库存盘点,内部实现是,每 一个被盘点的产品,都生成一条库存移动记录。 Stock Inventory Lines:盘点单明细。 Fill Inventory:右边的 Action 功能,将选定库位的产品及库存数量,全部列出显示到盘点单上。 Set Stock to 0:右边的 Action 功能,和 Fill Inventory 功能一样,不同的是,库存数量全清零。 Confirm Inventory:使得盘点结果生效,这会影响库存数量,并将自动生成盘盈盘亏的会计分录。 OpenERP 应用和开发基础 42 第四章 进销存案例实施 北京鹏瑞实业有限公司是一家商业公司,他们从北京维佳科技公司购进 A 产品,然后卖给上海福达公 司。本章将基于 OpenERP 搭建一个进销存系统,支持北京鹏瑞实业有限公司处理下述业务: x 产品采购,从询价开始,到采购物品入库。 x 产品销售,从报价开始,到销售产品出库。 x 库存管理,采购、销售中的入库、出库处理,以及库存查看、盘点等业务。 x 采购、销售业务记账,支持产品采购、销售业务的财务自动记账(系统自动生成相关会计分录)。 x 收付款处理,支持采购付款、销售收款及自动记账(系统自动生成收付款会计分录)。 搭建支持上述业务的进销存系统,首先要安装相关模块,而后要设置一些基础数据。支持上述业务, 需要设置下述基础数据: x 财务科目 x 分类账(Journal),包括销售、采购、现金分类账 x 税种,本案例将在系统中设置增值税 x 业务伙伴,本案例的业务伙伴有北京维佳科技公司和上海福达公司。 x 产品,本案例仅有一个产品,即 A 产品。 第一节 模块安装 本案例需要安装下述模块: x 产品管理 (the product module), x 库存管理 (the stock module), x 财会管理 (the account module), x 采购管理 (the purchase module), x 销售管理 (the sale module). 本案例将先安装 account module,然后安装 sale module,其它模块作为这两个模块的依赖模块,会自动安 装。 第一步,创建一个新数据库账套。如下图所示,特别注意不要载入演示数据。 OpenERP 应用和开发基础 43 第二步,登录账套,安装 Minimal Profile(安装中,配置公司名称为“北京鹏瑞实业有限公司”)。 第三步,安装 account 模块。 点击菜单:Administration Æ Modules Management Æ Modules Æ Uninstalled modules,选择模块 account,点击进入。而后点击右下方的按钮“Schedule for Installation”,然后点击右边工具条上的“Apply Scheduled Upgrades”安装 account 模块。安装时,先点击画面右下方的“Start Upgrade”按钮开始安装, 安装完后,点击右下方的按钮“Start configuration”开始配置。配置过程中,其它步骤都按缺省配置,唯 有下图的“创建会计年度”时,Chart of Account 要选择 None。 第四步,安装 sale 模块。 和第三步同样的方法,安装 Sale 模块。在 sale 模块的配置步骤中,下图所示的“配置销售订单物流方 式”中,Shipping Default Policy 选择“Invoice Based on Deliveries”。这个选项告诉系统根据发货单开发票。 第五步,设置用户语言为英文。 由于目前的界面汉化很多术语不太对,本案例采用英文界面讲述。如果前述的安装步骤中,界面显示 一直是中文,则点击画面右上角的“首选项”,设置用户语言为英文。如果已经是英文,则不必修改。 OpenERP 应用和开发基础 44 第六步,确认。 上述模块装好以后,首页显示的菜单如下图所示: 第二节 财务数据设置 本案例需要设置的财务数据有:会计科目表、分类账(Journal)、和税种(增值税)。 一、 设置会计科目表 第一步,设置科目类型。 点击菜单:Financial Management Æ Configuration Æ Financial Accounting Æ Financial Accounts Æ Account Types 。新建下表中的科目类型。设置方法及表中各字段的含义,请参看第三章。 OpenERP 应用和开发基础 45 Acc. Type Name Code Deferral Method Partner account Sequence Sign on Reports 视图 view none FALSE 5 Positive 收入 income unreconciled FALSE 5 Positive 支出 expense unreconciled FALSE 5 Positive 现金 cash balance FALSE 5 Positive 其它 other none FALSE 5 Positive 第二步,设置会计科目表。 点击菜单:Financial Management Æ Configuration Æ Financial Accounting Æ Financial Accounts Æ List of Accounts 。新建下表中的会计科目。设置方法及表中各字段的含义,请参看第三章。未列入表中的字段, 按系统自动提供的缺省值设置。 Code Name Account Type Parent Internal Type Reconci le 0 迷你科目表 视图 view 不勾 1001 库存现金 现金 0 other 不勾 1002 银行存款 现金 0 other 不勾 1036 库存商品 其它 0 other 不勾 1014 应收账款 收入 0 view 不勾 101401 上海福达公司 收入 1014 receivable 勾选 101402 维佳科技公司 收入 1014 receivable 勾选 2011 应付账款 支出 0 view 不勾 201101 维佳科技公司 支出 2011 payable 勾选 201102 上海福达公司 支出 2011 payable 勾选 2015 应交税费 其它 0 view 不勾 201501 应交增值税(销项税) 其它 2015 other 不勾 201502 应交增值税(进项税) 其它 2015 other 不勾 6001 主营业务收入 其它 0 other 不勾 第三步,确认科目表设置。 会计科目设置好以后,点击菜单:Financial Management Æ Configuration Æ Financial Accounting Æ Financial Accounts Æ Chart of Accounts ,应看到下图所示的会计科目表。 OpenERP 应用和开发基础 46 二、 设置分类账(Journal)和税种 第一步,设置分类账。 点击菜单:Financial Management Æ Configuration Æ Financial Accounting Æ Financial Journals ,新建 下述三个分类账。设置方法及表中各字段的含义,请参看第三章。未列入表中的字段,按系统自动提供的 缺省值设置。 Journal Name Code Type View Entry Sequence Default Debit Account Default Credit Account 采购分类账 PUJ Purchase Journal View Account Journal 销售分类账 SAL Sale Journal View Account Journal 现金分类账 CASH Cash Cash Journal View Account Journal 银行存款 银行存款 第二步,设置增值税。 点击菜单:Financial Management Æ Configuration Æ Financial Accounting Æ Taxes Æ Taxes ,新建下 表两个税种。设置方法及表中各字段的含义,请参看第三章。未列入表中的字段,按系统自动提供的缺省 值设置。 Tax Name Amount Invoice Tax Account Tax Application 应交增值税(销项税) 0.17 201501 应交增值税(销项税) Sale 应交增值税(进项税) 0.17 201502 应交增值税(进项税) Purchase OpenERP 应用和开发基础 47 第三节 业务伙伴和产品信息设置 第一步,点击菜单:Partners Æ Partners ,新建下表两个业务伙伴。设置方法及表中各字段的含义,请参 看第三章。未列入表中的字段,按系统自动提供的缺省值设置。 Name Custo mer Suppl ier Contact Name Address Type Street Account Receivable Account Payable 上海福达公 司 勾选 不勾 上海福 达公司 Default 五一南 路68号 101401 上 海福达公司 201102 上 海福达公司 维佳科技公 司 不勾 勾选 维佳科 技公司 Default 海淀区 夏阳村 101402 维 佳科技公司 201101 维 佳科技公司 第二步,设置产品分类。 点击菜单:Products Æ Configuration Æ Products Categories ,新建一个产品分类“所有产品”。 第三步,设置 A 产品信息。 点击菜单:Products Æ Products,新建一个 A 产品。各字段值如下(未说明者按系统默认值): x Name:A 产品 x Code:001 x Category:所有产品 x Income Account:6001 主营业务收入 x Expense Account:1036 库存商品 x Sale Taxes:应交增值税(销项税) x Purchase Taxes:应交增值税(进项税) 第四节 采购业务测试 一、 采购订单 点击菜单:Purchase Management Æ New Purchase Order,新建下图所示订单。订单从业务伙伴“维佳 科技公司”采购 A 产品 100 件。 x 添加产品明细:新建的订单,第一次点击 Purchase Order Lines 行右边的按钮时,系统保存订单,第二 次点击,则弹出产品选择窗口。在该窗口选择产品、输入数量、价格等信息,添加产品明细行。 x 金额计算:点击右下方的 Compute 按钮,系统自动计算订单的税额和总价。税额计算方法是,根据产 品上设置的税种计算。A 产品的增值税率是 17%。 x 订单确认:新建的订单,当添加好产品明细后,点击右下方的“Confirm Purchase Order”按钮,表示 确认按钮。实际工作中,这一步通常是已报主管同意后,确认该订单。而后,将订单传真给供应商确 认,供应商签字确认回传后,点击右下方的“Approved by Supplier”按钮。此时,系统自动产生一张 采购凭证送财务部门财务部门据此核对供应商送来的发票以及付款和做帐。一张收货单送仓管部门, 仓管部门据此收货。 x Received:仓库收到货物的话,此处自动打勾(订单对应的 Packing List 入库确认后,系统自动勾选本 字段)。 x Invoiced&Paid:出纳付完采购款项,核销(Recocile)本采购单的应付账款后,此处自动打勾。 x Invoicing Control:在 Delivery & Invoices Tab 页,Invoicing Control 控制采购凭据生成策略。选项有: From Order: a draft invoice will be pre-generated based on the purchase order. The accountant will just have OpenERP 应用和开发基础 48 to validate this invoice for control. From Picking:a draft invoice will be pre-genearted based on validated receptions. Manual:no invoice will be pre-generated. The accountant will have to encode manually. 在版本 5.06 中,实际测试的结果和上述解说稍有出入。选择 From Order 时,采购单“Approved by Supplier”后,会根据采购单上的明细金额自动生成财务凭据送往财务。选择 From Picking 时,系统不 会自动生成财务凭据,需要在仓库收货时候,点击画面上右边的“Create Invoice”创建采购凭据。此 种方式,可以根据实收数量和价格手工调整采购凭据上的相应项目。选择 Manual 时,只能由财务自 己做凭证,采购和仓库收货人员都不能创建采购凭据。当不使用 OE 的财务模块记账时,也许这种方 式很合适。 x Invoice:在 Delivery & Invoices Tab 页,如果系统生成了采购凭据,显示采购凭据的单据号,否则, 显示空白。 x 订单状态(Order Status):采购订单的可能状态有(前者为内部状态,后者为界面上显示的状态描述): ('draft', 'Request for Quotation'), ('wait', 'Waiting'), ('confirmed', 'Confirmed'), ('approved', 'Approved'), ('except_picking', 'Shipping Exception'), ('except_invoice', 'Invoice Exception'), ('done', 'Done'), ('cancel', 'Cancelled') draft:询价单 wait:似乎系统未使用 confirmed:主管确认了的采购订单 approved:供应商签字确认了的采购订单(订单传真给供应商,供应商签字后传回,然后在系统中点 击“供应商通过”按钮) done:已结单,采购物品已入库(对应 Packing List 已 Done),应付款项已核销(财务上已确认采购凭 证,且款项已付,付款记录已冲减/核销本凭证。) cancel:取消了的采购单 except_picking:由于产品不合格等原因,拒收单(以验货员拒收而异常结单的采购单)。 except_invoice:财务拒绝付款等原因而异常结单的采购单 x 确认产品库存:点击菜单 Products Æ Products,进入 A 产品画面,可以看到此时 A 产品的 Real Stock 没 有变化,Virtual Stock 增加了 100 件。 OpenERP 应用和开发基础 49 二、 采购财务处理 点击菜单:Financial Management Æ Invoices Æ Supplier Invoices,可以看到系统产生了一张下图所示 的采购凭证。 x Invoice Address:发票地址,系统自动提取业务伙伴中设置的发票地址。 x 应收账款:系统自动提取业务伙伴中设置的“Account Payable”科目。本例是“201101 维佳科技公司”。 x 采购成本科目:系统自动提取产品中设置的“Expense Account”科目,本例是“1036 库存商品”。 x Taxes:系统自动提取产品中设置的税种及税种的记账科目,本例是“应交增值税(进项税)”。 x 凭证确认:点击画面右下方的“Validate”按钮,确认凭证。此时,系统自动生成采购业务的会计分录。 并将应付账款记入对应业务伙伴账户。 x 确认应收账款:进入业务伙伴“维佳科技公司”的表单,确认“Total Payable”应增加采购凭证中的 金额,本例是“117.00”。 OpenERP 应用和开发基础 50 x 确认采购业务会计分录:点击菜单 Financial Management Æ Entries Encoding Æ Entries Encoding by Line,选择“采购分类账”,打开,可看见下述画面所示的会计分录。这个分录正是: 借:1036 库存商品 100 2015 应交税费 - 201501 应交增值税(进项税) 17 贷:2011 应付帐款 - 201101 维佳科技公司 117 OpenERP 应用和开发基础 51 三、 采购付款 月底,当拿到银行对账单后,可以根据对账单上的收、付款记录批量处理收付款的会计分录。点击菜 单:Financial Management Æ Entries Encoding Æ Entries by Statements Æ New Statement,新建一个对账单。 x Starting Balance:输入对账单上的期初额(上月余额)。 x Ending Balance:输入对账单上的本月余额。 x Statement lines:依次输入对账单上各收付款行。当 Type 中选择“Supplier”、Partner 选择“维佳科技 公司”时,系统自动调出“维佳科技公司”的应付款,填入 Amount 栏。应付款显示为负数、应收款 显示为正数。Reconcile 栏填入要核销的采购凭证,对应凭证核销以后,该采购订单上的字段“Invoiced & Paid”会被 Check。如果不填,系统不知道本笔付款对应哪张或哪几张采购凭证。这样,系统就不 能自动减少对应供应商的应付款记录。 x Balance:点击右下方的“Compute”按钮时,系统用“Starting Balance”加/减“Statement lines”中各 OpenERP 应用和开发基础 52 收付款项后的余额。按下“Confirm”按钮确认时,“Ending Balance”和“Balance”的值必须相等, 否则系统报错,不予确认。 x 对账单确认:按下右下方的“Confirm”按钮确认后,系统自动生成付款的会计分录。分录中的科目 “1002 银行存款”是对账单的 Journal“现金日记账”中设置的默认科目。系统生成的分录正是: 借: 2011 应付帐款 - 201101 维佳科技公司 117.00 贷:1002 银行存款 117.00 四、 采购入库处理 点击菜单:Stock Management Æ Incoming Products,打开系统生成的收货单。 x 收货:点击右下方的按钮“Products Received”表示接收货物,此时系统会提示输入接收货物的数量。 如果数量低于收货单上显示的“100”(对方分批送货的情况),系统自动产生一张剩余货物数量的收 OpenERP 应用和开发基础 53 货单,供下次收货用。“Unreceived Products”表示拒收货物,这会导致采购订单的状态变为“收货异 常”。 x Origin Reference:引起本 Packing List 的单据引用,如果是采购入库,通常是采购单号。如果是仓管 员手工新建的收货单,此处通常是手工输入的入库单号或发票号,以便于财务对账。 x Invoice Control:表示本 Packing List 对应的财务凭据(或说财务发票)的状态,有 Not from Packing, to be invoice,Invoiced 三种情况。Not from Packing 表示不是基于 Packing List 开票,也就是基于采购 订单开票或手工开票。to be invoice 表示待开票,这出现在基于 Packing List 开票的情况,需要点击画 面右边的“Create Invoice”开具财务凭据。Invoiced 表示已开票。 x Back Order:表示单据链中的前一单据。如某 Packing List,应收货 10 件,但由于种种原因,第一次 只收到 6 件,则 OE 会自动将该 Packing List 分裂成两个,一个 6 件,已收货;一个 4 件,待收货。此 时,后者的 Back Order 就是前一 Packing List。前者的 Back Order 为空。 x 确认库存:货物收下后,进入 A 产品表单画面,确认库存。此时 A 产品的 Real Stock 和 Virtual Stock 都增加了 100 件。 第五节 销售业务测试 一、 销售订单 点击菜单:Sales Management Æ Sales Orders Æ New Quotation,新建报价单,向上海福达公司销售 A 产品 50 件。 OpenERP 应用和开发基础 54 x 订单确认:添加好产品明细后,点击右下方的“Confirm Order”按钮,确认订单。此时系统自动生成 一张发货单送交仓库。根据“凭证生成方式”的设置,系统可能自动生成一张销售凭证给财务部门, 也可能要求再按一次“Create Invoice”按钮才生成凭证(手工确认后生成凭证的方式)。本例是后者。 x Picked:已发货的话,此处自动打勾(订单对应的 Packing List 出库确认后,系统自动勾选本字段)。 x Paid:核销(Recocile)本销售单的应收账款后,此处自动打勾。 x 订单状态(Order Status):销售订单状态有, ('draft', 'Quotation'), ('waiting_date', 'Waiting Schedule'), ('manual', 'Manual In Progress'), ('progress', 'In Progress'), ('shipping_except', 'Shipping Exception'), ('invoice_except', 'Invoice Exception'), ('done', 'Done'), ('cancel', 'Cancelled') draft:报价单 waiting_date:尚不太清楚,似乎是留待指定日期再处理的单子 manual:主管已确认,等待工厂生产的单子。如果订单上有“按订单生产”的产品,会进入这个状态。 progress:等待仓库发货及财务收款的订单。如果订单上全是“按库存生产”的产品,则主管确认后直 接进入此状态。 done:已结单,仓库已经出库,财务已经确认凭证,已收到款项,且已核销应收款。 cancel:取消了的采购单 shipping_except:仓库无法发货而异常结束的单子。 invoice_except:财务部门认为风险太大等原因而异常结束的单子。 OpenERP 应用和开发基础 55 x 确认业务伙伴事件:打开业务伙伴“上海福达公司”的表单,在“History”页,可以看到系统自动将 客户的本次购买行为记录在事件中了。 x Packing Policy:销售订单的“Other Data”页。有 Partial Delivery(部分送货)、Complete Delivery(一 次送货)两个选项。前者表示,仓库即使缺货,只要订单上的部分货物(部分明细项或部分数量)仓 库有,就允许仓管员发货。仓管员发货时,填入各明细项的实发数,系统会自动生成一张新发货单 (Packing List),包含未发部分的明细项和数量。后者表示,系统自动检查库存,只有仓库必须有订单 要求的所有明细项和数量,才允许仓管员发货。不过,实际上,系统也允许仓管员“强制发货”。前 者可能导致一张订单多次发货,增加运费。 x Shipping Policy:有 Payment before delivery、Invoice on Order After Delivery、Shipping & Manual Invoice、 Invoice from the Packing 几个选项目。 • Payment before delivery : Open ERP creates an invoice in the Draft state. Once this is confirmed and paid the delivery is activated. • Invoice on Order After Delivery : the delivery order is produced when the order is validated. A draft invoice is then created when the delivery has been completed. • Shipping & Manual Invoice : Open ERP starts the delivery from the confirmation of the order, and adds a button which you manually click when you’re ready to create an invoice. • Invoice from the Packing : invoices are created from the packing stage. x Invoice on:有 Ordered Quanlities、Shipped Quantities 两个选项。前者表示基于订单开票,后者表示基 于送货单开票。当一张订单分多次送货,或者实际送货数量和订单数量不同时,两个选项会不同。 x Incoterm:INCOTERMS 是 International Commercial Terms 的英文缩写,《INCOTERMS 2000》是国际 商会制定的关于贸易术语的国际惯例,它于 2000 年 1 月 1 日起生效。《INCOTERMS 2000》是在 《INCOTERMS 1990》的基础上经过修订而产生的。《INCOTERMS 2000》在中国被习惯称为"2000 年 通则",该通则中包含了 13 种贸易术语。按照其国际代码的第一个字母的不同,这 13 种术语被分为 四个组,分别称作 E 组、F 组、C 组和 D 组。具体情况见下表: E 组(启运) EXW Ex Works 工厂交货 F 组(主要运费未付) FCA Free Carrier 货交承运人 OpenERP 应用和开发基础 56 FAS Alongside Ship 装运港船边交货 FOB Free On Board 装运港船上交货 C 组(主要运费已付) CFR Cost and Freight 成本加运费 CIF Cost Insurance and Freight 成本保险费加运费 CPT Carriage Paid To 运费付至 CIP Carriage and Insurance Paid To 运费保险费付至 D 组(到达) DAF Delivered At Frontier 边境交货 DES Delivered Ex Ship 目的港船上交货 DEQ Delivered Ex Quay 目的港码头交货 DDU Delivered Duty Unpaid 未完税交货 DDP Delivered Duty Paid 完税后交货 二、 销售订单财务处理 点击菜单:Financial Management Æ Invoices Æ Customer Invoices,可以看到系统产生了一张下图所示 的销售凭证。 OpenERP 应用和开发基础 57 点击右下方的“Create”按钮,系统自动生成会计分录: 借:1014 应收账款 - 101401 上海福达公司 58.50 贷: 6001 主营业务收入 50 2015 应交税费 - 201501 应交增值税(销项税) 8.5 OpenERP 应用和开发基础 58 三、 销售出库处理 点击菜单:Stock Management Æ Outgoing Products,打开系统生成的出库单。 x Check Availability:检查库存是否满足出库单要求的数量。如果数量足够,则允许出库,这时,系统 会提示输入实际出库量。 x Force Availability:强制允许出库。默认情况下,库存不足时不允许出库。此按钮强行出库,即使数 量不足(强行部分出库)。 第六节 财务报表确认 下述菜单可以打印有关财务数据。 Financial Management Legal Statements Generic Reports Account Balance General Ledger Print Journal Print Central Journal Print General Journal x Account Balance:科目余额表 OpenERP 应用和开发基础 59 x General Ledger:总帐,实际上系统会连同科目的明细账一起输出(如果在科目设置画面勾选了“Display History”,系统默认是勾选)。 x Print Journal:打印出所选分类账上的所选分期的会计分录。 OpenERP 应用和开发基础 60 第五章 OpenERP 数据导出和导入 OpenERP 的数据导入导出有如下一些方法: x 数据库整体备份和恢复。 x 单表数据的 CSV 格式导入导出。 x XML 格式数据导入 x 使用 PostgreSQL 数据库本身的 COPY 命令导入导出数据。 x 编写数据导入导出的代码,可以调用 OpenERP 的 XML-RPC 接口,也可以 SQL 语句直接访问数据库。 这几个方法的复杂度依次递增,本章将介绍前四种方法。 第一节 数据库备份和恢复 在登录画面上点击按钮“数据库账套”,进入数据库操作画面。点击右上角的“备份”按钮,选择要 备份的数据库,输入超级管理员密码。点击“确定”按钮,即可备份选择的数据库到文件中文件名是 “databasename.dump”。如下图所示: 在数据库操作画面,点击右上角的“恢复”按钮,选择先前备份的数据库文件。输入超级管理员密码 和数据库账套名,点击“确定”按钮。这样就可将备份数据完全恢复到新数据库。 第二节 CSV 数据导出导入 OpenERP 在任何一个列表视图上,都支持 CSV 格式的数据导出/导入。对于 Web-Client,画面左下角 OpenERP 应用和开发基础 61 有“导入|导出”按钮。GUI-Client 上,“表单”菜单的最下面,有“导入数据”、“导出数据”的菜单项。 不过,写作本文时的 OpenERP 5.06 版的 Web-Client 的导出功能比较强大,但导入功能不太好用,因此, 本文采用 GUI-Client 导入导出数据。 一、 数据导出 首先,为了便于理解导出数据和对象字段间的关系,也为了导出的数据能够用于导入,建议使用英文 界面导入导出数据(用户语言设为英文)。本文以业务伙伴数据的导出为例说明。 菜单“Partner Æ Partner”,打开业务伙伴画面。而后,点击菜单“表单 --> 导出数据”,画面如下: 左边的“可用字段”栏,显示了业务伙伴对象的所有字段及其关联对象的字段。有些特别字段说明如下。 x ID:安装模块或者导入数据时指定的标志该条记录的唯一 ID,这个 ID 通常在模块源码中 xxx_data.xml 文件中定义,或者 CSV 导入数据时 ID 列指定的值。模块安装时导入的数据一般都有该字段,后面手 工录入的数据该字段为空。用 CSV 格式导入数据时,如果指定 ID 列,则导入的数据也有该字段。数 据导入时,可以通过该字段引用先前导入的数据。例如,导入业务伙伴分类数据时 CSV 文件中指定 了 ID 列,则导入业务伙伴数据时可以直接用字段名“Categories/ID”引用业务伙伴分类。数据导入时, 该字段为”id”,即小写字母,否则导入会报错。 x Database ID:该条记录在数据库中的 ID。所有数据都有该字段。数据导入时,可以用该字段引用数 OpenERP 应用和开发基础 62 据库中已存在的数据。例如,导入业务伙伴时,可以用字段名“Categories/Database ID”引用数据库 中的业务伙伴分类名。不过,由于查找 Database ID 不是很方便,通过 Database ID 引用数据,不如通 过 ID 引用更好用。数据导入时,该字段名为” db_id”。 x 选项:可以选择“用 Excel 打开”和“另存为 CSV”。为了便于使用该数据作为导入用,选择“另存 为 CSV”。系统导出的 CSV 是 UTF-8 编码的文件,直接用 Excel 打开中文显示为乱码。解决办法是, 选择用 Word 打开,然后在 Word 中另存为,选择系统默认编码,文件名不变,仍为 xxx.csv。之后再 用 Excel 打开就不是乱码了。 x 添加字段名:打勾,这样导出的文件的第一行为字段名。带有字段名导入时比较方便。 x Import Compatible:导入兼容,勾选时,导出的数据能用于导入。勾选时,导出的字段名是对象内部 字段名,不是界面上显示的字段名;对于下拉选择框,导出的是选择项的内部名,不是界面上显示的 选择项名。不过,对于关联对象,如从业务伙伴列表画面导出业务伙伴和“业务伙伴分类(Categories)” 数据时,如果勾选本选项,则只允许导出“业务伙伴分类(Categories)”的 ID 和 Database ID 字段, 不允许导出其他字段。否则没法导入兼容。 x 导出记录数的限制,缺省情况下,列表视图上一页最多只显示 80 条记录。导出时,5.06 版只能导出 可见部分,即最多 80 条。不过,在 GUI-Client 的列表视图上,可以修改 limit 字段,改成足够大,则 就可以导出所有数据。列表视图上的 limit 是每页缺省的记录条数,默认是 80。Web-Client 上,不可 以修改每页的记录条数。不过 5.07 版好像没有这个导出数限制。 按图示中选择要导出的字段,导出的示例文件如下: Name,Country/ID,Country/Database ID,Country/Country Name,Categories/Database ID,Categories/Full Name,Customer 上海号角电脑有限公司,base.cn,46,中华人民共和国,,,True 上海液压件一厂有限公司,base.cn,46,中华人民共和国,,,True 英特尔 (中国) 有限公司上海分公司,base.cn,46,中华人民共和国,4,重要客户,False ,,,,3,金牌供应商, 注意最后一行,该业务伙伴属于两个分类:“重要客户”和“金牌供应商”,所以导出了两行。”base.cn”是 Base 模块中定义的国家 ID(cn 为中国),”46”为“中国”在数据库中的 ID。 二、 数据导入 相比数据导出,OpenERP 的数据导入比较复杂,需要具备一些数据库知识,以及对 OpenERP 的对象 间的关联有所了解,方能操作。通常,OpenERP 数据导入用的 CSV 文件的第一行写字段名。注意导入用 的字段名必须是内部字段名,或者说数据库中看到的 Table 的字段名,不能用界面上看到的显示用字段名。 后面各行是数据行。文件格式保存为 UTF-8 格式,CSV 可以用 Excel 编辑,而后另存为 CSV 格式,再用 其它工具(很多文本工具,如 UE,EmEditor 都具备该功能)转存为 UTF-8 编码的文件。 数据导入时,由于数据表间的关联关系,导入用的 CSV 数据有所不同。数据表间的关联关系通常有 三种情况,分别是多对一、多对多、一对多。 下图是多对一的情况: 下图是多对多的情况(一个产品有多个税别,一个税种适用于多个产品): OpenERP 应用和开发基础 63 下图是一对多的情况(一个业务伙伴有多个联系人): 下面导入下述 CSV 文件的数据到业务伙伴中。 ID,Name,Country/ID,Categories/Database ID,Customer,Contacts/Contact Name id,name,country:id,category_id:db_id,customer,address/name partner_001,某某有限公司,base.cn,"3,4",True,张金玲 ,,,,,李四 x 字段名的处理,该数据中,第一行为显示字段名,这里列出来是为了方便理解,实际导入时,要删除 该行。第二行是内部字段名,该行才是导入文件中要用的字段名。可以根据导出文件的字段来编辑该 行(勾选导入兼容),或者查看数据库中 Table 的字段名来编辑该行。 x ID,数据导入时,可以指定 ID 列(不是必须的),这样,别的关联数据导入时就可以通过 ID 引用本 条数据。本例中指定本条数据的 ID 是” partner_001”。ID 可以是任意字符(”.”除外),但要保证不重 复。 x 多对一关系的处理,本例中,业务伙伴和国家是多对一关系。字段名是” country:id”(或者” country:db_id”),表示业务伙伴的 Country 字段通过国家对象的 id 字段(或者 db_id,即数据库 ID) 引用国家对象。base.cn 是“中国”的 ID。当国家对象已经导入好了,且导入时导入了 ID 列,此处可 以通过 ID 引用国家对象。如果没有导入 ID 列,可以用 db_id 引用国家对象。 x 多对多关系的处理,业务伙伴和业务伙伴分类是多对多关系,处理方法和多对一关系基本相同。字段 名也是”category_id:db_id”,category_id 是业务伙伴中“业务伙伴分类”的字段名,db_id 表示通过 Database ID 引用“业务伙伴分类”对象。和多对一不同的是,数据行用引号括起,填入多个 ID(本 例是"3,4"),表示多对多关系。 x 一对多关系的处理,业务伙伴和联系人间是一对多关系,即一个业务伙伴有多个联系人。一对多关系 有两种处理方法,一种是按“多对一”处理,一种是按“一对多”处理。如本例,从“业务伙伴”方 面看,是一对多关系,但从“联系人”方面看,是多对一关系。如果导入业务伙伴数据时,不填联系 人信息;而是导入联系人对象时,填入业务伙伴信息,那么就可以按“多对一”处理。本例是按“一 对多”的办法导入。一对多关系,字段名是” address/name”,表示联系人对象的 name 字段。address 是业务伙伴中联系人的字段名。导入数据格式是“多行”,即第一行含有完整数据,后面行只含有“多” 方的数据。 数据导入的操作。点击菜单“表单 --> 导入数据”,选择 CSV 文件,点击“自动检测”按钮。如下图 所示。 OpenERP 应用和开发基础 64 “自动检测”按钮会自动提取 CSV 文件的第一行中的字段名,如果字段名不对,它会报错,错误信息中 会指出哪个字段不正确。点击确定,即可导入上述业务伙伴数据,如果数据有误,报错信息中会指明哪个 数据不正确。 第三节 会计科目数据导入 本节以会计科目的导入为例,进一步补充说明 CSV 数据导入方法。OpenERP 的会计科目数据有两部 分,一是科目类型,二是科目本身。导入时要先导入科目类型数据,再导入科目数据。实际工作中,建议 按下述步骤导入会计科目数据。 1) 使用 Excel 编辑科目类型表 2) 编辑导入用 CSV 格式的科目类型数据表 3) 导入科目类型 4) 使用 Excel 编辑会计科目表 5) 编辑导入用 CSV 格式的科目数据表 6) 导入会计科目 下文将依照上述步骤导入进销存案例中的科目数据。注意,为了避免和已有科目代码重复而出错,进行下 述实验时,最好保证账套没有安装过任何 Chart of Account 。 一、 科目类型导入 1) 编辑科目类型表。 Acc. Type Name Code Deferral Method Partner account Sequence Sign on Reports 视图 view None FALSE 5 1 OpenERP 应用和开发基础 65 收入 income unreconciled FALSE 5 1 支出 expense unreconciled FALSE 5 1 现金 cash Balance FALSE 5 1 其它 other None FALSE 5 1 表中第一行为科目类型界面上显示的字段名。必须输入的字段都要纳入数据表中。 2) 编辑 CSV 格式的科目类型表。 Acc. Type Name Code Deferral Method Partner account Sequenc e Sign on Report s id name code close_metho d partner_accoun t sequenc e sign myacc_type_view 视图 view none FALSE 5 1 myacc_type_income 收入 income unreconcile d FALSE 5 1 myacc_type_expens e 支出 expens e unreconcile d FALSE 5 1 myacc_type_cash 现金 cash balance FALSE 5 1 myacc_type_other 其它 other none FALSE 5 1 和前一个表格相比,本表格增加了 id(注意,必须是小写)列,id 列方便其它数据导入时引用本表格的数 据。本表格增加了第二行,该行显示的是数据导入用的字段名,是数据对象的内部字段名,不是界面上显 示的字段名。 3) 另存为 CSV 格式,导入数据。 注意,CSV 格式文件不要包含前述表格的第一行数据,且 CSV 格式文件必须保存为 utf-8 编码格式。科目 类型的 CSV 格式数据如下。 id,name,code,close_method,partner_account,sequence,sign myacc_type_view,视图,view,none,FALSE,5,1 myacc_type_income,收入,income,unreconciled,FALSE,5,1 myacc_type_expense,支出,expense,unreconciled,FALSE,5,1 myacc_type_cash,现金,cash,balance,FALSE,5,1 myacc_type_other,其它,other,none,FALSE,5,1 二、 会计科目导入 1) 编辑科目表 Code Name Accoun t Type Company Outgoing Currencie s Rate Internal Type Reconcil e 0 迷你科目表 视图 鹏瑞实业 current View 不勾 1001 库存现金 现金 鹏瑞实业 current Others 不勾 1002 银行存款 现金 鹏瑞实业 current Others 不勾 1036 库存商品 其他 鹏瑞实业 current Others 不勾 OpenERP 应用和开发基础 66 1014 应收账款 收入 鹏瑞实业 current View 不勾 10140 1 上海福达公司 收入 鹏瑞实业 current Recievabl e 勾 10140 2 维佳科技公司 收入 鹏瑞实业 current Recievabl e 勾 2011 应付账款 支出 鹏瑞实业 current View 不勾 20110 1 维佳科技公司 支出 鹏瑞实业 current Payable 勾 20110 2 上海福达公司 支出 鹏瑞实业 current Payable 勾 2015 应交税费 其他 鹏瑞实业 current View 不勾 20150 1 应交增值税(销项 税) 其他 鹏瑞实业 current Others 不勾 20150 2 应交增值税(进项 税) 其他 鹏瑞实业 current Others 不勾 6001 主营业务收入 其他 鹏瑞实业 current Others 不勾 2) 编辑 CSV 类型的科目表 Code Name Account Type Company Outgoing Currencies Rate Inter nal Type Reconci le id code name user_type:i d parent _id:id company _id:db_ id currency_m ode type reconci le myacc _0 0 迷你科目 表 myacc_type_ view 1 current view FALSE myacc _1001 1001 库存现金 myacc_type_ cash myacc_ 0 1 current Other FALSE myacc _1002 1002 银行存款 myacc_type_ cash myacc_ 0 1 current Other FALSE myacc _1036 1036 库存商品 myacc_type_ other myacc_ 0 1 current Other FALSE myacc _1014 1014 应收账款 myacc_type_ income myacc_ 0 1 current View FALSE myacc _1014 01 101401 上海福达 公司 myacc_type_ income myacc_ 1014 1 current recei vable TRUE myacc _1014 02 101402 维佳科技 公司 myacc_type_ income myacc_ 1014 1 current recei vable TRUE myacc _2011 2011 应付账款 myacc_type_ expense myacc_ 0 1 current view FALSE myacc _2011 01 201101 维佳科技 公司 myacc_type_ expense myacc_ 2011 1 current payab le TRUE OpenERP 应用和开发基础 67 myacc _2011 02 201102 上海福达 公司 myacc_type_ expense myacc_ 2011 1 current payab le TRUE myacc _2015 2015 应交税费 myacc_type_ other myacc_ 0 1 current view FALSE myacc _2015 01 201501 应交增值 税(销项 税) myacc_type_ other myacc_ 2015 1 current other FALSE myacc _2015 02 201502 应交增值 税(进项 税) myacc_type_ other myacc_ 2015 1 current Other FALSE myacc _6001 6001 主营业务 收入 myacc_type_ other myacc_ 0 1 current other FALSE 上表数据说明如下。 x 数据导入时,第一行的字段名尽量使用对象的内部字段名,即数据库中对象对应的数据表的字段名, 不要使用界面显示的字段名。使用界面显示的字段名,数据导入时,系统的自动检测功能一般也能正 确识别字段,但有时会出错。 x ID 字段对应的内部字段名是“id”,Database ID 字段对应的内部字段名是“db_id” 。 x Account Type 字段的内部字段是“user_type”,当通过 ID 引用科目类型时,字段名写法是“user_type:id”。 x Company 字段的内部字段名是 company_id,当通过 Database ID 引用数据时,字段名写法是 “company_id:db_id”。 x Internal Type 字段,使用的是选择项的内部名,不是界面上看到的选择项名。选择项的内部名可以从 源码中该字段的定义处查得。 3) 另存为 CSV 格式文件。 id,code,name,user_type:id,parent_id:id,company_id:db_id,currency_mode,type,reconcile myacc_0,0,迷你科目表,myacc_type_view,,1,current,view,FALSE myacc_1001,1001,库存现金,myacc_type_cash,myacc_0,1,current,other,FALSE myacc_1002,1002,银行存款,myacc_type_cash,myacc_0,1,current,other,FALSE myacc_1036,1036,库存商品,myacc_type_other,myacc_0,1,current,other,FALSE myacc_1014,1014,应收账款,myacc_type_income,myacc_0,1,current,view,FALSE myacc_101401,101401,上海福达公司,myacc_type_income,myacc_1014,1,current,receivable,TRUE myacc_101402,101402,维佳科技公司,myacc_type_income,myacc_1014,1,current,receivable,TRUE myacc_2011,2011,应付账款,myacc_type_expense,myacc_0,1,current,view,FALSE myacc_201101,201101,维佳科技公司,myacc_type_expense,myacc_2011,1,current,payable,TRUE myacc_201102,201102,上海福达公司,myacc_type_expense,myacc_2011,1,current,payable,TRUE myacc_2015,2015,应交税费,myacc_type_other,myacc_0,1,current,view,FALSE myacc_201501,201501,应交增值税(销项税),myacc_type_other,myacc_2015,1,current,other,FALSE myacc_201502,201502,应交增值税(进项税),myacc_type_other,myacc_2015,1,current,other,FALSE myacc_6001,6001,主营业务收入,myacc_type_other,myacc_0,1,current,other,FALSE OpenERP 应用和开发基础 68 第四节 XML 数据导入导出 在 OpenERP 的各个模块中,都要导入一些基础数据和演示数据。各模块目录下的 x_data.xml 文件通 常是本模块所必须的基础数据,x_demo.xml 是本模块的演示数据。本节介绍 OpenERP 的 xml 导入数据的 格式。 一、 XML 数据导入 06229 cs123 邬培英 邬培英 zh_CN Asia/Chongqing 上例的 xml 数据将导入系统用户“邬培英”到 OpenERP 中,登录名:06229,登录密码:cs123,所属权限 组:base.group_user 和 cshaocai.group_haocaiuser。 x data 行,,一个 data 下面有若干个 record。noupdate 表示,当模块升级时是否更 新本条数据。对于 demo 数据,通常设置成 noupdate="1",即不更新,不指定 noupdate 的话,默认值 是 noupdate=”0”。 x record 行,表示数据表的一条记录,record 下有若干个 field,对应数据表的各列。model="res.users" 表示数据表 res_users,即本数据记录是插入到数据表 res_users。id="user_06229",表示本条记录的 id, 导入别的数据时通过这个 id 引用本条数据。 x field 行 , field 表示记录的一个字段值,可用属性有:name, eval, ref, search 。 06229表示字段 login 的值为”06229”,name 指明字段名,字段名就是数据表的列 名。本例的写法,系统会把”06229”当成字符类型导入,如果希望导入数字”06229”,则用下述写法: ,eval 表示计算,eval 的值是一个表达式,如”3+5”。 ref 表示引 用别的数据,many2one 和 one2many 的数据通常用 ref 处理。ref="base.action_menu_admin"表示引用 base 模块中的 id=”action_menu_admin”的 record,该条 record 通常定义在 base 模块的数据文件 base_data.xml 中。本例是 many2one 的数据,下例是 one2many 的数据:。用户“邬培英”属于多个权限组, base.group_user 和 cshaocai.group_haocaiuser。也许直接用权限组的名称,而不是权限组的 id,引用权 限组更方便。如“base.group_user”的名称是“Employee”,这种情况可以用 search 来实现。 表示,搜索数据 表”res.groups” (model="res.groups")中 name='Employee'的记录,作为字段"groups_id"的值。 OpenERP 应用和开发基础 69 二、 XML 数据导出 如果直接在 OpenERP 的界面上输入了一些数据,或者创建,修改了一些对象、视图、Action、工作流 等,怎么把它导出来,在别的环境上安装呢。模块 base_module_record 就带有这个功能。安装该模块后, 菜单 Administration Æ Customization 下增加菜单项 Module Creation。 Start Recording, Stop Recording, Save Recorded Module,按下 Start Recording 后,系统记录数据库的一 切变化,包括各数据表的记录增加、更新等,直到按下 Stop Recording。Save Recorded Module 输出系统记 录下的数据变化,输出格式是 XML 数据记录。 Export Customizations As a Module,如果没有通过 Start Recording 记录界面上的操作,怎么导出系统数 据呢?Export Customizations As a Module 可以完成这个功能。Export Customizations As a Module 要求选择 一些对象(或者说数据表),指定一个时间,系统将导出选定的数据表中的,指定时间后的发生过变化的 数据。导出结果自动生成 OpenERP 的模块形式。导出的模块主要部分就是 XML 的数据文件,期格式和前 一节说的 XML 数据一样。 第五节 PostgreSQL 数据库数据导出导入 基于 CSV 文件的数据导入导出有个限制,如果某对象,没有对应的“列表”视图,则无法导出导入 数据。这种情况下,可以考虑两个办法,一是自己编写代码导出导入,不过,还有一个更简单的办法是, 利用 PostgreSQL 自身的命令,直接从数据库导出导入。PostgreSQL 提供了 COPY 命令,可以将数据表的 数据导出到文件,以及将文件的数据导入到数据表。COPY 命令语法如下: COPY tablename [ ( column [, ...] ) ] FROM { 'filename' | STDIN } [ [ WITH ] [ BINARY ] [ OIDS ] [ DELIMITER [ AS ] 'delimiter' ] [ NULL [ AS ] 'null string' ] ] COPY tablename [ ( column [, ...] ) ] TO { 'filename' | STDOUT } [ [ WITH ] [ BINARY ] [ OIDS ] [ DELIMITER [ AS ] 'delimiter' ] [ NULL [ AS ] 'null string' ] ] OpenERP 应用和开发基础 70 下面介绍使用 COPY 命令导出导入数据的具体操作步骤。如果是 Windows,先要安装 psql 程序(Linux 的话,PostgreSQL 安装包自带该程序)。从 sourceforge(http://psql.sf.net/)下载开源软件”PostgreSQL Frontend”,直接安装即可。 下文以“期初库存盘点”为例,介绍怎么用 COPY 命令导入期初产品库存数量。OpenERP 中 Stock Management Æ Periodical Inventory 用于盘点各产品的库存量。当第一次使用 OpenERP 时,希望能批量导 入各产品的期初库存量。但是,OpenERP 的盘点单中,各产品的库存明细在对象“Stock Inventory Lines” 中(数据表 stock_inventory_line),从 GUI Client 上无法直接导出导入该对象(该对象没有对应的列表视图), 从 Web Client 上,虽然有”Import/Export”按钮,但在本文写作的 5.06 版中,Import 似乎不好用。 x 新建一个草稿状的库存盘点单,菜单 Stock Management Æ Periodical Inventory Æ New Periodical Inventory,该盘点单中增加一个产品的盘点明细项保存(目的是用于导出数据,供编辑导入用数据参 考)。 x 进入数据库,进入 PostgreSQL Frontend 的命令界面,执行命令 psql dbname dbuser: D:\work>psql case1 openpg Password: Welcome to psql 7.4.6, the PostgreSQL interactive terminal. case1 是本文的示例数据库,openpg 是 OpenERP 默认安装的数据库用户名。输入 password,OpenERP 默认数据库密码是 openpgpwd。 x 导出库存盘点明细,命令如下: case1=# copy stock_inventory_line to 'd://work//a11.csv' delimiter as ','; COPY 1 case1=# 上述命令将数据表” stock_inventory_line”的数据导出到文件 d://work//a11.csv,以逗号为分割符。要注意 的是,1) 文件名必须是绝对路径,不可以是相对路径;2)COPY 命令是以 PostgreSQL 数据库服务器的 用户名执行,因此,必须确保该用户名拥有对指定文件的读写权限。Windows 上,PostgreSQL 数据库服 务器的用户名默认是“.\openpgsvc”。默认情况下,该用户不属于任何安全组,为了使得该用户拥有文件 读写权限,要将该用户加入必要的安全组(如 administrators)。 本命令导出的数据如下: id,create_uid,create_date,write_date,write_uid,inventory_id,location_id,product_id,product_uom,product_qty 1,1,2010-04-10 21:58:16.296,\N,\N,3,11,3,1,5 第一行是手工加上去的,实际导出数据只有第二行。inventory_id 是盘点单的 Database ID,location_id 是库 位,product_id 是产品,product_uom 是产品单位,product_qty 是库存数量。对应到画面显示的数据如下。 x 编辑盘点明细单,在 Excel 中编辑下述格式的 CSV 文件,将各产品的库存数量添加到 inventory_id=3 的盘点单上。 inventory_id,location_id,product_id,product_uom,product_qty,create_uid,create_date 3,11,3,1,10,1,2010-04-10 实际操作中,可以使用下图中的 Fill Inventory 功能,先把所有产品都显示到该盘点单上,再用“Set Stock to 0”将所有产品的库存设为 0。而后,再导出该盘点单的 stock_inventory_line。这样,所有产品及产品 单位数据都有了,只需填入盘点数量。这样可以较大的减少编辑盘点单的时间。 OpenERP 应用和开发基础 71 x 导入盘点明细数据,编辑好盘点明细单的 CSV 数据后,删除第一行的字段行,文字转为 UTF-8 编码 格式,而后,用下述命令导入到数据库中。 case1=# copy stock_inventory_line (inventory_id,location_id,product_id,product_uom,product_qty,write_uid,create_date) from 'd://work//a11.csv' delimiter as ','; 数据导入到数据库后,画面上确认该盘点单,则各产品的期初库存量就初始化好了。
还剩74页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享pdf获得金币 ] 12 人已下载

下载pdf

pdf贡献者

sunytonyli

贡献于2012-03-06

下载需要 15 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf