K3 BOS开发百问百答

发布时间 : 星期四 文章K3 BOS开发百问百答更新完毕开始阅读

客户化开发技术资料——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页

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

【问题9】插件中字定义系统中如何获取当前系统字符连接串?有个项目中,需要作一个年结功能,进行土地数据结转、在vb中定义了年结功能窗口,要在主控台子系统中调用,怎样或得当前数据库连接信息,亦无法通过k3lib获得,因为我没必要去调用 bos表单或序时簿。另外,一些复杂报表、我也是通过vb中单独实现、这些报表也需要获的连接字符串才能调用? 【解答】

1.

Private Declare Function GetCurrentProcessId Lib \Long

'获取连接串

Public Function GetPropsString() As String Dim lProc As Long Dim spmMgr As Object

lProc = GetCurrentProcessId

Set spmMgr = CreateObject(\

GetPropsString = spmMgr.GetProperty(lProc, \ 2.

需要申请MMTS.bas的源代码,还需要申请ICKDListener的接口。另外,如果需要调试程序,就还需要申请KDMain的源代码。

连接串获取方式:(注意不支持调试,调试的话可以用实际连接串代替)

【问题10】关于K3Billtransfer.dll组件无法使用问题 【解答】

K3BillTransfer是工业单据里的接口组件,不是K/3BOS的接口组件,K/3 BOS的接口组件是K3ClassEvents。 K/3 BOS插件中不能调用K3BillTransfer。

【问题11】BOS单据插件里的取分录的合计值该怎么做? 【解答】

工业单据自定义里面有个GetSumGridText方法取得分录某一列的合计值,现在BOS单据里面需要取某一列的合计,请问有什么方法可以调用。我注意到有个sum方法,但不知道该怎么用?里面带BRow和ERow两个参数,应该是起始行和结束行吧,但分录的行是可以改变的,这两个值怎么取得?

我也有个客户使用Sum时有问题,在用bos做开发的时候,想计算一个表体中某一个字段的和,我们不明白如何使用函数

Object.Sum (dct As Dictionary, [BRow As Long], [ERow As Long])中

另外,从单据体下推单据头能通过插件来实现吗,因为我看你给我们的资料上写的是单据体不能下推Object.Sum (dct As Dictionary, [BRow As Long], [ERow As Long]) 参数说明:

dct-字段的模板字典

BRow-合计开始行,可选参数,默认值是1 单据头。

第8页

联系合同范文客服:xxxxx#qq.com(#替换为@)