文档库 最新最全的文档下载
当前位置:文档库 › k3二次开发

k3二次开发

1、单据头字段赋值
m_BillTransfer.SetHead Index, Value
备注: Index:表头控件索引
Value:设置的值。如果该表头项是查找类型的,Value 应设置为代码。

2、单据体赋值
m_BillTransfer.SetGridText Row, Col, Value
备注: Row:分录行
Col:分录列
Value:设置的值。如果该单元格是查找类型的,Value 应设置为代码。

3、单据体合计字段赋值
m_BillTransfer.SetSumGridText Row, Col, Value
备注: Row:分录行
Col:分录列
Value:设置的值

4、给查找类型字段(基础资料)赋值
用SetGridText直接赋值一般情况下也可以,但有时会导致显示异常,建议使用下面的方法。以给物料字段赋值为例,参考以下代码:
Dim EntryCtl As Variant
EntryCtl = m_BillTransfer.EntryCtl
EntryCtl(ItemCol).DInterID(i) = rs.Fields("FItemID").Value & ""
EntryCtl(ItemCol).DNumber(i) = rs.Fields("FNumber").Value & ""
EntryCtl(ItemCol).DName(i) = rs.Fields("FName").Value & ""
m_BillTransfer.EntryCtl = EntryCtl
m_BillTransfer.SetGridText i, ItemCol, rs.Fields("FNumber").Value & ""

5、单据头字段,在查找时改变其Filter 属性值
Private Sub m_BillTransfer_BeforHeadLookUp(ByVal CtlIndex As Long, ByVal nLookUpClsID As Long, Cancel As Boolean)
Dim THeadCtl As Variant
Dim i As Long
If CtlIndex = 4 Then
THeadCtl = m_BillTransfer.HeadCtl
THeadCtl(CtlIndex).Filter = Replace(THeadCtl(CtlIndex).Filter, 986=986”, “986<>986”)
m_BillTransfer.HeadCtl = THeadCtl‘
End If
End Sub

6、改变辅助属性的值
Set tmpItemInfo = New KFO.Dictionary
tmpItemInfo("Name") = "黄色"'辅助属性名称
tmpItemInfo("Number") = "YELLOW"'辅助属性代码
tmpItemInfo("Value") = "2"'辅助属性内码
m_BillTransfer.BillForm.SetBillDataInput tmpItemInfo,"FAuxPropID", 1, 1
Set tmpItemInfo = Nothing
备注:
在插件中改变辅助属性的值,对表体的赋值有的不能按照m_BillTransfer.SetGridText的形式修改,一定要调用m_BillTransfer.BillForm.SetBillDataInput方式才可以真正修改,SetBillDataInput 辅助属性包,字段名,单据体(0:单据头;1:单据体),行号。

7、单据体多行数据赋值
For i = 1 To rs.RecordCount
m_BillTransfer.SetGridText i, 3, CStr(rs.Fields.Item(0).Value) '物料代码
m_BillTransfer.SetGridText i, 8, CStr(rs.Fields.Item(1).Value) '批号
m_BillTransfer.SetGridText i, 17, rs.Fields.Item(2).Value '实发数量
'超过两行以上的值,需要用
m_BillTransfer.BillForm.insertrow
rs.MoveNext
Next
备注:
m_BillTransfer.BillForm.vsEntrys.InsertRows 2, 1 "在第2行后插入1行 m_BillTransfer.BillForm.CopyRow 2, 3 "把第2行数据复制到第3行
m_BillTransfer.BillForm.DelRow 3"删除第3行

回复K或K3,查看更多金蝶二次开发解决方案...


可以参考以下脚本将按钮加外购入库单的序事簿上:
/*-------------------------------------
按钮NAME:外购入库单
按钮ID:10002
生产任务单ID

:36 FmenuID=90

--如在外购入库序时簿增加按钮,则找到外购入库的menuID
select FID,FmenuID,* from iclisttemplate where Fname LIKE '%外购入库%'
--(FID=1,FmenuID=82)

*/-------------------------------------

select * from t_MenuToolBar

select * from ictransactiontype

--增加元数据按钮
Delete From t_MenuToolBar Where FToolID = 10002
insert into t_MenuToolBar ( FToolID,FName,FCaption,FCaption_CHT,FCaption_EN,FImageName,FToolTip,FToolTip_CHT,FToolTip_EN,FControlType,FVisible,FEnable,FChecked,FShortCut,FCBList,FCBList_CHT,FCBList_EN,FCBStyle,FCBWidth,FIndex,FToolCaption,FToolCaption_CHT,FToolCaption_EN)
values (10002,'FMenuPC1','任务单ID','任务单ID','任务单ID','39','任务单ID','任务单ID','任务单ID',0,0,1,0,0,'','','',0,0,0,'任务单ID','任务单ID','任务单ID')

--将上面的按钮插入到工具栏和菜单栏
select * from t_BandToolMapping where fid=90
Delete From t_BandToolMapping where FBandID=18 and FToolID = 10002 and FID = 82
insert into t_BandToolMapping (FID,FBandID,FToolID,FSubBandID,FIndex,FComName,FBeginGroup)
values (82,18,10002,0,65,'|ICMOListBill.ListBill',0)

Delete From t_BandToolMapping where FBandID=52 and FToolID = 10002 and FID = 82
insert into t_BandToolMapping (FID,FBandID,FToolID,FSubBandID,FIndex,FComName,FBeginGroup)
values (82,52,10002,0,65,'|ICMOListBill.ListBill',0)

--在外购入库序时薄显示按钮(如果里面有"|V",则只能在后面加菜单项)
Update IclistTemplate
set FLogicStr=FLogicStr+ Case When Right(FLogicStr,1)='|' then 'V:FMenuPC1' else '|V:FMenuPC1' end
where FID =1 and not FLogicStr like '%FMenuPC1%'
然后创建DLL工程,工程名为ICMOListBill,类名为ListBill,在类ListBill添加如下代码:
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long

Public Sub MainFunction(ByVal sKey As String, oList As Object, ByRef bCancel As Boolean)
Dim cnn As String
Dim strSql As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

Dim oDataSrv As Object
Dim oBill As Object

If sKey = "FMenuPC1" Then
'得到连接串
cnn = Left(GetConn, InStr(1, GetConn, "}") - 1)
cnn = Mid(cnn, 16)

Set cn = New ADODB.Connection
With cn
.ConnectionString = cnn
.Open
End With


strSql = "select FSourceInterid from icstockbillentry where finterid=" & oList.ListSelectBillinfo(1)("FInterID") & " and fentryid=" & oList.ListSelectBillinfo(1)("FEntryid")
Set rs = cn.Execute(strSql)

If Not rs.EOF Then
Set oDataSrv = CreateObject("K3ClassTpl.DataSrv")
oDataSrv.ClassTypeID = 288888808

Set oBill = CreateObject("K3SingleClassBill.ClassInfoManager")
With oBill
.DataSrv = oDataSrv
.ISNetControl = True
.ISCheckRight = True
.Show rs("FSourceInterid"), , 0
'**********************
'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

End If

Set rs = Nothing
Set cn = Nothing


End If
End Sub

Private Function GetConn() As String
Dim lProc As Long
lProc = GetCurrentProcessId()
Set spmMgr = CreateObject("PropsMgr.ShareProps")

If IsObject(spmMgr.GetProperty(lProc, "PropsString")) Then
GetConn = spmMgr.GetProperty(lProc, "PropsString")
Else
GetConn = spmMgr.GetProperty(lProc, "PropsString")
End If

Set spmMgr = Nothing
Exit Function
End Function

相关文档