开发环境:K/3 Wise 13.0、K/3 Bos开发平台、Visual Basic 6.0

===============================================

目录

一、二次开发插件编程
二、代码演示
三、配置插件
四、测试插件

五、插件配置后未生效
六、附SQLHelper

七、K3自带连接数据库的写法

八、源码下载

===============================================

一、二次开发插件编程

  打开Visual Basic 6.0,新建工程ActiveX DLL:

  

  命名为FirstPlugin.class:

  

  引用类库如下:

  

  已安装K/3 Wise,在VB 6.0菜单栏上会多出一个金蝶开发插件:

  

  打开金蝶开发向导,创建工业单据客户端插件(工业单据俗称“老单”):

  

  点击“确定”,选择类“FirstPlugin”:

  

  点击“下一步”,这里我们自定义一个菜单项“插件工具”:

  

  点击“下一步”,选择事件“UserMenuClick”:

  

  完成向导。

二、代码演示

  代码编写如下:

'配置路径:供应链-外购入库单
'函数功能:插件工具--根据“长、宽、厚”自动计算批号
'定义插件对象接口. 必须具有的声明, 以此来获得事件
Private WithEvents m_BillTransfer As K3BillTransfer.Bill
Dim F55 As Long, F55Text As String '长
Dim F56 As Long, F56Text As String '宽
Dim F57 As Long, F57Text As String '高
Dim FDate As Long, FDateText As String '日期
Dim FBatchNo As String '批号
Dim FItemID As Long, FNumber As String '物料编码
Dim FBatchManager As Boolean '是否采用业务批号管理
Dim str As String
Dim RowCount As Integer Public Sub Show(ByVal oBillTransfer As Object) '接口实现
'注意: 此方法必须存在, 请勿修改
Set m_BillTransfer = oBillTransfer End Sub Private Sub Class_Terminate() '释放接口对象
'注意: 此方法必须存在, 请勿修改
Set m_BillTransfer = Nothing End Sub Private Sub m_BillTransfer_BillInitialize() '*************** 开始设置菜单 *************** m_BillTransfer.AddUserMenuItem "自动批号", "插件工具" '*************** 结束设置菜单 *************** 'TODO: 请在此处添加代码响应事件 BillInitialize, 下面True是表体,False是表头
F55 = GetCtlIndexByFld("FEntrySelfA0155", True)
F56 = GetCtlIndexByFld("FEntrySelfA0156", True)
F57 = GetCtlIndexByFld("FEntrySelfA0157", True)
FBatchNo = GetCtlIndexByFld("FBatchNo", True)
FDate = GetCtlIndexByFld("FDate", False)
FItemID = GetCtlIndexByFld("FItemID", True)
End Sub Private Sub m_BillTransfer_UserMenuClick(ByVal Index As Long, ByVal Caption As String)
'TODO: 请在此处添加代码响应事件 UserMenuClick Select Case Caption
Case "自动批号"
RowCount = m_BillTransfer.BillForm.get_MaxEntry
'此处添加处理 批号生成 菜单对象的 Click 事件
With m_BillTransfer For i = To RowCount
If .GetGridText(i, FItemID) = "" Then
Exit For
End If
'从物料表检测 是否采用业务批次管理
Dim strSQL As String '用于执行SQL
Dim rs As ADODB.Recordset
FNumber = ""
FNumber = .GetGridText(i, FItemID)
strSQL = ""
strSQL = "SELECT FBatchManager FROM t_ICItem WHERE FNumber='" & FNumber & "'"
Set rs = SQLHelper.ExecuteSQL(strSQL, "")
If rs.EOF = False Then
FBatchManager = rs.Fields("FBatchManager")
End If
Set rs = Nothing
F55Text = .GetGridText(i, F55)
F56Text = .GetGridText(i, F56)
F57Text = .GetGridText(i, F57)
If F55Text = "" Then F55Text = ""
If F56Text = "" Then F56Text = ""
If F57Text = "" Then F57Text = ""
FDateText = Replace(.GetHeadText(FDate), "-", "")
If (FBatchManager = True) Then
.SetGridText i, FBatchNo, F55Text & "-" & F56Text & "-" & F57Text & "-" & FDateText
End If
Next
End With
Case Else
End Select End Sub '**********************************
'返回单据字段顺序(isEntry True是表体)
'**********************************
Public Function GetCtlIndexByFld(ByVal fldName As String, Optional ByVal isEntry As Boolean = False) As Long
Dim ctlIdx As Long
Dim i As Integer
Dim isFind As Boolean
Dim vValue As Variant
fldName = UCase(fldName)
isFind = False
With m_BillTransfer
If isEntry Then
For i = LBound(.EntryCtl) To UBound(.EntryCtl)
If UCase(.EntryCtl(i).FieldName) = fldName Then
ctlIdx = .EntryCtl(i).FCtlOrder
isFind = True
Exit For
End If
Next i
Else
For i = LBound(.HeadCtl) To UBound(.HeadCtl)
If UCase(.HeadCtl(i).FieldName) = fldName Then
ctlIdx = .HeadCtl(i).FCtlIndex
isFind = True
Exit For
End If
Next i
End If
End With
If isFind = True Then
GetCtlIndexByFld = ctlIdx
Else
GetCtlIndexByFld =
End If
End Function

