日期:2008-10-10  浏览次数:20433 次

用VB.NET和Excel排生产计划

           —企业信息化探讨之一

            屠恩海(SunHai)

   开发工具:Microsoft Visual Studio .NET 2003
   操作系统:Windows XP


                 企业信息化失败原因探讨

  中国企业上线ERP的成功率是不高的。这是为什么呢?
  实用的ERP系统有两个特征:
    1. 要求具有高度的定制性
    2. 要能根据企业实际随时修改ERP系统

  而现在企业的ERP系统开发基本采用外包模式,开发人员虽然也可以深入公司各个部门,掌握各个方面信息,然后进行定制开发。但是开发人员毕竟不是企业实际从业人员,掌握信息的广度、深度毕竟是有限的,因此,通常情况下,所开发的ERP系统难以保证第一个特征:要求具有高度的定制性。
  
   另一方面,企业的实际情况随时都可能发生变化,ERP系统也要随时修改,才可能随时满足企业的需求。如果说一开始,ERP系统是满足企业需求的,那么一年以后呢?当然开发人员也可以跟踪企业需求,随时修改ERP系统,但总归是不太方便。

  
                  理想的企业信息化模式

  个人认为,理想的企业信息化模式是这样的:
    1.企业信息化系统的开发应由企业内部人员进行,而不是外包
    只有这样,实用的ERP系统所要求的两个特征:要求具有高度的定制性; 要能根据企业实际随时修改ERP系统就很可能两者都具备了。
    2.企业信息化要从实际工作需要出发,逐步推进
   公司实际从业人员(兼开发人员)从实际工作需要出发,开发出相应的信息化模块、功能,再逐步完善。
   现实中,许多企业开发的信息化系统功能很多,但又有多少人会用呢,最终是花架子而已。
  就象笔者所在单位,说大不大,说小不小,但要一开始推行信息化管理,是不可能的。企业各部门人员素质不一,是不可能被普遍接受的。

  要实现笔者所述理想的企业信息化模式,最大的困难是什么?
  最大的困难是是人才难得,特定管理人员要同时具备两种能力:管理能力和开发能力。这种人才并不是每个企业都能得到的。
  笔者虽然谈不上什么人才,但近几年从事的却是企业管理工作,并对信息化管理系统的开发亦略知一二。笔者就有可能亲身实践“理想的企业信息化模式”,并把有关经验与大家分享。


                  公司实际情况分析

  从2004年起,我主管公司的计划工作,包括制定并下发产品生产计划,自制件生产计划,外协件采购计划等。原来公司内一直用手写的方式,由于公司产品的型号较多,如果我也是用手工填写,计划一多,整天忙于机械式的写写算算,做不了什么事情。所以我考虑用电脑代替部分机械性的工作,我就可以腾出精力抓其他方面事情了。电脑可以辅助、代替我做哪些机械性的工作呢?
  比如,每一成品由零件组装而成,零件分自制件和外协件。每一产品由哪些零件组成是固定的。每个月的生产计划,都要分解成自制件生产计划和外协件采购计划,这个分解工作我决定交给电脑来完成。


                  程序开发模式分析   
                 
  用什么开发工具,用什么开发模式来实现所要求的功能呢?公司内暂时只有我自己运用,要实现的功能也不多,在一开始并没有必要用复杂的大型数据库系统。,为方便信息共享,我决定用VB.NET调用Excel来实现功能模块。
  为什么用VB.NET而不用C#,因为Excel中有个VBA,其语法和VB.NET是近似的。而且,VB.NET和C#的区别主要是语法,而非功能。
  我现在只要求实现用程序自动安排《自制件生产计划》,这个功能不用VB.NET,单用VBA也能轻易实现。但是,考虑到以后可能的功能扩充、升级,还是用VB.NET。VB.NET是面向一代的开发工具,功能强大,而且调用EXCEL也很方便。
  不推荐用VB6,VB.NET的入门及初级应用并不难,为何还要去用早期版本,而不用最新版本,掌握最新技术呢!  
  

               用VB.NET和Excel排生产计划

   软件构思是这样的:
  先在EXCEL里定制好《自制件生产计划》的样表(模板),保存为自制件生产计划.xls,其中只有一个sheet:样表。在样表中设置好各种格式,填写好固定项。再新建一空白workbook,保存为2004年自制件生产计划.xls。
   新建一VB.NET应用程序,命名为生产计划报表。在窗体上放很少几个控件,如:几个文本框,用来输入产品数量;checkbox用来先选择是正式生产计划还是增补生产计划;另外用二个文本框用来输入计划时间和计划编号。
  点击button,程序打开自制件生产计划.xls和2004年自制件生产计划.xls,把样表copy到2004年自制件生产计划.xls,并自动在目标sheet中填写各自制件需要生产的数量。
  
  下面是实现代码及详细注释。注意,要先添加com引用Microsoft Excel Object Library,我的是office 2003,引用Microsoft Excel 11.0 Object Library。

 

Private Sub producePlan()
  Call killEXCEL() '调用杀死EXCEL进程过程
  '以下代码判断用户填写信息是否完整,如不完整则提示信息并退出.
  If chkFormal.Checked = False And chkSubjoin.Checked = False Then
    MsgBox("是正式计划还是增补计划??", MsgBoxStyle.Critical, "请先选择计划性质")
    Exit Sub
  End If
  If txtDay.Text = "2004年月" Then
    MsgBox("什么月份的生产计划???", MsgBoxStyle.Critical, "请填写计划时间")
    Exit Sub
  End If
  If txt703.Text = Nothing Or txt909.Text = Nothing Or txt931.Text = Nothing Or txt932.Text = Nothing  Then
    MsgBox("请填写计划台数!", MsgBoxStyle.Critical, "计划台数填写不全")
    Exit Sub
  End If
  If chkFormal.Checked = True And chkSubjoin.Checked = True Then
    MsgBox("正式和增补两者只能选一!", MsgBoxStyle.Critical, "请重新选择计划性质")
    Exit Sub
  End If

  '以下代码即是计算各自制件的数量,用中文来命名是免去代码注释
  Dim 涂氟龙面板703 As Integer = CType(txt703.Text, Integer)
  Dim 钛金面板909 As Integer = CType(txt909.Text, Integer)
  Dim 油磨不锈钢面板931 As Integer = CType(txt931.Text, Integer)
  Dim 油磨不锈钢面板932 As Integer = CType(txt932.Text, Integer)
  Dim 底盘24 As Integer = 涂氟龙面板703
  Dim 底盘22 As Integer = 钛金面板909
  Dim 底盘41A As Integer = 油磨不锈钢面板931
  Dim 底盘41B As Integer = 油磨不锈钢面板931
  Dim 水盘25 As Integer = 涂氟龙面板703
  Dim 水盘24 As Integer = 涂氟龙面板703
  Dim 水盘22 As Integer = 钛金面板909 * 2
  Dim 中心支架2 As Integer = 涂氟龙面板703 + 钛金面板909
  Dim 长支架931 As Integer = (油磨不锈钢面板931 + 油磨不锈钢面板932) * 2
  Dim