金蝶二次开发 K3插件开发 指导手册(初稿)
金蝶k3-最全的操作使用手册图文(最新版本)

K3 wise 12 版本系统概述关于本系统总账系统是财务会计系统中最核心的系统,以凭证处理为中心,进行账簿报表的管理。
可与各个业务系统无缝联接,实现数据共享。
企业所有的核算最终在总账中体现。
本系统主要功能有:✓多重辅助核算✓科目计息控制✓科目预算控制✓凭证分账制核算流程✓强大的账簿报表查询✓多币别核算的处理✓现金流量表的制作✓往来业务的核算处理,精确计算账龄✓与其他业务系统无缝链接✓对业务系统生成的凭证提供明细管理功能✓自动转账设置✓期末调汇的处理✓期末损益结转✓结账日的控制可以进行月份的选择✓集团内部往来协同1.1.1多重辅助核算:在总账系统中,可对科目设置任意多的核算项目进行多重辅助核算。
并且提供丰富的核算项目账簿和报表,满足企业对多种辅助核算信息的项目管理。
1.1.2提供科目计息控制:在未使用结算中心系统时,可以对科目进行利息计算,提供资金管理,计算科目积数与利息,计算各种资金机会成本。
1.1.3提供科目预算控制:可进行科目预算,科目预算也可从预算管理系统中引入,从而在凭证录入时可根据需要进行各种控制。
而与预算管理系统集成使用,可以实现更复杂的预算管理与控制。
1.1.4提供凭证分账制核算流程:系统在提供对外币通常的核算要求——统账制的基础上,同时提供了分账制核算要求下的从凭证处理到业务报表的完整核算流程。
1.1.5强大的账簿报表查询:查询账簿报表时,可追查至明细账直至凭证,同时可查询到核算项目信息。
有跨期查询功能,可以在本期未结账的情况下查询以后期间的数据。
提供多种核算项目报表的查询,可进行多核算项目类别的组合查询。
具体提供的账簿包括:总分类账、明细分类账、数量金额总账、数量金额明细账、多栏账、核算项目分类总账、核算项目明细账等;具体提供的报表包括:科目余额表、试算平衡表、日报表、摘要汇总表、核算项目余额表、核算项目明细表、核算项目汇总表、核算项目组合表、核算项目与科目组合表、科目利息计算表、调汇历史信息表等。
金蝶二次开发 K3插件开发 指导手册(初稿)(优选.)

金蝶 K/3 BOS V10.1插件开发指导手册金蝶软件(中国)有限公司2004.9目录打个小广告:金蝶二次开发技术交流QQ群①群 30121062 已满②群 28307002 未满③群待定大家共同学习共同进步1开发基础 (3)1.1插件开发概念 (3)1.2插件开发配置 (3)2开发指南 (4)2.1创建一个金蝶K/3 BOS 插件 (4)2.1.1创建一个金蝶K/3 BOS 客户端事件插件 (4)2.1.2创建一个金蝶K/3 BOS 中间层事件插件 (9)2.2自定义金蝶K/3 BOS 标准菜单、工具栏 (11)2.3添加新的菜单、工具栏 (12)2.4添加新的事件、方法 (12)2.5访问中间层和数据库 (12)2.6保存数据 (12)3参考 (13)3.1客户端插件事件、方法、属性 (13)3.2中间层插件事件 (13)3.3判断业务对象引用存储过程 (13)3.4金蝶K/3 BOS数据库结构 (13)4示例 (13)4.1XXX (13)1开发基础1.1插件开发概念金蝶K/3运行平台为金蝶K/3 BOS开发的业务单据提供了稳定、标准的运行环境,但为了实现客户更加个性化的需求和保持金蝶K/3 BOS架构的开放性,还为客户化开发提供了插件编程机制:通过金蝶K/3 BOS业务单据和序时簿事件代理组件,把业务单据处理的关键事件接口抛出,客户可以接收这个事件代理组件,并对组件的抛出事件编程,从而实现个性化的事件处理方法,对金蝶K/3 BOS运行平台进行有效的扩充和扩展。
需要注意的是:a) 当前版本的金蝶K/3 BOS支持的插件,仅应用在金蝶K/3的GUI版本,不支持WEB版本;b) 当前版本的金蝶K/3 BOS支持采用Microsoft Visual Basic 编写的插件,采用的类型推荐为ActiveX DLL 类型;c) 当前版本的金蝶K/3 BOS支持的插件分为客户端事件插件、中间层事件插件;在本手册中,我们所有关于金蝶K/3 BOS插件的定义、描述、示例等,都符合上述3点特征。
K3客户化开发指导手册v1.0

