K3 BOS开发百问百答(3)

2019-05-17 09:44

客户化开发技术资料——K/3 BOS开发百问百答

【问题4】在插件中调用序时簿并返回选中的数据 【回答】

请参考下面代码

'******************************************** '功能:显示BOS序时簿并返回选中的值 '参数:lClassTypeID—显示BOS单据的ID '********************************************

Private Function ShowListByReturn(ByVal lClassTypeID As Long) As Object Dim oDataSrv As Object Dim objLookup As Object

On Error GoTo err_ctr

Set oDataSrv = m_BillInterface.K3Lib.CreateK3Object(\ oDataSrv.ClassTypeID = lClassTypeID If oDataSrv.showfilter Then

Set objLookup = CreateObject(\ objLookup.ClassTypeID = lClassTypeID Set objLookup.DataSrv = oDataSrv

objLookup.Lookup

Set ShowListByReturn = objLookup.VectReturn End If

Set oDataSrv = Nothing Set objLookup = Nothing

Exit Function err_ctr:

Set oDataSrv = Nothing Set objLookup = Nothing End Function

【问题5】在自定义的BOS单据上,通过插件作生成凭证的功能,但是在调用凭证的组件时,需要一个二次登录后才能使用相应的模块。请问:如何处理隐身的二次登录,或者其他的变通处理。 【解答】

1. 2.

凭证组件的调用是不需要二次登录的,可能你是在VB调试状态下运行,编译后就没事了。 请参考下面代码

第3页

客户化开发技术资料——K/3 BOS开发百问百答

Private Sub m_BillInterface_MenuBarClick(ByVal BOSTool As K3ClassEvents.BOSTool, Cancel As Boolean)

Dim glvch As Object '中间层凭证对象 Dim mvch As KFO.Dictionary '待保存凭证头 Dim mvchentry As KFO.Vector '待保存凭证分录集 Dim entry As KFO.Dictionary '待保存凭证分录 Dim mvchdetail As KFO.Vector '核算项目明细集 Dim detail As KFO.Dictionary '核算项目明细 Dim i, iCount As Long Dim vValue As Variant

'TODO: 请在此处添加代码响应事件 MenuBarClick Select Case BOSTool.ToolName Case \生成凭证\

vValue = m_BillInterface.GetFieldValue(\

If Not (CStr(vValue) = \

MsgBox \当前合同已经生成凭证!\金蝶提示\ Exit Sub End If

'此处添加处理 生成凭证 菜单对象的 Click 事件 Set mvch = New KFO.Dictionary mvch(\

mvch(\金华泰项目\

mvch(\ Set mvchentry = New KFO.Vector

vValue = m_BillInterface.GetFieldValue(\

'创建凭证分录

Set entry = New KFO.Dictionary

entry(\ entry(\ entry(\

entry(\ '数量&单价

entry(\ entry(\ entry(\ '创建核算项目明细

Set mvchdetail = New KFO.Vector Set detail = New KFO.Dictionary detail(\

第4页

合同金额 客户化开发技术资料——K/3 BOS开发百问百答 detail(\ mvchdetail.Add detail

Set entry(\ mvchentry.Add entry

Set mvch(\ Set entry = New KFO.Dictionary

entry(\ entry(\ entry(\

entry(\ '数量&单价

entry(\ entry(\ entry(\ '创建核算项目明细

Set mvchdetail = New KFO.Vector Set detail = New KFO.Dictionary detail(\ detail(\ mvchdetail.Add detail

Set entry(\ mvchentry.Add entry

Set mvch(\

Dim s As String

s = \

Source=JAMES;Initial Catalog=xt_3};UserName=administrator;UserID=16394;DBMS Name=Microsoft SQL Server;DBMS

Version=2000;SubID=GL;AcctType=gy;Setuptype=Industry;Language=chs;IP=192.168.1.92;MachineName=JAMES;UUID=800A878D-F574-4877-B79C-D88AB721ECA0\

Set glvch = CreateObject(\ glvch.Create s, mvchs = \

m_BillInterface.K3Lib.User.UserID & \

m_BillInterface.K3Lib.UpdateData s m_BillInterface.RefreshBill

MsgBox \凭证生成成功!\金蝶提示\

Case \变更\ End Select

第5页

客户化开发技术资料——K/3 BOS开发百问百答 End Sub

【问题6】在设计BOS单据的过程中,经常会有关联的下拉列表框操作,如我在客户上选择“建设银行”,那么在客户相对应的地址的下拉列表框中应动态显示“建设银行所对应的地址”。也就是说客户地址是随着客户的变化而变化的。

【解答】 1.

BOS不支持运行时动态修改下拉列表框的列表值,否则序时簿显示有问题。建议通过其它变通方法实现。客户改变时把相关地址取回到字典包中,用户录入后,自动匹配地址并自动回写。保存时判断地址是否正确。 2.

可以首先定义一个基础资料(客户地址对应表),将下拉框字段改为基础资料字段,关联到客户地址对应表上,并设置动态过滤条件,条件设置方法为:K/3 BOS 开发秘籍之单据录入时动态改变基础资料过滤条件(http://www.mykingdee.com:8000/forum/article.asp?id=37977) 3.

通过插件的Change事件更新ICClassTableInfo 的FLookUpList字段值,运行正常,但是下拉列表框的数据没有变化,据推测好像是新增BOS单据时将所有的元数据规则加载到单据上,即使在单据操作过程中更改元数据规则单据也不能马上更新。不知道将下拉列表框类型替换为基础资料类型,在Change事件时更新基础资料的过滤条件,是否可行,仅供参考。

Private Sub m_BillInterface_Change(ByVal dct As KFO.IDictionary, ByVal dctFld As KFO.IDictionary, ByVal Col As Long, ByVal Row As Long, Cancel As Boolean) Dim iDeptID As Integer Dim rs As ADODB.Recordset Dim sSql As String

'TODO: 请在此处添加代码响应事件 Change If dct(\

iDeptID = m_BillInterface.BillHeads(1).BOSFields(\

sSql = \FLookUpList='SQL{ SELECT fItemID,fname FROM t_emp where fdepartmentID=\& iDeptID & \where (FClassTypeID = '200000003') and FID='7265'\

Set rs = m_BillInterface.K3Lib.GetData(sSql) End If End Sub

【问题7】如何可以物料多选? 【解答】

'/* 判断物料是否为为多选

If TypeOf ReturnItem.ReturnObject Is KFO.Vector Then '/*如物料是多选,返回值是vector

For lCount = 1 To ReturnItem.ReturnObject.UBound

If ReturnItem.ReturnObject.Item(lCount).ItemID <> 0 Then

第6页

客户化开发技术资料——K/3 BOS开发百问百答 Set dicItem = New KFO.Dictionary

dicItem(\ dicItem(\ end if next End If

注意目前只有物料能多选,其他核算项目不支持多选。

【问题8】在表单分录里需要在第一列中使用F7键或点击菜单调出某一窗体(在插件中自定义Form,上有Spread表单),在Form中选中数据(多条或一条),返回到源单,请问在插件中用什么事件可以完成?在单据中添加一菜单,用MenuBarClick事件,F7不易实现。返回的数据需用赋值方法填写到表体中。是什么样的需求不能用BOS单据或基础资料完成“Spread表单”? 【解答】

Private Sub m_BillInterface_MenuBarClick(ByVal BOSTool As K3ClassEvents.BOSTool, Cancel As Boolean)

Dim dct As KFO.Dictionary Dim row As Long Dim col As Long

'TODO: 请在此处添加代码响应事件 MenuBarClick If BOSTool.ToolName = \ m_BillInterface.GetActiveField dct, col, row If dct(\要处理字段FKey\ frm.Show 1 '通过frm返回 值 If ok Then

m_BillInterface.UpdateNormalFld dct, 值, row End If Cancel = True End If End If End Sub

还需要处理下面事件

Private Sub m_BillInterface_BeginEdit(ByVal dct As KFO.IDictionary, ByVal Col As Long, ByVal Row As Long)

If dct(\要处理字段FKey\

m_BillInterface.MenuBar.BOSTools(\ End If End Sub

第7页


K3 BOS开发百问百答(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:经济法作业题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: