⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmsalaryfomularset.frm

📁 金算盘软件代码
💻 FRM
📖 第 1 页 / 共 5 页
字号:
        .Cols = 5
        .ColWidth(0) = 3200
        .ColWidth(1) = 0
        .ColWidth(2) = 0
        .ColWidth(3) = 0
        .ColWidth(4) = 0
        .ColAlignment(0) = 0
        i = 0
        j = 0
        cboFormula.Clear
        Do While Not recViewField.EOF()
            If Trim(.TextMatrix(0, 0)) <> "" Then
                .AddItem ("")
            End If
            '不包含本次扣零和本次扣税以及上次扣零
            If UCase(Trim(recViewField!strFieldType)) = "DOUBLE" And _
                UCase(Trim(recViewField!strFieldName)) <> "SALARY.DBLLASTZERO" _
                And UCase(Trim(recViewField!strFieldName)) <> "SALARY.DBLNOWZERO" _
                And UCase(Trim(recViewField!strFieldName)) <> "SALARY.DBLNOWTAX" _
                And UCase(Trim(recViewField!strFieldName)) <> "SALARY.SA18660" Then
                If UCase(Trim(recViewField!strFieldName)) <> "SALARY.STRBSNKCODR" Then
                    strName = Trim(recViewField!strViewFieldDesc)
                    cboFormula.AddItem (strName)
                    j = j + 1
                End If
            End If
            .TextMatrix(i, 0) = recViewField!strViewFieldDesc
            .TextMatrix(i, 1) = recViewField!lngViewFieldID
            .TextMatrix(i, 2) = recViewField!strFieldType
            .TextMatrix(i, 3) = recViewField!strTableName
            .TextMatrix(i, 4) = recViewField!strFieldName
            recViewField.MoveNext
            i = i + 1
        Loop
        For i = 0 To .Rows - 1
            .RowHeight(i) = 215
        Next
    End With
    '初始化计算公式
    Call Write_Formula
    '画线
    Set mclsSubClass32 = New SubClass32.SubClass
    mclsSubClass32.hWnd = msgSalaryFormula(0).hWnd
    mclsSubClass32.Messages(WM_PAINT) = True
    Set cmdAddItem(0).Picture = Utility.GetFormResPicture(1001, 0)
    Set cmdAddItem(1).Picture = Utility.GetFormResPicture(1002, 0)
    Set cmdChangList(0).Picture = Utility.GetFormResPicture(1019, 0)
    Set cmdChangList(1).Picture = Utility.GetFormResPicture(1020, 0)
    Set Me.Icon = Utility.GetFormResPicture(139, vbResIcon)
    Call InitCommand
    mblnIsOK = False
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Utility.RemoveFormResPicture (1001)
    Utility.RemoveFormResPicture (1002)
    Utility.RemoveFormResPicture (1019)
    Utility.RemoveFormResPicture (1020)
    Utility.RecordSetRefresh (139)
    Set frmSalaryFomularSet = Nothing
End Sub
Private Sub cboFormula_GotFocus()
    txtSalaryFormula(0).Visible = False
    txtSalaryFormula(0).Visible = False
    msgSalaryFormula(0).col = 0
End Sub
Private Sub cboFormula_LostFocus()
    If mblnWriteCbo Then
        Exit Sub
        cboFormula.Visible = False
    End If
    mblnWriteCbo = False
End Sub
Private Sub lstSalaryFormula_Click()
    Dim intThisSelStart As Integer
    With msgSalaryFormula(0)
        If UCase(.TextMatrix(.Row, 4)) = "CALCZERO" Or UCase(.TextMatrix(.Row, 4)) _
            = "PUTZERO" Or UCase(.TextMatrix(.Row, 4)) = "CALCTAX" Then
            Exit Sub
        End If
    End With
    If msgSalaryFormula(0).col = 2 Then
        intThisSelStart = txtSalaryFormula(1).SelStart
        txtSalaryFormula(1).Text = frmSalaryList.select_text(txtSalaryFormula(1).SelText, txtSalaryFormula(1).SelStart, _
        txtSalaryFormula(1).SelLength, txtSalaryFormula(1).Text, lstSalaryFormula.Text)
        txtSalaryFormula(1).Visible = True
        txtSalaryFormula(1).SetFocus
        txtSalaryFormula(1).SelStart = intThisSelStart + Len(Trim(lstSalaryFormula.Text)) + 2
    End If