©金蝶软件(中国)有限公司 K/3 产品事业部.设计部
概述
随着 K/3 系统的广泛应用,越来越多的 K/3 客户,特别是一些特殊行业的客户希望利用 K/3 系统实现个性化需求,进行个性化的客户化开发。为了能满足客户的个性化要求,同时 标准化 K/3 系统的二次开发,特别提供了 K/3 客户化开发指导手册和工具包,为二次开发配 备资源,指导客户进行 K/3 系统的二次开发以满足自身的个性化需求。
通过该文档,您可以了解到
1、 定制 K/3 登录 Logo 2、 定制主控台菜单并调用客户化开发模块 3、 工业单据二次开发 4、 代理服务二次开发 5、 K/3 凭证接口 6、 K/3 发票接口 7、 K/3 数据交换接口 8、 K/3BOS 定制开发 9、 第三方系统集成无界面登录 K/3 10、K/3HR 系统无界面登录 11、提供无界面凭证引入功能 12、K/3HR 系统对外接口
2
定制 K/3 登录 Logo
登录界面添加客户化 Logo
在中间层 KDCOM 下新建一个文件夹,命名为 eptlogo 并将其设置为只读共享,然后制作 一个 BMP 格式的图片,大小为 145×180,命名为 enterprise_logo.bmp,然后在客户端的主 控台编辑器启用企业界面即可。
该文档阅读的适用对象
1、 金蝶 K/3 系统开发工程师 2、 机构 K/3 二次开发工程师 3、 客户 K/3 定制开发人员 4、 想了解 K/3 客户化开发的人员
1
目录
目录 ....................................................................................................................... 2 定制K/3 登录Logo ................................................................................................... 3
金蝶K3wise插件二次开发与配置

⾦蝶K3wise插件⼆次开发与配置开发环境:K/3 Wise 13.0、K/3 Bos开发平台、Visual Basic 6.0⽬录⼀、⼆次开发插件编程⼆、代码演⽰三、配置插件四、测试插件五、插件事件附录⼀、⼆次开发插件编程 打开Visual Basic 6.0,新建⼯程ActiveX DLL: 命名为FirstPlugin.class: 引⽤类库如下: 已安装K/3 Wise,在VB 6.0菜单栏上会多出⼀个⾦蝶开发插件: 打开⾦蝶开发向导,创建⼯业单据客户端插件(⼯业单据俗称“⽼单”): 点击“确定”,选择类“FirstPlugin”: 点击“下⼀步”,这⾥我们⾃定义⼀个菜单项“插件⼯具”: 点击“下⼀步”,选择事件“UserMenuClick”: 完成向导。
⼆、代码演⽰ 代码编写如下:'配置路径:供应链-外购⼊库单'函数功能:插件⼯具--根据“长、宽、厚”⾃动计算批号'定义插件对象接⼝. 必须具有的声明, 以此来获得事件Private WithEvents m_BillTransfer As K3BillTransfer.BillDim F55 As Long, F55Text As String '长Dim F56 As Long, F56Text As String '宽Dim F57 As Long, F57Text As String '⾼Dim FDate As Long, FDateText As String '⽇期Dim FBatchNo As String '批号Dim FItemID As Long, FNumber As String '物料编码Dim FBatchManager As Boolean '是否采⽤业务批号管理Dim str As StringPublic Sub Show(ByVal oBillTransfer As Object)'接⼝实现'注意: 此⽅法必须存在, 请勿修改Set m_BillTransfer = oBillTransferEnd SubPrivate Sub Class_Terminate()'释放接⼝对象'注意: 此⽅法必须存在, 请勿修改Set m_BillTransfer = NothingEnd SubPrivate Sub m_BillTransfer_BillInitialize()'*************** 开始设置菜单 ***************m_BillTransfer.AddUserMenuItem "⾃动批号", "插件⼯具"'*************** 结束设置菜单 ***************'TODO: 请在此处添加代码响应事件 BillInitializeF55 = GetCtlIndexByFld("FEntrySelfA0155", True)F56 = GetCtlIndexByFld("FEntrySelfA0156", True)F57 = GetCtlIndexByFld("FEntrySelfA0157", True)FBatchNo = GetCtlIndexByFld("FBatchNo", True)FDate = GetCtlIndexByFld("FDate", False)FItemID = GetCtlIndexByFld("FItemID", True)End SubPrivate Sub m_BillTransfer_UserMenuClick(ByVal Index As Long, ByVal Caption As String)'TODO: 请在此处添加代码响应事件 UserMenuClickSelect Case CaptionCase "⾃动批号"'此处添加处理批号⽣成菜单对象的 Click 事件With m_BillTransferFor i = 1 To 1000If .GetGridText(i, FItemID) = "" ThenExit ForEnd If'从物料表检测是否采⽤业务批次管理Dim strSQL As String '⽤于执⾏SQLDim rs As ADODB.RecordsetFNumber = ""FNumber = .GetGridText(i, FItemID)strSQL = ""strSQL = "SELECT FBatchManager FROM t_ICItem WHERE FNumber='" & FNumber & "'"Set rs = SQLHelper.ExecuteSQL(strSQL, "")If rs.EOF = False ThenFBatchManager = rs.Fields("FBatchManager")End IfSet rs = NothingF55Text = .GetGridText(i, F55)F56Text = .GetGridText(i, F56)F57Text = .GetGridText(i, F57)If F55Text = "" Then F55Text = "0"If F56Text = "" Then F56Text = "0"If F57Text = "" Then F57Text = "0"FDateText = Replace(.GetHeadText(FDate), "-", "")If (FBatchManager = True) Then.SetGridText i, FBatchNo, F55Text & "-" & F56Text & "-" & F57Text & "-" & FDateTextEnd IfNextEnd WithCase ElseEnd SelectEnd Sub'*****************************************'获取分录⾏数'*****************************************Public Function GetEntryMax() As LongDim k As LongDim iFItemID As LongDim oEntryCtl As VariantDim maxrow As Long '最⼤⾏'For k = LBound(m_BillTransfer.EntryCtl) To UBound(m_BillTransfer.EntryCtl)If UCase(m_BillTransfer.EntryCtl(k).FieldName) = UCase("FItemID") Then '物料代码所在列iFItemID = kExit ForEnd IfNext koEntryCtl = m_BillTransfer.EntryCtlmaxrow = UBound(oEntryCtl(iFItemID).DInterID) '获取表体最⼤⾏GetEntryMax = maxrowEnd Function'**********************************'返回单据字段顺序(isEntry True是表体)'**********************************Public Function GetCtlIndexByFld(ByVal fldName As String, Optional ByVal isEntry As Boolean = False) As LongDim ctlIdx As LongDim i As IntegerDim isFind As BooleanDim vValue As VariantfldName = UCase(fldName)isFind = FalseWith m_BillTransferIf isEntry ThenFor i = LBound(.EntryCtl) To UBound(.EntryCtl)If UCase(.EntryCtl(i).FieldName) = fldName ThenctlIdx = .EntryCtl(i).FCtlOrderisFind = TrueExit ForEnd IfNext iElseFor i = LBound(.HeadCtl) To UBound(.HeadCtl)If UCase(.HeadCtl(i).FieldName) = fldName ThenctlIdx = .HeadCtl(i).FCtlIndexisFind = TrueExit ForEnd IfNext iEnd IfEnd WithIf isFind = True ThenGetCtlIndexByFld = ctlIdxElseGetCtlIndexByFld = 0End IfEnd Function三、配置插件 在Visual Basic 6.0⽣成DLL: 启动K/3 Wise BOS开发平台,打开外购⼊库单,并进⾏插件配置: 点击“插件配置管理”,配置客户端插件: 点击“浏览”,找到插件并勾选: 点击“确定”,并保存外购⼊库单。
k3二次开发

