高 鹏 谢印成
[摘 要] 本文针对现行纺织行业ERP存在的通用性不强、灵活性差等缺陷,以生产质量管理子系统为例论证了纺织行业ERP用户二次开发的必要性,行业提出了一套二次开发组件模型,并就该组件在PowerBuiler + SQL Server环境下的物理实现以及具体应用作了初步探讨,为实现纺织行业ERP流程自定义提供了一种简单可行的思路。
[关键词] 纺织ERP;二次开发;模型构建;流程自定义
[中图分类号]F270.7[文献标识码]A[文章编号]1673-0194(2009)03-0057-05
随着中国加入WTO和世界经济一体化,企业所处商业环境正发生着深刻的变化,企业信息系统也正面临着前所未有的挑战。ERP(企业资源计划)由于能够有效地整合企业内部和外部资源,已经成为许多现代企业普遍采用的信息系统。ERP在中国推行多年,真正成功的案例却比较少。其中深层次的原因是国内外企业在管理理念和业务流程之间存在显著的差异。要解决这个问题不仅要求导入企业对内部管理和流程进行规范,更要求ERP软件能够保持充分的灵活性。一种有效的方法就是系统提供用户二次开发的平台,即通过各种二次开发工具对ERP中的一些基本构件和通用模块进行重组或者扩充,从而实现自定义业务流程的功能。
1 纺织行业ERP应用现状及二次开发需求
纺织行业属于我国传统制造业,具有多工序、连续化、大量生产能力强和劳动密集程度高、市场流行期短等显著特点。当前,我国许多纺织企业都实施了ERP项目,并取得了一定的管理效益和经济效益。但仔细研究不难发现,目前实施ERP的大型纺织企业中,应用较多集中在进、销、存等企业经营管理的外围环节,而对于ERP核心部分的生产质量管理、工艺管理等子系统要么空白,要么难以推广。究其原因:一方面是由于开发人员对纺织行业的流程缺乏深入的理解;另一方面是由于当下的ERP软件缺乏动态扩展性,通用性太差。
对于纺织行业来讲,由于生产工序繁多,数据采集量异常庞大,生产质量控制、工艺管理一直是纺织行业ERP的重点和难点。FAM体系结构提出,纺织企业的数据采集点从上至下可以分为企业、工厂、分厂、单元、工作站和设备6个层次。除了设备级,每级都是若干个下级的集合。在此层次结构中,每一层都可以作为数据采集点,各层数据的属性不尽相同。如停台时间、棉结数等指标属于设备级,而温度、湿度、电能耗费率则属于单元级。由于采集层次较多,每道工序生产质量指标繁多并且处于不断扩充中,对于单个纺织企业来讲,各自关注的产品质量指标体系很可能不一致,这就造成了许多ERP软件通用性较差的现象。要解决这些问题,最有效的方法就是让用户方自行进行二次开发。这里的二次开发不仅是指软件界面风格、显示格式可由用户自行修改,而是指基本的数据项目、数据处理逻辑以及数据报表的内容均可由高级用户自行扩充或删减,从而实现真正意义上的“业务流程自定义”
实践证明,任何一种ERP软件要想获得成功,不提供二次开发的平台几乎是不可能的。具体来讲,二次开发对ERP的意义主要有以下几点:
(1)大大简化系统开发方的工作,使得开发方把大部分精力用于系统整体架构的建设、主流业务流程的研究以及模型库、中间件的不断完善,从根本上提升ERP软件的质量。
(2)开发方把一些非主流业务流程的定义和功能模块的开发工作放手给用户,提高了用户的业务理解能力和程序开发水平。另外,二次开发可以增加用户对系统建设的参与程度,激发用户的主动性,有利于以后的系统维护。
(3)最重要的一点是, 二次开发使得ERP软件在面对企业业务流程或组织结构的变化时能作出快速响应,提高了ERP软件的柔性程度。
2 二次开发的实质及适用条件
从信息系统的软件结构来看,信息系统是建立在公用数据库、子系统专用数据库、程序设计语言工具模型库基础之上的各种业务功能的总和(见图1)。
在传统的信息系统中,只有第四层功能业务层是面向用户的。而数据如何进行处理以及报表内容如何组织由第三层模型库完成,对用户来讲是非透明的。二次开发实际就是向高级用户开放部分模型库和函数库,当企业的业务流程发生变化时由用户利用二次开发组件对功能业务层中的基础数据项、处理单据和报表进行修改来适应变化,也即把第三层和第二层的部分功能向用户开放。
值得注意的是,并非所有ERP模块都适合于二次开发。一般来讲,一个系统中子模块之间的连接方式有两种,即串联和并联。串联方式中高层构件表现为一系列低层构件的顺序处理, 输入为某低层构件的输入, 经过其他低层构件的串行处理, 输出为最后的构件的输出。而并联方式中高层构件对低层构件没有特别的处理, 仅仅是对低层模块功能的聚集。这时,构件的输入是所有低层模块的输入, 输出为所有低层模块输出的集合,如质量管理子系统。产品质量项目繁多,但各项质量数据具有趋同性,数据的采集和处理方式在本质上区别不大,均可以通过报表、直方图、折线图等相同方式显示给使用者。适合于二次开发的系统在连接方式上应为并联方式。
3 二次开发体系结构模型简介
本文所介绍的二次开发工具是由一系列基本组件构成。笔者在多年从事纺织行业ERP开发实践中,摸索出一套基于PB + SQL Server环境下的二次开发组件模型。根据管理信息系统的传统理论,任何业务流程都可抽象为几个功能模块的整合,而功能模块是由输入功能(单据)、处理功能(函数)和输出功能(查询或报表)组成。笔者开发了三类二次开发组件,即:自定义函数、自定义单据和自定义报表。它们之间构成层次关系,如图2所示。
3. 1自定义函数
该组件是二次开发的最基本组件。它直接同底层数据库相连接,主要是对处理逻辑的定义。理论上可以利用该工具取得数据库中的任何数据,应用于任何子系统,因而它属于软件结构中的公共模型库。自定义函数本身是一个附加功能,它不能独立成为一个功能模块,必须与自定义单据、自定义报表结合起来使用。自定义函数中处理过程的定义是核心步骤,可以采用两种形式:Select SQL语句和存储过程。由于自定义函数只能够返回一个值而不是一个数据集合,因而它经常被适用于自定义单据中某个数据项的计算公式或者自定义查询、报表中某项动态内容的生成。
3. 2自定义单据
自定义单据分散在生产质量管理、工艺管理等各个子系统中。分为项目定义和数据输入两个部分。前者实现了该子系统中各输入模块和处理逻辑的定义,真正实现了“业务流程自定义”,是二次开发的核心内容。该组件中主要进行构成业务流的每个输入数据项属性的定义,如名称、类型、统计方式、计算公式等。值得注意的是,此处的“计算公式”中不仅可使用本张输入单据中的数据项,更可以通过调用“自定义函数”的功能取得本系统其他模块中的任何一项数据,这是本组件与其他大多数信息系统相比的一大优势,大大扩展了组件的取数功能,提高了流程定义的灵活性。而后者根据前面的定义自动生成输入界面进行数据录入或采集。
3. 3自定义报表
该组件使用的好坏是二次开发的成果是否被管理层认可的关键,因为管理层往往是通过系统输出信息量的多少以及输出信息的格式来判断一个系统是否成功。本组件主要提供了以下两种形式的自定义报表:
3. 3. 1各子系统的自定义报表和图表
该类报表的数据源可以是本子系统中的任何自定义单据。在使用自定义报表时应该首先定义一个报表模板,随后组件自动提供所有自定义单据的所有数据项,由二次开发人员在其中进行模板内容的选择。报表显示的内容来源于模板上定义的数据项以及其他一些必要的筛选条件(如日期范围等)。自定义图表的使用除了选择数据项之外,还要定义报表的形式(直方图、折线图等)以及纵坐标、横坐标的内容等。
由于该类报表的数据均来自于自定义单据组件,不能独立取数,因而不能够使用自定义函数功能。
3. 3. 2Formula 1 综合自定义报表
Formula 1是一种外嵌OLE表格式插件,在使用前必须先进行安装。Formula 1 无论从界面样式还是内部功能都与Mircrosoft Excel极其相似,但它的可编程性却是Excel所无法比拟的,许多普通编程工具(如PB,VB,VC)等都提供了与该组件的接口,可以方便地使用该控件的属性和方法进行数据的显示和编辑。使用Formula 1 综合自定义报表进行二次开发时,需要二次开发者了解数据库的内部结构,使用SQL语句、存储过程取得结果集并指明报表中需要显示的字段定义,也可以使用自定义函数功能直接取得任何子系统中的单项数据。这种自定义的报表灵活性最大,但对二次开发用户的技术要求也最高。
4 二次开发体系结构模型的实现与应用
以上所介绍二次开发组件全部是基于Windows图形界面环境,采用Powerbuilder 7.0 + SQL Server 2000技术开发而成。Powerbuilder 是Sybase公司推出的一款优秀的应用程序开发工具,虽然界面设计的功能较弱,但其独特的Datawindow技术使其在开发数据库应用程序时与其他工具相比具有无可比拟的优势。SQL Server 2000更是现代许多企业信息化首选的分布式关系数据库。以下简单介绍二次开发组件模型的物理实现及简单应用。
4. 1自定义函数的实现与应用
该模块是由两张二维表实现。主表func保存函数名称、处理过程(sqlsyntax)等内容,而函数参数的详细信息则在明细表funcparm上,包括参数序号、参数名称、参数类型等。
如要定义一个自定义函数uf_getsdczl,功能为取得织造工序某机台某天某班次的下机总数(下机产量数据存储于关联表zzdj48和zzdjmx48),过程如图3所示。
从以上定义可看出,函数处理(sqlsyntax)本质上是用SQL语言或存储过程实现的,因而自定义函数的二次开发人员应该具备一定的SQL基础。
4. 2自定义单据的实现与应用
以织部质量管理子系统的设备级单据为例,第一部分定义的所有项目属性全部保存在二维表zbzlxmmx中。在某类单据项目定义完成时,PB窗体调用“Create table”或者“Alter Table”动态SQL语句生成新的二维表来存储该类单据的所有数据,表名称为:zl+ 部门代码+ 工序代码 + 单据代码,如zl1011090(该二维表中还保存了一些固定字段,如sd_id(车号)、gx_code(工序)等)。因而此处每类产品质量单据即对应一张二维表。业务逻辑和物理结构对应关系如图4所示。
在数据输入界面的实现中,最关键的是自动计算各个字段在界面上的位置以及公式字段的自动取数。对于第一个问题,可以设定界面上每排排放的项目数以及该项目的显示序号计算其绝对坐标。而后一个问题的解决比较复杂,对于含有自定义函数公式uf_的字段,需要用循环替换的思想把形式参数全部替换成实际参数,再调用该函数sqlsyntax字段中定义的SQL语句或存储过程进行计算;对于普通公式项目则直接用Datawindow自动创建动态Compute字段进行计算即可。一些关键代码如下:
if pos(ls_module,'[f]') > 0 then
ls_tags = ls_tags + ','
do while pos(ls_tags,',') > 0
ld_value = dw_destination.getitemnumber(row,ls_tag) //取得每个参数的实际值
ls_module = f_stringreplace(ls_module,ls_tag, string(ld_value)) //循环参数替换
ls_returnval=wf_expressiontovalue('101',1,ls_module)//静态表达式求值
dw_destination.setitem(row,ls_setname,round(dec(ls_returnvalue),4))//赋值
loop
else
ld_value = dw_destination.getitemnumber(row,'compute_' + ls_setname)
dw_destination.setitem(row,ls_setname,string(ld_
value))
end if
例如,要定义一张设备级数据采集单据,名为“坯布物理指标”, 包括棉结总数、单位棉结数、经密、纬密、筘幅、经强、纬强等质量项目。其中单位棉结数为棉结总数除以产量数,纬密为经密的1.1倍,定义过程如图5所示。
由于计算单位棉结数需要用到总产量,而该数据不在本单据中,因而必须要使用自定义函数。而形成的动态录入单据界面见图6。
其中红色部分(纬密、单位棉结数)表示计算字段,在完成其他项目数据输入后其值被自动计算出,因而不能被编辑。
4. 3自定义报表的实现与应用
此处仅介绍第一类自定义报表的物理实现。
报表模板用二维表zlrptmodel进行存储,该表的主要字段有name(项目名)、tj_mode(统计方式)、table(数据来源二维表)。数据项可能来自同一个二维表,也可能来自不同的二维表,而且每个数据的取数方式也不一样(有的是平均,有的是加总),因而必须建立一个临时表zbzl_rpt1,然后对报表模板中的数据项逐个取数后放进临时表。最后基于该临时表做一个datawindow即可。
该处的难点是每个项目取数的动态SQL语句的形成。关键代码如下:
ls_sql = "insert into zbzl_rpt1(zllb_code,xm_code, xm, djy_date,jh_no, sjcs)" +
"select b.zllb_code," + ls_data + ",b.xm_name,right(a.djy_date,8),'" + ls_jhno + "convert(numeric(18,2)," + ls_valuechar +")"
+ " from " + ls_table1 + " a,zbzlxmmx b"
+ " where b.xh = " + string(ll_xh) + " and a.djy_date between ?苁
+ ls_date1 + "and ?苁 + ls_date2 + "'” + ……
execute immediate:ls_sql;
而对于自定义图表的实现,同样也要定义一个二维表zlgraphmodel来存储模板内容,在图表生成时,只要根据zlgraphmodel中的内容修改datawindow中graph对象的某些属性即可。具体代码省略。
例如,要求把“坯布物理指标”中定义的质量项目都统计在一张质量报表上,并且把“单位棉结数”这一指标做成折线图,组件使用过程如图7所示。
5 结束语
用户方二次开发是一套ERP软件能否适应环境变化的关键所在。本文所介绍的二次开发组件界面简单,操作流程清晰,信息资源共享性和可扩展性能均良好,可以方便地实现基于平行方式的质量管理、工艺管理等底层业务流程的自定义构建。目前该套组件已经实施于无锡、丹阳、金华等一些纺织企业单位,收到了良好的效果。
主要参考文献
[1] 李迁,葛世伦,等. 基于控制点模型的纺织企业生产数据的采集[J]. 纺织学报,2007(3):111-114.
[2] 任明仑,朱卫东,等. 基于构件的信息系统体系结构模型[J]. 小型微型计算机系统,2004(7):1159-1161.
[3] 颜承元. 基于B/S模式的纺织企业生产经营管理信息系统的设计[J]. 毛纺科技,2007(9):58-60.
[4] 许敏. 企业ERP系统二次开发问题研究[J]. 集团经济研究,2007(18):10-12.
[5] 吴士亮,薛恒新. 纺织企业信息化若干关键问题研究[J]. 科学学与科学技术管理,2004(11):106-108.