End Sub
'公式项目校验
Private Sub mclsDepoland_OnAccidenceParse(ByVal strToken As String, token As TokenClass, blnOK As Boolean)
    Dim i As Long
    Dim strMsg As String
    Dim strString As String
    Dim strSql As String
    Dim recRecordset As rdoResultset
    Dim strFormula As String
    
    strToken = Trim(strToken)
    i = 0
    With msgSalaryFormula(1)
        Do While i < .Rows
            '计算公式中含有字符型字段
            If UCase(Trim(strToken)) = UCase(Trim(.TextMatrix(i, 0))) Then
                '公式中加入日期型计算项目
                If mblnCond = False And UCase(.TextMatrix(i, 2)) <> "DOUBLE" And UCase(.TextMatrix(i, 2)) _
                    <> "DATE" Then
                    ShowMsg Me.hWnd, "计算公式不能包含文本型字段。", vbInformation, "工资发放"
                    mblnFomulaOk = blnOK
                    Exit Sub
                End If
                mstrFormulaItemname = strToken
                If strToken = "性别" Then
                    token.Value = "blnIsMale"
                Else
                    token.Value = Right(.TextMatrix(i, 4), Len(Trim(.TextMatrix(i, 4))) - Len(Trim(.TextMatrix(i, 3))) - 1)
                End If
                If UCase(.TextMatrix(i, 2)) = "DATE" Then
                    token.Value = token.Value
                End If
                blnOK = True
                Exit Do
            End If
           i = i + 1
        Loop
    End With
    If blnOK = False Then
        If Left(Trim(strToken), 1) = "'" And Right(Trim(strToken), 1) = "'" And mblnCond Then
            '查找项目值
            strSql = ""
            strFormula = strToken
            On Error GoTo Errors1
            Select Case mstrFormulaItemname
            Case "部门名称"
                '判断是否为非明细
                'strSql = "SELECT blnIsDetail,strDepartmentCode From DepartMent WHERE TRIM(strDepartmentName)=" _
                    & strFormula
                strSql = "SELECT blnIsDetail,strDepartmentCode From DepartMent WHERE Upper(LTRIM(RTRIM(strDepartmentName)))=" _
                    & UCase(strFormula)
                Set recRecordset = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
                If recRecordset.EOF Then
                    ShowMsg Me.hWnd, "部门:" & strFormula & "不存在。", vbInformation, "工资发放"
                    blnOK = False
                    mblnFomulaOk = blnOK
                    Exit Sub
                End If
                'If Not recRecordset!blnIsDetail Then
                If recRecordset!blnIsDetail = 0 Then
                    'strSql = "SELECT strDepartmentName From DepartMent WHERE blnIsDetail=True AND InStr" _
                        & "(strDepartmentCode,'" & Trim(recRecordset!strDepartmentCode) & "-')=1"
                    strSql = "SELECT strDepartmentName From DepartMent WHERE blnIsDetail=1 AND InStr" _
                        & "(strDepartmentCode,'" & Trim(recRecordset!strDepartmentCode) & "-')=1"
                    Set recRecordset = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
                    '查找下级明细
                    If Not recRecordset.EOF Then
                        recRecordset.MoveLast
                        recRecordset.MoveFirst
                        strFormula = " IN("
                        Do While Not recRecordset.EOF
                            strFormula = strFormula & "'" & recRecordset!strDepartmentName & "',"
                            recRecordset.MoveNext
                        Loop
                        strFormula = Left(strFormula, Len(strFormula) - 1)
                        strFormula = strFormula & ")"
                    End If
                End If
            Case "职员类别"
                'strSql = "SELECT blnIsDetail,strEmployeeTypeCode From EmployeeType WHERE TRIM(strEmployeeTypeName)=" _
                    & strFormula
                strSql = "SELECT blnIsDetail,strEmployeeTypeCode From EmployeeType " & _
                         " WHERE Upper(LTRIM(RTRIM(strEmployeeTypeName)))=" & UCase(strFormula)
                On Error GoTo Errors1
                Set recRecordset = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
                If recRecordset.EOF Then
                    ShowMsg Me.hWnd, "职员类别:" & strFormula & "不存在。", vbInformation, "工资发放"
                    Exit Sub
                End If
                'If Not recRecordset!blnIsDetail Then
                If recRecordset!blnIsDetail = 0 Then
                    'strSql = "SELECT strEmployeeTypeName From EmployeeType WHERE blnIsDetail=True AND InStr" _
                        & "(strEmployeeTypeCode,'" & Trim(recRecordset!strEmployeeTypeCode) & "-')=1"
                    strSql = "SELECT strEmployeeTypeName From EmployeeType WHERE blnIsDetail=1 AND InStr" _
                        & "(strEmployeeTypeCode,'" & Trim(recRecordset!strEmployeeTypeCode) & "-')=1"
                    Set recRecordset = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
                    '查找下级明细
                    If Not recRecordset.EOF Then
                        recRecordset.MoveLast
                        recRecordset.MoveFirst
                        strFormula = " IN("
                        Do While Not recRecordset.EOF
                            strFormula = strFormula & "'" & recRecordset!strEmployeeTypeName & "',"
                            recRecordset.MoveNext
                        Loop
                        strFormula = Left(strFormula, Len(strFormula) - 1)
                        strFormula = strFormula & ")"
                    End If
                End If
            End Select
            If mstrFormulaItemname = "性别" Then
                token.Value = IIf(strFormula = "'男'", 1, 0)
            Else
                token.Value = strFormula
            End If
            blnOK = True
            mstrFormulaItemname = ""
        End If
    End If
    If blnOK = False Then
        If Len(Trim(strToken)) > 30 Then
            strString = Left(Trim(strToken), 24) & "......"
        Else
            strString = Trim(strToken)
        End If
        ShowMsg Me.hWnd, "不能识别:'" & strString & "'。", vbInformation, Me.Caption
    End If
    mblnFomulaOk = blnOK
    Exit Sub
