金蝶VB插件--单据保存前检查
金蝶VB插件--单据保存前检查
vb代码
引用k3classEvents
'-----以下是代码
'实现一个很简单的功能
'--单据体分录[FBase字段]不能重复
'--在保存前判断
'--假设你已经会基础资料,单据界面的拖放,偶的开发环境是k3 12.1 标准版
'以下是代码
'--创建Active dll 工程
'--为了能调试代码
'--Project-->---Debugging-->--[Start Program]-->--里面选择kdMain.exe
Private WithEvents m_BillInterface As BillEvent
Const m_Module As String = "k3Test.clsTest_Bill"
Public Sub Show(obj As Object)
On Error GoTo ErrHandler
Set m_BillInterface = obj
Exit Sub
ErrHandler:
MsgBox Err.Number & vbCrLf & Err.Description & vbCrLf & m_Module & "_show"
End Sub
'--释放资源
Private Sub Class_Terminate()
Set m_BillInterface = Nothing
End Sub
'--单据保存前,校验单据体数据是否存在重复
Private Sub m_BillInterface_BeforeSave(bCancel As Boolean)
On Error GoTo ErrHandler
'--保存之前的事件
'单据体不允许有重复的记录
Dim iRow, iIndex, iTotalRow As Long
iTotalRow = m_BillInterface.BillEntrys(1).GridMaxDataRowNum
For iRow = iTotalRow To 1 Step -1 '从末尾开始删除数据
If Val(m_BillInterface.GetFieldValue("FBase", iRow)) = 0 Then '单据体有空白分录先清除
m_BillInterface.RemoveRow True, 2, iRow
End If
Next
iTotalRow = m_BillInterface.BillEntrys(1).GridMaxDataRowNum '重新获得单据体最大分录行数
For iRow = 1 To iTotalRow
For iIndex = iRow + 1 To iTotalRow
If Val(m_BillInterface.GetFieldValue("FBase", iRow)) = Val(m_BillInterface.GetFieldValue("FBase", iIndex)) Then '--如果检测到相同的记录,提示,不允许保存
MsgBox "单据体第" & iRow & "行和第" & iIndex & "行相同,不允许保存!", vbCritical, "错误"
Call m_BillInterface.SetActiveCell("FBase", iIndex) '--重复行设置焦点
bCancel = True '--不允许保存
Exit For
End If
Next
Next
Exit Sub
ErrHandler:
MsgBox Err.Number & vbCrLf & Err.Description & vbCrLf & m_Module & "_BeforeSave"
'--如果是中间层,使用 Err.Raise
End Sub
'-----以下是代码
'实现一个很简单的功能
'--单据体分录[FBase字段]不能重复
'--在保存前判断
'--假设你已经会基础资料,单据界面的拖放,偶的开发环境是k3 12.1 标准版
'以下是代码
'--创建Active dll 工程
'--为了能调试代码
'--Project-->---Debugging-->--[Start Program]-->--里面选择kdMain.exe
Private WithEvents m_BillInterface As BillEvent
Const m_Module As String = "k3Test.clsTest_Bill"
Public Sub Show(obj As Object)
On Error GoTo ErrHandler
Set m_BillInterface = obj
Exit Sub
ErrHandler:
MsgBox Err.Number & vbCrLf & Err.Description & vbCrLf & m_Module & "_show"
End Sub
'--释放资源
Private Sub Class_Terminate()
Set m_BillInterface = Nothing
End Sub
'--单据保存前,校验单据体数据是否存在重复
Private Sub m_BillInterface_BeforeSave(bCancel As Boolean)
On Error GoTo ErrHandler
'--保存之前的事件
'单据体不允许有重复的记录
Dim iRow, iIndex, iTotalRow As Long
iTotalRow = m_BillInterface.BillEntrys(1).GridMaxDataRowNum
For iRow = iTotalRow To 1 Step -1 '从末尾开始删除数据
If Val(m_BillInterface.GetFieldValue("FBase", iRow)) = 0 Then '单据体有空白分录先清除
m_BillInterface.RemoveRow True, 2, iRow
End If
Next
iTotalRow = m_BillInterface.BillEntrys(1).GridMaxDataRowNum '重新获得单据体最大分录行数
For iRow = 1 To iTotalRow
For iIndex = iRow + 1 To iTotalRow
If Val(m_BillInterface.GetFieldValue("FBase", iRow)) = Val(m_BillInterface.GetFieldValue("FBase", iIndex)) Then '--如果检测到相同的记录,提示,不允许保存
MsgBox "单据体第" & iRow & "行和第" & iIndex & "行相同,不允许保存!", vbCritical, "错误"
Call m_BillInterface.SetActiveCell("FBase", iIndex) '--重复行设置焦点
bCancel = True '--不允许保存
Exit For
End If
Next
Next
Exit Sub
ErrHandler:
MsgBox Err.Number & vbCrLf & Err.Description & vbCrLf & m_Module & "_BeforeSave"
'--如果是中间层,使用 Err.Raise
End Sub
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)