k3二次开发1、单据头字段赋值m_BillTransfer.SetHead Index, Value备注: Index:表头控件索引Value:设置的值。
如果该表头项是查找类型的,Value 应设置为代码。
2、单据体赋值m_BillTransfer.SetGridText Row, Col, Value备注: Row:分录行Col:分录列Value:设置的值。
如果该单元格是查找类型的,Value 应设置为代码。
3、单据体合计字段赋值m_BillTransfer.SetSumGridText Row, Col, Value备注: Row:分录行Col:分录列Value:设置的值4、给查找类型字段(基础资料)赋值用SetGridText直接赋值一般情况下也可以,但有时会导致显示异常,建议使用下面的方法。
以给物料字段赋值为例,参考以下代码:Dim EntryCtl As VariantEntryCtl = m_BillTransfer.EntryCtlEntryCtl(ItemCol).DInterID(i) = rs.Fields("FItemID").Value & ""EntryCtl(ItemCol).DNumber(i) = rs.Fields("FNumber").Value & ""EntryCtl(ItemCol).DName(i) = rs.Fields("FName").Value & ""m_BillTransfer.EntryCtl = EntryCtlm_BillTransfer.SetGridText i, ItemCol, rs.Fields("FNumber").Value & ""5、单据头字段,在查找时改变其Filter 属性值Private Sub m_BillTransfer_BeforHeadLookUp(ByVal CtlIndex As Long, ByVal nLookUpClsID As Long, Cancel As Boolean) Dim THeadCtl As VariantDim i As LongIf CtlIndex = 4 ThenTHeadCtl = m_BillTransfer.HeadCtlTHeadCtl(CtlIndex).Filter = Replace(THeadCtl(CtlIndex).Filter, 986=986”, “986<>986”)m_BillTransfer.HeadCtl = THeadCtl‘End IfEnd Sub6、改变辅助属性的值Set tmpItemInfo = New KFO.DictionarytmpItemInfo("Name") = "黄色"'辅助属性名称tmpItemInfo("Number") = "YELLOW"'辅助属性代码tmpItemInfo("Value") = "2"'辅助属性内码m_BillTransfer.BillForm.SetBillDataInput tmpItemInfo,"FAuxPropID", 1, 1Set tmpItemInfo = Nothing备注:在插件中改变辅助属性的值,对表体的赋值有的不能按照m_BillTransfer.SetGridText的形式修改,一定要调用m_BillTransfer.BillForm.SetBillDataInput方式才可以真正修改,SetBillDataInput 辅助属性包,字段名,单据体(0:单据头;1:单据体),行号。
金蝶K3BOS插件开发常见技巧

1、如何在工具栏上添加多级审核的按钮?在m_BillInterface_MenuBarInitialize 事件里添加如下代码即可.Set oTool = m_BillInterface.MenuBar.BOST001s("mnuEditMultiCheck")With oTool.Caption =" 多级审核".ToolTipText =" 多级审核".Description =" 多级审核".BeginGroup = False.ToolPicture = App.Path + "\Checker.bmp".SetPicture 0, vbButtonFaceEnd WithSet oBand = oMenuBar.BOSBands("BandToolBar")oBand.BOSTools.InsertBefore "mnuFilePrint", oTool ' 将菜单对象插入指定工具栏2、如何在显示一张Bos单据的同时给它赋值?要想在显示Bos单据的同时给它赋值,关键是在显示前要购建m_Billinterface 的data包,这样在显示这张同据的时候,程序会解析data包,并将里面的值赋到单据界面上来.Dim dctData As kfo.DictionaryDim datasrv as objectDim oTableinfo as objectSet DataSrv = m_BillInterface.K3Lib.CreateK3Object("K3ClassTpl.DataSrv") DataSrv.ClassTypeID = lClassTypeID 'lClassTypeID 需要弹出单据的IDSet oTableInfo = DataSrv.TableInfoSet dctData = DataSrv.GetEmptyBill ' 然后将当前单据数据包中需要的数据填充到dctdata的对应字段’在以上语句执行后,dctdata( "page2")里只有一行表结构(即表体只有一行)'赋表头的值dctData("Page1")(oTableinfo("map")("FText"))("FFLD") = m_BillInterface.GetFieldValue("FText")dctData("Page1")(oTableinfo("map")("FDeptID"))("FFLD") = m_BillInterface.GetFieldValue("FDeptID", -1, Enu_ValueType_FFLD)dctData("Page1")(oTableinfo("map")("FDeptID"))("FFND") = m_BillInterface.GetFieldValue("FDeptID", -1, Enu_ValueType_FFND)dctData("Page1")(oTableinfo("map")("FDeptID"))("FDSP") = m_BillInterface.GetFieldValue("FDeptID", -1, Enu_ValueType_FDSP)'赋表体的值Dim oPage2 As ObjectFor i = 1 To m_BillInterface.Data("Page2").UBound - 1Set oPage2 = dctData("Page2")(1).CloneAlldctData("Page2").Add oPage2 '添力口至U dcDatadctData("Page2")(i + 1)(oTableinfo("map")("FIndex2"))("FFLD") = i + 1更改分录号NextFor i = 1 To m_BillInterface.Data("Page2").UBound' 物料FItemIDdctData("Page2")(i)(oTableinfo("map")(" FItemID "))("FFLD")m_BillInterface.GetFieldValue("FItemID ", i, Enu_ValueType_FFLD) dctData("Page2")(i)(oTableinfo("map")(" FItemID "))("FDSP")m_BillInterface.GetFieldValue("FItemID ", i, Enu_ValueType_FDSP) dctData("Page2")(i)(oTableinfo("map")(" FItemID "))("FFND")m_BillInterface.GetFieldValue("FItemID ", i, Enu_ValueType_FFND)' 物料名称fbasepropertydctData("page2")(i)(oTableinfo("map")("fbaseproperty"))("FFLD")m_BillInterface.GetFieldValue("fbaseproperty", i, Enu_ValueType_FFLD)dctData("Page2")(i)(oTableinfo("map")("fbaseproperty"))("FDSP")m_BillInterface.GetFieldValue("fbaseproperty", i, Enu_ValueType_FDSP)dctData("Page2")(i)(oTableinfo("map")("fbaseproperty"))("FFND")m_BillInterface.GetFieldValue("fbaseproperty", i, Enu_ValueType_FFND)' 计量单位FUnitIDdctData("Page2")(i)(oTableinfo("map")(" FUnitID "))("FFLD")m_BillInterface.GetFieldValue("FUnitID ", i, Enu_ValueType_FFLD) dctData("Page2")(i)(oTableinfo("map")(" FUnitID "))("FDSP")m_BillInterface.GetFieldValue("FUnitID ", i, Enu_ValueType_FDSP) dctData("Page2")(i)(oTableinfo("map")(" FUnitID "))("FFND")m_BillInterface.GetFieldValue("FUnitID ", i, Enu_ValueType_FFND)' 数量FQtydctData("Page2")(i)(oTableinfo("map")("FQty"))("FFLD") m_BillInterface.GetFieldValue("fqty", i, Enu_ValueType_FFLD)NextSet obj = CreateObject("K3SingleClassBill.ClassInfoManager")With obj.datasrv = datasrv.ISCheckRight = True .Show , , , dctData End With3、如何在插件中实现选单的功能?调用Bos单据m_BillInterface.BillCtl.DoSelBill lClassTypeID'( 原单的ClassTypeID)调用工业单据m_BillInterface.BillCtl.DoSe101dBill lClassTypeID '( 原单的ClassTypeID)4、在插件中以新增、修改和查看方式翻开另一单据,********************************************’功能:显示B0环据,显示的方式为新增、修改和浏览'参数:lClassTypeID 一显示B0环据的ID ' '********************************************Private Sub ShowBill(ByVal lClassTypeID As Long)Dim oDataSrv As ObjectDim oBill As ObjectOn Error GoTo err_ctrSet oDataSrv = m_BillInterface.K3Lib.CreateK/30bject("K3ClassTpl.DataSrv") oDataSrv.ClassTypeID = lClassTypeIDSet oBill = CreateObject("K3SingleClassBill.ClassInfoManager") With oBill.DataSrv = oDataSrv.ISNetControl = True.I SCheckRight = True .Show ′********************** 'Show 参数类型' 第一个参数Optional ByVal lID As Long = 0 ;描述修改或查看的单据ID' 第二个参数Optional ByVal bShowGroup As Boolean = False ;如是根底资料时, 是否显示分组' 第三个参数Optional ByVal BillStatus As Long = Enu_BillStatus_New ;显示方式0—查看;1—新增;2—修改' 第四个参数Optional ByVal dctData As KFO.Dictionary ' 单据初始值\**********************End WithSet oDataSrv = NothingSet oBill = NothingExit Sub err_ctr:Set oDataSrv = Nothing Set oBill = NothingEnd Sub5、显示BOS序时簿并返回选中的值,********************************************’功能:显示BO时时簿并返回选中的值'参数:lClassTypeID 一显示BO环据的ID ' '********************************************Private Function ShowListByReturn(ByVal lClassTypeID As Long) As Object Dim oDataSrv As Object Dim objLookup As ObjectOn Error GoTo err_ctrSet oDataSrv = m_BillInterface.K3Lib.CreateK3Object("K3ClassTpl.DataSrv")oDataSrv.ClassTypeID = lClassTypeID If oDataSrv.showfilter ThenSet objLookup = CreateObject("K3ClassLookUp.BillLookUp") objLookup.ClassTypeID = lClassTypeID Set objLookup.DataSrv = oDataSrvobjLookup.LookupSet ShowListByReturn = objLookup.VectReturnEnd IfSet oDataSrv = NothingSet objLookup = NothingExit Function err_ctr:Set oDataSrv = NothingSet objLookup = NothingEnd Function6、如何在序事簿中得到选中行的记录集值?Dim vectSelect as kfo.vectorDim rs as adodb.recordsetSet vectSelect=m_Listinterface. GetSelectedBillInfoSet rs=m_Listinterface.datasrv. GetBillDetail(vectSelect(1)("FID"))7、将当前单据转化为另一单据,并无界面保存数据,********************************************’功能:将当前单据转化为另一单据,并无界面保存数据'参数:lClassTypeID 一显示BO环据的ID'********************************************Private Sub NoUISaveBill(ByVal lClassTypeID As Long)Dim oDataSrv As ObjectDim oTableInfo As ObjectDim oBill As ObjectDim oData As ObjectDim oSrv As ObjectDim oPage2 As ObjectDim i As LongOn Error GoTo err_ctrSet oDataSrv = m_BillInterface.K3Lib.CreateK3Object("K3ClassTpl.DataSrv")oDataSrv.ClassTypeID = lClassTypeIDSet oTableInfo = oDataSrv.TableInfoSet oData = oDataSrv.GetEmptyBillFor i = 1 To m_BillInterface.Data("Page2").UBound - 1Set oPage2 = oData("Page2")(1).CloneAlloData("Page2").Add oPage2 ' 添加到dcDataoData("Page2")(i + 1)("_-0001_FIndex2")("FFLD") = i + 1 ' 更改分录号NextFor i = 1 To m_BillInterface.Data("Page2").UBoundoData("Page2")(i)(oTableInfo("map")("FItemID"))("FFLD")=m_BillInterface.GetFieldValue("FItemID", i, Enu_ValueType_FFLD) oData("Page2")(i)(oTableInfo("map")("FItemID"))("FFND")=m_BillInterface.GetFieldValue("FItemID", i, Enu_ValueType_FFND) oData("Page2")(i)(oTableInfo("map")("FItemID"))("FDSP")=m_BillInterface.GetFieldValue("FItemID", i, Enu_ValueType_FDSP)NextSet oSrv = CreateObject("K3MClass.BillUpdate")i = oSrv.Save(MMTS.PropsString, oDataSrv.ClassType, oDataSrv.ClassTypeEntry,oDataSrv.TableInfo, oData, oDataSrv.dctLink)Set oDataSrv = NothingSet oBill = NothingExit Suberrctr:MsgBox Err.DescriptionSet oDataSrv = NothingSet oBill = NothingEnd Sub【备注】1、K/3 BOS保存方法Save的参数描述:'Public Function Save(ByVal sDsn As String, _' ByVal dctClassType As KFO.Dictionary, _' ByVal vctClassTypeEntry As KFO.Vector, _' ByVal dctTableinfo As KFO.Dictionary, _' ByRef dctData As KFO.Dictionary, _' ByVal dctLinks As KFO.Dictionary) As Long'/********************************************************************/'/*描述:单据保存'/*参数:'/*@ dctClassType KFO.Dictionary 单据整体信息模板'/*@ dctData KFO.Dictionary 单据数据包'/*@ dctLink KFO.Dictionary 选单关系模板,无选单为Nothing'/*@ dctTableInfo KFO.Dictionary 单据字段模板信息'/*@ sDsn String K/3 标准数据库连接串'/*@ vctClassTypeEntry KFO.Vector单据体模板信息'/*备注:'/********************************************************************/2、使用此方法时插件要添加MMTS8、如何在插件中获取当前系统字符连接串?一、连接串获取方式:(注意不支持调试,调试的话可以用实际连接串代替)Private Declare Function GetCurrentProcessId Lib "kernel32" Alias "GetCurrentProcessID"() As Long ’获取连接串Public Function GetPropsString() As StringDim lProc As LongDim spmMgr As ObjectIProc = GetCurrentProcessIdSet spmMgr = CreateObject("PropsMgr.ShareProps")GetPropsString = spmMgr.GetProperty(lProc, "PropsString")End Function.、需要申请MMTS.bas的源彳弋码,还需要申请ICKDListener的接口.另外,如果需要调试程序,就还需要申请KDMain的源代码.。
金蝶K3WISE基础二次开发及案例

$/CODE/K3Base/Public/database/KDCom.cfg $/CODE/K3Base/Public/database/KdLogin.Lst
版权所有 ©1993-2009 金蝶软件(中国)有限公司
基础二次开发及案例
张庆
金蝶软件(中国)有限公司
研发中心
版权所有 ©1993-2009 金蝶软件(中国)有限公司
提纲
K/3环境配置及常见问题 基础领域主要模块及代码结构 基础领域常用开发接口说明及事例代码 问题交流
版权所有 ©1993-2009 金蝶软件(中国)有限公司
P2
K/3环境配置及常见问题
版权所有 ©1993-2009 金蝶软件(中国)有限公司
P6
基础资料
版权所有 ©1993-2009 金蝶软件(中国)有限公司
P7
主控台Biblioteka 版权所有 ©1993-2009 金蝶软件(中国)有限公司
P8
帐套管理
版权所有 ©1993-2009 金蝶软件(中国)有限公司
P9
用户管理,权限管理
版权所有 ©1993-2009 金蝶软件(中国)有限公司
P14
基础领域常用开发接口说明及事例代码
版权所有 ©1993-2009 金蝶软件(中国)有限公司
P15
基础领域常用开发接口说明及事例代码
基础领域插件化开发: 1.基础资料插件化开发 2.用户权限管理插件化开发 3.系统参数平台插件化开发
版权所有 ©1993-2009 金蝶软件(中国)有限公司
金蝶K3全系列使用手册