Errors1:
    ShowMsg Me.hWnd, "不能识别:'" & strFormula & "'。", vbInformation, Me.Caption
    blnOK = False
    mblnFomulaOk = blnOK
End Sub
Private Sub mclsSubClass32_WndProc(Msg As Long, wParam As Long, lParam As Long, Result As Long)
    Select Case Msg
        Case WM_PAINT
            mclsSubClass32.CallWndProc Msg, wParam, lParam
            With msgSalaryFormula(0)
               Call DrawBLine(.hWnd, .ColWidth(0) - 20, 0, .ColWidth(0) - 20, _
                    3040, RGB(128, 128, 128))
               Call DrawBLine(.hWnd, .ColWidth(0) + .ColWidth(1) - 20, 0, .ColWidth(0) + _
                    .ColWidth(1) - 20, 3040, RGB(128, 128, 128))

            End With
    End Select
End Sub
Private Sub msgSalaryFormula_Click(index As Integer)
    Dim recItem As rdoResultset
    Dim strSql As String

    If cboFormula.Visible = True And index = 0 Then
        mblnWriteCbo = True
    End If
    If index = 1 Then
        With msgSalaryFormula(1)
            '职员信息和代发银行帐号
            If UCase(Trim(.TextMatrix(.Row, 3))) <> "SALARY" Or UCase(Trim(.TextMatrix(.Row, 4))) = "SALARY.STRBANKCODE" Then '参照表
                lstSalaryFormula.Clear
                strSql = "SELECT " & .TextMatrix(.Row, 4) & " AS Item FROM " & .TextMatrix(.Row, 3) & _
                         " GROUP BY " & .TextMatrix(.Row, 4)
                Set recItem = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
                Do While Not recItem.EOF()
                    If UCase(.TextMatrix(.Row, 2)) = "DOUBLE" Then
                        If Not IsNull(recItem!Item) Then
                            If Trim(str(recItem!Item)) <> "" Then
                                lstSalaryFormula.AddItem (recItem!Item)
                            End If
                        End If
                    Else
                        If Not IsNull(recItem!Item) Then
                            If Trim(recItem!Item) <> "" Then
                                lstSalaryFormula.AddItem ("'" & recItem!Item & "'")
                            End If
                        End If
                    End If
                    recItem.MoveNext
                Loop
                recItem.Close
                Set recItem = Nothing
                If lstSalaryFormula.ListCount = 1 And Trim(lstSalaryFormula.list(0)) = "'男'" Then
                    lstSalaryFormula.AddItem ("'女'")
                End If
                If lstSalaryFormula.ListCount = 1 And Trim(lstSalaryFormula.list(0)) = "'女'" Then
                    lstSalaryFormula.AddItem ("'男'")
                End If
            Else
                lstSalaryFormula.Clear
            End If
        End With
    Else
        With msgSalaryFormula(0)
            Select Case .col
            Case 1
                '将txt框写回工资列表
                If txtSalaryFormula(0).Visible Then
                    .TextMatrix(.Row, 1) = txtSalaryFormula(0).Text
                End If
            Case 2
                '将txt框写回工资列表
                If txtSalaryFormula(1).Visible Then
                    .TextMatrix(.Row, 2) = txtSalaryFormula(1).Text
                End If
            End Select
        End With
    End If
End Sub
Private Sub msgSalaryFormula_DblClick(index As Integer)
    Dim intThisSelStart As Integer
    '计算项目
    If index = 1 Then
        Select Case msgSalaryFormula(0).col
        Case 0  '选择项目
            '特殊函数
            With msgSalaryFormula(0)
                If UCase(.TextMatrix(.Row, 4)) = "CALCZERO" Or UCase(.TextMatrix(.Row, 4)) _
                    = "PUTZERO" Or UCase(.TextMatrix(.Row, 4)) = "CALCTAX" Then
                    Exit Sub
                End If
            End With
            With msgSalaryFormula(1)
                If UCase(.TextMatrix(.Row, 2)) = "DOUBLE" And UCase(.TextMatrix(.Row, 4)) <> "SALARY.SA18660" Then
                    msgSalaryFormula(0).TextMatrix(msgSalaryFormula(0).Row, 0) = .TextMatrix(.Row, 0)
                    msgSalaryFormula(0).TextMatrix(msgSalaryFormula(0).Row, 3) = .TextMatrix(.Row, 1)
                    cboFormula.Text = .TextMatrix(.Row, 0)
                    Call cboFormula_Click
                End If
            End With
        Case 1  '选择公式
          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -