案例:采购订单增加字段记录物料录单时的规格型号,保存后基础资料修改了规格型号也不会改变单据上的这个字段。
1.单据自定义工具中添加一个分录字段,定义为手工录入的:
保存模板后台查到自己添加到的字段的关键字
select * from ICTransactionType where FName ='采购订单' --查出来FID71,TemplateIDP02
select * from ICTemplateEntry where FID = 'P02' 查看表体模板FFieldName
物料字段是FitemID,规则型号是FItemModel,自定义字段是FEntrySelfP0272
2.注册单据插件:
insert into t_ThirdPartyComponent(FTypeID,FTypeDetailID,FIndex,FComponentName) values(0,71,1,'UserBillPrj.CBill71')
Go
FTypeID :0 表示客户端单据插件
FTypeDetailID:71 单据类型
FIndex:顺序,随意填不要和本单据类型已存在的插件重复,一个单据存在多个插件时,是从小到大依次执行;
FComponentName:UserBillPrj.CBill71是自己开发的vb组件类 【组件名称.类名】
3.代码开发:
工程需要引用一下几个动态库k3billtransfer(必须),
kingdee foundation object 1.0,如果要用到kfo.dictionary对象
jxc function v2.0\microsoft activex dataobject 2.x library 如果用到数据库交互
一:注册插件事件对象m_billtransfer.单据插件必须显示实现Show方法:
代码解析:m_lngtranstype = xxx 这段是获取当前单据的类型,
所有单据插件中都必须区分单据类型,避免不同类型单据公用插件时执行业务逻辑交叉了。
再Show的过程中先把需要用到的字段位置号查出来,show方法只会再单据界面打开时加载一次;
实现插件的表体值更新事件:GridChange
当前需求要把录入物料之后默认的规格型号字段的数据填到自定义字段上去:
strModel = m_billtransfter.GetGridText(Row,lngModelPlace)获取界面上规格型号字段
设置到自定义的字段上
m_billtransfter.setGridText row,lngUserFieldPlace,strModel
截图中该函数后半段代码是演示sql交互的代码,与实际需求无关:
要获取单据表体某个核算项目字段的内码需要用DInterID(Row)来取,用GetGridText只能提取到当前界面的文本值,有可能是编码或者是名称;
sql交互,直接使用ExecuteSql函数即可;
备注:如果代码中存在sql交互则不能直接调试(因为二开时没有kdmain工程代码,会导致调试时sql交互的时候连接串异常),可以使用写日志到本地文本或者直接msgbox抛出来,来跟踪代码;
编译工程,将组件放到k3erp目录下,然后用regsvr32命令注册;
完