Здравствуйте, немогу написать часть кода по подсчету машинного времени работы механизма. т.е. есть устроуство, которое читаю и в БД ложу время запуска, время остановки, и состояние связи с устройством: "Нет связи", "Связь в норме", "Завершение программы", "Запуск программы", и по всему этому не получается посчитать сколько часов за раб. смену работало устройство, сколько часов не работало устройство, сколько часов за раб. смену не было связи
- Код: Выделить всё
t = DateDiff("d", DateTime1(0).Text, DateTime1(1).Text)
If t = 0 Then t = 1
For i = 1 To t
tmpdate = DateAdd("d", i - 1, DateTime1(0).Text)
lstLog.ListItems.Add , "k" & i, tmpdate
sql = Format(tmpdate, "dd.mm.yyyy") & " " & DateTimes(0)
sql1 = Format(tmpdate, "dd.mm.yyyy") & " " & DateTimes(1)
lstLog.ListItems.Add , "k1" & i, "I смена" '& (sql) & " " & (sql1)
lstLog.ListItems("k1" & i).SubItems(1) = Format(TimeSerial(0, GetStatusMinutes("Останов", CDate(sql), CDate(sql1)), 0), " h ч. mm мин.")
lstLog.ListItems("k1" & i).SubItems(2) = Format(TimeSerial(0, GetStatusMinutes("Запуск", CDate(sql), CDate(sql1)), 0), " h ч. mm мин.")
lstLog.ListItems("k1" & i).SubItems(3) = Format(TimeSerial(0, GetStatusMinutes("Связь в норме", CDate(sql), CDate(sql1)), 0), " h ч. mm мин.")
If smenCount > 0 Then
sql = Format(tmpdate, "dd.mm.yyyy") & " " & DateTimes(1)
sql1 = Format(tmpdate, "dd.mm.yyyy") & " " & DateTimes(2)
lstLog.ListItems.Add , "k2" & i, "II смена" ' & CDate(sql) & " " & CDate(sql1)
lstLog.ListItems("k2" & i).SubItems(1) = Format(TimeSerial(0, GetStatusMinutes("Останов", CDate(sql), CDate(sql1), , 1), 0), " h ч. mm мин.")
lstLog.ListItems("k2" & i).SubItems(2) = Format(TimeSerial(0, GetStatusMinutes("Запуск", CDate(sql), CDate(sql1), , 1), 0), " h ч. mm мин.")
lstLog.ListItems("k2" & i).SubItems(3) = Format(TimeSerial(0, GetStatusMinutes("Связь в норме", CDate(sql), CDate(sql1), , 1), 0), " h ч. mm мин.")
End If
If smenCount > 1 Then
sql = Format(tmpdate, "dd.mm.yyyy") & " " & DateTimes(2)
tmpdate = DateAdd("d", 1, tmpdate)
sql1 = Format(tmpdate, "dd.mm.yyyy") & " " & DateTimes(3)
If CDate(ListView1.ListItems(ListView1.ListItems.Count).Text) < sql1 Then Exit Sub
lstLog.ListItems.Add , "k3" & i, "III смена" '& CDate(sql) & " " & CDate(sql1)
lstLog.ListItems("k3" & i).SubItems(1) = Format(TimeSerial(0, GetStatusMinutes("Останов", CDate(sql), CDate(sql1), , 2), 0), " h ч. mm мин.")
lstLog.ListItems("k3" & i).SubItems(2) = Format(TimeSerial(0, GetStatusMinutes("Запуск", CDate(sql), CDate(sql1), , 2), 0), " h ч. mm мин.")
lstLog.ListItems("k3" & i).SubItems(3) = Format(TimeSerial(0, GetStatusMinutes("Связь в норме", CDate(sql), CDate(sql1), , 2), 0), " h ч. mm мин.")
End If
If smenCount > 2 Then
sql = Format(tmpdate, "dd.mm.yyyy") & " " & DateTimes(3)
If CDate(ListView1.ListItems(ListView1.ListItems.Count).Text) < sql Then Exit Sub
sql1 = Format(tmpdate, "dd.mm.yyyy") & " " & DateTimes(0)
If CDate(ListView1.ListItems(ListView1.ListItems.Count).Text) < sql1 Then Exit Sub
lstLog.ListItems.Add , "k4" & i, "IV смена" ' & CDate(sql) & " " & CDate(sql1)
lstLog.ListItems("k4" & i).SubItems(1) = Format(TimeSerial(0, GetStatusMinutes("Останов", CDate(sql), CDate(sql1), , 3), 0), " h ч. mm мин.")
lstLog.ListItems("k4" & i).SubItems(2) = Format(TimeSerial(0, GetStatusMinutes("Запуск", CDate(sql), CDate(sql1), , 3), 0), " h ч. mm мин.")
lstLog.ListItems("k4" & i).SubItems(3) = Format(TimeSerial(0, GetStatusMinutes("Связь в норме", CDate(sql), CDate(sql1), , 3), 0), " h ч. mm мин.")
End If
Next
Function GetStatusMinutes(StatusNames As String, StartDate As Date, EndDate As Date, Optional StatusIsActiveInStart As Boolean = False, Optional smena As Integer = 0) As Long
Dim StatusIsActive As Boolean, LastDate As Date, Status As String, StatusDate As Date
LastDate = StartDate
StatusIsActive = StatusIsActiveInStart
For i = 1 To ListView1.ListItems.Count
Status = ListView1.ListItems(i).SubItems(1)
StatusDate = CDate(ListView1.ListItems(i).Text)
If StatusDate > EndDate Then Exit For
If InStr(StatusNames, Status) Then
If Not StatusIsActive Then
If StatusDate > LastDate Then LastDate = StatusDate
StatusIsActive = True
End If
ElseIf StatusIsActive Then
If StatusDate > StartDate Then
GetStatusMinutes = GetStatusMinutes + DateDiff("n", LastDate, StatusDate)
' If GetStatusMinutes > (timeLength(smena) * 60) Then GetStatusMinutes = (timeLength(smena) * 60)
End If
StatusIsActive = False
End If
Next
If StatusIsActive Then
GetStatusMinutes = GetStatusMinutes + DateDiff("n", LastDate, EndDate)
' If GetStatusMinutes > (timeLength(smena) * 60) Then GetStatusMinutes = (timeLength(smena) * 60)
End If
End Function