K3 BOS开发百问百答

更新时间:2024-05-11 13:00:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

K/3 BOS开发百问百答

(版本:V1.0)

应用集成部 客户化管理部

2005年12月

i

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

目录

一、插件开发篇 _____________________________________________________ 1

【问题1】在插件中以新增、修改和查看方式打开另一单据 ______________________________ 1 【问题2】我想在投料变更单的菜单上加入一个菜单项,需要插入一个插件,但投料变更单上已

经有一个插件了,我想了解一下怎样才可以再插入一个插件呢? ________________ 2

【问题3】如何通过插件代码动态设置基础资料或业务单据序时薄过滤条件 ________________ 2 【问题4】在插件中调用序时簿并返回选中的数据 ______________________________________ 3 【问题5】在自定义的BOS单据上,通过插件作生成凭证的功能,但是在调用凭证的组件时,

需要一个二次登录后才能使用相应的模块。请问:如何处理隐身的二次登录,或者其他的变通处理。 __________________________________________________________ 3

【问题6】在设计BOS单据的过程中,经常会有关联的下拉列表框操作,如我在客户上选择“建

设银行”,那么在客户相对应的地址的下拉列表框中应动态显示“建设银行所对应的地址”。也就是说客户地址是随着客户的变化而变化的。 _________________________ 6

【问题7】如何可以物料多选? _____________________________________________________ 6 【问题8】在表单分录里需要在第一列中使用F7键或点击菜单调出某一窗体(在插件中自定义

Form,上有Spread表单),在Form中选中数据(多条或一条),返回到源单,请问在插件中用什么事件可以完成?在单据中添加一菜单,用MenuBarClick事件,F7不易实现。返回的数据需用赋值方法填写到表体中。是什么样的需求不能用BOS单据或基础资料完成“Spread表单”? ___________________________________________ 7

【问题9】插件中字定义系统中如何获取当前系统字符连接串?有个项目中,需要作一个年结功

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

【问题10】关于K3Billtransfer.dll组件无法使用问题 ________________________________ 8 【问题11】BOS单据插件里的取分录的合计值该怎么做? _______________________________ 8 【问题12】隐藏选单时序时簿不要的菜单和工具栏。K/3单据查看和选单使用的是同一个序时簿,

在插件中用MenuBarInitialize添加的菜单和工具栏在选单时也显示出来。 ______ 9

【问题13】标体行高设置和值更新事件 ______________________________________________ 9 【问题14】事务处理 _____________________________________________________________ 10 【问题15】如何在新的BOS单据中通过代码逐行添加分录数据? ________________________ 10 【问题16】在单据体中有没有办法让下一条分录自动携带上一条分录的数据(只是部分字段)。

_______________________________________________________________________ 11

ii

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

【问题17】否有办法完成单据体中的行点击事件?现在有需要在点击BOS单据中单据体的某一

行时,在另一个表体中显示与该行有关的信息,请问各位有什么好的实现方法,特别是怎么获取点击事件和所点击的行数据信息。 _______________________________ 11

【问题18】多分录序时簿浏览,字段权限。 _________________________________________ 11 【问题19】怎么样可以用代码调出单据的序时薄窗口。 ________________________________ 11 【问题20】K/3 BOS SDK 二次开发组件(k3Billtransfer组件)嵌入K/3系统,数据库端按装后

(update ictransactiontype... 后),再在..../system32/ls_DV.dll,并注册,最后进入K/3,没有效果!是不是K3 V10.2不支持二次组件开发???还是不支持K/3 BOS SDK中的K3billtransfer组件? _______________________________________________ 13

【问题21】如何在单据插件代码中通过条件判断来启动多级审核. _______________________ 13 【问题22】在插件开发中,如何获得当前登陆的用户ID?比如administrator登陆,如何得到

ID?另外,如何得到选中多行单据时的集合?一个表体中,有职员编码和职员名称,想通过输入编码后,直接关联出名称来。名称这个字段用职员类型,还是文本?值更新事件好象不管用。 _____________________________________________________ 13

【问题23】在销售系统中增加了一张BOS开发的单据. 单据上也指定了相应的插件.(插件是依

据BOS 开发向导生成的. 插件的功能只是增加一个自定的菜单项).组件中也引用了: K3ClassEvents.dll,但在单据测试时,却总是提示错误: \单据接口无效\的错误. 请问BOS新开发的单据是不是不能调用自定义的插件? 如果有调用是不是要做其它处理? _______________________________________________________________________ 14

【问题24】Bos 开发的单据还能不能调用 k3billtransfer.dll 这个组件? BOS插件中如何取得

连接字符串? (以前 m_Billtransfer.Cnnstring ) 我想把连接字符串做为参数传递给其它语言开发的程序. ____________________________________________________ 14

【问题25】需要通过工具栏上的按钮,实现单据体分录的上移和下移功能,请问BOS插件的如

何实现? _______________________________________________________________ 14

【问题26】新增BOS 单据分录中有数量 及基本单位数量 字段, 基本单位数量关联字段为数量,

