客户化开发技术资料——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页
客户化开发技术资料——K/3 BOS开发百问百答
【问题5】为什么在BOS单据下推到外购入库单时无法选择红字单据,只能是蓝字单据呢?BOS单据下推生成老单的时候,怎样把BOS单据的单据号显示在老单上呢?
【解答】 1. 2.
BOS单据下推到老单没有处理红兰字单据,默认就是蓝字单据,目前下推没有处理红字单据。 BOS单据下推生成老单的时候,使用钩稽就可以把BOS单据的单据号显示在老单上。
【问题6】如何在单据中做一个可以选择,又可以随意录入的字段?客户要在单据上加入一个“送货地点”,送货地点有一部分是固定的,还有一部分是只用一次,所以客户需要当是固定送货地点时的就进行选择,对于选不到的就直接在单据上打字(也就是不录入BOS基础资料中)。
【解答】
在单据上增加一个文本类型的字段(送货地点),通过插件在菜单上增加一菜单项(选择送货地点),并在插件中实现如下功能: 1、判断客户的送货地点类别,
2、如果是固定送货点,则菜单项可用,点菜单项选择“送货地点”基础资料,返回值填入字段中(只返回名称即可)
3、如果是一次性送货点,则菜单项不可用,可手工在单据上输入送货地点
当然上面的还可以更细化,比如固定送货点时,“送货地点”只能选择,不能录入等等。
【问题7】如何在把BOS单据的税率携带到下游老单据?BOS新做的单据税率是基础资料属性来做的,但是K/3的老单据的税率不是基础资料属性,所以BOS单据下推生成老单据的时候怎么样携带税率下去呢。 【解答】
可以将BOS的单据税率用小数类型描述,在基础资料值更新事件中,自动将基础资料的税率带到单据税率中,然后就可以关联到K/3来单据中。
【问题8】客户的车间管理的单据与我们K310.2的差异很大,无法使用K3的车间来满足客户需求。从派工单,到工序汇报,到最后的计时计件工资,都有差异,比如派工单,K3的表头是客户单据的表体,而K3的表体是客户单据的表头。但单据流是基本一致的。请问这样的开发用BOS是否可行?还是单独写程序比较好?哪个综合起来效果最佳?另外,分录是否可以把字段竖着表示?把行变成列,把列变成行? 【解答】
K/3 BOS 的单据为主表-明细表的一对多结构,如你的单据可以设计成这种结构即可用BOS实现,如为特殊结构单据,如无法变通,只能自行开发了。“分录是否可以把字段竖着表示”不能行变成列,但如果分录为单条纪录,可以用常用字段库中的字段或自定义字段实现。
第21页
客户化开发技术资料——K/3 BOS开发百问百答
【问题9】K310.2 委外加工生产任务单-录入界面中,我们的系统中是只能实现录入一个物料进行委外加工,现在客户要求录入多条物料在一个界面内且能实现在原有界面上的所有操作。目前我用BOS新建一个表单做到的情况是可以录入多条物料,但BOM代码数据抓不到,单据能保存。实现不了确认单据后,单据状态由计划状态变为下达状态。请问应该怎么做。 【解答】
通过K3BOS的开发平台可以实现大部分通用的功能,比如新增、修改、删除、审核、单据流转等等,但如果涉及到特殊业务的话,必须通过插件实现。
【问题10】在工业单据上定义了“审核日期”字段,需要在审核后将系统日期填充到“审核日期”字段。我想通过工业单据插件来实现,但是不知道在哪个事件中执行? 【解答】
如果是v102版本,可以在t_ThirdPartyComponent表中,增加一条记录FTypeID=2,FTypeDetailID=200001,FIndex=Max(FIndex),FComponentSrv=插件名称(中间层)插件实现HookInvoke(Long,KFO.Dictionary)接口,接口参数的详细文档,请联系基础项目组陈跃申请!以前版本没有审核接口,考虑通过触发器实现,增加update触发器,根据审核标志进行处理
【问题11】K3/10.2中调用不了Billtransfer,10.2以前版本中更新表ictransactiontype 中字段fcheckpro 成“ReDevClient:RevDev***.cls***”就可以调用 10.2版本是否需要修改其他地方? 【解答】
K/3V10.2插件注册方式发生变化:为了支持多二次开发的结构,单据二次开发记录现在在t_ThirdPartyComponent表里维护。
字段名称 FTypeID FTypeDetailID 类型 INT INT 长度 4 4 说明 用于区分事件类型(0、表示单据,1、表示序时簿,2、表示其它通用业务) 对应单据、序时簿上的具体ID,在单据上使用时,该事件ID对应单据的TranType,在序时簿上使用时,对应序时簿的FID,对于FTypeID=2的类型,FTypeDetailID表示只有中间层的二次开发类型,比如审核 对于一个FTypeDetailID,可以有多个二次开发操作,中间用FIndex来决定执行顺序,(标记为负数的会在ictransactiontype中记录的二次开发之前执行,ictransactiontype中的FIndex默认为0)。非空 二次开发组件名称(ComName.clsName) 中间层二次开发组件 二次开发组件说明 FIndex INT 4 FComponentName VARCHAR 200 FCompenentSrv FDescription VARCHAR 200 VARCHAR 255
第22页