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

📄 frmrpttimepos.frm

📁 考勤机管理软件,用于统计某段时间某个部门或者某个员工在某段内迟到与早退次数.
💻 FRM
📖 第 1 页 / 共 2 页
字号:
                GetWeekday (dBeginDate)
                
                '===========获得该刷卡日期所拥有班次===========
                bTime = Mid(bTime, 1, 4) & Mid(bTime, 6, 2) & Mid(bTime, 9, 2)
                GetSetClassID EmployeeInfo(lEmpRow).CardID, bTime
                
                '===========获得该刷卡日期刷卡次数=================
                rstGrid.Fields("刷卡次数") = GetClassCount()
                
                rstGrid.Fields("员工卡号") = EmployeeInfo(lEmpRow).CardID
                rstGrid.Fields("员工名称") = EmployeeInfo(lEmpRow).EmployeeName
                 
'                If rstGrid.Fields("刷卡次数") = 0 Then
'                    rstGrid.Fields("说明") = "班次时间设定有误,不能正常输出!"
'                    GoTo NextFor
'                End If
                If rstGrid.Fields("刷卡次数") = 0 Then GoTo NextFor
                
                If rstGrid.Fields("刷卡次数") = -1 Then
                    rstGrid.Fields("说明") = "时间段设置有冲突!"
                    GoTo NextFor
                End If

'                Dim ClassIDCount As Long
'                Dim ClassIDIndex As Long
'                sClassID = ""
'                ClassIDCount = UBound(ClassIDInfo)
'                For ClassIDIndex = 1 To ClassIDCount
'                    sClassID = sClassID & CStr(ClassIDInfo(ClassIDIndex).ClassID) & ","
'                Next
'
'                sClassID = Left(sClassID, Len(sClassID) - 1)
'
'                If rstExec.State = 1 Then rstExec.Close
'                Set rstExec = Nothing
'                rstExec.CursorLocation = adUseClient
'                rstExec.Open "select ClassName  from Class where ClassID in (" & sClassID & ")", con, adOpenStatic, adLockBatchOptimistic
'                sClassID = ""
'                If rstExec.RecordCount > 0 Then
'                    rstExec.MoveFirst
'                    While Not rstExec.EOF
'                        sClassID = sClassID & rstExec.Fields("ClassName") & "  "
'                        rstExec.MoveNext
'                    Wend
'
'                End If
'
'
'                rstGrid.Fields("班次组合") = sClassID

                Dim tmpClassCount As Long
                Dim tmpClassIndex As Long
                If blntmpClassInfo = True Then
                    tmpClassCount = UBound(tmpClassInfo)
                    For tmpClassIndex = 1 To tmpClassCount
                    
                        bln(tmpClassIndex) = True
                        rstGrid.Fields("时间" & tmpClassIndex * 2 - 1) = GetTime(tmpClassInfo(tmpClassIndex).bTime)
                        rstGrid.Fields("时间" & tmpClassIndex * 2) = GetTime(tmpClassInfo(tmpClassIndex).eTime)
                        rstGrid.Fields("所属班次" & tmpClassIndex * 2 - 1) = GetClassName(tmpClassInfo(tmpClassIndex).ClassID)
                        
                        
                        
                        If tmpClassInfo(tmpClassIndex).AddClass = True Then
                        
                            If GetYesNoLeave(EmployeeInfo(lEmpRow).EmployeeID, tmpClassIndex * 2, sDate) = True Then
                                rstGrid.Fields("备注" & tmpClassIndex * 2 - 1) = "请假"
                            Else
                                rstGrid.Fields("备注" & tmpClassIndex * 2 - 1) = "加班"
                            End If
                            
                        Else
                        
                            If GetYesNoVac(EmployeeInfo(lEmpRow).EmployeeID, tmpClassIndex * 2, EmployeeInfo(lEmpRow).VacID, sDate) = True Then
                                rstGrid.Fields("备注" & tmpClassIndex * 2 - 1) = "休假"
                            Else
                                If GetYesNoLeave(EmployeeInfo(lEmpRow).EmployeeID, tmpClassIndex * 2, sDate) = True Then
                                    rstGrid.Fields("备注" & tmpClassIndex * 2 - 1) = "请假"
                                Else
                                    rstGrid.Fields("备注" & tmpClassIndex * 2 - 1) = ""
                                End If
                            End If
                
                        End If
                        

                        
                    Next
    
                End If