三、配置插件

  在Visual Basic 6.0生成DLL:

  

  启动K/3 Wise BOS开发平台,打开外购入库单,并进行插件配置:

  

  点击“插件配置管理”,配置客户端插件:

  

  点击“浏览”,找到插件并勾选:

  

  点击“确定”,并保存外购入库单。

四、测试插件

  启动K/3 Wise,打开“供应链-仓存管理-外购入库单-新增”:

    

  至此,插件开发和配置完成!

五、插件配置后未生效

1.在插件配置管理提示“没有找到文件,或文件没有正确注册”

解决方法:插件dll名称命名要和工程名称一致。

比如工程名称“aaaa”,其中有一个类“bbb”,dll命名为“aaa”,

配置插件后,显示完整名称“aaa.bbb”,提示aaaa“没有找到文件,或文件没有正确注册”。

修改dll名称“aaa”为“aaaa”,重新配置插件,即可修复问题。

六、附SqlHelper源码:

Attribute VB_Name = "SQLHelper"
'Public Function Conn() As ADODB.Connection
' Set Conn = New ADODB.Connection
' Conn.Open = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=AIS20140411200431;Data Source=."
'End Function Public Function ConnectString() As String
'ConnectString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=AIS20140411200431;Data Source=."
ConnectString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;password=Ab123456;Initial Catalog=AIS20140508100349;Data Source=KDSERVER"
End Function '传递参数SQL传递查询语句,MsgString传递查询信息。自身以一个数据集对象的形式返回
Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset
Dim Cnn As ADODB.Connection '定义连接
Dim Rst As ADODB.Recordset
Dim sTokens() As String '定义字符串 On Error GoTo ExecuteSQL_Error '异常处理 sTokens = Split(SQL) '用Split函数产生一个包含各个子串的数组 Set Cnn = New ADODB.Connection '创建连接
Cnn.Open ConnectString If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens())) Then '判断字符串中是否含有指定内容
Cnn.Execute SQL '执行查询语句
MsgString = sTokens() & "query successful" '返回查询信息
Else
Set Rst = New ADODB.Recordset '闯将数据集对象
Rst.Open Trim$(SQL), Cnn, adOpenKeyset, adLockOptimistic '返回查询结果
Set ExecuteSQL = Rst '返回记录集对象
MsgString = "查询到" & Rst.RecordCount & " 条记录"
End If ExecuteSQL_Exit: Set Rst = Nothing '清空数据集对象
Set Cnn = Nothing '中断连接
Exit Function ExecuteSQL_Error: '判断错误类型 MsgString = "查询错误:" & Err.Description
MsgBox MsgString
Resume ExecuteSQL_Exit End Function

 七、K3自带连接数据库的写法

