K3 BOS应用开发百问百答(V1.0) 下载本文

K/3 BOS应用开发百问百答

【解答】

单据体的已录的条数用下面的方法可得到。 m_BillInterface.Data(\

注意:最后一条可能是空记录,要判断(if 分录关键子段或必填字段<>\。

【摘要】插件中获取单据上控件的位置、尺寸信息

版本:K310.2SP1

问题描述:请问在BOS插件开发中,可否用代码获取BOS单据上某个控件的位置、尺寸信息?以及能否用代码动态修改它们的位置?

【解答】

在K/3BOS插件中获取控件的位置的方法:

m_BillInterface.BillHeads(1).BOSFields(\,其中“FDate”是控件的名称,也可以用它来改变控件的位置。

【摘要】关联自定义核算项目

版本:K310.2SP2

问题描述:请问在新建的BOS单或原有的BOS单上如何关联自定义的核算项目基础资料?

【解答】

修改ICClassTableInfo中

FLookupClassID,FSRCFieldName,FSRCTableName,FDSPFieldName,FFNDFieldName。

【摘要】是否允许插件自定义查询条件?

版本:K310.2SP2

问题描述:需要在序事簿查询过程,根据人员角色不同,自动将所能看到的数据进行过滤,请问此类问题怎么实现,BOS序事簿是否允许插件自定义查询条件?

【解答】

可以通过在序事簿插件的show中直接修改ListFilterString属性的值来自定义查询条件. 示例如下:

With m_listinterface

If len(.listfilterstring)>0 then

.listfilterstring=.listfilterstring & “ and FDeptID=984” Else

.listfilterstring=” FDeptID=984” End if End with

【摘要】填充分录行? 版本:K310.2SP2

第4页

K/3 BOS应用开发百问百答

问题描述:一张单据有几百条分录, 每条分录数据都是通过插件填入的.但是如果使用 setFieldValue 方法一个字段一个字段填的话, 速度非常慢. 是不是有更好的方法填充行数据?

【解答】

可以用insertnewrowandfill方法插入一新行。 示例如下: '批量插入行数据 Dim i As Long For i = 1 To 10

m_BillInterface.InsertNewRowAndFill 2, i, \

\ Next

需要注意的是查找类型的字段只要给出编码即可,基础资料属性(如物料名称等)不需要赋值。

【摘要】在Bos单据按F7查询供应商信息,按F9查询采购价格管理信息。

版本:K310.2SP1+PT0704

问题描述:在新增采购申请单时,在分录中的供应商按F7能选择供应商信息,按F9能选到采购价格管理信息,我现在想在新单中也添加一个供应商,也实现上述功能.该什么实现?

【解答】

使用MenuBarClick事件实现F7 1、 BeginEdit事件

If dct(\要处理字段FKey“ Then

m_BillInterface.MenuBar.BOSTools(\End If 2、 MenuBarClick

If BOSTool.ToolName = \ m_BillInterface.GetActiveField dct, col, row If dct(\

m_BillInterface.BillCtl.DoSelBill 200000104 '(原单的ClassTypeID) End If End If

3、 采购价格管理的调用接口,结合上述所说使用:

Dim obj As Object

Set obj = CreateObject(\With obj

.CallByBill = True

.SelICItemID = '当前物料行内码 .CategoryBySupply = false .SelSupID = '供应商内码 .PriceType = 1 .Show 1

End With

第5页

K/3 BOS应用开发百问百答

Set obj = Nothing

【摘要】有没有可以取到单据编号的组件呢?

版本:K310.2SP2

问题描述:客户要导入一张组装单,组装单是一张BOS单据。有没有一个专门得到单据编号的组件呢?有的话,接口是什么?

【解答】

Set obj = CreateObject(\

GetThisBillNo = obj.GetBillNo(sDsn, ClassID, sKey, bGetDeleteNo, bSave) 接口描述:

'/*描述:得到一种业务类型的编号 '/*参数:

'/*@ bGetDeleteNo 是否获取空号,这种单据设置了删除的空号被保存才有效,已经无效,只是保持兼容调用接口

'/*@ bSave 是否需要修改新的最大单据号 '/*@ ClassID 类型 '/*@ sDsn 连接串信息

'/*@ sKey 需要处理的关键字。

【摘要】是否可以直接在数据库表中直接修改Bos单据中的字段类型?

版本:K310.2SP1+Sp2+10.3

问题描述:现在在Bos单据中加入一备注字段,并保存了数据,可否将备注字段改为文本字段,保证数据不丢失?

【解答】

可以修改表Icclasstableinfo的FCtlType字段,示例如下。

update icclasstableinfo set fcaption_chs='文本1',fcaption_cht='文本

1',fcaption_En='Text1',FKey='FText1',FFieldName='FText1',FCtlType=1 where fid=8438 update icclasstype set fid=fid ----单据的时间梭

注意在后面更新icclasstableinfo表来修改单据,一定要更新一下icclasstype,否则前面的更新在Bos设计环境反映不出来更新。

【摘要】锁定单据字段

版本:K310.2SP1+Sp2+10.3

问题描述:如何在插件中锁定单据字段。

【解答】

可以用lockcell方法锁定,如锁定单据头币别:

Set dcttemp = m_BillInterface.GetFieldInfoByKey(\

If Not dcttemp Is Nothing Then m_BillInterface.BillCtl.LockCell dcttemp, -1, True 第二个参数为分录行号,当为-1时锁定所有行。

第6页

K/3 BOS应用开发百问百答

注意:设计状态没有设计为\锁定\的字段,才可以在运行状态锁定或解锁。

【摘要】删除符合条件的单据

版本:K310.2SP1+Sp2+10.3

问题描述:符合一定条件的单据不允许删除。是否有删除前的事件可以调用,或者其他方法?

【解答】

可以在中间层插件的Beforedel事件中写代码实现。

【摘要】动态过滤基础资料

版本:K310.2SP1+Sp2+10.3

问题描述:用K/3 BOS新建的单据上的添加基础资料时,能否给定某种过滤条件?比如:我选择某个物料资料,我要求只显示指定的某个部门的物料资料,其它的物料不显示,不清楚这种情况能否实现,还是可以通过其它方法来实现该功能。

【解答】

可以在单据的Change事件中写如下代码来实现动态过滤条件。

If dct(“FKey”)=”FDeptID” then

m_BillInterface.DataSrv.TableInfo(m_BillInterface.TableInfo(\= \’” & m_BillInterface.getfieldvalue(“FDeptID” ) & “’” End if

注意:上面的代码不支持调试,如果调试,发现赋值为空,没有将过滤条件赋值成功,但编译后运行没有问题。

【摘要】单据保存出错

版本:K310.2SP2

问题描述:新增BOS单据,单据的表设为poRequest, 单据体的表设为 poRequestEntry,然后保存,出现如下提示错误信息:”索引’IX_PoRequest_FBillNo’依赖于列’FBillNo’”,请问这是怎么回事?能删除此索引吗?

【解答】

这是10.2的一个设计不合理的地方,10.3没有这个问题了。可以先删除,设计成功后加上就好了。

【摘要】表体当中的当前记录号,不能在套打中打印。 版本:K310.2SP1+PT0704

问题描述:表体当中的当前记录号,不能在套打中打印。

【解答】

当前行号打印的补丁PT003411已经解决。

第7页