K3 BOS开发百问百答 下载本文

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

【问题33】 我们在使用K/3 BOS+VB6为新港湾开发一个完全个性的项目管理系统,是使用一套帐的方式实现的,帐套理面将会创建几十或更多的工程项目,这就涉及到基础资料、项目计划、项目施工记录、项目有关单据等诸多信息要跟具体的项目邦定起来,用户一旦选定当前项目后,所有的数据维护、查询及报表都只针对当前项目操作,现在录入时跟项目邦定的问题我已解决,可查询(主要是序时薄,包括基础资料序时薄与业务单据序时薄如何与当前选定项目邦定,即序时薄只显示属于当前选定项目的数据)的问题还没解决,这就是我提出问题的背景,该问题若解决不了,整个使用K/3 BOS进行开发的解决方案将行不通,面临几十万元退款损失的风险,故十分重要。需求如下(举个例):

如用BOS定义了一个名为\项目任务\的基础资料,包含工程项目、任务代码、任务名称等字段,如下所示:

工程项目 任务代码 任务名称 ------------------------------- 00000001 01 进场准备 00000001 02 进场

00000002 01 进场准备 00000002 02 进场 ........ .. ........

写插件时,请问想要达到进入该基础资料序时薄时只显示某一个工程项目的相关基础资料记录该如何编码

(在那个事件入口处理、怎样处理),同样,如果是业务单据序时薄,又该如何设置过滤条件(在那个事

件入口处理,怎样处理),本人看过开发手册,好象没有合适的事件入口,更没有该方面的例子。 【解答】

在K/310.2+SP1的环境下,基础资料序时簿和单据序时簿有“ListFilterString”应可以实现。但在重新查询,过滤条件失效,在SP2解决此问题

【问题34】怎么找每个字段的索引 【解答】

参考下列代码 '表头

THeadCtl = m_BillTransfer.HeadCtl For i = 1 To UBound(THeadCtl)

If UCase(THeadCtl(i).FieldName) = \ m_BillTransfer.head(i).text = \张三\ Exit For End If Next '表体

EntryCtl = m_BillTransfer.EntryCtl

For i = 1 To UBound(m_BillTransfer.EntryCtl)

第17页

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

If UCase(EntryCtl(i).FieldName) = \ Exit For End If

Next

【问题35】BOS 开发一张新的单据. 在选单返回时, 希望能在表体自动添加一行分录.

事件测试代码如下:

Private Sub m_BillInterface_AfterSelBillBeforeFillData(ByVal dcData As KFO.IDictionary, ByVal dctLink As KFO.IDictionary)

Dim CoDict As KFO.Dictionary

Set CoDict = dcData(\拷贝第一条分录数据 dcData(\添加到 dcData

dcData(\= dcData(\//更改分录号 'Stop

set CoDict=Nothing End Sub

我用 watch 查看 DcData 的值. DcData(\也有增加一条, 但返回后,新添加的分录并未带到目标单据上? 请问我还要修改哪些地方?

【解答】

此方法在调试状态下是不能把值传过去的,编译之后就可以了. 你的代码有以下问题:

1、取分录号使用dcData(\2、Vect的最大值用UBound,而不是count.

3、去字段的key值使用m_BillInterface.TableInfo(\是字段名。 正确的代码是:

Dim CoDict As KFO.Dictionary

’dcData(\Set CoDict = dcData(\拷贝第一条分录数据 dcData(\添加到 dcData

dcData(\更改分录号 'Stop

Set CoDict = Nothing

第18页

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

【问题18】BOS单据插件里的BusinessCheck事件有何用途?写在BusinessCheck里面的代码也不执行,不知道这个事件到底是什么时候触发的。在AfterBusinessCheck事件中写的代码在打了10.2SP1之后就不执行了,我把代码放到BusinessCheck事件中也不执行,不知道什么原因,但AfterUnBusinessCheck中的代码却执行了。我只做了一级审核。AfterBusinessCheck事件和BusinessCheck事件触发时点的问题,以查看状态打开单据进行审核时,这两个事件不触发,只有在修改状态打开单据并进行审核,这两个事件才会被触发。之前没有打SP1的时候是没有这个问题的。因为强制审核人必须要打开单据检查后再进行审核,所以我在该单据的序时簿中把审核菜单去掉了,只能打开单据审核。不知道有没有人遇到这个问题。 【解答】

1. 经检查,以查看状态打开单据,进行多级审核,在业务审核级次被审核时,能够触发业务审核事件,

另外,昨天发现的业务审核事件在某条件下会多次触发的BUG已经修改,将会随8.31日须完成的功能点一起发放。估计还是因为用户没有针对单据插件进行编码,所以没有捕捉到事件。

第19页

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

二、方案篇

【问题1】客户的产品是通过图纸来制造的,图纸有些是客户自己提供标准图纸,有些是客户的需求自己根据需求画出来的,报价单很大的部分是根据图纸来的,而且图纸是公司的机密。现在用户需求是图纸需要有严格的权限控制,最好能够放在数据库里面统一管理,有图纸单据有:报价单,销售定单,合同;现在我们的K/3v10.2的附件的权限不好管理不能满足客户的需求。如何提供解决方案? 【解答】

1.

这样的话可以对图纸管理进行开发(如果对方有PDM系统就不需要),图纸存放可以用局域网FTP或数据库存储解决,后者比较容易进行权限控制,自己设定权限控制,下载、浏览、更新、删除,都能进行控制;而且关于图纸管理也比较容易解决,如图纸的版本控制。 2.

K/3 BOS解决不了。

【问题2】客户需要开发一张外贸报价单,里面涉及到物料对应表的内容,对应代码具体能实现的功能跟现有的报价单的一致,现在不知道怎么样能够具体的实现这样的功能,因为BOS的基础资料里面没有物料对应表,可以新增BOS基础资料和物料对应表共用一个表名,但是怎么可以做到跟原有的报价单在物料对应这一块的一摸一样的功能。 【解答】

不可能具有原来一模一样的功能,“BOS新增基础资料、映射到原有的数据表或视图”方式只能提供数据映射功能,保证能通过F7选择原有的数据。但由于原有数据的业务逻辑上的不可控,因此在实际操作过程中建议对这种基础资料隐藏增加、删除、修改等功能,来保证系统的稳定性。

在这里的物料对应表没有基于BOS开发,因此不能在外贸报价单上直接引用物料对应表,可以通过映射物料对应表的物理表方式满足客户需求。

具体操作:

1、新增一个BOS基础资料,把主表映射到表ICItemMapping。表ICItemMapping里面已经有数据。 2、把BOS基础资料里代码字段映射到FMapNumber字段,名称字段映射到FMapName,保存。 3、BOS单据序时薄测试的时候并不能把表ICItemMapping里面已有字段的内容显示出来,序时薄为空。

【问题3】能否在新版BOS中提供一个没有数据,只有工具条及菜单栏的浏览数据窗口,供做插件集成操作窗口用,现在只能用单据窗口实现,打开时还出现过滤窗口,很别扭。 【解答】

BOS中有一个自定义序事簿联查接口,可以指定单据类型和过滤条件联查所有新老单序事簿,不用弹出过滤条件。

【问题4】新单下推(钩稽)老单时,在新单序时簿里可以选中多张单据下推生成老单,但在老单单据中选取新单是不能选取多张单据,怎样解决? 【解答】

在ICClassLink.FRemark中加上“”后就能选取多张单据。

第20页