但输入完数量后,基本单位数量仍然为空. ___________________________________ 14

【问题27】我在做k3BillTransfer开发时需要取表体中的“批次”列是否可以录入,即该物料

是否批次管理,请问控件fpSpread中,怎么才能知道哪一个单元格可以录入或不能录入?或者可以取到该物料的内码也可以。EnteryCtl都有那些属性啊,我只知道一个fieldname,其他的比如内码等是什么?在单据二次开发参考组件没有描述,在哪有详细的说明? _____________________________________________________________ 15

【问题28】K/3 BOS单据、序时簿和工业单据、序时簿中分别如何获得当前用户的信息?(比如

ID) ___________________________________________________________________ 15

【问题29】通过工业单据插件怎么获得当前K/3的版本号?工业单据插件是否支持所有账套类

型的单据,不区分工业供应链、商业供应链? _______________________________ 15

【问题30】在工业单据的插件中如何得到单据的FInterID? (工业单据) _________________ 15 【问题31】在BOSV10.2中,填充新行数据可以用m_BillInterface.InsertNewRowAndFill方法实

iii

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

现,但是在BOSV10.1中不知道用什么方法可以向单据体逐行插入数据?如果单据体中有物料、计量单位等查找类型字段,其赋值是否一样? _____________________ 15

【问题32】请问10.2的工业老单(非BOS),作k3BillTransfer插件的时候,是否可以在

BeforHeadLookUp事件中指定基础资料的过滤条件,如:

m_BillTransfer.HeadCtl(CtlIndex).Filter = \。我发现这段代码所指定的过滤条件不起作用。 _______________________________________________________________ 16

【问题33】 我们在使用K/3 BOS+VB6为新港湾开发一个完全个性的项目管理系统,是使用一

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

------------------------------- 00000001 01 进场准备 00000001 02 进场 00000002 01 进场准备 00000002 02 进场 ........ .. ........ 写插件时,请问想要达到进入该基础资料序时薄时只显示某一个工程项目的相关基础资料记录该如何编码 (在那个事件入口处理、怎样处理),同样,如果是业务单据序时薄,又该如何设置过滤条件(在那个事 件入口处理,怎样处理),本人看过开发手册,好象没有合适的事件入口,更没有该方面的例子。 _______________________________________________________________ 17

