资源描述
1、 如何在工具栏上添加多级审核的按钮?
在m_BillInterface_MenuBarInitialize事件里添加如下代码即可。
Set oTool = m_BillInterface.MenuBar.BOSTools("mnuEditMultiCheck")
With oTool
.Caption = "多级审核"
.ToolTipText = "多级审核"
.Description = "多级审核"
.BeginGroup = False
.ToolPicture = App.Path + "\Checker.bmp"
.SetPicture 0, vbButtonFace
End With
Set oBand = oMenuBar.BOSBands("BandToolBar")
oBand.BOSTools.InsertBefore "mnuFilePrint", oTool '将菜单对象插入指定工具栏
2、 如何在显示一张Bos单据的同时给它赋值?
要想在显示Bos单据的同时给它赋值,关键是在显示前要购建m_Billinterface的data包,这样在显示这张同据的时候,程序会解析data包,并将里面的值赋到单据界面上来。
Dim dctData As kfo.Dictionary
Dim datasrv as object
Dim oTableinfo as object
Set DataSrv = m_BillInterface.K3Lib.CreateK3Object("K3ClassTpl.DataSrv")
DataSrv.ClassTypeID = lClassTypeID 'lClassTypeID 需要弹出单据的ID
Set oTableInfo = DataSrv.TableInfo
Set dctData = DataSrv.GetEmptyBill '然后将当前单据数据包中需要的数据填充到dctdata的对应字段
' 在以上语句执行后,dctdata(“page2”)里只有一行表结构(即表体只有一行)
'赋表头的值
dctData("Page1")(oTableinfo("map")("FText"))("FFLD") = m_BillInterface.GetFieldValue("FText")
dctData("Page1")(oTableinfo("map")("FDeptID"))("FFLD") = m_BillInterface.GetFieldValue("FDeptID", -1, Enu_ValueType_FFLD)
dctData("Page1")(oTableinfo("map")("FDeptID"))("FFND") = m_BillInterface.GetFieldValue("FDeptID", -1, Enu_ValueType_FFND)
dctData("Page1")(oTableinfo("map")("FDeptID"))("FDSP") = m_BillInterface.GetFieldValue("FDeptID", -1, Enu_ValueType_FDSP)
'赋表体的值
Dim oPage2 As Object
For i = 1 To m_BillInterface.Data("Page2").UBound - 1
Set oPage2 = dctData("Page2")(1).CloneAll
dctData("Page2").Add oPage2 '添加到 dcData
dctData("Page2")(i + 1)(oTableinfo("map")("FIndex2"))("FFLD") = i + 1 '更改分录号
Next
For i = 1 To m_BillInterface.Data("Page2").UBound
'物料 FItemID
dctData("Page2")(i)(oTableinfo("map")(" FItemID "))("FFLD") = m_BillInterface.GetFieldValue("FItemID ", i, Enu_ValueType_FFLD)
dctData("Page2")(i)(oTableinfo("map")(" FItemID "))("FDSP") = m_BillInterface.GetFieldValue("FItemID ", i, Enu_ValueType_FDSP)
dctData("Page2")(i)(oTableinfo("map")(" FItemID "))("FFND") = m_BillInterface.GetFieldValue("FItemID ", i, Enu_ValueType_FFND)
'物料名称 fbaseproperty
dctData("page2")(i)(oTableinfo("map")("fbaseproperty"))("FFLD") = m_BillInterface.GetFieldValue("fbaseproperty", i, Enu_ValueType_FFLD)
dctData("Page2")(i)(oTableinfo("map")("fbaseproperty"))("FDSP") = m_BillInterface.GetFieldValue("fbaseproperty", i, Enu_ValueType_FDSP)
dctData("Page2")(i)(oTableinfo("map")("fbaseproperty"))("FFND") = m_BillInterface.GetFieldValue("fbaseproperty", i, Enu_ValueType_FFND)
'计量单位 FUnitID
dctData("Page2")(i)(oTableinfo("map")(" FUnitID "))("FFLD") = m_BillInterface.GetFieldValue("FUnitID ", i, Enu_ValueType_FFLD)
dctData("Page2")(i)(oTableinfo("map")(" FUnitID "))("FDSP") = m_BillInterface.GetFieldValue("FUnitID ", i, Enu_ValueType_FDSP)
dctData("Page2")(i)(oTableinfo("map")(" FUnitID "))("FFND") = m_BillInterface.GetFieldValue("FUnitID ", i, Enu_ValueType_FFND)
'数量 FQty
dctData("Page2")(i)(oTableinfo("map")("FQty"))("FFLD") = m_BillInterface.GetFieldValue("fqty", i, Enu_ValueType_FFLD)
Next
Set obj = CreateObject("K3SingleClassBill.ClassInfoManager")
With obj
.datasrv = datasrv
.ISCheckRight = True
.Show , , , dctData
End With
3、 如何在插件中实现选单的功能?
调用Bos单据
m_BillInterface.BillCtl.DoSelBill lClassTypeID '(原单的ClassTypeID)
调用工业单据
m_BillInterface.BillCtl.DoSelOldBill lClassTypeID '(原单的ClassTypeID)
4、 在插件中以新增、修改和查看方式打开另一单据
'********************************************
'功能:显示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.CreateK/3Object("K3ClassTpl.DataSrv")
oDataSrv.ClassTypeID = lClassTypeID
Set oBill = CreateObject("K3SingleClassBill.ClassInfoManager")
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
Set oBill = Nothing
End Sub
5、 显示BOS序时簿并返回选中的值
'********************************************
'功能:显示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("K3ClassTpl.DataSrv")
oDataSrv.ClassTypeID = lClassTypeID
If oDataSrv.showfilter Then
Set objLookup = CreateObject("K3ClassLookUp.BillLookUp")
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
6、 如何在序事簿中得到选中行的记录集值?
Dim vectSelect as kfo.vector
Dim rs as adodb.recordset
Set vectSelect=m_Listinterface. GetSelectedBillInfo
Set rs=m_Listinterface.datasrv. GetBillDetail(vectSelect(1)("FID"))
7、 将当前单据转化为另一单据,并无界面保存数据
'********************************************
'功能:将当前单据转化为另一单据,并无界面保存数据
'参数:lClassTypeID—显示BOS单据的ID
'********************************************
Private Sub NoUISaveBill(ByVal lClassTypeID As Long)
Dim oDataSrv As Object
Dim oTableInfo As Object
Dim oBill As Object
Dim oData As Object
Dim oSrv As Object
Dim oPage2 As Object
Dim i As Long
On Error GoTo err_ctr
Set oDataSrv = m_BillInterface.K3Lib.CreateK3Object("K3ClassTpl.DataSrv")
oDataSrv.ClassTypeID = lClassTypeID
Set oTableInfo = oDataSrv.TableInfo
Set oData = oDataSrv.GetEmptyBill
For i = 1 To m_BillInterface.Data("Page2").UBound - 1
Set oPage2 = oData("Page2")(1).CloneAll
oData("Page2").Add oPage2 '添加到 dcData
oData("Page2")(i + 1)("_-0001_FIndex2")("FFLD") = i + 1 '更改分录号
Next
For i = 1 To m_BillInterface.Data("Page2").UBound
oData("Page2")(i)(oTableInfo("map")("FItemID"))("FFLD") = m_BillInterface.GetFieldValue("FItemID", i, Enu_ValueType_FFLD)
oData("Page2")(i)(oTableInfo("map")("FItemID"))("FFND") = m_BillInterface.GetFieldValue("FItemID", i, Enu_ValueType_FFND)
oData("Page2")(i)(oTableInfo("map")("FItemID"))("FDSP") = m_BillInterface.GetFieldValue("FItemID", i, Enu_ValueType_FDSP)
Next
Set oSrv = CreateObject("K3MClass.BillUpdate")
i = oSrv.Save(MMTS.PropsString, oDataSrv.ClassType, oDataSrv.ClassTypeEntry, oDataSrv.TableInfo, oData, oDataSrv.dctLink)
Set oDataSrv = Nothing
Set oBill = Nothing
Exit Sub
err_ctr:
MsgBox Err.Description
Set oDataSrv = Nothing
Set oBill = Nothing
End Sub
【备注】
1、K/3 BOS保存方法Save的参数描述:
'Public Function Save(ByVal sDsn As String, _
' ByVal dctClassType As KFO.Dictionary, _
' ByVal vctClassTypeEntry As KFO.Vector, _
' ByVal dctTableinfo As KFO.Dictionary, _
' ByRef dctData As KFO.Dictionary, _
' ByVal dctLinks As KFO.Dictionary) As Long
'/********************************************************************/
'/*描述:单据保存
'/*参数:
'/*@ dctClassType KFO.Dictionary 单据整体信息模板
'/*@ dctData KFO.Dictionary 单据数据包
'/*@ dctLink KFO.Dictionary 选单关系模板,无选单为Nothing
'/*@ dctTableInfo KFO.Dictionary 单据字段模板信息
'/*@ sDsn String K/3标准数据库连接串
'/*@ vctClassTypeEntry KFO.Vector 单据体模板信息
'/*备注:
'/********************************************************************/
2、使用此方法时插件要添加MMTS。
8、 如何在插件中获取当前系统字符连接串?
一、连接串获取方式:(注意不支持调试,调试的话可以用实际连接串代替)
Private Declare Function GetCurrentProcessId Lib "kernel32" Alias "GetCurrentProcessID" () As Long
'获取连接串
Public Function GetPropsString() As String
Dim lProc As Long
Dim spmMgr As Object
lProc = GetCurrentProcessId
Set spmMgr = CreateObject("PropsMgr.ShareProps")
GetPropsString = spmMgr.GetProperty(lProc, "PropsString")
End Function
二、 需要申请MMTS.bas的源代码,还需要申请ICKDListener的接口。另外,如果需要调试程序,就还需要申请KDMain的源代码。
展开阅读全文