NextFor:
                
                rstGrid.Update
            
            End If

        Next

        dBeginDate = dBeginDate + 1
    Loop
    
    
    Grid.DefSortCol = "刷卡日期"
'    Grid.Col("Date").SortDirection = sASC
'    MsgBox rstGrid.RecordCount
    
    For i = 1 To UBound(bln)
        Grid.Col("时间" & i * 2 - 1).Visible = bln(i)
        Grid.Col("时间" & i * 2).Visible = bln(i)
        Grid.Col("所属班次" & i * 2 - 1).Visible = bln(i)
        Grid.Col("备注" & i * 2 - 1).Visible = bln(i)
    Next
    
    Set Grid.DataSource = rstGrid

End Sub







Private Function GetTime(ByVal sTime As String) As String
    Dim a As Integer
    Dim b As Integer
    
    a = Int(Val(sTime) / 60)
    
    b = Int(Val(sTime) Mod 60)
    
    GetTime = Right("00" & a, 2) & ":" & Right("00" & b, 2)
End Function

Private Sub SetGrid(ByVal TimeCount As Long)

    If rstGrid.State = adStateOpen Then rstGrid.Close
    Set rstGrid = Nothing
    Dim i As Long
    For i = 1 To rstGrid.Fields.Count
        rstGrid.Fields.Delete i
    Next
    
    rstGrid.Fields.Append "员工名称", adVarChar, 20
    rstGrid.Fields.Append "员工卡号", adVarChar, 20
    rstGrid.Fields.Append "刷卡日期", adVarChar, 20
    rstGrid.Fields.Append "星期", adVarChar, 20
    rstGrid.Fields.Append "刷卡次数", adInteger

    
    Grid.ClearHeadData
'    Grid.AddHeader "序号", "Serial", 40, -1, "Serial", False, sSerial
'    Grid.AddHeader "刷卡日期", "Date", 90, -1, "刷卡日期", False, sDefault
'    Grid.AddHeader "星期", "Weekday", 20, -1, "星期", False, sDefault
'    Grid.AddHeader "员工卡号", "Card", 60, -1, "员工卡号", False, sDefault
'    Grid.AddHeader "员工名称", "Name", 60, -1, "员工名称", False, sDefault
'    Grid.AddHeader "刷卡次数", "CardCount", 60, -1, "刷卡次数", False, sDefault
    
    Grid.AddHeader "序号", "序号", 40, -1, "Serial", False, sSerial
    Grid.AddHeader "刷卡日期", "刷卡日期", 90, -1, "刷卡日期", False, sDefault
    Grid.AddHeader "星期", "星期", 20, -1, "星期", False, sDefault
    Grid.AddHeader "员工卡号", "员工卡号", 60, -1, "员工卡号", False, sDefault
    Grid.AddHeader "员工名称", "员工名称", 60, -1, "员工名称", False, sDefault
    Grid.AddHeader "刷卡次数", "刷卡次数", 60, -1, "刷卡次数", False, sDefault
    
    Dim intField As Integer
    
    For intField = 1 To TimeCount * 2 Step 2
    
        rstGrid.Fields.Append "时间" & intField, adVarChar, 20
        rstGrid.Fields.Append "时间" & intField + 1, adVarChar, 20
        
        rstGrid.Fields.Append "所属班次" & intField, adVarChar, 20
        rstGrid.Fields.Append "备注" & intField, adVarChar, 20
        
        Grid.AddHeader "上班时间", "时间" & intField, 80, -1, "时间" & intField, False, sDefault
        Grid.AddHeader "下班时间", "时间" & intField + 1, 80, -1, "时间" & intField + 1, False, sDefault

        Grid.AddHeader "所属班次", "所属班次" & intField, 80, -1, "所属班次" & intField, False, sDefault
        Grid.AddHeader "备注", "备注" & intField, 80, -1, "备注" & intField, False, sDefault



        Grid.AddCollect "时间段" & (intField + 1) / 2, "KeyOne" & intField
        Grid.Col("时间" & intField).CollectKey = "KeyOne" & intField
        Grid.Col("时间" & intField + 1).CollectKey = "KeyOne" & intField
        Grid.Col("所属班次" & intField).CollectKey = "KeyOne" & intField
        Grid.Col("备注" & intField).CollectKey = "KeyOne" & intField
    Next
    
    rstGrid.Fields.Append "说明", adVarChar, 255
    Grid.AddHeader "说明", "说明", 120, -1, "说明", False, sDefault
    
    
    rstGrid.Open "", , adOpenStatic, adLockBatchOptimistic
    
    Grid.HeadHeight = 40
    Grid.AllowAddNew = False
    
    Grid.GroupCol = 4
    
    Grid.Col("序号").SumText = "合计"
    Grid.SmallSumText = "小计"