【问题34】怎么找每个字段的索引 _________________________________________________ 17 【问题35】BOS 开发一张新的单据. 在选单返回时, 希望能在表体自动添加一行分录. _____ 18 事件测试代码如下: 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(\也有增加一条, 但返回后,新添加的分录并未带到目标单据上? 请问我还要修改哪些地方? ____________________________ 18

【问题18】BOS单据插件里的BusinessCheck事件有何用途?写在BusinessCheck里面的代码也

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

iv

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

二、方案篇 ________________________________________________________ 20

【问题1】客户的产品是通过图纸来制造的,图纸有些是客户自己提供标准图纸,有些是客户的

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

【问题2】客户需要开发一张外贸报价单,里面涉及到物料对应表的内容,对应代码具体能实现

的功能跟现有的报价单的一致,现在不知道怎么样能够具体的实现这样的功能,因为BOS的基础资料里面没有物料对应表,可以新增BOS基础资料和物料对应表共用一个表名,但是怎么可以做到跟原有的报价单在物料对应这一块的一摸一样的功能。 _ 20

【问题3】能否在新版BOS中提供一个没有数据,只有工具条及菜单栏的浏览数据窗口,供做插件

集成操作窗口用,现在只能用单据窗口实现,打开时还出现过滤窗口,很别扭。 ____ 20

【问题4】新单下推(钩稽)老单时,在新单序时簿里可以选中多张单据下推生成老单,但在老

单单据中选取新单是不能选取多张单据,怎样解决? _________________________ 20

【问题5】为什么在BOS单据下推到外购入库单时无法选择红字单据,只能是蓝字单据呢?BOS

单据下推生成老单的时候,怎样把BOS单据的单据号显示在老单上呢? _________ 21

【问题6】如何在单据中做一个可以选择,又可以随意录入的字段?客户要在单据上加入一个

“送货地点”,送货地点有一部分是固定的,还有一部分是只用一次,所以客户需要当是固定送货地点时的就进行选择,对于选不到的就直接在单据上打字(也就是不录入BOS基础资料中)。 ___________________________________________________ 21

【问题7】如何在把BOS单据的税率携带到下游老单据?BOS新做的单据税率是基础资料属性来

做的,但是K/3的老单据的税率不是基础资料属性,所以BOS单据下推生成老单据的时候怎么样携带税率下去呢。 _____________________________________________ 21

【问题8】客户的车间管理的单据与我们K310.2的差异很大,无法使用K3的车间来满足客户需

求。从派工单,到工序汇报,到最后的计时计件工资,都有差异,比如派工单,K3的表头是客户单据的表体,而K3的表体是客户单据的表头。但单据流是基本一致的。请问这样的开发用BOS是否可行?还是单独写程序比较好?哪个综合起来效果最佳?另外,分录是否可以把字段竖着表示?把行变成列,把列变成行? _______________ 21

【问题9】K310.2 委外加工生产任务单-录入界面中,我们的系统中是只能实现录入一个物料进

行委外加工,现在客户要求录入多条物料在一个界面内且能实现在原有界面上的所有操作。目前我用BOS新建一个表单做到的情况是可以录入多条物料,但BOM代码数据抓不到,单据能保存。实现不了确认单据后,单据状态由计划状态变为下达状态。请问应该怎么做。 _______________________________________________________ 22

【问题10】在工业单据上定义了“审核日期”字段,需要在审核后将系统日期填充到“审核日

期”字段。我想通过工业单据插件来实现,但是不知道在哪个事件中执行? _____ 22

【问题11】K3/10.2中调用不了Billtransfer,10.2以前版本中更新表ictransactiontype 中字段

fcheckpro 成“ReDevClient:RevDev***.cls***”就可以调用 10.2版本是否需要修改其他地方? _______________________________________________________________ 22

v

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

三、单据定义篇 ____________________________________________________ 23

【问题1】在单据头要设置一个对应物料的销售出库单编号,要由系统自动填写,是不是可以用

单据推啊?还有更好的方法吗?客户要求在单据体下面设置运费,整单折扣和总金额(总金额=运费+合计金额*整单折扣),合计金额就是单据体中的合计金额,但是在单据体中不能出现运费项,其中整单折扣是在客户资料有的,由系统自动填写.我们想的是在单据体中先把运费加进去,等保存时就把运费项给隐藏,其中总金额的计算可以用值更新事件做,如何把单据头里的运费和单据体里的运费关联起来? _____ 23

【问题2】我做的项目中,80%的表单可以通过BOS完成,但有一些表单和报表完全开发,这些

表单和报表如何发布到主控台?现在表单上需要加载图形,BOS什么时候能够支持图形? ___________________________________________________________________ 23

【问题3】能否对BOS基础资料做过滤,即:在调出基础资料序时簿时,过滤出我需要的基础资

料。 ___________________________________________________________________ 24

【问题4】有关多级审核的问题 ____________________________________________________ 24 【问题5】开发过程中需要从一张BOS单据下推生成一张K/3老单据,其中要从源单据的一个单

据体字段推成目的单据的单据头字段,在你拷贝给我们的文档资料中明确说明不能由单据体推成单据头,所以只能通过插件开发来实现。但是在插件开发中我们发现不能对目的单据即K/3老单据进行定位,所以不知道这个功能能否通过插件开发来实现,如果可以,怎么实现? ___________________________________________________ 25

【问题6】在K/3 BOS单据中,有没有属性可以设置某个项目,审核后可修改?有的话怎么做,

没有的话是否有什么变通的方法? _________________________________________ 25

【问题7】在BOS单据单据头中加了源单单据类型和源单单号两个字段,单据关联已设置好。(旧)

生产任务单生成 BOS制作的委外加工订单(类似于采购订单)。1,选单后,源单单据类型和源单单号两字段中的数据立即变成空,保存后整个字段被隐藏。2,选单后,单据体中的物料编码可以带过来,但物料名称,规格等没有显示出来,保存后名称、规格等基本资料属性显示出来。请问源单单据类型和源单单号这个地方是BOS设计成这样?还是BUG?源单单据类型和源单单号应该像其他单据选单一样,保留在单据上并一直显示。 _____________________________________________________________ 25

【问题8】多级审核的操作。Bos单据多级审核增加的“启动多级审核”具体完成什么功能?客

户对原有的F4 、Shift+F4操作比较习惯,对现有的“启动多级审核”、“多级审核”和“驳回审核”操作有比较大的意见。问能否统一设置为这种审核操作方式? ___ 25

【问题9】K3Bos表体如何设置合计? ________________________________________________ 25 【问题10】1、在BOS中,将源单单号(选单)拖入表头,在哪里设置才能可见并选择单据?2、

在BOS平台中,我们可以进行单据测试和序时簿测试。请问,我能否用vb程序调起这些单据呢?如何调用?3、我在采购申请单中增加一个插件,希望能够调用我用BOS开发的一张单据。打开这张单据时,在源单单号处将采购申请单单号自动写入,并将一些数据从采购申请单中自动带入。如果申请单已审核,那这张单据将不能修改。如何做到?4、使用BOS平台生成的单据,能否传入一些参数?如果能,怎么传入? 26

四、其他 ___________________________________________________________ 1

vi

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

【问题1】如何打包应用程序?有一个项目需要发布,如何像开K/3发布补丁一样,自动找到金

蝶的安装目录,自动注册组件,在中间层连接帐套,执行SQL语句。是否有类似的InstallShield的脚本参考? ______________________________________________ 1

【问题2】是否可以在相关的基础资料的对象中增加通过名字查询功能。目前的基础资料(部门,

人员,物料等)是通过F7查询或者输入代码,但是实际业务中很多情况是输入名字,很多客户已经要求使用名字查询,特别是涉及职员、部门等基础资料,不知道BOS能不能先行一步,改掉k/3的这个习惯?即直接在那个文本框中输入名称,然后自动匹配,就像在文本框中输入代码一样,能够自动找到相应的基础资料。 ____________ 1

【问题3】BOS中相关单据生成BOS安装包后,在新的账套中安装后不能直接在主控台上体现出

来,要在新账套中用BOS重新发布才能在主控台上体现。希望能早日完善这功能。 1

【问题4】在10.2产品中对合同进行多级审核,在消息提示中,打开后提示需要BOS加密狗,

但数据量只有一条,难道,10.2产品中自带的审批流设置也需要BOS狗吗? ______ 1

【问题5】如何设置通过BOS定义的字段的套打?目前在收款单通过BOS自定义了一个字段,那

么在收款的套打设置里面怎么取到这个字段呢? _______________________________ 2

【问题6】有个客户,需要做接口,用到应收应付模块,但有些要求比较特殊,需要修改应收模

板。K/3 版本10.2,因为应收应付是BOS做的,所以我想在现有应收模块基础上进行修改,BOS设计界面可以调出来应收款管理,但不能发布。我想问在现有应收款管理上修改,可行么? ________________________________________________________ 2

【问题7】对BOS单据中的层处理。如何做到显示或隐藏单据中某一层? __________________ 2 【问题8】销售前台客户端开发是否可以使用Dataflow.dat _____________________________ 3 【问题9】基础资料数据传输和单据传输用到的组件名称,包括销售前台的客户端和K3的服务

器端 ____________________________________________________________________ 3

【问题10】销售前台零售单组件名称 ________________________________________________ 3 【问题11】请问用K/3 BOS开发的多种单据后,客户在正式上线使用时,需如何购买站点数?

是统一并发的吗?(方案) ________________________________________________ 3

【问题12】老单下推生成新单。老单为外购入库单。希望选定老单的某一条分录,通过手工操

作能够自动弹出新单据的录入界面,并关联几个字段。每一个分录对应一张新单。每次选定老单一条分录即可。请问有没有办法实现这一功能?如有其他变通方式也可,要求为下推方式。 ________________________________________________________ 3

【问题13】在BOS的单据选单流程中,钩稽后不会自动扣减源单的数量,不能关闭,请问如何

解决?从新单到老单建立了一个选单关系,发布以后,老单的源单类型下拉列表中丢失了原来的类型,只有新单。请问如何恢复? ________________________________ 3

【问题14】Bos钩稽生成旧单据出错。Bos定义单据下推生成销售出库单,关系为钩稽,Bos定

义单据下推生成采购入库单,关系为钩稽,在Bos可以完成流程编辑和保存,实际操作中表现为复制,即出入库单不携带源单信息,源单扣减字段无变化。 __________ 3

【问题15】考虑过增加审核和反审核按钮,根据对多级审核的审核和反审核的sql事件跟踪直

接修改审核相关表(单据界面还要刷新内容锁定状态),这样的话就越过了“启动多级

vii

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

审核”这一步骤,忽略这一步骤是否会带来其他问题? ________________________ 4

【问题16】在K/3 BOS中能否打印一张复杂的单据?需要结合三张单据的内容进行打印。用两

个以上的表体。其中一张单据的表头中一部分数据需要和表体的数据合在一起组成一个表体打印。其他部分数据在表头或其他的表体中打印。 ______________________ 4

【问题17】最近我在网上下了一个不知名的程序安装后随即卸了,可VB6运行时报错,我就重新

修复安装了一下,但原来的K/3 BOS插件开发向导菜单按钮不见了,这样开发BOS插件很不方便,我想能否注册一下BOS组件就能解决问题? ____________________ 4

viii

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

一、插件开发篇

【问题1】在插件中以新增、修改和查看方式打开另一单据 【解答】

使用代码调用序时簿

'******************************************** '功能:显示BOS单据,显示的方式为新增、修改和浏览 '参数:lClassTypeID—显示BOS单据的ID '******************************************** Private Sub ShowBill(ByVal lClassTypeID As Long)

Dim oDataSrv As Object Dim oBill As Object

On Error GoTo err_ctr

Set oDataSrv = m_BillInterface.K3Lib.CreateK3Object(\ oDataSrv.ClassTypeID = lClassTypeID

Set oBill = CreateObject(\ With oBill

.DataSrv = oDataSrv .ISNetControl = True .ISCheckRight = True .Show

'********************** 'Show 参数类型

'第一个参数 Optional ByVal lID As Long = 0 ;描述修改或查看的单据ID

'第二个参数 Optional ByVal bShowGroup As Boolean = False ;如是基础资料时,是否显示分组

'第三个参数 Optional ByVal BillStatus As Long = Enu_BillStatus_New ;显示方式 0—查看;1—新增;2—修改

'第四个参数 Optional ByVal dctData As KFO.Dictionary '单据初始值 '********************** End With

Set oDataSrv = Nothing Set oBill = Nothing

Exit Sub err_ctr:

Set oDataSrv = Nothing

第1页

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

Set oBill = Nothing

End Sub

【问题2】我想在投料变更单的菜单上加入一个菜单项,需要插入一个插件,但投料变更单上已经有一个插件了,我想了解一下怎样才可以再插入一个插件呢? 【解答】

点插件管理中的按钮,可以通过浏览来选择自定义插件,并选择多个插件对象,BOS允许多个插件同时存在。

【问题3】如何通过插件代码动态设置基础资料或业务单据序时薄过滤条件 【解答】

业务场景:

在开发BOS单据时,经常需要根据前面录入的字段值来过滤选择

的基础资料。例如录入客户后,在选择客户对应客户地址基础资料时,在基础资料F7查询界面只显示当前单据上客户对应地址。根据当前物料,在选择物料对应批次。

我们下面就以批次为例说明实现方法:

需求:在选择批次前要求必须录入物料,批次查询界面只显示物料对应的批次 开发步骤:

假设:物料对应FKey=“FItemID”,批次对应FKey=\单据类型 200000001

只需更新对应元数据即可实现:

update ICClassTableinfo set FFilter='(FItemID=GetFldValue(FItemID,1))' where FKey=\

如果不要求先录入物料

update ICClassTableinfo set FFilter='(FItemID=GetFldValue(FItemID,0))' where FKey=\

再举个例子

根据工艺路线过滤工序名称

假设:工艺路线FKey=“FNewRoutingID”,工序名称FKey=\单据类型 200000001

update ICClassTableinfo set FFilter='FInterID In (Select FOperID from t_routingoper where FinterID=GetFldValue(FNewRoutingID,1))' where FKey='FOperID' and FClassTypeID=200000001

其中GetFldValue为BOS内部函数,取单据上指定字段值,

第一个参数为字段对应FKey,第二个参数为是否要求该字段先录入,1 要求 0 不要求

此方法虽能实现,但不是最好方法。希望能在插件接口中提供在函数。

第2页

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

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

Set oDataSrv = Nothing Set objLookup = Nothing

Exit Function err_ctr:

Set oDataSrv = Nothing Set objLookup = Nothing End Function

【问题20】K/3 BOS SDK 二次开发组件(k3Billtransfer组件)嵌入K/3系统,数据库端按装后(update ictransactiontype... 后),再在..../system32/ls_DV.dll,并注册,最后进入K/3,没有效果!是不是K3 V10.2不支持二次组件开发???还是不支持K/3 BOS SDK中的K3billtransfer组件? 【解答】

为了支持多二次开发的结构,单据二次开发记录现在在t_ThirdPartyComponent表里维护。 FTypeID,INT,4,用于区分事件类型(0、表示单据,1、表示序时簿,2、表示其它通用业务); FTypeDetailID,INT,4,对应单据、序时簿上的具体ID,在单据上使用时,该事件ID对应单据的TranType,在序时簿上使用时,对应序时簿的FID,对于FTypeID=2的类型,FTypeDetailID表示只有中间层的二次开发类型,比如审核;

FIndex,INT,4,对于一个FTypeDetailID,可以有多个二次开发操作,中间用FIndex来决定执行顺序,(标记为负数的会在ictransactiontype中记录的二次开发之前执行,ictransactiontype中的FIndex默认为0),非空; FComponentName,VARCHAR,200,二次开发组件名称(ComName.clsName); FCompenentSrv,VARCHAR,200,中间层二次开发组件; FDescription,NVARCHAR,255,二次开发组件说明;

【问题21】如何在单据插件代码中通过条件判断来启动多级审核. 【解答】

在保存后事件(AfterSave)中添加下列代码: ‘条件判断

If m_BillInterface.MultiCheckMgr.MultiCheckBill(m_BillInterface.BillCtl.CurBillID) Then m_BillInterface.RefreshBill End If

【问题22】在插件开发中,如何获得当前登陆的用户ID?比如administrator登陆,如何得到ID?另外,如何得到选中多行单据时的集合?一个表体中,有职员编码和职员名称,想通过输入编码后,直接关联出名称来。名称这个字段用职员类型,还是文本?值更新事件好象不管用。 【解答】

获得当前登陆的用户ID:K3Lib.User.UserID。

选中多行的函数GetSelectedBillInfo(),此函数返回一个KFO.Vector数据包,Vector的Size和选中的行数一致。每行包含一个KFO.Dictionary数据包,此数据包包含FClassTypeID,FID,FEntryID。

第13页

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

FClassTypeID表示单据类型;FID表示当前行所属单据的内码;FEntryID表示单据分录ID。

示例

获取选中的第一行所属单据的分录ID: Dim I As Long

Dim dct as KFO.Dictionary Dim vct As KFO.Vector

Set vct = m_ListInterface.GetSelectedBillInfo Set dct = vct(1) I = dct(\

职员名称用\基础资料属性\不要用文本。

【问题23】在销售系统中增加了一张BOS开发的单据. 单据上也指定了相应的插件.(插件是依据BOS 开发向导生成的. 插件的功能只是增加一个自定的菜单项).组件中也引用了: K3ClassEvents.dll,但在单据测试时,却总是提示错误: \单据接口无效\的错误. 请问BOS新开发的单据是不是不能调用自定义的插件? 如果有调用是不是要做其它处理? 【解答】

插件调试时要编译或运行起来。BOS单据可以调用插件,也可以在插件中调用其他组件。请把你的Project Properties->Project Name改为和组件名一致。

【问题24】Bos 开发的单据还能不能调用 k3billtransfer.dll 这个组件? BOS插件中如何取得连接字符串? (以前 m_Billtransfer.Cnnstring ) 我想把连接字符串做为参数传递给其它语言开发的程序. 【解答】

BOS 开发的单据不能调用 k3billtransfer.dll,只有在工业单据里能调用。目前BOS插件不能获取连接字符串。

【问题25】需要通过工具栏上的按钮,实现单据体分录的上移和下移功能,请问BOS插件的如何实现? 【解答】

可通过m_BillInterface_MenuBarInitialize事件实现“上移”、“下移”按钮的添加,通过在m_BillInterface_MenuBarClick事件中重写单据体和数据包,实现该功能。

【问题26】新增BOS 单据分录中有数量 及基本单位数量 字段, 基本单位数量关联字段为数量, 但输入完数量后,基本单位数量仍然为空. 【解答】

保存后基本单位数量就有了。

第14页

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

【问题27】我在做k3BillTransfer开发时需要取表体中的“批次”列是否可以录入,即该物料是否批次管理,请问控件fpSpread中,怎么才能知道哪一个单元格可以录入或不能录入?或者可以取到该物料的内码也可以。EnteryCtl都有那些属性啊,我只知道一个fieldname,其他的比如内码等是什么?在单据二次开发参考组件没有描述,在哪有详细的说明?

【解答】

1、获取分录某一分录物料的内码你可以通过EndGridLookUp(BeforGridLookUp)在分录执行查找功能

后(前)激化这个事件,你就可以获取当前行、列、当前查询的资料类型(例如返回4说明是物料)。EnteryCtl对应分录各列,记录每个分录列个属性的数组,在数组属性里面会有物料内码的属性!

2、当TEntryCtl(Col).LookUpCls = 4 为按F7时查询物料 Col为物料在单身对应的列TEntryCtl(Col).DInterID(CurRow)保存的就是物料ID,Col:为物料在单身对应的列,CurRow:分录行号。

【问题28】K/3 BOS单据、序时簿和工业单据、序时簿中分别如何获得当前用户的信息?(比如ID) 【解答】

BOS单据单据和序时簿都能读“当前用户”,方法为:.K3Lib.User.UserID。 工业单据单据目前还不能没有办法实现你的需求,请另想办法。

【问题29】通过工业单据插件怎么获得当前K/3的版本号?工业单据插件是否支持所有账套类型的单据,不区分工业供应链、商业供应链? 【解答】

通过以下代码可以解决: Dim read As Object Dim reg As String Dim result As String

Set read = CreateObject(\

reg = \result = read.RegRead(reg) MsgBox result Set read = Nothing

在ictransactiontype表中管理的单据,都可以应用工业单据插件

【问题30】在工业单据的插件中如何得到单据的FInterID? (工业单据) 【解答】

BillID = m_BillTransfer.SaveVect.Item(1).Value(\

【问题31】在BOSV10.2中,填充新行数据可以用m_BillInterface.InsertNewRowAndFill方法实现,但是在BOSV10.1中不知道用什么方法可以向单据体逐行插入数据?如果单据体中有物料、计量单位等查找类型字段,其赋值是否一样? 【解答】

将10.1的KFO.DLL换成10.2 KFO.DLL,是兼容的

第15页

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

m_BillInterface.Data(\

【问题32】请问10.2的工业老单(非BOS),作k3BillTransfer插件的时候,是否可以在BeforHeadLookUp事件中指定基础资料的过滤条件,如:m_BillTransfer.HeadCtl(CtlIndex).Filter = \。我发现这段代码所指定的过滤条件不起作用。 【解答】

参考以下代码:

Private Sub m_BillTransfer_BeforHeadLookUp(ByVal CtlIndex As Long, ByVal nLookUpClsID As Long, Cancel As Boolean) If nLookUpClsID = 5 Then Dim tHeadCtl As Variant

tHeadCtl = m_BillTransfer.HeadCtl

tHeadCtl(CtlIndex).Filter = tHeadCtl(CtlIndex).Filter & \'m_BillTransfer.HeadCtl(CtlIndex).Filter = \m_BillTransfer.HeadCtl = tHeadCtl End If End Sub

第16页

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

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

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

三、单据定义篇

【问题1】在单据头要设置一个对应物料的销售出库单编号,要由系统自动填写,是不是可以用单据推啊?还有更好的方法吗?客户要求在单据体下面设置运费,整单折扣和总金额(总金额=运费+合计金额*整单折扣),合计金额就是单据体中的合计金额,但是在单据体中不能出现运费项,其中整单折扣是在客户资料有的,由系统自动填写.我们想的是在单据体中先把运费加进去,等保存时就把运费项给隐藏,其中总金额的计算可以用值更新事件做,如何把单据头里的运费和单据体里的运费关联起来?

【解答】

1. 2.

对应物料的销售出库单号应该在选单时由系统填写,可以在单据头设置源单类型、源单编号两个字段,那么在设计流程时,使用勾稽或强制勾稽两种选单关系时,系统将自动填写对应的单据号。 目前还没有在BOS封装的事件中提供单据头和单据体之间进行计算的功能,另外也没有提供合适的将单据体金额字段进行汇总并填写到指定字段的功能(这两个功能都将在V10.3开发阶段完成!),因此,你说的这个功能需要通过插件才能完成。

【问题2】我做的项目中,80%的表单可以通过BOS完成,但有一些表单和报表完全开发,这些表单和报表如何发布到主控台?现在表单上需要加载图形,BOS什么时候能够支持图形? 【解答】

BOS有直接发布到主控台的功能。

近期还没有支持图形的功能规划。在表单上支持图形的计划已列入V10.3预研范围,计划会在V10.3中

第23页

客户化开发技术资料——K/3 BOS开发百问百答 提供预览、缩放、拖动、打印、权限控制等功能。

【问题3】能否对BOS基础资料做过滤,即:在调出基础资料序时簿时,过滤出我需要的基础资料。 【解答】

1、在ICClasstypeentry的FFilter字段增加过虑条件 2、在ICClassTableInfo的FFilter中填写条件。

下例能完成只显示“01”组的物料,FFilter的值应是“x2.FNumber like '01.%'”

SELECT t1.FItemID FROM t_Item t1 with(index (uk_Item2)) LEFT JOIN t_ICItem x2 ON t1.FItemID = x2.FItemID WHERE FItemClassID = 4 AND t1.FDetail=1 AND (x2.FNumber like '01.%') AND t1.FDeleteD=0 ORDER BY t1.FNumber

【问题4】有关多级审核的问题

1. 在对一张单据进行“多级审核流程”配置时,在对每一级审核进行配置时,业务审核

级次、业务审核人、业务审核日期都只能是一样的,这就导致在单据序时薄测试时,启动多级审核后,多级审核中只能有其中某一级的审核人和审核日期有数据,其余审核人和审核日期字段都不能在相应级别审核完毕后记录数据。

2. 在设置多级审核流程后,如果在某一级驳回审核,填写的驳回意见不能看到。 3. 设置多级审核流程后,在单据运行时,“审核”并没有像原有K/3系统中其它单据审核

一样出现在上方菜单下的按钮上,而只能在菜单中启动多级审核。

4. 在多级审核级别之间进行“流转配置”时,只能在中间级别之间进行跳转,如共有5

级审核,想要在某一条件下4级审核完毕后就结束,无法实现,只能在1-5级之间跳转。

5. “流转配置”时,只能增加一次流转配置,即级别之间只能进行一次“添加关系”,

且添加上的关系不能删除。

6. 在设置“流转配置”的“跳转条件”时,字段列表中只有单据的单据头字段,而没有

单据体字段。

7. 最不方便使用的是在单据定义时,一旦添加上字段之后便不能删除,否则便会将单据

上的所有字段全部删除。新增的单据、多级审核流程、单据转换流程保存后也不能删除。在多级审核流程中进行流转配置时添加上的关系不能删除。

8. 在进行“单据转换流程”定义时,不能由源单的单据体下推生成目的单的单据头。

【解答】 1.

答复:每一级审核都已经记录了审核人、审核日期、审核意见,在单据上“多级审核”页可以很清楚的看到。单据序时簿则暂时没有提供查看各级审核人、审核日期、审核意见的功能;这个和多级审核配置中的业务审核人、业务审核日期字段是无关的,业务审核人只在做业务审核的时候才会同时记录,多级审核中有且只有一个级次能作为业务审核级次,所以也只需要一个字段作为业务审核人字段; 2. 3. 4. 5. 6.

答复:已经记录了驳回意见,但暂时没有提供驳回意见的查看。驳回意见会以消息的方式发送出去; 答复:SP2中会进一步简化、优化多级审核,本点在列;

答复:9.30补丁中会增加一种属性,提供给插件判断流程是否已经跳转到结束,让插件有依据进行自动审核等操作,自动结束多级审核流程;

答复:在关闭“启用多级审核”选项并保存后,可以自由添加、删除跳转关系; 答复:暂时没有提供单据体字段;

第24页

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

答复:10.2 SP增加了新功能,单据模版、多级审核配置、单据转换流程、报表等都可以删除; 答复:暂没有提供;

【问题5】开发过程中需要从一张BOS单据下推生成一张K/3老单据,其中要从源单据的一个单据体字段推成目的单据的单据头字段,在你拷贝给我们的文档资料中明确说明不能由单据体推成单据头,所以只能通过插件开发来实现。但是在插件开发中我们发现不能对目的单据即K/3老单据进行定位,所以不知道这个功能能否通过插件开发来实现,如果可以,怎么实现? 【解答】

在BOS单据中增加一个隐藏的字段,单据保存时用插件代码自动把单据体要下推的字段赋值到单据头这个字段中,然后再定义单据头下推到单据头,这样就不用在老单据中定义插件了。

【问题6】在K/3 BOS单据中,有没有属性可以设置某个项目,审核后可修改?有的话怎么做,没有的话是否有什么变通的方法? 【解答】

你可以在使用K3 BOS的审核功能时将需要修改的项目的属性设为不锁定,审核后就可以修改!

【问题7】在BOS单据单据头中加了源单单据类型和源单单号两个字段,单据关联已设置好。(旧)生产任务单生成 BOS制作的委外加工订单(类似于采购订单)。1,选单后,源单单据类型和源单单号两字段中的数据立即变成空,保存后整个字段被隐藏。2,选单后,单据体中的物料编码可以带过来,但物料名称,规格等没有显示出来,保存后名称、规格等基本资料属性显示出来。请问源单单据类型和源单单号这个地方是BOS设计成这样?还是BUG?源单单据类型和源单单号应该像其他单据选单一样,保留在单据上并一直显示。 【解答】

1. 选单后,源单单据类型和源单单号两字段中的数据立即变成空,保存后整个字段被隐藏。源单类型和

源单单号是设置成这样的,有不合理的地方,我们在下个版本将进行调整;

2. 选单后,单据体中的物料编码可以带过来,但物料名称,规格等没有显示出来,保存后名称、规格等

基本资料属性显示出来。选单后的物料名称、规格没有显示出来,是在流程定义过程中没有设置物料代码的值更新事件。

【问题8】多级审核的操作。Bos单据多级审核增加的“启动多级审核”具体完成什么功能?客户对原有的F4 、Shift+F4操作比较习惯,对现有的“启动多级审核”、“多级审核”和“驳回审核”操作有比较大的意见。问能否统一设置为这种审核操作方式? 【解答】

这种问题产品是不好改了,只有让客户适应。

【问题9】K3Bos表体如何设置合计? 【解答】

目前不能在界面上设置合计,(系统对数量和金额默认合计),如需对其他字段设置合计,需更改ICClassTableInfo.FSum的值为1。

第25页

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

【问题10】1、在BOS中,将源单单号(选单)拖入表头,在哪里设置才能可见并选择单据?2、在BOS平台中,我们可以进行单据测试和序时簿测试。请问,我能否用vb程序调起这些单据呢?如何调用?3、我在采购申请单中增加一个插件,希望能够调用我用BOS开发的一张单据。打开这张单据时,在源单单号处将采购申请单单号自动写入,并将一些数据从采购申请单中自动带入。如果申请单已审核,那这张单据将不能修改。如何做到?4、使用BOS平台生成的单据,能否传入一些参数?如果能,怎么传入? 【解答】

可以通过单据流转来解决。

第26页

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

四、其他

【问题1】如何打包应用程序?有一个项目需要发布,如何像开K/3发布补丁一样,自动找到金蝶的安装目录,自动注册组件,在中间层连接帐套,执行SQL语句。是否有类似的InstallShield的脚本参考? 【解答】

请尝试使用BOS里的部署功能(除BOS的插件外,其他客户端和中间层组件也能发布),使用InstallShield比较复杂。《客户化开发知识库v1.0》文档中有使用InstallShield制作安装包的说明。 在最新的BOS V10.2SP中,提供了“一次环境部署,所有客户端自动更新”的功能,即在客户环境中一次部署完毕后,所有客户端登陆中间层时,能自动更新客户端组件,减少了重复安装客户端的工作量。

【问题2】是否可以在相关的基础资料的对象中增加通过名字查询功能。目前的基础资料(部门,人员,物料等)是通过F7查询或者输入代码,但是实际业务中很多情况是输入名字,很多客户已经要求使用名字查询,特别是涉及职员、部门等基础资料,不知道BOS能不能先行一步,改掉k/3的这个习惯?即直接在那个文本框中输入名称,然后自动匹配,就像在文本框中输入代码一样,能够自动找到相应的基础资料。 【解答】

1. 2.

具体功能计划10.3实现。

另外,现在BOS支持汉字的模糊查询,按F8(F9)即可。

【问题3】BOS中相关单据生成BOS安装包后,在新的账套中安装后不能直接在主控台上体现出来,要在新账套中用BOS重新发布才能在主控台上体现。希望能早日完善这功能。 【解答】

在V10.2SP中已解决你说的问题。

【问题4】在10.2产品中对合同进行多级审核,在消息提示中,打开后提示需要BOS加密狗,但数据量只有一条,难道,10.2产品中自带的审批流设置也需要BOS狗吗?

第1页

本文来源:https://www.bwwdw.com/article/jl7g.html

Top