1 概念介绍
VB 是Visual Basic 的简称,是由美国微软公司于1991年开发的一种可视化的、面向对象和采用事件驱动方式的结构化高级程
序设计语言,可用于开发Windows 环境下的各类应用程序。它简单易学、效率高,且功能强大可以与Windows 专业开发工具SDK 相
媲美。在Visual Basic 环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Windows 内部的广泛应用程序接口 (API )函数,动态链接库(DLL)、对象的链接与嵌入(OLE)、开放式数据连接(ODBC)等技术,可以高效、快速地开发Windows 环境下
功能强大、图形界面丰富的应用软件系统。由于VB 是一个可视化的集成开发环境,使用其编写应用程序,不需要编写大量的代码 去描述界面元素的外观和位置,而只要把预先建立的对象添加到屏幕上即可,是完全按照面向对象的程序设计思想研制,采用图形
化的应用界面,集应用程序开发、测试、查错功能于一体的集成开发环境。
ERP——enterprise Resource Planning 企业资源计划,是指建立在信息技术基础上,以系统化的管理思想,为企业决策层及员工 提供决策运行手段的管理平台。ERP 软件系统是一种主要面向制造行业进行物质资源、资金资源和信息资源集成一体化管理的企
业信息管理系统。在企业中,一般的管理主要包括三方面的内容:生产控制(计划、制造)、物流管理(分销、采购、库存管理)和财务 管理(会计核算、财务管理)。这三大系统本身就是集成体,它们互相之间有相应的接口,能够很好的整合在一起来对企业进行管
理。另外,随着企业对人力资源管理重视的加强,已经有越来越多的ERP 厂商将人力资源管理纳入了ERP 系统的一个重要组成部
分,ERP 系统在企业中能否得到成功实施和有效应用,还取决于一个关键因素:ERP 系统的客户化和二次开发。因此,通过运用ERP
软件系统,企业能够利用计算机对企业的资金、货物、人员和信息等资源进行自动化管理,具有制造,办公操作,供应链管理,人力资
源管理,项目管理,财务与管理,客户服务,销售与市场营销以及个性化管理等商业功能。 ERP 二次开发是指建立在现有ERP 平台上,为满足客户个性化需求的而进行的再次开发。由于ERP 的实施企业所在的行业千 差万别,而且面对不同企业千差万别的具体情况和不同企业千变万化的特殊需求时,也不可能做到“以不变应万变”。此外,企业所
处的环境是不断变化的:企业的产品种类、产品所处生命周期的阶段、企业的计划模式、分销模式都不断在变化,企业不断地进行业
务流程的再造,企业的规模不断地缩小或扩展,等等。总之,企业的变化是绝对的。因此,为了提高ERP 系统的柔性和应变能力,
ERP 二次开发与个性化管理对于企业的ERP 成功实施起了决定性的作用。
2 金蝶BOS 二次开发简介
企业由于行业不同、规模不同,管理者的管理理念
不同,导致管理重点有差异,企业管理呈多样性,传统的
管理软件由于其设计水平有限,已很难满足用户的个性 化需求,而专项开发在时间上不可能适应企业管理的多 变性,完全通用化的软件又不能体现企业的个性化管 理。为了解决以上矛盾并从“尊重用户企业文化,彰显 个性管理”的角度出发,金蝶公司专门推出BOS 二次开 发平台,与金蝶ERP 管理软件系统一起打造企业的个性 化ERP ,实现企业的个性化管理。
金蝶BOS 二次开发平台按金蝶ERP 平台划分可分 为基于金蝶K3-BOS 的二次开发平台、基于金蝶
EAS-BOS 的二次开发平台、条码应用及二次开发平台、 独立外挂应用的开发和数据库设计和性能优化平台。
金蝶K3-BOS (Business Operation System ,业务操作图1 金蝶K3-BOS 的系统构成图
3 基于VB 的金蝶K3-BOS 插件开发案例
金蝶K3-BOS 插件包括:客户端单据插件、客户端序时簿插件以及中间层插件。其中客户端单据插件可以自动进行单据维护界
面菜单定义、单据事件函数定义等;客户端序时簿插件可以自动进行序时簿菜单定义、序时簿事件函数定义等;而中间层插件可以
自动进行中间层保存前、保存后、删除前、删除后等的事件函数生成。 金蝶K3- BOS 插件开发向导主要用于为开发人员提供定制的代码生成方式,可以通过插件开发向导生成。
以下以实现生产通知单在单据上的货品代号发生改变或编辑时,在状态栏上动态显示该物料的“即时库存数量”和“预计完工
数量”的功能而进行的客户端单据插件过程来介绍基于VB 的金蝶K3-BOS 插件开发。 具体流程:
1) 首先需要创建一个金蝶K3-BOS 客户端事件插件(启动Microsoft Visual Basic 6.0 。
在出现的“New Project”对话框中选择“Ac?
tiveX DLL”);
2) 选择菜单“工程”—〉“引用”。在出现的“引用”对话框中,选择K3ClassEvents 和Kingdee Foundation Objects 1.0 这两项;
3)修改默认的新建工程名(为BOSPlugInsSample)和类模块名(为BOSPlugIns),保存工程。
4 )在BOSPlugIns.cls类模块的代码中写入如下的代码,这段代码中定义了一个名为m_BillInterface的BillEvent对象,来接受金 蝶K/3 BOS 的客户端单据事件。 Option Explicit
Private WithEventsm_BillInterface As K3ClassEvents.BillEvent '必须具有的声明, 以此来获得单据事件
'这个Public Sub 必须存在, 且必须如下格式, 请不要修改或删除 Public Sub Show(ByValoBillInterface As Object)
'这里获得了K/3 的单据对象. 共有26 个事件, 11 个属性和49 个方法可以使用 '具体的事件、属性、方法,可以通过VB IDE 的“Object Browser”工具,选择“K3ClassEvents”下的“BillEvent”察看 Set m_BillInterface = oBillInterface End Sub
'这个Private Sub 必须存在, 且必须如下格式, 请不要 修改或删除
Private Sub Class_Terminate() '释放K/3 的单据对象
Set m_BillInterface = Nothing End Sub
5 )如图2 所示,可以通过选择对应的接口变量,在右边 选择这个接口暴露的事件,根据案例要求需要实现两个事 件:BeginEdit和Change。
6 )在Change 事件中加入对应的实现代码:图2 接口申明后将能获取对应的事件、方法和属性
'单据对象上的字段值发生改变时发生。
Private Sub m_BillInterface_Change(ByValdct As KFO.IDictionary, ByValdctFld As KFO.IDictionary, ByVal Col As Long, ByVal Row As Long, Cancel As Boolean)
'Object :BillEvent对象的一个实例。
'Dct:KFO.Dictionary对象,返回发生改变的字段的模板的对象。 'dctFld:KFO.Dictionary对象,返回发生改变的字段的值的对象。
'Col :Long 类型。当字段位于单据体多分录上时,则返回当前光标所在的列。 'Row :Long 类型。当字段位于单据体多分录上时,则返回当前光标所在的行。 'Cancel :Boolean 类型. On Error GoTo HERROR
If UCase(Dct(\ Dim dctTotal As KFO.Dictionary
With m_BillInterface
Set dctTotal = GetProdectedAmount(Val(dctFld(\ Set .Data(\
m_BillInterface.SetStatus 2, \即时库存数量: \预计完工数量: \? Total(\ End With
End If
HERROR:
If Err.Number<> 0 Then
MsgBox MODNAME & \金蝶提示\ End If End Sub
7 )在BeginEdit事件中加入对应的实现代码: '单据对象上的字段获得录入焦点时发生。
Private Sub m_BillInterface_BeginEdit(ByValdct As KFO.IDictionary, ByVal Col As Long, ByVal Row As Long)
'Object: BillEvent对象的一个实例?
'Dct: KFO.Dictionary对象,返回当前光标所在的字段的模板的对象。
'Col :Long 类型。当字段位于单据体多分录上时,则返回当前光标所在的列。 'Row :Long 类型。当字段位于单据体多分录上时,则返回当前光标所在的行。 Dim dctFld As KFO.Dictionary On Error GoTo HERROR If Row <= 0 Then Exit Sub
If Dct(\ '取物料的相关数量 With m_BillInterface
If .Data(\
Set dctFld = .Data(\ If Not dctFld Is Nothing Then
m_BillInterface.SetStatus 2, \即时库存数量: \&CStr(dctFld(\& \预计完工数量: \?
Fld(\ Else
Set dctFld = GetProdectedAmount(Val(m_BillInterface.GetFieldValue(\Row)))
Set .Data(\
m_BillInterface.SetStatus 2, \即时库存数量: \&CStr(dctFld(\& \预计完工数量: \?
Fld(\ End If End If End With HERROR:
If Err.Number<> 0 Then
MsgBox MODNAME & \? CrLf&Err.Description, vbCritical& \金蝶提示\ End If End Sub
8)通过以上的代码编写,再回到BOS 平台进行打 包与部署,在部署后的新账套中还可以进行相应的功 能调整(如图3)。
4 结束语
通过以上以金蝶K3-BOS 的VB 插件二次案例,我
们体会到到ERP 二次开发的重要性,但不是要对原有图3 在部署后的新账套中可以进行功能调整
ERP 系统全功能进行对立式的修改,更不是对原系统 做“大手术”,而是紧密围绕着原系统的基本功能,充分利用ERP 系统提供的各种接口表,补充开发一些我们实际需要的功能。同
时,二次开发必须考虑系统兼容性和数据一致性。这些工作,不仅不是对原系统的“破坏”,恰恰相反,起到了一种对ERP 系统在实
际应用中“硬度”的调和与“润滑”。纵然ERP 二次开发那么重要,企业在实施ERP 与ERP 二次开发过程中,还是需要“冷静”面对,细心实施。在ERP 二次开发过程
中,需要注意以下几个问题:
首先,在做重要开发前,必须做好系统备份;
其次,必须充分利用系统提供的冗余字段,来补充开发一些我们实际要用到的功能。或