End Sub


Private Sub GetWeekday(ByVal dBeginDate As Date)
    Select Case Weekday(dBeginDate)
    
        Case 1
            rstGrid.Fields("星期") = "日"
        Case 2
            rstGrid.Fields("星期") = "一"
        Case 3
            rstGrid.Fields("星期") = "二"
        Case 4
            rstGrid.Fields("星期") = "三"
        Case 5
            rstGrid.Fields("星期") = "四"
        Case 6
            rstGrid.Fields("星期") = "五"
        Case 7
            rstGrid.Fields("星期") = "六"
            
    End Select
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If rstGrid.State = 1 Then rstGrid.Close
    Set rstGrid = Nothing
    If rstExec.State = 1 Then rstExec.Close
    Set rstExec = Nothing
End Sub

Private Sub Form_Resize()
On Error Resume Next

    Frame.Move 60, 0, Me.ScaleWidth - 120, 800
    
    lblEmployee.Move 60, 300
    cmbEmployee.Move lblEmployee.Left + lblEmployee.Width + 60, lblEmployee.Top - 30
    
    lblBeginDate.Move cmbEmployee.Left + cmbEmployee.Width + 60, lblEmployee.Top
    dtpBeginDate.Move lblBeginDate.Left + lblBeginDate.Width + 60, lblEmployee.Top - 30

'    lblBeginDate.Move 60, 300
'    dtpBeginDate.Move lblBeginDate.Left + lblBeginDate.Width + 60, lblBeginDate.Top - 30
    
    
    lblEndDate.Move dtpBeginDate.Left + dtpBeginDate.Width + 60, lblEmployee.Top
    dtpEndDate.Move lblEndDate.Left + lblEndDate.Width + 60, lblEmployee.Top - 30

'    cmdQuery.Move dtpEndDate.Left + dtpEndDate.Width + 60, lblEmployee.Top - 60
'    cmdQuery.Move Frame.Width - cmdQuery.Width - 100, lblEmployee.Top - 60
    
    cmdPrint.Move Frame.Width - cmdQuery.Width - 100, lblEmployee.Top - 90
    cmdExpor.Move cmdPrint.Left - cmdExpor.Width - 60, lblEmployee.Top - 90
    cmdQuery.Move cmdExpor.Left - cmdQuery.Width - 60, lblEmployee.Top - 90
    
    Grid.Move 0, Frame.Top + Frame.Height, Me.ScaleWidth, Me.ScaleHeight - Frame.Height
End Sub


Public Sub PrintBill()
    If rstGrid.State <> adStateOpen Then Exit Sub
    
    Dim i As Integer
    Dim j As Integer
    For i = 1 To UBound(bln)
        If bln(i) = True Then j = j + 1
    Next
    j = j * 2
    Grid.SortOutRst
    ACRptEngine1.Init
    ACRptEngine1.AddDataSet "ac", rstGrid
    
    If j = 0 Then
        ACRptEngine1.SetReportFile App.Path & "\RPT\RPTPos0.apt"
    ElseIf j = 2 Then
        ACRptEngine1.SetReportFile App.Path & "\RPT\RPTPos02.apt"
    ElseIf j = 4 Then
        ACRptEngine1.SetReportFile App.Path & "\RPT\RPTPos04.apt"
    ElseIf j = 6 Then
        ACRptEngine1.SetReportFile App.Path & "\RPT\RPTPos06.apt"
    ElseIf j = 8 Then
        ACRptEngine1.SetReportFile App.Path & "\RPT\RPTPos08.apt"
    End If
    
    ACRptEngine1.PrintReport
End Sub

Public Sub PreviewBill()
    If rstGrid.State <> adStateOpen Then Exit Sub
    
    Dim i As Integer
    Dim j As Integer
    For i = 1 To UBound(bln)
        If bln(i) = True Then j = j + 1
    Next
    j = j * 2
    
    Grid.SortOutRst
    ACRptEngine1.Init
    ACRptEngine1.AddDataSet "ac", rstGrid
        
    
    If j = 0 Then
        ACRptEngine1.SetReportFile App.Path & "\RPT\RPTPos00.apt"
    ElseIf j = 2 Then
        ACRptEngine1.SetReportFile App.Path & "\RPT\RPTPos02.apt"
    ElseIf j = 4 Then
        ACRptEngine1.SetReportFile App.Path & "\RPT\RPTPos04.apt"
    ElseIf j = 6 Then
        ACRptEngine1.SetReportFile App.Path & "\RPT\RPTPos06.apt"
    ElseIf j = 8 Then
        ACRptEngine1.SetReportFile App.Path & "\RPT\RPTPos08.apt"
    End If
    
    ACRptEngine1.Preview

End Sub

Public Sub ShowDesignerBill()
    If rstGrid.State <> adStateOpen Then Exit Sub
    
    Dim i As Integer
    Dim j As Integer
    For i = 1 To UBound(bln)
        If bln(i) = True Then j = j + 1
    Next
    j = j * 2
    Grid.SortOutRst
    ACRptEngine1.Init
    ACRptEngine1.AddDataSet "ac", rstGrid
    
    If j = 0 Then
        ACRptEngine1.SetReportFile App.Path & "\RPT\RPTPos00.apt"
    ElseIf j = 2 Then
        ACRptEngine1.SetReportFile App.Path & "\RPT\RPTPos02.apt"
    ElseIf j = 4 Then
        ACRptEngine1.SetReportFile App.Path & "\RPT\RPTPos04.apt"
    ElseIf j = 6 Then
        ACRptEngine1.SetReportFile App.Path & "\RPT\RPTPos06.apt"
    ElseIf j = 8 Then
        ACRptEngine1.SetReportFile App.Path & "\RPT\RPTPos08.apt"
    End If
    
    ACRptEngine1.ShowDesigner

End Sub

Private Sub Grid_DblClick()
    If Grid.RecordCount = 0 Then
        Message "没有可用信息!"
        Exit Sub
    End If
    
    If Grid.CurRow = -1 Then
        Message "请先选中数据!"
        Exit Sub
    End If
    
    Load frmRptTimePos_D
    frmRptTimePos_D.ShowBill rstGrid.Fields("刷卡日期"), rstGrid.Fields("星期"), rstGrid.Fields("员工卡号"), rstGrid.Fields("员工名称")
    frmRptTimePos_D.Show vbModal
End Sub

⌨️ 快捷键说明

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