金蝶K3系统K/3系统是它融合先进的管理思想,结合国内企业实际情况,采用MS SQL Server 7.0大型数据库、三层结构和组件式开发等先进技术,严格遵循Windows DNA架构提供网络分布式应用,抓住企业物流和资金流两条主线,优化企业流程,为企业管理层提供最佳的企业管理手段。
使企业信息资源充分共享,全面提升企业的市场应变能力和整体竞争力。
K/3ERP系统主要由三个产品内容组成:K/3财务管理系统、K/3工业管理系统、K/3商贸管理系统。
三个产品内容的应用功能涵盖了中国企业的各种应用需求,形成了以企业自身经营活动为中心,包括供应链管理(SCM)、客户关系管理(CRM)、价值链管理(VM)、知识管理(KM)四个功能管理系统,涉及供应市场、消费市场、资本市场、知识市场四个企业外部环境的信息管理。
完全满足中国企业用户的功能需求。
同时为了满足企业电子商务发展的需要,K/3 ERP的三个产品内容都支持基于Internet的Web应用,完全满足基于浏览器的软件应用,这就是发展成熟的K/3的e系统。
充分满足了不同企业用户的操作习惯和使用要求。
K/3ERP系统的功能组成图如下:K/3 ERP软件产品立足企业实际情况,充分吸收MRPII、JIT等先进的管理理念和技术,扬弃国外ERP软件系统设计思想,集成了对企业物流、资金流、信息流的业务和财务管理功能,优化了企业内部管理和控制的职能,帮助企业实现基础化的管理,提出和推行完善的“数据——信息——决策——控制”的企业管理解决方案,帮助顾客成功。
其三个产品内容的主要功能分述如下。
●K/3财务管理系统在承接部门级财务软件产品金蝶2000客户群的基础上,K/3财务管理系统更加突出了面向中、大型企业和集团型企业用户的应用功能。
一方面在技术上保证了大规模并发用户使用的稳定性;另一方面,除普通财务管理的应用功能之外,还提供了集团控制、结算中心等功能模块,结合管理会计的功能模块,极大地加强了各种类型企业用户的财务管理和控制功能,提高了企业的财务运筹能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
金蝶 K/3 BOS V10.1插件开发指导手册金蝶软件(中国)有限公司2004.9目录打个小广告:金蝶二次开发技术交流QQ群①群 30121062 已满②群 28307002 未满③群待定大家共同学习共同进步1开发基础 (3)1.1插件开发概念 (3)1.2插件开发配置 (3)2开发指南 (4)2.1创建一个金蝶K/3 BOS 插件 (4)2.1.1创建一个金蝶K/3 BOS 客户端事件插件 (4)2.1.2创建一个金蝶K/3 BOS 中间层事件插件 (9)2.2自定义金蝶K/3 BOS 标准菜单、工具栏 (11)2.3添加新的菜单、工具栏 (12)2.4添加新的事件、方法 (12)2.5访问中间层和数据库 (12)2.6保存数据 (13)3参考 (13)3.1客户端插件事件、方法、属性 (13)3.2中间层插件事件 (13)3.3判断业务对象引用存储过程 (13)3.4金蝶K/3 BOS数据库结构 (13)4示例 (13)4.1XXX (13)1开发基础1.1插件开发概念金蝶K/3运行平台为金蝶K/3 BOS开发的业务单据提供了稳定、标准的运行环境,但为了实现客户更加个性化的需求和保持金蝶K/3 BOS架构的开放性,还为客户化开发提供了插件编程机制:通过金蝶K/3 BOS业务单据和序时簿事件代理组件,把业务单据处理的关键事件接口抛出,客户可以接收这个事件代理组件,并对组件的抛出事件编程,从而实现个性化的事件处理方法,对金蝶K/3 BOS运行平台进行有效的扩充和扩展。
需要注意的是:a) 当前版本的金蝶K/3 BOS支持的插件,仅应用在金蝶K/3的GUI版本,不支持WEB版本;b) 当前版本的金蝶K/3 BOS支持采用Microsoft Visual Basic 编写的插件,采用的类型推荐为ActiveX DLL 类型;c) 当前版本的金蝶K/3 BOS支持的插件分为客户端事件插件、中间层事件插件;在本手册中,我们所有关于金蝶K/3 BOS插件的定义、描述、示例等,都符合上述3点特征。
1.2插件开发配置开发、调试金蝶K/3 BOS插件,需要安装:a) 金蝶K/3 客户端部件b) 金蝶K/3 BOSc) Microsoft Visual Basic(推荐使用v6.0 版本,并且安装SP5)另外,如果要通过插件在K/3 BOS标准单据、序时簿界面上增加菜单、工具条,还需要安装:d) Data Dynamics ActiveBar ActiveX v1.0.6.5同时,我们推荐:a) 采用Microsoft Windows 2000 Server(及以上版本)等Server类操作系统作为开发、调试操作系统;b) 在该操作系统上安装Microsoft SQL Server 2000数据库;c) 在该操作系统上安装金蝶K/3 客户端部件、金蝶K/3 中间层部件、金蝶K/3BOS;这样,我们就可以同时开发、调试金蝶K/3 BOS客户端事件插件和金蝶K/3 BOS中间层插件了。
2开发指南2.1创建一个金蝶K/3 BOS 插件在安装、配置完1.2 要求的环境后,我们就可以开始创建一个金蝶K/3 BOS插件了。
2.1.1创建一个金蝶K/3 BOS 客户端事件插件要创建一个金蝶K/3 BOS 客户端事件插件,请按照以下步骤操作:1) 启动Microsoft Visual Basic 6.0。
2) 在出现的“New Project”对话框中选择“ActiveX DLL”。
3) 选择菜单“Project”—〉“References”。
4) 在出现的“References”对话框中,选择下述2项:●K3ClassEvents●Kingdee Foundation Objects 1.0如果没有在这个列表中没有找到上述2项,可以点击对话框上的“Browse”按键,在出现的打开文件对话框中分别选择本机上的●K3ClassEvents.dll●Kfo10.dll这2个DLL文件即可(一般在金蝶K/3 客户端部件的安装目录中可以找到)。
5) 重新命名工程及类模块名称,保存工程。
例如将默认的新建工程名和类模块名改为下图所示。
6) 在BOSPlugIns.cls类模块的代码中写入如下的代码。
Option ExplicitPrivate WithEvents m_BillInterface As K3ClassEvents.BillEvent '必须具有的声明, 以此来获得单据事件'这个 Public Sub 必须存在, 且必须如下格式, 请不要修改或删除Public Sub Show(ByVal oBillInterface As Object)'这里获得了K/3的单据对象. 共有 26 个事件, 11 个属性和 49 个方法可以使用'具体的事件、属性、方法,可以通过 VB IDE 的“Object Browser”工具,选'择“K3ClassEvents”下的“BillEvent”察看Set m_BillInterface = oBillInterfaceEnd Sub'这个 Private Sub 必须存在, 且必须如下格式, 请不要修改或删除Private Sub Class_Terminate()'释放K/3的单据对象Set m_BillInterface = NothingEnd SubCode 1: 客户端单据事件插件连接代码在上面的代码中,我们定义了一个名为m_BillInterface的BillEvent对象,来接受金蝶K/3 BOS 的客户端单据事件。
在BOSPlugIns.cls类模块的代码中写入如下的代码则可以接受金蝶K/3 BOS的客户端序时薄事件。
Option ExplicitPrivate WithEvents m_ListInterface As K3ClassEvents.ListEvents '必须具有的声明, 以此来获得序时薄事件'这个 Public Sub 必须存在, 且必须如下格式, 请不要修改或删除Public Sub Show(ByVal oListInterface As Object)'这里获得了K/3的序时薄对象. 共有 8 个事件, 5 个属性和 15 个方法可以使用'具体的事件、属性、方法,可以通过 VB IDE 的“Object Browser”工具,选'择“K3ClassEvents”下的“ListEvents”察看Set m_ListInterface = oListInterfaceEnd Sub'这个 Private Sub 必须存在, 且必须如下格式, 请不要修改或删除Private Sub Class_Terminate()'释放K/3的序时薄对象Set m_ListInterface = NothingEnd SubCode 2: 客户端序时薄事件插件连接代码如果希望在一个插件中同时可以处理客户端单据事件和序时薄事件,可以通过在工程中添加1个类模块,如下图所示,分别在2个类模块中添加上述2段代码。
这样就可以利用1个类来处理客户端单据事件,用另1个类来处理客户端序时薄事件了。
7) 编译工程。
8) 在金蝶K/3 BOS中设置插件。
如下图所示:上图所示的是步骤6中的同时可以处理单据事件和序时薄事件的插件的设置。
以上步骤完成后,我们就建立了一个金蝶K/3 BOS 客户端事件(包括单据事件和序时薄事件)插件。
虽然我们在这个例子中没有进行任何额外的单据事件和序时薄事件操作,但经过设置后,实际上已经在使用了这个插件的单据、序时薄中调用了这个插件。
我们现在需要做的,只是在这个插件中,利用获得的单据、序时薄对象,实现我们希望的具体操作了。
2.1.2创建一个金蝶K/3 BOS 中间层事件插件要创建一个金蝶K/3 BOS 中间层事件插件,请按照以下步骤操作:1) 执行“2.1.1创建一个金蝶K/3 BOS 客户端事件插件”中的步骤1至步骤5。
唯一不同的是在步骤4中,只需要添加Kingdee Foundation Objects 1.0的引用。
2) 在BOSPlugIns.cls类模块的代码中写入如下的代码。
Option Explicit'/********************************************************************/'/*描述:单据保存后扩展处理方法'/*备注:可以将该单触发器处理的过程在此函数中处理'/********************************************************************/Public Function BeforeSave(ByVal sDsn As String, _ByVal dctClassType As KFO.Dictionary, _ByVal vctClassTypeEntry As KFO.Vector, _ByVal dctTableInfo As KFO.Dictionary, _ByVal dctData As KFO.Dictionary, _ByVal dctLink As KFO.Dictionary)Debug.Print "当前资料被保存前扩展处理方法"End Function'/********************************************************************/ '/*描述:单据删除前扩展处理方法'/********************************************************************/ Public Function BeforeDel(ByVal sDsn As String, _ByVal nClassID As Long, _ByVal dctClassType As KFO.Dictionary, _ByVal nInterID As Long)Debug.Print "当前资料被删除前扩展处理方法"End Function'/********************************************************************/ '/*描述:单据保存后扩展处理方法'/*备注:可以将该单触发器处理的过程在此函数中处理'/********************************************************************/ Public Function AfterSave(ByVal sDsn As String, _ByVal dctClassType As KFO.Dictionary, _ByVal vctClassTypeEntry As KFO.Vector, _ByVal dctTableInfo As KFO.Dictionary, _ByVal dctData As KFO.Dictionary, _ByVal dctLink As KFO.Dictionary)Debug.Print "当前资料被保存后扩展处理方法"End Function'/********************************************************************/ '/*描述:单据删除后扩展处理方法'/********************************************************************/ Public Function AfterDel(ByVal sDsn As String, _ByVal nClassID As Long, _ByVal dctClassType As KFO.Dictionary, _ByVal nInterID As Long)Debug.Print "当前资料被删除后扩展处理方法"End FunctionCode 3: 中间层事件插件连接代码在上面的代码中,我们可以看到,不同于金蝶K/3 BOS 的客户端事件插件的处理,在金蝶K/3 BOS中间层事件插件中,我们只需要实现这4个标准事件就可以了。