'定义插件对象接口. 必须具有的声明, 以此来获得事件
Private WithEvents m_BillTransfer As k3BillTransfer.Bill
Private conn As New ADODB.Connection
Dim FEntrySelfS0170 As Long '库存量
Dim FItemID As Long '物料ID
Dim FItemIDText As String '物料ID取值:结果取到物料代码 Public Sub Show(ByVal oBillTransfer As Object) '接口实现
'注意: 此方法必须存在, 请勿修改
Set m_BillTransfer = oBillTransfer conn.ConnectionString = m_BillTransfer.Cnnstring
conn.Open
End Sub Private Sub Class_Terminate() '释放接口对象
'注意: 此方法必须存在, 请勿修改
Set m_BillTransfer = Nothing End Sub Private Sub m_BillTransfer_BillInitialize() 'TODO: 请在此处添加代码响应事件 BillInitialize
FEntrySelfS0170 = GetCtlIndexByFld("FEntrySelfS0170", True)
FItemID = GetCtlIndexByFld("FItemID", True)
End Sub Private Sub m_BillTransfer_GridChange(ByVal Col As Long, ByVal Row As Long, ByVal Value As Variant, ByVal bNewBill As Boolean, Cancel As Boolean) 'TODO: 请在此处添加代码响应事件 GridChange
Dim strSQL As String '用于执行SQL
Dim rs As New ADODB.Recordset
rs.CursorLocation = adUseClient
Dim strXSZDL As Long '销售在订量临时赋值变量
With m_BillTransfer
If Col = FItemID Then
FItemIDText = .GetGridText(Row, FItemID) '取到物料代码FNumber
strSQL = ""
strSQL = "select t1.fitemid,t2.FQty " & _
"from t_ICItem t1 " & _
"left join ICInventory t2 on t1.FItemID =t2.FItemID " & _
"where t1.FNumber='" & FItemIDText & "' " If rs.State = adStateOpen Then
rs.Close
End If
rs.Open strSQL, conn, adOpenStatic, adLockBatchOptimistic If rs.RecordCount > 0 Then
strXSZDL = rs("FQty").Value
.SetGridText Row, FEntrySelfS0170, strXSZDL
End If
End If
End With
Set rs = Nothing
Exit Sub End Sub '**********************************
'返回单据字段顺序(isEntry True是表体)
'**********************************
Public Function GetCtlIndexByFld(ByVal fldName As String, Optional ByVal isEntry As Boolean = False) As Long
Dim ctlIdx As Long
Dim i As Integer
Dim isFind As Boolean
Dim vValue As Variant
fldName = UCase(fldName)
isFind = False
With m_BillTransfer
If isEntry Then
For i = LBound(.EntryCtl) To UBound(.EntryCtl)
If UCase(.EntryCtl(i).FieldName) = fldName Then
ctlIdx = .EntryCtl(i).FCtlOrder
isFind = True
Exit For
End If
Next i
Else
For i = LBound(.HeadCtl) To UBound(.HeadCtl)
If UCase(.HeadCtl(i).FieldName) = fldName Then
ctlIdx = .HeadCtl(i).FCtlIndex
isFind = True
Exit For
End If
Next i
End If
End With
If isFind = True Then
GetCtlIndexByFld = ctlIdx
Else
GetCtlIndexByFld =
End If
End Function

八、源码下载

源码下载链接

四、K3 WISE 开发插件《工业单据老单插件开发新手指导》的更多相关文章

  1. 八、K3 WISE 开发插件《工业单据老单插件中获取登陆用户名》

    备注:如果是BOS新单,都有获取用户名的方法.在单据有m_BillInterface.K3Lib.User.UserId,在序时薄有m_ListInterface.K3Lib.User.UserID ...

  2. 十二、K3 WISE 开发插件《工业单据老单与自己添加的窗体 - 互相传值传参》

    ===================================== 目录: 1.演示效果--[销售订单]传值给[自定义窗体] 2.演示效果--[自定义窗体]传值给[销售订单] 3.附源码 4. ...

  3. 九、K3 WISE 开发插件《工业单据老单序时薄插件工具栏按钮开发实例》

    =============================== 目录: 1.添加工具栏按钮 2.查询被添加工具栏按钮的业务单据的FMenuID和FID 3.添加工具栏按钮和业务单据的映射关系 4.工具 ...

  4. 十、K3 WISE 开发插件《SQL Profiler跟踪单据操作时产生的SQL语句》

    =================================== 目录: 1.查询帐套的数据库DBID 2.配置需要跟踪数据库的DBID 3.配置跟踪参数 4.跟踪进行 5.分析跟踪语句 === ...

  5. K3 WISE 开发插件《K3 WISE常用数据表整理》

    在后台数据库ICClassType表中,字段FID<0的是老单,FID>0的是新单. ----------------系统设置------------------------ FStatu ...

  6. 一、K3 WISE 开发插件《K3 WISE常用数据表整理》

    在后台数据库ICClassType表中,字段FID<0的是老单,FID>0的是新单. ----------------系统设置------------------------FStatus ...

  7. 三、K3 WISE 开发插件《K3 WISE开发手册》

    1.VB插件工程的命名.命名空间和生成的DLL命名要一致,否则导致注册不成功! 2.主控台的查询分析工具,添加sql直接报表,代码用到临时表,提示“在对应所需名称或序数的集合中未找到项目” 解决:在代 ...

  8. 二、K3 WISE 开发插件《 工业单据老单客户端插件事件、属性、方法》

    ===================== 目录: 1.插件事件说明如下 2.插件属性说明如下 3.插件方法说明如下 ===================== 1.插件事件说明如下:  序号 事   ...

  9. 十一、K3 WISE 开发插件《VB插件开发如何代码调试 - 步骤讲解》

    =================================== 目录: 1.配置代码调试启动程序kdmain.exe 2.设置断点 3.触发调试 4.变量跟踪 ================ ...

随机推荐

  1. FunGene 功能基因数据库

    背景:16SrRNA 基因通常作为分子标记进行微生物群落结构的研究,但是它有一些明显的限制,比如16S rRNA基因在物种中会有多个拷贝,而且,由于16S rRNA基因的进化速率较慢,在物种间保守,会 ...

  2. perl 截取 fastq文件

    #!/usr/bin/perl -w use warnings; use strict; input_fastq trim_length}; ; my ($fastq, $trim_length) = ...

  3. C# 通过调用Win32 API函数清除浏览器缓存和cookie

    public enum ShowCommands : int { SW_HIDE = , SW_SHOWNOrmAL = , SW_NOrmAL = , SW_SHOWMINIMIZED = , SW ...

  4. spark LinearRegression 预测缺失字段的值

    最近在做金融科技建模的时候,字段里面很多缺少值得时候,模型对于新用户的预测会出现很大的不稳定,即PSI较大的情况. 虽然我们依据字段IV值得大小不断的在调整字段且开发新变量,但是很多IV值很大的字段直 ...

  5. [Learn AF3]第三章 App Framework 3组件之Panel:afui的核心

    Panel,afui的核心组件 组件名称:Panel     使用说明:按照官方的说法,panel组件是af3的“核心(heart of the ui)”,panel用于构造应用中独立的内容展示区域, ...

  6. Thinkphp5笔记七:设置错误页面②

    更加完美的去设置错误页面. 一.准备一个错误页面 error.html,位置:thinkphp\template\index\default\error.html ,准备把前段所有的错误提示都指向这里 ...

  7. Android Studio INSTALL_FAILED_UID_CHANGED的解决办法

    使用Android Studio开发Android应用,把Android应用调试安装在手机上时,出现了安装失败的提示:INSTALL_FAILED_UID_CHANGED. 上网找了很多资料: 1.说 ...

  8. Blender 移动、旋转、缩放

    1.手动调整物体的属性 当我们添加了一个物体后,例如一个Torus物体. 在左侧下角部分能看到“Add Torus”面板,面板包含了Locatin.Rotation.Major Segments.Mi ...

  9. 小波变换——子带编码,Subband Coding

    离散小波变换.多级信号分解,多分辨率分析. Multiresolution Analysis(MRA.多分辨率分析) 子带编码(Subband Coding) 简称SBC. 一种以信号频谱为依据的编码 ...

  10. phpcms列表页调用 点击量

    很多朋友经常问Phpcms v9的首页.列表页.内容页点击量如何调用.现在就给大家分享phpcms V9如何分别在首页.列表页.内容页调用点击量代码: 1. Phpcms v9首页调用点击量{pc:c ...