Oracle ERP方法体系中属实施管理范畴的是AIM(Application Implementation Method),从下图AIM流程中我们可以看到系统时间轴上共分为六个阶段:
◆需求定义阶段(Definition)
◆业务分析阶段(Operations Analysis)
◆方案设计阶段(Solution Design)
◆建立系统阶段(Build)
◆系统切换阶段(Transition)
◆正式运行阶段(Production)
注:图例来源于AIM 3.1.0官方文档。
实施信息系统,计划为先,而计划制定,数据又得先行,全面、准确、及时的数据是系统正常运行的前提,高质量数据是推动上线的巨大动力。本文所要探讨的数据转换(Data Conversion)在时间轴上横跨了需求定义、方案设计、建立系统及系统切换四阶段。在传统的AIM中,需求定义阶段中的数据转换主要工作是定义数据转换需求及依据需求制定方案;方案设计阶段的数据转换主要事务是定制转换标准,准备环境;建立系统阶段的数据转换工作主要是设计和测试导入的程序及验证脚本,为接下来的导入做好准备;而系统切换阶段的数据转换主要工作是对导入程序、导入工具在正式环境中的安装及最终导入收集的数据,及最后的数据验证。
但方法论更多的是从理论的角度去考虑整体框架,各阶段各流程都是“可选”步骤,怎样去做,如何做好,上面没有提到。而数据收集工作具有要求高,时间紧,难度大等特点,从定义开始,就应该按一定的紧急、先后顺序开始收集。笔者在这总结一下自己的经验,供同仁参考。由于水平有限,错漏之处在所难免,欢迎商讨及指正。
一、数据
首先我们来看数据。 通常企业在实施ERP时的数据包含三部分内容,一部分我们称之为基础数据,基数数据是系统设置过程中需要用到的数据,例如,会计科目、税率、库存组织、子库存、货位等;第二部分我们称之为静态数据,是系统上线后实际操作中需要用到的数据,例如,客户/供应商、员工、银行账户、物料信息、工艺路线等,基础数据与静态数据我们也可以统一称为静态数据;另一部分我们称之为动态数据,动态数据是系统初始化时需要用到的时点数据,例如,期初的账户余额、供应商余额、客户余额、库存现有量,未结销售/采购订单,未结工单等。在制定ERP上线方案时需要综合考虑这三方面的数据,按一定的紧急、先后顺序进行收集。
基础数据通常格式固定,对数据质量要求比较高,时效快,数据收集工作有可能需要提前到需求定义阶段就着手准备。基础数据完成后,我们可以通过系统自带的诊断工具进行测试系统设置的完整性。
对于静态数据,通常也是相对比较简单,由于静态数据在录入系统后,基本上不会去改变,所以只要保证这些数据是完整并且准确的就足够了。而事实上,静态数据往往存在于企业的现时业务中,一方面收集比较方便,另一方面这些数据在整个企业内部已具有通用性,如果对原有的物料编码进行改进或重编,必须考虑到唯一性、统一性、实用性及易用性。
动态数据按时点来分,分为期初数据和日常数据,最为熟悉的期初数据就是库存期初值和财务账户期初余额,有条件的企业应该对期初数据进行盘点。而日常数据包括企业未结销售订单、未结采购订单、未结工单。要想准备好这部分数据,企业应该在上线前界定搜集到哪一天的未结单据, 这些单据只需要统计其未完成数量,也就是说订单总数减去已交货数量,工单总数减去已完工入库数量,而且可以按照一定的条件来汇总,比如一个供应商可能存在多个未结采购订单,可以按供应商来汇总统计成一个未结采购订单表来导入系统。而这以后的单据将作为系统的日常操作,在上线过程中随时根据需要录入系统。未结单据应当在上线前尽可能的结清,以减少手工和系统切换的难度,同时也降低日后对账的工作量。
二、数据收集过程
在数据收集过程中,应当遵循一定的先后顺序、一定的收集方法来进行。有条件的企业应该做几轮数据收集,并分析,尽可能避免在导入正式系统后进行数据的修改。
1) 了解及确认企业所属行业的特点和数据量
不同的行业对数据的要求不尽相同,例如医疗系统对供应商的考核制度与普通企业的考核就是不同,同样数据量的大小也决定着你会使用什么方法处理导入数据,例如分销渠道较长的企业的客户可能只管理到代理商;而短渠道企业可能会管理到批发商、零售商。较少的数据我们可以使用手工的方法导入,但数据量一大了,我们得采取程序导入来协助我们。
2) 讨论及确认数据收集的项目及来源、详细计划
收集的项目通常结合系统对数据的要求及企业行业特殊性来确定哪些数据需要收集,同样要决定数据来源于何处,是从旧信息系统移植还是从档案数据获取,详细计划包括评估数据收集工作量、提前期、责任人等。
3) 整理数据收集方案和数据收集表
收集方案是企业对数据的要求及对这些需求做出的收集策略,是数据收集过程中的指导方针;根据数据收集方案合理设计数据收集表格,应对数据表格进行详细的数据收集说明。
4) 客户收集数据
数据从开始收集到结束往往会占用比较多的时间及资源,为了保证数据的准确性,我们除了实时解答任何疑问外,通常要对客户收集过程分阶段取样分析,从一开始就监控数据朝着我们目的方向迈进。
5) 对于导入系统的数据进行格式的整理
根据完成的数据收集表,映射系统需求进行格式的变换及调整。以便能够按照不同的方式导入或者输入系统。
6) 确认数据
多方对输入数据的确认。
三、数据导入方法
按着数据方案,确定了收集职责及收集期限,最后收集数据、整理(验证)提交,在各方确认数据后,那就要开始着手导入数据。Oracle 系统从数据库、应用两个层面提供多种方案给您选择数据导入的方式。下面以资产数据为例举例说明。
固定资产数据有两种导入方法,一种是通过成批增加接口,另一种是手工在系统录入。
1)手工录入数据
如果选择手工录入系统,你除了全手工的通过应用界面一条条录入外,你还可以选用一些工具,诸如dataload、loadrunner 协助你快速完成导入的工作。
你选择手工导入数据的好处是你可以直观的输入数据,可以在输入的同时检查错误,也很方便的修改一些默认数据,例如根据资产类别自动弹出的折旧方法及剩余使用寿命(这些在通过接口表的方法中,如果导入的是旧资产,也必需在界面上修改)。当然手工录入数据只建议数据量相对较小的数据项目上进行,例如税率数据,如果数据量在千级别以上,还是建议使用通过成批增加接口导入数据。
2)成批增加接口导入
Oracle 一个很重要的功能是在每一个模块中都预备了一个或者数个接口表,以方便模块与模块之间、系统与系统之前进行数据的移植操作。例如,资产的一个很重要的接口表是“成批增加”(FA_MASS_ADDITIONS);同样Oracle 提供了很多方法导入数据到接口表中。SQL*Loader就是其中数据库层次的一个软件,其外还有ADI、API:
a) ADI
应用桌面集成 (ADI) 是一个第三方工具,可用于于实际的帐务处理及报表输出。但我们可以使用他来导入一些财务数据。例如日记帐、资产明细及会计科目,通常我们会先创建一个基于EXCEL的模板,如下图,然后按这些模板格式收集数据,然后直接联接系统一步完成资产的接口及添加动作。ADI简单易用,安全性高,有很好的数据验证功能。 ADI导入功能通常仅用于财务模块中的总帐及资产模块。
b) SQL*Loader
SQL*Loader 是个直接把外部数据文件插入数据库表的工具,速度非常快,仅需要少量的编程就可以进行数据的导入,他包含数据文件、控制文件及命令语法三部分内容。
命令举例:sqlldr userid=internal/oracle control=test.ctl
splldr 是命令提示符,userid后面需要输入数据库存取用户名及密码,control 是你的控制文件名,详细参数信息请查阅相关文档。
数据文件举例:
2003-09-23 | 1 | 04490896 | 347.76 | -
2003-09-28 | 2 | 10256837 | 349.40 | -
2003-09-12 | 3 | 09956875 | 532.30 | -
2003-09-26 | 4 | 10256871 | 581.30 | -
数据仅需要简单的通过特定的分隔符(|)告诉系统哪些是数据。
Ctl控制文件:
|
控制文件包括了数据文件路径和文件名,还定义了导入的表名,分隔符及数据文件各列如何正确导入系统表的各段。SQL*Loader 通常用于有临时表的数据导入工作,对数据的准确性需要其他手段进一步的校验。
c) API
Oracel还提供了部分接口程序(Application Programming Interface ,API)。API允许你通过PL/SQL直接导入数据,而对用户透明化接口表。在新版本的资产系统中,Oracel 提供了标准的Additions API 允许用户直接调用FA_ADDITION_PUB.DO_ADDITION产生资产数据。有兴趣可以上metalink查找文档:Note:206473.1 进行研究。
以上几种方法,由上往下,技术要求越高,由下往上,越容易操作。但不代表一定要选用这种或者说选择简易操作的,显然要ORACLE对所有的数据表去做API接口是不可能的。应根据数据的整体情况进行选择合适的方法进行处理。
四、数据验证
即使我们在数据导入前经过仔细核对,并在导入测试中进行严格设计,但仍旧不能够保证所导入的数据是完全正确的,这就要求我们对导入数据进行验证。常用的输入数据复核校验方法有打印输出核对法、屏幕核对法和二次输入核对法等。
屏幕核对法主要是对于数量量小,数据存储相对分散的数据进行对累加合计数,核对余额,核对借、贷方的金额,核对凭证和帐簿等来发现错误。
二次输入法是采用相应的软件进行测试,录入过程分三个步骤:一次录入,两次录入,每次录入数据后保存退出;最后就是对碰,目的就是检测前两次录入的数据是否一致,如果一致,就通过;如果不一致,会提示出错的地方,工作看上去是繁复了,却可以省略了人工检查这一步,这通常需要特殊的条件,例如临时表、严格的程序逻辑。