📄 frmfilter.frm
字号:
Width = 1725
End
End
End
Attribute VB_Name = "frmFilter"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
' 作者:王佥
' 功能: 采用树结构设置筛选条件并返回筛选Where字句.
' 使用范围: 由Filter 模块调用.
' 接口:
' 1.ShowFilter( LngFilterID, lngType , IntTag, strCond, strPeriodName,strSpecial,lngReceiptTypeID)
' LngFilterID为筛选ID号(如帐册ID号)
' lngType为类型号 1:ListClass 2:ReportClass
' IntTag为特殊条件类:0:所有 1:科目 2:单位 4:部门 8:员工
' 16:工程项目 32:统计 64:期间 128:商品 256:项目 512:货位.......
' strPeriodName 区间型字段汉字名
' strSpecial 对特殊代码型和期间型字段赋初值 如:"科目/101 现金/1" 其中科目:字段描述 101 现金:代码号+名字(或者 代码号串) 1:ID号
' "会计期间/自定义/1998-6-12,1998-7-12"
' 2.strCond 特殊条件类返回参数
' 3.mChineseCond 返回汉语条件
' 4. mstrWhere
' 当mIntTag=1时返回筛选的全部Where字句, 否则返回除去特殊
' 条件类后的部分strWhere字句.
' 5.mblnOK 确定返回标志
' 6.lngReceiptTypeID 单据模板所属的单据类型ID
' 备注:特殊条件类和strSpecial赋初值等都只针对第一级树接点
' 日期:1998年6月20日
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Option Explicit
Const ConNumPerSel = 14 '当前行的参数个数
Private mlngViewID As Long '总的视图ID号
Private strCondVersionField As String 'ViewField的版本号条件
Private strCondVersionEnum As String 'Enum的版本号条件
Private strCondHospital As String '行政医疗条件
Private strCondVersion As String '单据类型的版本号条件
Private mlngKeyType As Long '1:list;2:report
Private mlngKeyID As Long 'input ID
Private mCurentline As Long '当前行
Private mCurLineOfSelect As Long '当前行对应的树接点号
Private WithEvents mclsHook As Hook '响应msgFilter中vbUp 和vbDown 事件
Attribute mclsHook.VB_VarHelpID = -1
Private mblnRefertext1 As Boolean 'Refertext1_Choose时 Refertext1_click 响应标志
Private mblnRefertext2 As Boolean 'Refertext1_Choose时 Refertext1_click 响应标志
Private mItemNotExit As Boolean
Dim mCurstrTemp(1 To 9) As String '当前行的参数 1:字段描述 2:字段名 3:字段类型 4:表名 5:树接点索引号 6:字段ID号 7:路径 8:表别名 9:子接点表别名
Dim mstrSelected() As String '当前行的参数(MaxLine,1 To ConNumPerSel)
'当前行的参数 1:字段描述 2:字段名 3:字段类型 4:表名 5,6,7:操作符和操作值 8:strWhere子句 9:树接点索引号 10:字段ID号 11:路径 12:表别名 13:子接点表别名 14:编码型类别标志
'Dim mstrViewKey As String
Dim mNode As msComctlLib.Node
Dim mblnSelected As Boolean '当前行已设置条件标志
'对特殊代码型或期间型字段赋初值
Dim mstrSpecialTable As String '字段汉字描述
Dim mstrSpecialFieldName As String '代码型的 代码号+名字(或者 代码号串) 期间型的 期间名
Dim mstrSpecialID As String '代码型的 ID号 期间型的 日期值
Private mblnIsSimpleCustomer As Boolean '瘦身型条件,对字节点供应商起作用
Dim blnAccount As Boolean
Dim blnCustomer As Boolean
Dim blnDepartment As Boolean
Dim blnEmployee As Boolean
Dim blnJob As Boolean
Dim blnClass1 As Boolean
Dim blnClass2 As Boolean
Dim blnItem As Boolean
Dim blnPeriod As Boolean
Dim blnPosition As Boolean
Dim mstrPeriodName As String
Dim mIntTag As Integer
Dim mlngReceiptTypeID As Long
Dim mstrReceiptTypeID As String
Public mstrWhere As String '返回的<mstrWhere>字句
Public mstrCond As String '返回特殊条件字符串
Public mblnOk As Boolean '确定返回标志
Public mChineseCond As String '返回汉语条件
Private mEmployeeTag As Long '职员条件标志 -1:所有,1:总帐类
'2:应收类 4:应付类 8:现金银行类 16:采购类 32:销售类 64:库存类 128:委托加工类
Public mstrWhereing As String
Public mstrHaving As String
Private Sub CmdHelp_Click()
HtmlHelp.HtmlHelp Me.hwnd, App.HelpFile, 15, 10007
End Sub
Private Sub cmdOK_Click()
Dim Index As Long
'生成中文条件
mChineseCond = ""
For Index = 1 To MsgFilter.Rows - 2
If mstrSelected(Index, 5) = "自定义" Or mstrSelected(Index, 5) = "介于" Then
If mChineseCond = "" Then
mChineseCond = Trim(mstrSelected(Index, 11)) & " 介于 (" & mstrSelected(Index, 6) & "," & mstrSelected(Index, 7) & ")"
Else
mChineseCond = mChineseCond & " " & Trim(mstrSelected(Index, 11)) & " 介于 (" & mstrSelected(Index, 6) & "," & mstrSelected(Index, 7) & ")"
End If
ElseIf mstrSelected(Index, 5) = "空值" Then
mChineseCond = Trim(mstrSelected(Index, 11)) & ": 空值 "
Else
Select Case UCase(Trim(mstrSelected(Index, 3)))
Case "ENUM", "CODE", "BOOLEAN", "DATE", "PERIOD"
If mChineseCond = "" Then
mChineseCond = Trim(mstrSelected(Index, 11)) & ": " & MsgFilter.TextMatrix(Index, 1)
Else
mChineseCond = mChineseCond & " " & Trim(mstrSelected(Index, 11)) & ": " & MsgFilter.TextMatrix(Index, 1)
End If
Case Else
If mChineseCond = "" Then
mChineseCond = Trim(mstrSelected(Index, 11)) & " " & MsgFilter.TextMatrix(Index, 1)
Else
mChineseCond = mChineseCond & " " & Trim(mstrSelected(Index, 11)) & " " & MsgFilter.TextMatrix(Index, 1)
End If
End Select
End If
Next
mChineseCond = strReplace(mChineseCond, "/", "--")
'修改数据库
ModifyCondTable
mblnOk = True
Unload Me
End Sub
'字符转换为数字,字符串的 “介于” 操作符为10
Private Function CondStrToNum(ByVal strOperate As String) As String
Select Case Trim(strOperate)
Case "等于", "今天"
CondStrToNum = "1"
Case "大于", "本周"
CondStrToNum = "2"
Case "小于", "本周至今日"
CondStrToNum = "3"
Case "大于等于", "本期"
CondStrToNum = "4"
Case "小于等于", "本期至今日"
CondStrToNum = "5"
Case "打头字符为", "介于", "本月"
CondStrToNum = "6"
Case "包含字符", "本月至今日", "零或空值" '数字型的空值
CondStrToNum = "7"
Case "类似于", "本季度"
CondStrToNum = "8"
Case "本季至今日", "不等于"
CondStrToNum = "9"
Case "本年"
CondStrToNum = "10"
Case "本年至今日", "空值"
CondStrToNum = "11"
Case "上周"
CondStrToNum = "12"
Case "上期"
CondStrToNum = "13"
Case "上月"
CondStrToNum = "14"
Case "上季度"
CondStrToNum = "15"
Case "去年"
CondStrToNum = "16"
Case "自定义"
CondStrToNum = "17"
Case "所有"
CondStrToNum = "18"
End Select
End Function
'修改数据库
Private Sub ModifyCondTable()
Dim rs As rdoResultset
Dim rsMultiCond As rdoResultset
Dim Index As Long
Dim strTable As String
Dim strSql As String
Dim strsql2 As String
Dim strKey As String
Dim strRootRath As String
Dim lngTemp As Long
Dim blnSpec As Boolean
Dim mstrTagCond(1 To 10) As String 'TagCond 字符数组 1:科目 2:单位 3:部门 4:员工 5:工程项目 6:统计 7:期间或单一日期 8:商品 9:项目 10: 货位
On Error GoTo ErrHandle
If mlngKeyType = 1 Then
strTable = "ListCond"
strKey = "lngListId"
Else
strTable = "ReportCond"
strKey = "lngReportId"
End If
Filter.DelSelectedCond mlngKeyID, mlngKeyType
gclsBase.BaseWorkSpace.BeginTrans
Set rs = gclsBase.BaseDB.OpenResultset("Select * From " & strTable, rdOpenDynamic, 4)
Index = 1
Do While Index < MsgFilter.Rows - 1
If blnPeriod = True And mstrSelected(Index, 11) = mstrPeriodName Then
mstrSelected(Index, 8) = mstrSelected(Index, 2) & " , " & mstrSelected(Index, 5) & " , " & mstrSelected(Index, 6) & " , " & mstrSelected(Index, 7)
End If
If Trim(mstrSelected(Index, 12)) <> "" Then
mstrSelected(Index, 8) = Filter.ModifyTableName(mstrSelected(Index, 8), mstrSelected(Index, 4) & ".", mstrSelected(Index, 12) & ".")
End If
If UCase(mstrSpecialTable) <> UCase(mstrSelected(Index, 11)) Then
'加一条条件到数据库
rs.AddNew
rs.rdoColumns(strKey) = mlngKeyID
rs!lngViewFieldID = CLng(Trim(mstrSelected(Index, 10)))
rs!strPath = mstrSelected(Index, 11)
rs!strOthTableName = IIf(mstrSelected(Index, 12) = "", " ", mstrSelected(Index, 12))
If InStr(rs!strPath, "/") <> 0 Then rs!blnHavefathernode = 1
Select Case UCase(Trim(mstrSelected(Index, 3)))
Case "STRING"
'字符串的 “介于” 操作符为10
If mstrSelected(Index, 5) = "介于" Then
mstrSelected(Index, 5) = 10
rs!strString2 = mstrSelected(Index, 7)
Else
mstrSelected(Index, 5) = CondStrToNum(mstrSelected(Index, 5))
End If
rs!strStringOP = mstrSelected(Index, 5)
rs!strString1 = IIf(mstrSelected(Index, 6) = "", " ", mstrSelected(Index, 6))
Case "ENUM"
rs!strString1 = mstrSelected(Index, 5)
rs!strString2 = mstrSelected(Index, 6)
Case "LONG", "INTEGER", "DOUBLE"
mstrSelected(Index, 5) = CondStrToNum(mstrSelected(Index, 5))
rs!strDoubleOP = mstrSelected(Index, 5)
If mstrSelected(Index, 5) = "7" Then '零或空值
rs!dbldouble1 = 0
Else
rs!dbldouble1 = CDbl(mstrSelected(Index, 6))
If mstrSelected(Index, 5) = "6" Then
rs!dbldouble2 = CDbl(mstrSelected(Index, 7))
End If
End If
Case "BOOLEAN"
rs!blnBoolean = IIf(Trim(mstrSelected(Index, 5)) = "是", 1, 0)
Case "DATE"
rs!strDateOp = 0
rs!dtmDate1 = mstrSelected(Index, 5)
Case "PERIOD"
mstrSelected(Index, 5) = CondStrToNum(mstrSelected(Index, 5))
rs!strDateOp = mstrSelected(Index, 5)
rs!dtmDate1 = mstrSelected(Index, 6)
rs!dtmDate2 = mstrSelected(Index, 7)
Case "CODE"
If Trim(mstrSelected(Index, 5)) = "选择项目" Then
rs!blnismulicond = 1
If mlngKeyType = 1 Then
Set rsMultiCond = gclsBase.BaseDB.OpenResultset("SELECT * from listMultiIDCond ", rdOpenStatic, 4)
Else
Set rsMultiCond = gclsBase.BaseDB.OpenResultset("SELECT * from ReportMultiIDCond ", rdOpenStatic, 4)
End If
rsMultiCond.AddNew
If mlngKeyType = 1 Then
rsMultiCond!lngListID = mlngKeyID
Else
rsMultiCond!lngReportID = mlngKeyID
End If
rsMultiCond!strPath = mstrSelected(Index, 11)
rsMultiCond!strCodeID = mstrSelected(Index, 6)
rsMultiCond!strKeyName = mstrSelected(Index, 7)
rsMultiCond!bLNISCODETYPE = 0
rsMultiCond.Update
rsMultiCond.Close
' strSql = "insert into listMultiIDCond( LNGLISTID, STRPATH, STRCODEID, STRKEYNAME, BLNISCODETYPE ) values('" & mlngKeyID & "','" & mstrSelected(Index, 11) & "','" & mstrSelected(Index, 6) & "','" & mstrSelected(Index, 7) & "','0')"
' Else
' strSql = "insert into ReportMultiIDCond( LNGREPORTID, STRPATH, STRCODEID, STRKEYNAME, BLNISCODETYPE ) values('" & mlngKeyID & "','" & mstrSelected(Index, 11) & "','" & mstrSelected(Index, 6) & "','" & mstrSelected(Index, 7) & "','0')"
' End If
Else
rs!blnismulicond = 0
If mlngKeyType = 1 Then
Set rsMultiCond = gclsBase.BaseDB.OpenResultset("SELECT * from listMultiIDCond ", rdOpenStatic, 4)
Else
Set rsMultiCond = gclsBase.BaseDB.OpenResultset("SELECT * from ReportMultiIDCond ", rdOpenStatic, 4)
End If
rsMultiCond.AddNew
If mlngKeyType = 1 Then
rsMultiCond!lngListID = mlngKeyID
Else
rsMultiCond!lngReportID = mlngKeyID
End If
rsMultiCond!strPath = mstrSelected(Index, 11)
rsMultiCond!strCodeID = mstrSelected(Index, 6)
rsMultiCond!strKeyName = mstrSelected(Index, 5)
rsMultiCond!bLNISCODETYPE = IIf(mstrSelected(Index, 14) = "1", "1", "0")
rsMultiCond.Update
rsMultiCond.Close
' If mlngKeyType = 1 Then
' strSql = "insert into listMultiIDCond( LNGLISTID, STRPATH, STRCODEID, STRKEYNAME, BLNISCODETYPE ) values('" & mlngKeyID & "','" & mstrSelected(Index, 11) & "','" & mstrSelected(Index, 6) & "','" & mstrSelected(Index, 5) & "','" & IIf(mstrSelected(Index, 14) = "1", "1", "0") & "')"
' Else
' strSql = "insert into ReportMultiIDCond( LNGREPORTID, STRPATH, STRCODEID, STRKEYNAME, BLNISCODETYPE ) values('" & mlngKeyID & "','" & mstrSelected(Index, 11) & "','" & mstrSelected(Index, 6) & "','" & mstrSelected(Index, 5) & "','" & IIf(mstrSelected(Index, 14) = "1", "1", "0") & "')"
' End If
End If
' gclsBase.BaseDB.Execute strSql
End Select
rs.Update
'执行加入一条新记录
End If
'判断,加入到特殊否
If mIntTag <> 0 Then
strRootRath = mstrSelected(Index, 11)
lngTemp = InStr(strRootRath, "/")
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -