二开DEMO:如何将替代关系引入到另外一个账套?

栏目:k3wise知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

二开DEMO:如何将替代关系引入到另外一个账套?

参考文档:K3Wise如何添加一个新功能(二)--嵌入到k3主控台应用程序 https://wenku.my7c.com/link/s/M97oC

对参考文档中的工程改造,为他添加一个引入的功能;

一些必要的准备工作:

1.由于该功能是嵌入到k3主控台里,没有k3主控台代码调试就会很麻烦。因此再开发阶段先修改工程类型为standard exe,startup object为Sub Main;

image.webp

然后再工程中添加一个Module,并添加代码

Public Sub Main()

    Dim frm As New frmMain

    If MMTS.CheckMts(1) Then

        frm.Show

    End If

End Sub

模拟一次登陆,这样需要的连接串会到缓存池中;(工程涉及的代码会放在附件中)

2.再MMTSmodule的函数CheckMts中需要将SUBID设置为super,避免登陆失败。

现在看需求:将当前账套A里的替代关系引入到另外一个账套B?(场景为B是一个新账套,基础资料、bom、都已经导入过来了,但是K3没有提供替代关系引入功能

设计思路:2个账套均是K3账套,物理表结构完全一致,只有物料、bom、制单人、等需要F7的字段需要做内码转化

比如物料1.01再A账套中内码是1000,再B账套中内码是1001,因此传递给B账套数据时,这个记录就应该传1001.

物料替代关系属于BOS单据(FID>0就是bos单)有两种方案:

1是直接sqlserver脚本转内码插入再一个查询分析器里用账套名.dbo.物理表的方式来处理数据(这种方法本文不介绍)

image.webp

2.通过k3提供的标准组件来处理。

image.webp

利用bos自带的功能的好处就是他能够触发保存后的中间层事件。并且他的扩展性比较强,用此方法可以完成其他类型的bos单迁移。

BOS单据保存的核心代码如下:

Set oSrv = CreateObject("K3MClass.BillUpdate")

i = oSrv.Save(sDsn, oDataSrv.ClassType, oDataSrv.ClassTypeEntry, oTableInfo, oBillData, dctLinks)

sDsn 账套连接串

ClassType 单据类型对象

ClassTypeEntry 单据类型明细对象

oTableInfo 单据字段描述

oBillData 具体某张单据的明细数据

dctLinks 选单数据(物料替代关系无选单关系,直接传递null即可)

如何构建oBillData?

假如有个单据SubsItem000030(演示账套),内码是1007

image.webp

再本账套中构建数据包的方法

Set oDataSrv = CreateObject("K3ClassTpl.DataSrv")

    oDataSrv.ClassTypeID = lClassTypeID

    Set oTableInfo = oDataSrv.TableInfo

    Set oBillData = oDataSrv.LoadBill("1007") '演示账套中1007有配置bom

只需要4句代码,非常方便,数据包就构建完成了

然后就是需要将数据包中的各种数据ID转化为另外一个账套中的ID

然后利用oSrv.Save保存即可(sDsn为账套B的连接串)。

建立工程UserMPrj中间层组件

image.webp

image.webp

image.webp

将来部署的时候需要部署到中间层com+中去。因为这里涉及到很多中间层的查询,为减少远程调用函数,因此做成中间层组件。

image.webp此函数的核心是将遍历数据数据包中每一个字段,如果这个字段需要转化成另外一个账套中的ID则进行一次数据检查并做一次ID转化。将A账套ID直接修改为B账套的ID;代码中仅处理的表体的物料字段(请二开人员自行完善。比如制单人id、审核人id、单据等。根据实际情况来补充)。


再转化代码中需要注意的地方是,需要清空包里的单据内码以及分录内码、和分录父项内码、这样才能保存保存时被认定为是新记录,我在demo代码中已经进行了标注。否则会导致保存失败(数据异常)。


由于物料替代关系的特殊性,他的适用范围物理表 ICSubsItem_Conditions并没有体现再bos单模板里,因此单据保存完后还需要对这部分数据进行处理。

image.webp


核心部分完成之后,那就是遍历当前账套的所有替代关系单据,将单据一张一张的传递到另外一个账套里了。(demo里没有这部分内容,请自行开发)

注意交互界面要加上进度条,避免用户无法得知当前进去失去耐心,以及传递日志记录展示。


完。

UsrPrj2.rar

二开DEMO:如何将替代关系引入到另外一个账套?

参考文档:K3Wise如何添加一个新功能(二)--嵌入到k3主控台应用程序 https://wenku.my7c.com/link/s/M97oC 对参考文档中的工程改造,为他添...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息