版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
物流管理系统中封仓功能的设计与实现资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。南开大学本科生毕业论文(设计)题目:津菱物流管理系统中封仓功能的设计与实现学号:0010301姓名:韩晓玮年级:级学院:软件学院系别:软件工程专业:软件工程完成日期:5指导教师:张波副教授津菱物流系统库内管理封仓部分的改进软件学院软件工程系软件工程专业韩晓玮学号:0010301指导教师:张波副教授摘要:津菱物流管理系统对良菱物流管理系统的二次开发,笔者主要负责对封仓部分的改进设计和实现。主要是根据津菱物流公司的实际业务流程修改了原有的手动封仓解封功能,并在此基础上增加了过保质期自动封仓以及解封的功能。并对整个封仓部分做了功能测试,保证了与其它各个部分的兼容性。本文主要从项目背景和对原有系统的描述入手,介绍了津菱物流系统的总体业务流程,根据封仓部分的需求分析,分析并描述了所需使用的主要技术。着重对封仓部分设计,系统实现进行了介绍,并简单介绍了对系统所进行的功能测试以及完成项目后的一些心得。关键字:物流系统,封仓,Sybase,PowerBuilderAbstractJinLingLogisticsManagementSystemisarevisionversionoftheLiangLinLogisticsManagementSystem.Redesigningandimplementingthewarehousefrozeningistheobjectiveofthisthesis.BasedonJinLingCorp’sbusinessflow,wemainlymodifytheoriginmanualwarehousefreezingandunfrozeningfunctions,andaddthewarehouseauto-frozeningandauto-unfrozeningfunctionswhenthegoodspassedtheperiodofvalidationintothesystem.Wealsodothetestingofthewarehousefrozeningsub-system,andmakesuremyworkswon’thaveanycompatibilityproblemswiththeotherpartsofthewholesystem.Thisthesisstartswiththeintroductionoftheprojectbackgroundandtheoriginsystem,followedbythedescriptionofthemainbusinessflowofJinLingCorp.Basedontherequirementofwarehousefrozening,itanalysestheprimarytechniqueswhicharedemanded,andemphasizesonthepartsofsystemdesigningandimplementation.Atlast,thesystemtestingandprospectpartsaretouchedupon.KeyWords:LogisticsSystem,Warehousefrozening,Sybase,PowerBuilder目录TOC\o"1-2"\h\z\u第一章绪论 11.1项目背景 11.2津菱物流管理系统概述 1第二章系统功能及需求 52.1封仓部分功能概述 52.2封仓部分原有功能描述 52.3封仓部分需求分析 6第三章系统改进设计 83.1开发环境描述 83.2津菱系统总体设计 83.3封仓部分主要技术 93.4PowerBuilder窗口设计 113.5数据库相关设计 13第四章系统开发实现 164.1PowerBuilder窗口实现 164.2存储过程实现 21第五章系统功能测试 265.1封仓及解封功能测试 265.2Sybasse数据库的复制技术 30第六章项目总结与展望 336.1项目心得 336.2项目开发展望 33致谢 35参考文献 36第一章绪论1.1项目背景20世纪90年代中期,第三方物流(3PL)的概念开始传入中国。什么是第三方物流呢?第三方物流是由物品供、需两方以外的企业提供物流服务的业务模式,是在供应链中,企业以合同的形式在一定期限内提供用户所需的全部或部分物流服务。第三方物流企业的利润不是来自运费、仓储等直接费用收入,而是来源于信息和知识。它可能包括、也可能不包括运费、仓储资产的所有权。津菱物流公司就是一个以第三方物流为主,兼营其它几种物流方式的现代物流公司。物流产业的发展已经到了这样一个阶段:现代物流的信息系统已经成为企业物流管理和操作的一个不可或缺的要件。到底,中国的IT业和电子商务市场约达到150亿美元,供应链管理的软件和服务市场也达到40亿美元。实际上,有没有IT系统的支持已经成为现代物流运作的重要标志之一。许多企业在选择第三方物流服务供应商的时候往往把它作为重要的前提条件。因此,企业选择物流IT系统,与其说是一种信息技术选择,不如说是一种企业管理模式和市场竞争战略的选择。一般来说,物流/供应链管理系统的建立有两条路径:一是量身定制的开发;二是集成系统的导入。众所周知,物流IT系统量身定制开发的前提是企业物流运作流程的设计;集成系统的导入也往往要求企业改变现有的物流运作流程。因此,无论走哪条路,企业建立物流IT系统的前提都是要确定其物流运作流程。津菱物流管理系统就是在这种背景下从原有良菱物流管理系统的基础上按照津菱物流公司业务流程度身改造而来。1.2津菱物流管理系统概述 津菱物流管理系统是为津菱物流公司度身改造的全方位物流管理软件。它的原型是上海良菱物流公司所采用的物流管理软件,其功能涵盖了津菱物流公司的所有业务流程,从进货,到库内管理、盘点,到出货、退货,均可在此软件中完成。且此软件可按照公司内不同的角色提供不同的功能和权限。且此软件对于公司简化工作流程,加快工作进度,以适应日益发展的业务以及企业信息化起到了非常积极的作用。津菱物流管理系统按其角色可分为库内管理操作员,系统操作员,采购操作员,其中库内管理功能操作频率可分为系统操作、进货、门店要货、配送、仓库管理、各类查询和基本信息管理,如图1-1所示:图1-1:津菱系统库内管理操作员用例图 系统操作部分的功能分为系统操作、基本信息管理、物价管理、结算、各类查询和统计分析。如图1-2所示:图1-2:系统操作员用例图 采购操作部分的功能分为系统操作、基本信息管理、进货和各类查询,如下图1-3所示:图1-3:采购操作员用例图 仓库(即库内管理)又分为配送中心库存维护,配送中心商品封仓,配送中心移库,配送中心库存盘点,仓库损益,分拣仓位优化6个部分的操作以及库存查询功能。如下图1-4所示:仓库仓库管理配送中心库存维护配送中心商品封仓配送中心移库配送中心库存盘点仓库损溢分拣仓位优化配送中心库存查询图1-4:仓库内管理模块第二章系统功能及需求2.1封仓部分功能概述封仓是津菱物流管理系统库内管理中相当重要的一部分。当物流公司仓库内的商品保质期临近,而商品按照正常的配送出库方式尚需一定时间,因此即使立即出库,当商品运达要货门店的时候已经过了保质期。因此对于即将到达保质期的商品,需要进行封仓操作,使其不能参加出库。而当改进了运输路线或者由于其它原因使得商品能够在保质期前送达的时候,又需要对指定日期之前过期的商品进行解封,使其能够参加配送出库。由于可能在指定日期过期的商品进行封仓和解封操作的商品较多,因此需要对此操作实现批处理,即能够一次性对多个商品进行封仓和解封。另外,由于一些其它原因,可能有一些个别商品不能参加配送,因此需要对这些商品进行单独的封仓操作。由于不能参加配送,因此称此类封仓为”配送封仓”。2.2封仓部分原有功能描述 现系统中封仓部分只有”配送中心封仓商品查询”,”配送中心自动封仓解封”,”配送中心手工封仓解封”三个界面。只能对单个商品进行个别的封仓。其用例图如图2-1所示:图2-1:原有的封仓部分用例图 操作员:即由系统提供的配送经理郭颂的权限登陆配送封仓:对仓库内存储仓位上的货物进行封仓,使其不能参加配送出库,一次只能操作一条记录的商品。点菜封仓:对仓库内存储仓位上的货物进行封仓,使其不能参加点菜配送,一次只能操作一条记录的商品。解封:解封能够对已经被封仓的商品进行解封操作,能够一次解封一条商品记录,或者用Ctrl或Shift键选择多条记录进行解封。封仓查询:能够查询出被任何封仓类型所封的商品记录(包括配送封仓,保留库存封仓,调换封仓,反品封仓,退货封仓等)。2.3封仓部分需求分析总体描述:增加保质期封仓功能,并根据实际业务情况修改手工封仓部分的功能,并保证封仓部分与配送部分能够兼容。其用例图如图2-2所示:图2-2:改进后的封仓部分用例图自动封仓:对所有商品按照有效期进行查询,并对距离有效期在一定时间之内(默认值为14天,可根据实际情况进行修改)的商品进行批处理封仓。自动封仓解封:对所有被保质期自动封仓的商品根据其有效期在某一时间段内进行查询,并对这些商品进行批处理解封。也能够对查询出来的商品进行选中单个或多个商品进行解封。配送封仓:与原有功能相同,检查其兼容性。根据津菱公司的实际业务情况,取消点菜封仓一项,使手动封仓只能对商品进行配送封仓,而不能进行点菜封仓。手工解封:在维持原有功能的基础上,将手工解封的功能扩大至既能够解封手工封仓的商品,也能够解封自动封仓的商品。封仓查询:在维持原有功能的基础上,在封仓查询功能中添加自动封仓栏,并取消点菜封仓相关栏目。如图2-3所示:图2-3:封仓与配送出库状态图
第三章系统改进设计3.1开发环境描述3.1.1服务器端环境硬件环境:稳定服务器软件环境:RedhatLinux7.3,Sybase客户端环境硬件环境:普通PC机软件环境:Microsoft公司Windows操作系统3.1.3开发环境硬件环境:奔腾2.4GHzCPU,512MDDR内存,17寸纯平显示器、显存64M,80G硬盘。软件环境:WindowsServer,Powbuilder7,SybaseCentral3.1,ERWin4.03.2津菱系统总体设计津菱物流管理系统的是专门针对公司内部资源进行管理,业务逻辑比较复杂,而且局限在公司局域网内部使用,因此此管理系统在总体结构设计上采取C/S的模式即能比较好的满足客户需求,采用此架构模式能充分发挥客户端PC的处理能力,很多工作能够在客户端处理后再提交给服务器,减轻了服务器的负担,因而客户端响应速度快。相比较于当前流行的B/S架构模式,在开发上更简单易行,系统的安全性也更高。其体系架构如图3-1所示: RedhatLinux7.3服务器RedhatLinux7.3服务器Sybase12.5数据库Windows操作系统客户端发出SQL到服务器返回查询结果到客户端TCP/IP3.3封仓部分主要技术3.3.1 纵观PowerBuilder技术,数据窗口(DataWindow)可是说是其核心的核心,它使得数据库的开发和应用变得更加简单,快捷。DataWindow能够让用户在输入数据和制作报表时,以多种不同的风格来显示数据。DataWindow是一种为正在被观察的数据保留数据信息的特有对象,因此,它为生成一个带有高质量的数据库事务应用程序提供了强大的处理工具。数据窗口对象的主要功能是显示数据并允许用户修改,因为在数据窗口对象中包含两个主要组件:数据信息和显示格式。数据窗口需要数据库和其它非数据库的数据资源来组装自己,它按照定义时制定的表现风格显示。用户定义了表现风格后,能够对其进行进一步的修改,以增强数据窗口的功能。数据窗口不但自身显示数据还能够作为生成所有报表的数据源。在一个实际的应用程序处理过程中,数据窗口一般位于应用程序和数据库中间,按应用程序的要求来检索,操纵并显示数据。除了数据库之外,数据窗口还能够经过ODBC,DDE(动态数据交换),OLE(对象嵌入与连接)等方法访问文件中的数据。 数据窗口为应用程序提供了数据源和检索,操纵数据的方法与途径。它包括数据窗口对象和数据窗口控件两个方面。1.数据窗口对象 数据窗口对象是由数据窗口画板创立,并作为一个独立的对象存入PowerBuilder库文件中。在实际应用中,数据窗口对象经过数据窗口控件被放置在窗口中。数据窗口对象能够看成是封装数据的容器,数据窗口控件能够看作是窗口和数据窗口之间的连接件。数据窗口控件拥有自己独立的属性,函数和事件,拥有读取和修改数据窗口对象属性的函数(Describe和Modify)。数据窗口画板是创立和修改数据窗口对象的地方。数据窗口对象创立以后,被定义为独立对象,而不必将它们限定到某个特殊窗口,甚至不必将它们限定到某个应用程序中。数据窗口对象能够在窗口间进行共享,能够在需要访问相同表的不同应用程序中使用相同的数据窗口对象,这体现了PowerBuilder的可重复使用性。2.数据窗口控件数据窗口对象是经过一个数据窗口控件来引用的,经过数据窗口控件将数据窗口对象放置到窗口中,并经过数据窗口控件实现对数据窗口对象的操纵。在窗口中添加放置数据窗口控件和添加放置其它控件一样。将数据窗口控件放置到窗口上,设定其位置和大小。将数据窗口控件连接到某个特定的数据窗口对象。编写脚本代码,处理数据窗口控件和操纵数据窗口对象。3.3.2 存储过程是存储在数据库中的一段存储程序。当创立存储过程时,系统会对其进行编译,并将执行代码存储到数据库中。存储过程的优点:1)安全性当创立了存储过程之后,能够将执行该过程的权限授予其它用户,从而使得她能够执行特定的数据库操作,而不能访问其它模式对象(例如表)。例如,你能够将执行过程(更新表)的权限授予其它用户,但不授予它们直接访问该表的权限。2)性能存储过程只被发送到数据库一次,相对于SQL语句或PL/SQL块而言,其网络通信量更小。当调用存储过程时,数据库会直接运行该存储过程,无需进行编译。相对于SQL语句而言,其执行速度更快。3)内存分配
存储过程充分利用了Sybase共享内存的能力。在将存储过程装载到内存中后,多个用户能够同时调用该存储过程,从而降低了应用对Sybase的实际内存需求。 3.3.3 由于PowerBuilder是完全支持面向对象的开发工具,因此此系统的开发运用了大量的面向对象的思想。如系统中的大部分窗口以及按钮都是从同一个基类继承下来,大大减少了重复的工作量,增强了软件的复用性,加快了开发进程。3.4PowerBuilder窗口设计3.4.1过保质期自动封仓窗口设计此窗口能够对预警天数进行设定(默认值是14天),设定完毕后能够对选定仓库编号和仓位编号进行查询未被封仓的商品。预警日期显示的为系统当前日期与预警天数相加的日期。在数据窗口中能够对查询所得的商品进行判断,经过checkbox决定是否将此商品自动封仓(默认值为选中),点击封仓按钮则可将约束条件下的商品进行批处理封仓。窗口对象:w_stkloc_autoclose_alarm数据窗口控件:dw_1数据窗口对象:d_stkloc_autoclose_alarm数据源存储过程:Spq_Stk_CloseAlarm涉及表:Tbb_StkLoc
表3-1:封仓窗口总体设计PB中的对象含义类型w_stkloc_autoclose_alarm主窗口sy_w_sheetsle_2预警天数录入框singlelineeditst_4预警天数statictextcbx_1打印复选框sy_u_cbxdw_2仓库编号数据窗口sy_u_dwdw_1数据输出窗口sy_u_dwem_1预警日期显示框sy_u_emst_3进度条statictextsle_1仓位编号输入框sy_u_slest_2仓位编号statictextst_1仓库编号statictext3.4.2过保自动封仓解封设计此窗口能够设置解封起始日期和解封终止日期(默认值解封起始日期为系统当前日期,解封终止日期为系统当前日期14天以后的日期),并在选定仓库信息和仓位编号(能够不填)后,点击查询,能够在数据窗口中得到当前仓库和仓位中有效期在解封起始日期和解封终止日期之间的被自动封仓商品。按住Ctrl和Shift键可对此数据窗口中的记录进行单选或者多选,点击解封按钮能够将选中商品解封。窗口对象:w_stkloc_autoclose_unclose数据窗口控件:dw_list数据窗口对象:d_stkloc_autoclose_unclose涉及存储过程:Spu_stkloc_unclose涉及表:Tbb_StkLoc
表3-2:解封窗口总体设计PB中的对象:含义类型w_stkloc_autoclose_unclose主窗口sy_w_sheetdw_storage仓库信息下拉框dw_u_storage_queryst_1”仓位编号”statictextsle_stkcell仓位编号输入框sy_u_sledw_list数据输出窗口sy_u_dwst_2进度条外框statictextst_3进度条statictextem_1起始日期输入窗口editmaskem_2终止日期输入窗口editmaskst_4解封起始日期statictextst_5解封终止日期statictext3.4.3其它窗口的修改 1.在”配送中心手工封仓”窗口w_stkloc_close中去掉”点菜封仓”选项:主要对其数据窗口控件d_stkloc_list进行修改,使其中的”点菜封仓”选项为不可见,可是保留代码,以留作以后的接口之用。2.在”配送中心封仓商品查询”窗口w_stkloc_close_query中去掉”点菜封仓”复选框:主要对其数据窗口d_stkloc_close_query进行修改,去掉”点菜封仓”一栏。3.5数据库相关设计3.5.1 封仓部分功能的实现主要是编写存储过程对数据库中配送中心商品库存表(Tbd_StkLoc)的进行修改操作。表Tbd_StkLoc包含的各个字段:表示商品所属标识的字段:DeptId(配送中心部门标识),StkLocId(配送中心库存标识),StkRegId(配送中心进货登记标识),StorageId(配送中心仓库标识),StkCellId(配送中心仓位标识),ProvId(供应商标识),ArtiId(基商品标识),ImpArtiId(进货类商品标识)表示商品基本信息的字段:ArtiClassCode(商品分类码),ImpInclQty(进货包装基商品含量),ImpUnit(进货包装计量单位),DistInclQty(配送包装基商品含量),DistUnit(配送包装计量单位)表示现存该商品信息的字段:StkQty(配送中心库存单品数量),TolQty(配送中心库存单品可配送数量),TaxPrice(库存商品含税进价),UnTaxPrice(库存商品无税进价),ITaxRate(商品进项税率),ImpDate(配送中心入库日期),ProcDate(配送中心商品生产日期),ValidDate(配送中心商品有效日期),BatchCode(配送中心商品批号),GiftTypeId(赠品类型标识)表示库内该商品状态的字段:AutoCloseMark(自动封仓允许标志),CloseDate(封仓日期),EmptyDate(仓卡结零日期),StkStatus(配送中心库存状态),Note(配送中心库存说明),OptrId(操作员标识)此表中的StkStatus为商品的库存状态值,其具体含义如下:0-正常(可配送)1-正在配送(不可出库)2-手工点菜封仓(可配送)4-手工配送封仓(不可点菜,不可配送)8-到有效期自动封仓(不可点菜,不可配送)16-配送中心内部返品封仓(不可点菜,不可配送)32-配送返品封仓(不可点菜,不可配送)64-保留库存封仓(不可点菜,不可配送)128-退货封仓(不可点菜,不可配送)256-与供应商调换封仓(不可点菜,不可配送)512-配送中心内部移库过程封仓(中间状态)注:由于现有需求中对于点菜封仓不做要求,因此在用户操作界面上将与点菜封仓有关的操作取消,可是考虑到由于公司以后业务的发展或者别的需求,点菜封仓可能会在以后有所要求,因此在系统内部实现中保留与点菜封仓有关的字段及属性,以留作做将来功能扩展之用。3.5.2存储过程 存储过程主要完成对表的各种操作和修改,根据需求分析的要求,增加或修改了以下存储过程:Spu_StkLoc_AutoClose:实现过保质期封仓操作Spq_Stk_CloseAlarm:d_stkloc_autoclose_alarm的数据源Spu_stkloc_unclose:实现了对单个商品的解封操作第四章系统开发实现4.1PowerBuilder窗口实现4.1.1过保质期自动封仓窗口主要实现 1.创立窗口主体w_stkloc_autoclose_alarm在PB中创立Object->Window->w_stkloc_autoclose_alarm,按照设计,增各个控件:sle_2(singlelineedit),st_4(statictext),cbx_1(sy_u_cbx),dw_2(sy_u_dw),dw_1(sy_u_dw),em_1(sy_u_em),st_3(statictext),sle_1(sy_u_sle),st_2(statictext),st_1(statictext)。 2.数据窗口的构建 编写存储过程Spq_Stk_CloseAlarm,根据存储过程的设计确定传递参数: @m_DeptId int, /*配送中心部门标识*/@m_StorageId int, /*配送中心仓库标识*/@m_StkCellNo varchar(20), /*配送中心仓位编码*/@m_ValidDays datetime /*预计封仓日*/在实现查询功能的事件sy_query中调用此数据窗口控件的retrieve函数,并确定定此四个参数后数据窗口即调用存储过程进行查询,并将结果显示在数据窗口控件dw_1。参数值均从主窗口中的输入控件取得,主要代码如下: li_storageid=dw_2.object.storageid[dw_2.getrow()] s_stkcellno=sle_1.text ls_stkcellno=sle_1.textld_em1=date(em_1.text)ld_date=datetime(ld_em1)li_bak=dw_1.retrieve(il_storeid,li_storageid,'%'+trim(ls_stkcellno)+'%',ld_date) 3.封仓功能的实现(sy_autofengcang)封仓功能是经过事件sy_autofengcang实现的,在此事件中调用存储过程Spu_Stkloc_AutoClose,传递两个参数:@m_AlarmDayint,--过保预警天数@m_CloseDatedatetime=null --当前日期该存储过程实现对有效期在封仓日期之前的商品进行封仓操作。事件在调用存储过程完毕之后,再次调用查询函数,刷新数据窗口:this.triggerevent('sy_query') 4.关闭窗口事件(closequery)当用户改变了商品的自动封仓状态后如果没有保存就关闭窗口,则系统回提示用户进行保存:ifdw_1.getnextmodified(0,primary!)>0thenll_result=messagebox('提示','数据已经修改,是否保存?',Question!,yesnocancel!,3)5.其它功能此窗口中的其它功能按钮均从系统中的父类继承,分别实现了复位,保存,另存,预览,打印,关闭等功能。并能对数据窗口中的选中记录进行到首,向前,向后,到尾操作。4.1.2过保质期自动封仓解封窗口主要实现1.创立窗口主体w_stkloc_autoclose_unclose在PB中创立Object->Window->w_stkloc_autoclose_unclose,按照设计,增各个控件:dw_storage(dw_u_storage_query),st_1(statictext),sle_stkcell(sy_u_sle),dw_list(sy_u_dw),st_2(statictext),st_3(statictext),em_1(editmask),em_2(editmask),st_4(statictext),st_5(statictext)。2.数据窗口的构建经过SQLQuery形式构造数据窗口对象d_stkloc_autoclose_unclose,从表:dbo.Tbb_Article(商品基表)dbo.Tbd_StkCell(仓位类型表)dbo.Tbd_StkLoc(配送中心商品库存明细表)dbo.Tbd_StkStorage(配送中心仓库表) 中选取数据,返回给数据窗口控件,作为查询调用的结果。检索参数: li_deptidnumber 配送中心部门标识 li_storgeidnumber 配送中心仓库标识 ls_stkcellnostring 配送中心仓位编号 ld_datestartDatetime 解封起始日期 ld_dateendDatetime 解封终止日期确定检索条件(即已被封仓,且有效期在规定的时间段内的商品):Where(dbo.Tbd_StkLoc.StkStatus&8<>0))AND/*按位操作取StkStatus为8的商品*/(dbo.Tbd_StkLoc.ValidDate>=:ld_datestartanddbo.Tbd_StkLoc.ValidDate<=:ld_dateend) /*即有效期在解封其实日期与解封终止日期之间*/3.查询事件(sy_query)的实现:取得用户输入的”解封起始日期”和”解封终止日期”,并转化称字符串: ld_em1=date(em_1.text)ld_datestart=datetime(ld_em1)ls_datestart=string(ld_datestart,'yyyy/mm/dd')ld_em2=date(em_2.text)ld_dateend=datetime(ld_em2)ls_dateend=string(ld_dateend,'yyyy/mm/dd')对用户输入的日期进行判断其正确性ifls_datestart<='1900/01/01'then /*起始日期不得早于191月1日*/ messagebox('提示信息','起始日期不合法') em_1.setfocus() return-1endififls_dateend<ls_datestartthen /*终止日期不得早于起始日期*/ messagebox('提示信息','终止日期不能够比起始日期小') em_2.setfocus() return-1endififls_dateend>'2050/12/31'orls_dateend='1900/01/01'then /*终止日期不得晚于2050年12月31日或者等于191月1日*/ messagebox('提示信息','终止日期不合法') em_2.setfocus() return-1endif根据用户输入的检索信息对数据库进行检索,主要由调用数据窗口控件,并传给其参数实现:ifisnull(ls_stkcellno)orls_stkcellno=''then ls_stkcellno='' li_bak=dw_list.retrieve(ll_deptid,ll_storageid,ls_stkcellno,ld_datestart,ld_dateend)else li_bak=dw_list.retrieve(ll_deptid,ll_storageid,'%'+ls_stkcellno+'%',ld_datestart,ld_dateend)endif对于窗口菜单及工具栏按钮是否可用的设置:lm_menu.of_disable(lm_menu.m_oper.m_next)lm_menu.of_disable(lm_menu.m_oper.m_bottom)lm_menu.of_disable(lm_menu.m_oper.m_previous)lm_menu.of_disable(lm_menu.m_oper.m_top) 4.解封事件(sy_jiefeng)的实现:主要由存储过程Spu_Stkloc_unclose实现对单个商品的解封,由于需要实现能够对单个或者多各选中商品的批处理解封,故需要在解封事件中循环调用此存储过程。与存储过程Spu_Stkloc_unclose的参数传递:DECLAREfengcangPROCEDUREFORdbo.Spu_stkloc_unclose@m_DeptId=:li_deptid, /*配送中心部门标识*/@m_StkLocId=:ll_stklocid, /*配送中心库存标识*/ @m_StkStatus=:li_stkstatus, /*配送中心库存状态*/ @m_Note=:ls_note, /*配送中心库存说明*/ @m_OptrId=:li_optrid, /*操作员编号*/ @m_error=:li_bakoutput; /*出错信息*/sqlca.autocommit=trueexecutefengcang;循环调用存储过程:forll_row=1toll_maxrow ifdw_list.isselected(ll_row)then /*调用存储过程具体实现代码*/ endif next解封结果处理:ifll_rowpoint=ii_rowallthen /*解封成功*/ messagebox('提示信息','解封成功!') st_3.visible=false lm_menu.of_disable(lm_menu.m_edit.m_item_1) ib_firstquery=false this.triggerevent('sy_query') return1else ifll_rowpoint=1then /*解封失败*/ messagebox('提示信息','解封失败!') elseifll_rowpoint>1then messagebox('提示信息','所选中的记录没有完全解封成功!') ib_firstquery=false this.triggerevent('sy_query') endif st_3.visible=false lm_menu.of_disable(lm_menu.m_edit.m_item_1) return-1endif5.其它功能此窗口中的其它功能按钮亦从系统中的父类继承,分别实现了复位,保存,另存,预览,打印,关闭等功能。并能对数据窗口中的选中记录进行到首,向前,向后,到尾操作。4.1.3手工封仓解封及查询主要实现 1.在手工封仓中去掉点菜封仓的下拉菜单项: 打开数据窗口控件d_stkloc_list,修改其中下拉列表控件tbd_stkloc_stkstatus的edit属性中的codetable内容,去掉”点菜封仓”。 2.在配送中心封仓商品查询中去掉点菜封仓的复选框 打开数据窗口控件的d_stkloc_close_query,去掉其中的obj_34688604控件即可。4.2存储过程实现4.2.1Spq_Stk_CloseAlarm 此存储过程被窗口w_stkloc_autoclose_alarm中的数据窗口对象调用,实现了对有效期在预警日期之前的存储仓位商品进行查询的功能。其功能实现如下: 1)由用户在窗口输入框中的输入确定查询范围,如果有些输入框没有输入,则默认为这些输入框中的内容不受限制,及全部选中。将结果放入临时表#StkCell中: select @m_StorageId=isnull(@m_StorageId,0),@m_ValidDays=isnull(@m_ValidDays,dateadd(dd,1,getdate()))if@m_StkCellNoisNULLselect@m_StkCellNo='%'elseifcharindex(@m_StkCellNo,'%')=0select @m_StkCellNo=rtrim(@m_StkCellNo)+'%'select c.DeptId,c.StorageId,StorageNo,StkCellId,StkCellNointo #StkCell 2)由于在分拣仓位以及倾斜货架(津菱系统不要求,但作为以后的扩展接口保留此类型货架)上的商品不能被封仓,因此不能在此窗口中显示这些商品:Wherec.StkCellTypeIdnotin(100,110)/*StkCellTypeId为100和110,为放在分拣仓位和倾斜货架上的商品*/ 3)Tbb_Article表中LInclQty定义为==商品的提前报警天数将库存Tbd_StkLoc中ValidDate-LInclQty<@m_ValidDays没有封仓的商品查询出来from Tbd_StkLoca,#StkCellb,Tbb_Articlecwhere a.DeptId=b.DeptIdand a.StkCellId=b.StkCellIdand a.ArtiId=c.ArtiIdand a.StorageId=b.StorageIdand StkStatus<4 /*即选择没有被封仓的商品*/and a.StkQty>0 /*选择库存商品数量不为零的商品*/and a.ValidDate<=@m_ValidDays 4)检索得到的结果返回给数据窗口对象d_stkloc_listselect DeptId,StkLocId,StkCellNo,ArtiCode,ArtiName,ArtiSpec,Qty=convert(int,StkQty/DistInclQty),ArtiSpec,DistSubQty=StkQty–convert(int,StkQty/DistInclQty)*DistInclQty,ProcDate,ValidDate,AutoCloseMark,StkStatus,StorageNo,DistInclQty,DistUnit,LInclQtyasWarnDatefrom #StkLocs,Tbb_Articleawhere s.ArtiId=a.ArtiIdreturn14.2.2Spu_Stkloc_AutoClose 此存储过程被窗口w_stkloc_autoclose_alarm中的自动封仓事件sy_autofengcang调用,主要实现了将库内商品中有效期在预警日期之前的商品全部封仓,其功能实现如下: 1)定义变量@m_StkStatus和@m_Note,为改变商品库存状态(即将Tbd_StkLoc表中该商品的StkStatus字段值改为8)以及库存状态说明(即将Tbd_StkLoc表中该商品的Note字段值改为”过保自动封仓”)作准备: declare@m_StkStatus smallint, /*封仓状态*/@m_Notevarchar(100)select@m_StkStatus=8,@m_Note='过保自动封仓' 2)改变封仓状态和商品库存状态说明:update Tbd_StkLocset StkStatus=StkStatus|@m_StkStatus,Note=@m_Note,CloseDate=getdate()fromTbb_Articlea,Tbd_StkLocl,Tbd_StkCells 其更改条件为:wheredateadd(dd,@m_AlarmDay,@m_CloseDate)>=l.ValidDate /*选择有效期在预警日期之前的商品*/and a.ArtiId=l.ArtiIdand AutoCloseMark=1/*即允许自动封仓*/and StkStatus<4 /*0-正常(可配送),1-正在配送(不可出库),2工点菜封仓(可配送)均可自动封仓*/and l.StkQty <>0 /*配送中心库存单品数量为0的商品不能进行自动封仓*/ands.DeptId=l.DeptIdands.StkCellId=l.StkCellIdands.StorageId=l.StorageIdands.StkCellTypeIdnotin(100,110) /*分捡仓位和倾斜货架上的商品不能进行自动封仓*/ 3)若操作失败,则事务自动回滚: begintransactionsavetransactionstkloc_close/*具体操作内容*/if @@error<>0beginprint'过保自动封仓过程修改库存状态失败'rollbacktransactionstkloc_closecommittransactionraiserror556677,'过保自动封仓过程修改库存状态失败.'end committransaction4.2.3Spu_Stkloc_unclose 此存储过程主要实现了对指定库存标识的单个商品的解封,并可将用户输入的说明,作为系统数据库内对该商品的配送中心库存说明,主要实现如下: 1)设置该商品的配送中心库存状态为正常,并将用户输入的说明作为表内配送中心库存说明字段的值: setStkStatus=StkStatus&(~@m_StkStatus),Note=@m_NotewhereDeptId=@m_DeptIdandStkLocId=@m_StkLocId 2)如果数据库出错,设置事务自动回滚,并返回出错信息: begintransactionupdateTbd_StkLoc/*对数据库的表操作*/if@@rowcount<>1beginrollbacktransactionraiserror40033"数据库出错(updateTbd_StkLoc)"select@m_error=-1return@m_errorendcommittransactionselect@m_error=0return0第五章系统功能测试5.1封仓及解封功能测试5.1.1测试环境描述测试环境与开发环境采用相同的软硬件配置,其平台构架如图5-1:ClientClientServerServerDatabase图5-1:测试环境平台构架5.1.2测试数据设计1)测试整体构思设计由于开发工具PowerBuilder是一个完全的可视化开发环境,它采用事件驱动的工作方式。在这种工作方式中,程序的运行没有固定的流程,程序中的代码也是为各种可能发生的事件而编写,用户能够经过编写脚原来说明当事件被触发时所要完成的处理过程,这样程序便被写成许多独立的片段。当程序开始运行之后,它就能够接受来自系统,用户或者其它应用程序触发的事件,然后执行相应的事件代码。这种事件驱动的开发环境方便了程序的开发,可是给测试带来了一定的困难。由于代码分布在各个独立的事件之中,因此很难对系统进行结构性测试。故决定对该系统采用单元测试和集成测试。单元测试在开发时完成,主要是对完成的代码进行功能性测试,在完成所有的开发任务后,进行集成测试,本文测试部分主要侧重集成测试。2)测试模块的设计集成测试深入要集成的模块顺序有四种选择:自顶向下集成,自底向上集成,三明治集成,大爆炸集成。其中大爆炸集成最容易:这种集成将所有单元放在一起编译并进行一次性测试。这种方法缺点是,当(不是如果!)发现失败时,没有多少线索能够用来帮助确定缺陷位置,故不采用。鉴于本人所开发的部分为原系统的一部分,而该部分内容又由一些相关的功能模块组成,且这些功能模块总体上的功能为平行的,因此采用三明治集成。三明治集成是自顶向下和自底向上集成的组合,如果经过分解树考虑三明治集成,则只需在子树上真正进行大爆炸集成。又由于本部分为原系统的一部分,因此在进行集成测试时不需专门开发桩和驱动模块,可直接采用原系统的调用该部分和被该部分调用的功能模块。根据不同的功能实现,将封仓部分三明治集成测试主要结构设计如图5-2:配送出库部分与封仓关系密切配送配送出库部分与封仓关系密切配送出库自动封仓手工封仓手工解封封仓查询自动解封查询解封图5-2:封仓部分三明治集成图在进行完三明治集成测试之后,再对整个系统进行系统测试,其流程如图5-3:进货进货库内管理配送出库采购定单录入进货登记入库:封仓部分要货单录入配送启动配送出库图5-3:系统测试流程图3)测试数据的设计:I.三明治集成:自动封仓部分:采用库内已有商品进行查询,然后对指定商品封仓。自动解封部分:此用库内已自动封仓的商品进行查询,然后对指定商品进行解封。手动封仓解封与配送出库的集成:在”配送中心库存商品封仓(w_stkloc_close)”窗口中对某一商品进行”配送封仓”,并在”配送中心手工封仓解封”将该商品解封,并测试这些操作对该商品的配送产生怎样的影响。自动封仓解封与配送出库的集成:在”配送中心商品封仓预警”中对一批商品进行封仓,并在”配送中心自动封仓解封”进行解封,并测试这些操作对该商品的配送产生怎样的影响。II.系统测试:将一批商品从整个系统的业务流程:进货->库内管理->出库,进行测试。5.1.3测试过程I.三明治集成:自动封仓部分:打开”配送中心商品封仓预警”窗口,设置预警天数为90天,查询所得数据为有效期在系统日期后90天以内的所有存储仓位未被封仓商品,查询功能正常。b.将查询所得所有商品进行过保质期自动封仓。打开”配送中心自动封仓解封”查询已自动封仓商品,发现所封商品均在此处出现,封仓功能正常。自动解封部分:a.打开”配送中心自动封仓解封”窗口,设置”解封起始日期”为”/03/10”,”解封终止日期”为”/09/10b.选中其中一条记录,点击”解封”,然后打开”配送中心商品封仓预警”窗口查询,发现此商品均已解封。回到解封窗口,选中所商品,点击”解封”,再回到预警窗口,发现所有所有商品均已解封,解封功能正常。手动封仓解封与配送出库的集成: 测试使用商品数据: 10001 利民酿造酱油 a.仓库->配送中心商品封仓->配送中心库存商品封仓(w_stkloc_close) b.门店要货->要货单录入(w_out_entry) c.配送->配送启动->配送启动(w_dist_multimanner): d.配送->配送出库->配送出库(w_distribution)自动封仓解封与配送出库的集成:说明:此部分记录了与封仓有关的配送测试数据,发现已封仓商品将不能参与配送出库,且已封仓商品的出库单号将不被记录在数据库中当前测试计算机系统时间:-系统自动封仓预警天数:90,封仓日期:/07/03测试使用商品数据:商品编号商品名称库存数量仓位编号仓卡号有效期1000001喜之郎10粒高纤1*4810袋CA08-2-024947/03/12a.配送中心商品封仓预警w_stkloc_autoclose_alarmb.要货单录入w_out_entryc.配送启动w_dist_multimannerd.配送出库w_distributionII.系统测试此部分文档记录了一次从进货-要货-配送-出库全过程的数据流程,主要目的是发现当修改了封仓部分代码后系统的其它部分是否能正常工作,即是否破坏原有功能,故仓库内部管理部分没有算在这次测试业务流程之内。进货->进货与登记入库->采购订单录入进货->进货与登记入库->进货登记与入库门店要货->要货单录入配送->配送启动->配送启动配送->配送出库->配送出库5.1.4测试结果1)三明治集成测试结果分析配送中心自动封仓解封功能正常,配送中心手动封仓解封功能正常,且被封仓商品虽然能够被要货可是最终不能被配送出库,被解封后能参加配送出库。2)系统测试结果分析封仓部分更改基本不会影响系统原有功能的实现。5.2Sybasse数据库的复制技术5.2.1为什么要进行数据库复制?当项目在进行手工封仓解封和配送出库的集成测试的时候,测试变得难以进行,因为发现虽然把存储仓位中某种商品全部都配送封仓,可是在配送出库阶段总能出库,可是在代码中我又找不到错误,令人百思不得其解。后来发现,原来同组财务部分的开发人员正在往仓库里进货,因此尽管把库中现存的商品全部封仓,可是在这之后负责财务的开发人员由于开发需要又将此商品进货,而配送出库成功即是将这些进来的货又出去了。由于对数据库的同时操作导致了不同部分开发人员的测试与开发工作同时进行变得十分困难,有时甚至会产生脏数据。在导师的建议下,我对本项目组所使用的数据库sytrade60复制,产生新的数据库sytrade70,开发的时候使用数据库sytrade60,测试的时候使用复制的新数据库sytrade70,保证了开发和测试工作的顺利进行。5.2.2数据库复制的环境和用到的工具 SybaseCentral3.1:这是Sybase公司的产品系列产品之一,此工具主要实现了对一个数据库中所有表结构以及存储过程的导出,且在开发过程中对修改存储过程也提供了十分方便的实现平台。bcp工具:Sybase数据库自带的一个数据导入导出工具,主要实现对数据库中表数据的导入导出。与其说bcp是一个命令,不如说它是一个十分好用的附带工具。PowerBuilder:用来生成导出所有表数据的bcp命令。由于系统所使用的数据库中表太多,而每导入导出一个表的数据均需要使用一条bcp命令,因此最好能够使用一个工具能够批处理一次性生成所有的bcp命令,在PowerBuilder中生成是我从网上找到的一个好方法。isql命令:向数据库导入所有的表结构,存储过程,触发器,用户等信息。5.2.3复制过程1)创立新数据库sytrade70在SybaseCentral中创立新的数据库sytrade70,分配逻辑空间和数据空间。2)原数据库表结构以及数据的导出在SybaseCentral中将数据库Sybase60中点中所有的表或者存储过程,从右键选项中选择GenerateDDL,生成所有创立用户表,系统表,代理表,存储过程,视图,用户,组,用户定义的数据类型,J
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年涿鹿县幼儿园教师招教考试备考题库含答案解析(夺冠)
- 2024年湘阴县幼儿园教师招教考试备考题库附答案解析(夺冠)
- 2025年四川外国语大学马克思主义基本原理概论期末考试模拟题及答案解析(必刷)
- 2026年嵩山少林武术职业学院单招职业倾向性考试模拟测试卷带答案解析
- 2024年湖南劳动人事职业学院马克思主义基本原理概论期末考试题带答案解析(夺冠)
- 2025年广西信息职业技术学院单招职业倾向性测试题库附答案解析
- 2026广东东莞市应急管理局第一次招聘编外聘用人员1人备考题库带答案详解(培优b卷)
- 2026年安徽省巢湖市单招职业适应性测试题库附答案解析
- 2024年红河卫生职业学院马克思主义基本原理概论期末考试题带答案解析(夺冠)
- 2025年浦城县招教考试备考题库附答案解析(夺冠)
- 设备委托开发合同(标准版)
- 理解人际沟通中的情绪管理和表达技巧应用
- 2025 年四年级语文阅读理解(分析人物形象)突破卷
- 手术室三方核查规范
- 2025年黑龙江省大庆市中考数学试题【含答案、解析】
- 车辆工程系毕业论文
- 七年级语文文言文阅读理解专项训练
- 销售部客户资源管理办法
- DB15∕T 972-2024 医疗机构物业管理服务规范
- 临床提高吸入剂使用正确率品管圈成果汇报
- 2025光伏发电建设项目文件归档与档案规范
评论
0/150
提交评论