一种基于存储过程的BOM 遍历算法.doc_第1页
一种基于存储过程的BOM 遍历算法.doc_第2页
一种基于存储过程的BOM 遍历算法.doc_第3页
一种基于存储过程的BOM 遍历算法.doc_第4页
一种基于存储过程的BOM 遍历算法.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文库下载 免费文档下载/本文档下载自文库下载网,内容可能不完整,您可以点击以下网址继续阅读或下载:/doc/f1d73c1fc5da50e2524d7f87.html一种基于存储过程的BOM遍历算法一种基于存储过程的BOM遍历算法JournalofHefeiUniversity(NaturalSciences)2007年2月第17卷第1期Feb.2007Vol.17No.1合肥学院学报(自然科学版)一种基于存储过程的BOM遍历算法檀明,袁,钟伯成,胡学友,吴晓琴(合肥学院计算机科学技术系,合肥230601)摘要:BOM是ERP系统中的基础数据,其数据结构的确定与操作算法的设计直接影响到ERP系统的效率.通过对BOM概念的分析,提出一种基于存储过程的BOM的遍历算法,同时介绍了将遍历算法与Dephi6.0的树形控件相结合,实现从数据库中提取产品数据,直观地显示BOM的层次关系的方法.关键词:BOM;存储过程;ERP中图分类号:TH166文献标识码:A:-(-0040-06BOM(物料清单),、中间件、零件、.BOM实质是产品结构关系的反映,并将.由于BOM处于ERP(企业资源计划)系统中的关键地位,BOM的数据ERP系统中数据模型的核心,BOM设计的好坏直接影响ERP系统的实施和运行的效率.为了优化ERP系统的性能,提高系统运行的效率,从数据结构的角度研究BOM的构造方法与遍历算法,对ERP系统的设计与开发有着重要的实际意义.1761BOM的数据结构设计由于实际产品的结构应该是网状结构,网状结构的产生源于父部件与子部件之间的关系,并非一对多或多对一,而是多对多,也即父部件通常由许多子部件装配而成,而许多通用子部件又被用在多种产品或父部件的装配中.网状数据结构在当今主流的关系数据库中通常难以实现,BOM中的数据在关系数据库中只能以二维的形式表示,因此二维数据在数据库中如何表示也就成了BOM构造的关键.常见的BOM主179要有多层BOM和单层BOM.1.1多层BOM多层BOM采用“单父多子”的数据结构,要求详细地记录了产品的结构信息,即便是同样的零/doc/f1d73c1fc5da50e2524d7f87.html部件结构,只要存在于不同的产品中,也要多次详尽地记录.例如,产品A的结构如图1所示,其多层BOM数据表如表1.多层BOM结构的优点是:(1)产品间结构不互相影响,各个产品之间的数据记录没有交叉,因而维护比较方便;(2)多层BOM结构再分解时算法比较简单,只要根据产品的编码查询出最底层子件(即需要制造和采购的零部件)的编码和数目即可,效率比较高.但多层BOM结构也存在很多缺点:(1)数据冗余量大,零部件结构的重复定义,也增加了系统启动时录入基础数据的工作量.(2)虽然定义了子件的层次关系,但是它属于哪一个父层并没有记录,因此,并不收稿日期:2006-11-01修回日期:2007-01-04作者简介:檀明(1974),男,安徽望江人,合肥学院计算机科学技术系讲师,硕士;研究方向:多媒体、数据库技术、嵌入式系统.第1期檀明,等:一种基于存储过程的BOM遍历算法41能反查出某零部件的上一层父件,而只能查出它属于哪个产品,无法清晰地显示产品的树型结构.(3)结构不灵活,缺乏扩展性.比如,当某个产品下的一个零部件要作为产品销售时,需要重新录入该零部件.(4)BOM结构设计必须按由部件到小部件再到零件的由大到小的顺序进行.1.2单层BOM单层BOM结构采用“单父单子”的数据结构,即BOM表中相同的零部件装配关系只记录一次.BOM以“父件号 件号”为联合主关键字.同样以图1所示的产品A为例,其单层BOM在数据2,3库中的存储形式,如表2所示.表2产品A单层BOM数据表单层BOM结构对于每种层次结构只定义一次,可以大大节省存储空记录号父件号件号用量数间,另外在产品的设计阶段,由于零部件结构和一些相关属性需经常改1AB1动,为便于BOM的生成和管理,应采用单层BOM结构.笔者综合以上23456AABBCCDCDE13124BOM两种结构模型特点,BOM结构模型,如表3所示.表3BOM数据表结构://doc/f1d73c1fc5da50e2524d7f87.htmlr序号字段名1Feed_no23456789101112131415161718192021222324Ffeed_noSpread_tagUse_potEditionMap_noUnitUnit_useMemoDos_countEffect_dateInvalid_dateHarmCost_ratioOver_controlBring_makeRoot_noDoc_unitProc_modeCheck_fomuLengthWidthHighTypeVarcharVarcharVarcharVarcharVarcharVarcharNumericVarcharNumericDatetimeDatetimeNumericNumericVarcharVarcharVarcharVarcharVarcharVarcharNumericNumericNumericVarchar宽度151516415411309小数显示名称料号父料号展开标记使用位置版本图号单位主键YYY字段说明Key1Key21:展开;0:无展开Key355单位用量备注用量数生效日(有效日)无效日(失效日)制损成本比超发控制是否产生制令本阶序号用量(数)单位生产方式核算公式(%)66114414888144占成品的成本%Y/NI:自制;O:委外;D:忽略该阶;E:忽略该阶及其下阶;P:为采购333长宽高类别1/0:主料/副料2基于存储过程的BOM分层遍历算法BOM遍历结果是企业编制生产计划、进行/doc/f1d73c1fc5da50e2524d7f87.html产品配套、生产领料和加工过程跟踪的依据;也是企业计算产品成本进行市场报价的参考;通过BOM遍历,还可使企业对产品的设计系列化,标准化,通用化.因此,设计一种快速有效BOM遍历算法就显得尤其重要.2.1BOM遍历的算法比较假设一个BOM树结构如图1所示,下面是3种典型的BOM树遍历的方法.2.1.1BOM递归遍历算法针对图1所示的BOM结构,递归查找的搜索顺序是AB/1C/1、D/2E/4、F/2D/2C/1E/4、F/2D/3,应用递归方法,程序代码简洁,但程序每次递归调用都需要进行堆栈保存相关信息,系统内存耗费大,事实上,在实施ERP系统时,对于一个物料层次很多的BOM结构来说,递归遍历算法会大大降低系统运行的效率,甚至可能导致系统崩溃.2.1.2改进的递归查找法根据任何递归算法都可以转换为非递归算法的特点,可以将递归查找法进行改进,该算法使用临时表来保存中间运算结果,由特定变量来控制程序返回,解决了递归查找法中需要大量堆栈保存运算结果的缺点,算法的运行效率也大大提高.针对图1所示的BOM结构,该算法的搜索顺序是(在同一子层选取物料规则是先选取最大编号):AB/1、C/1、D/3E/4、F/2C/1、D/2E/4、F/分层查找法分层查找法的原理就是从需要查找物料的最上一层开始,一层一层往下找,直到找到物料最底层为止.对于图1所示物料A来说,查找所有相关需求物料的顺序是:AB/1、C/1、D/3C/1、D/2、E/4、F/2E/4、F/2.这种查找方法的算法简单,思路清晰,查找速度将很快.比较3种算法:算法1运行效率最低,;1有很大改进,算法运行效率不是很理想,3的思路清楚,可以充分利用数据库集3合操作的优点,.2.2OM基于存储过程的分层遍历算法采用临时表存放BOM中某一层物料的信息,使用较为方便,能较好的按层次遍历一个大规模的BOM树结构;但是由于其层次遍历的特点,其物料的存放顺序未能展现物料的父子关系.而在进行物料/doc/f1d73c1fc5da50e2524d7f87.html结构的取代、删除以及检查物料的用料结构是否存在循环错误时,需要知道物料间的父子关系,因而BOM遍历的分层算法将无法进行以上操作.为此,在临时表中增加两个字段,当前层次(Level)及完全路径(FullPath),分别按如下递归方式定义:If件号=BOM根结点thenLevel=0;FullPath=件号Else/对于非根结点Level=父件号.Level 1;FullPath=父件号.FullPath 件号为进一步提高算法效率和充分利用SQL结构化查询语句的优势,算法改用后台存储过程实现:先以传入参数TempTableName的值为表名按表4结构建立BOM展开临时表,将待展开件号A(BOM树的根结点)的所有直接子结点插入临时表(Level=1,FullPath=A.件号 子结点.件号),再对队列(临时表)中Level=1的结点的所有直接子结点再插入队列(Level=2,FullPath=父结点.FullPath 子结点.件号),按层次顺序继续进行循环插入,直到不存有任何子结点可插入(当前层全为叶子结点)则结束算法.表4BOM展开临时表结构字段Item_NOFather_ItemNoLevelFullPath类型Char(15)Char(15)IntVarChar(2000)字段说明件号父件号当前层次数,根结点的层次数为0根结点至当前结点的完全路径PROCEDUREP_BomTreeItem_NOchar(15),TempTableNamechar(50)ASselectcur_level=0setsql_exec=createtable TempTableName (item_nochar(15),Level(2000),Father_ItemNochar(15)e/doc/f1d73c1fc5da50e2524d7f87.htmlxec(sql_exec)根据传入的临时表名,建立全局临时表setsql_exec=insert TempTableName (item_no,Level,FullPath,Father_ItemNo)values( Item_NO ,0, Item_NO ,)-?将待展开的件号做为根件号插入临时表中exec(sql_exec)Int,FullPathcharwhile1=1beginsetsql_exec=selecttop13fromBOMwhereFather_ItemNoin(selectitem_nofrom )-按层次顺序展开BOM,若当前层TempTableName whereLevel= convert(char,cur_level) 存在非叶件号,则将其插入临时表中,留待下一次循环时继续向下展开.exec(sql_exec)ifrowcount=1/当非叶子结点时beginsetcur_level=cur_level 1setsql_exec=insertinto TempTableNa (mItemNo,FullPath)selectItem_NO, convert(char,cur_level) ,Father_Te.FullPath BOM.Item_NOfromBOM, TempTableName m_noandLevel= convert(char,cur_level-1)/exec(endelsebreak?若当前全为叶件号,则跳出循环,结束遍历end3遍历算法在BOM树创建及显示中的应用设计思想:应用层BomTree方法根据客户端提供的待展开件号Item_No,调用后台BOM树的/doc/f1d73c1fc5da50e2524d7f87.html遍历存储过程P_BomTree,将遍历结果存入全局临时表中(TempTableName=操作员编号 年月日 时分秒),将全局临时表名通过回传参数sl_out返回客户端,由客户端建树算法从该临时表中取出数据并利用TreeView控件完成前台建树及显示工作.系统采用基于MTS/COM 的C/S三层技术架构开发,应用服务器选用MTS/COM ,数据库服务器为SQLServer2000,以Dephi6.0为前端开发工具.3.1应用层BOM构件的功能接口实现procedureTERPRD.BomTree(constItem_NO,:WideString;varsl_out:OleVariant);try/按操作员编号 年月日时分秒为临时表名,以确保其名称的全局唯一性TempTableName:=# gs_code FormatDateTime(YYYYMMDDHHMMSS,now);/执行后台存储过程,将件号展开结果存放在以TempTableName为表名,的全局临时表中,并将临时表返回前台(通过sl_out带出),再由前台完成建树操作ADOQ_rd.SQL.Text:=execP_BomTree Item_NO , TempTableName;ADOQ_rd.ExecSQL;sl_out:=TempTableName;setcomplete;exceptbeginsl_out:=no;/有问题时,将sl_out置为no,通知前台中止建树操作setabort;end;end;44end;合肥学院学报(自然科学版)第17卷3.2客户端建树算法对TreeView所表示BOM树的各结点,除件号以外,还需保存其它相关信息,如父件号、单位用量、制损比例等,系统通过结构指针类型PNode来实现://doc/f1d73c1fc5da50e2524d7f87.htmlartypeNode=recorditem_no:string;end;/其它需记录的信息PNode=Node;对于存放在全局临时表(TempTableName)中BOM展开数据按BOM树的先根遍历路径,客户端建树的过程就是在对TreeView,为此建立一个路径指针数组PTreeWayMax,其值可以通过SelectMaxLevel=Max(Level)fromTe.I层的建树路径,若当第I,应返回上一层的PTreeWayI-1结点继续沿下,.代码如下:procedureTFrm.FormShow(Sender:TObject);/BOM树显示窗体的FormShowFrm_Main.DCOMC_rd.AppServer.BOMTree(Frm_rd102.CDataSet_data.FieldByName(件号).As2String,sl_out);TempTableName:=String(Sl_out);/调用应用层方法,Sl_out返回存放BOM数据的全局临时表名,若表名为no则为表中无该物料的BOM资料ifTempTableName=nothen/提示并返回;Frm_Main.CDS_rd.CommandText:=select3from TempTableName orderbyFullPath;/按完全路径排序将对应件号的BOM展开数据取到前台数据集中Frm_Main.CDS_rd.Open;new(PNodeTemp);并设置PNodeTemp结构中信息为根结点的对应值;).AsString;strCaption:=Frm_rd102.CDataSet_data.FieldByName(件号PTreeWay0:=TreeView.Items.AddObject(/doc/f1d73c1fc5da50e2524d7f87.htmlnil,strCaption,PNodeTemp);/增加BOM树的根结点Frm_Main.CDS_rd.Next;WhilenotFrm_Main.CDS_rd.Eofdobeginnew(PNodeTemp);并设置PNodeTemp结构中其它信息;).AsInteger;/当前层intLevel:=Frm_Main.CDS_rd.FieldByName(Level).AsString;strCaption:=Frm_Main.CDS_rd.FieldByName(Item_NoPTreeWayLevel:=TreeView.Items.AddChildObject(PTreeWayLevel-1,strCaption,PNode2Temp);/为上层父结点增加子结点Frm_Main.CDS_rd.Next;end;end;BOM在ERP、PDM、MRP等软件中处于核心地位,其重要性显而易见.文中所提出的BOM结构模型和基于存储过程的改进BOM分层遍历算法已在服装行业的ERP系统中得到成功的应用,相对一般BOM遍历算法,使用该算法可以获得更好的计算性能.参考文献:1罗鸿,王忠民.ERP原理?设计?实施M.2版.北京:电子工业出版社,2003.第1期檀明,等:一种基于存储过程的BOM遍历算法452贾振元,郭庭政,王林平.面向中小制造企业多种BOM并行的构建和应用J.CAD/CAM与制造业信息化,2005(12):24225.3严志强,龚京忠,李国喜,等.多级型BOM的遍历J.机械设计与制造工程,2001,30(2):33234.责任编校:乙卯AlgorithmofRansackingTreeBOMBasedonStoreProcedur/doc/f1d73c1fc5da50e2524d7f87.htmleTANMing,YUANMing,ZHONGBo22(DepartmentofComputerScienceandChina)Abstract:TheBill)isinERPsystem.Itsstructureanddesignofoperationmdeeply.Inthispaper,bytheanalysisofBOM,analgorithmofransackingonstoreprocedureisproposed.Furthermore,amethodusingthisalgo2rithmandTreeViewControllerofDephi6.0toextractdatafromdatabaseanddisplayingtherankorderofBOMdirectlyisalsopresented.Keywords:BOM;storeprocedure;ERP(上接第27页)2ShiuE.TheProbabilitiesofEventualRuinintheCompoundBinomialModelJ.ASTINBulletin,1989,19:1792190.3成世学,伍彪.完全离散经典风险模型J.运筹学学报,1998,2(3):42254.4成世学,朱仁栋.完全离散经典风险模型中的渐进解和Lundberg型不等式J.高校应用数学学报:A辑,2001,16(3):3482358.5龚日朝,杨向群.复合二项风险模型下的有限时间的生存概率J.吉首大学学报,2000,21(2):16219.6龚日朝.两类时间离散索赔模型的关系J.信阳师范学院学报:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论