Arıza Süresi Belirleme Formül Hatası

09/12/2011, 02:48

lol4504

Merhabalar.

https://accesstr.net/konu-sorgu-formlari...tarma.html çalışmamızda raporlama ve sorguların bağlantısını benremix hocamın yardımları ile hallettik.

Hazırladığımız forumlarda arıza başlangıç tarihi ve arıza başlangıç saatinden arıza bitiş tarihi ve arıza bitiş saatini çıkardığımızda sonuç doğru çıkmıyor

(06.12.2011 10:40) - (06.12.2011 10:50) = 11:20
10 Dakika çıkması gerekir iken sonuç bu çıkmakta. kullandığım formül aşağıdadır. Düzenlemesine yardımcı olacak arkadaşlara şimdiden teşekkür ediyorum...

=Format(DateDiff("h";[Arıza Bildirim Tarihi]+[Arıza Bildirim Saati];[Arıza Bitiş Tarihi]+[Arıza Bitiş Saati]);"00") & ":" & Format(DateDiff("n";[Arıza Bildirim Tarihi]+[Arıza Bildirim Saati];[Arıza Bitiş Tarihi]+[Arıza Bitiş Saati]) Mod 60;"00")

Ek Dosyalar


Ek Dosyalar


10/12/2011, 03:44

ozanakkaya

tabloda arıza bitiş tarihleri "06/12/2011 08:00:00" şeklinde kaydedildiği için formül çalışmıyor olabilir.
Arıza süresi metin kutusunun denetim kaynağına
=Diff2Dates("dhn",(Format([Arıza Bildirim Tarihi],"dd/mm/yyyy")) & " " & [Arıza Bildirim Saati],(Format([Arıza Bitiş Tarihi],"dd/mm/yyyy")) & " " & [Arıza Bitiş Saati],Doğru)
yaz, aşağıdaki kodu modül olarak kaydet
Option Compare Database
Public Function Diff2Dates(Interval As String, Date1 As Date, Date2 As Date, _
Optional ShowZero As Boolean = False) As Variant

On Error GoTo Err_Diff2Dates

Dim booCalcYears As Boolean
Dim booCalcMonths As Boolean
Dim booCalcDays As Boolean
Dim booCalcHours As Boolean
Dim booCalcMinutes As Boolean
Dim booCalcSeconds As Boolean
Dim booSwapped As Boolean
Dim dtTemp As Date
Dim intCounter As Integer
Dim lngDiffYears As Long
Dim lngDiffMonths As Long
Dim lngDiffDays As Long
Dim lngDiffHours As Long
Dim lngDiffMinutes As Long
Dim lngDiffSeconds As Long
Dim varTemp As Variant

Const INTERVALS As String = "dmyhns"

Interval = LCase$(Interval)
For intCounter = 1 To Len(Interval)
If InStr(1, INTERVALS, Mid$(Interval, intCounter, 1)) = 0 Then
Exit Function
End If
Next intCounter

'Check that valid dates have been entered
If Not (IsDate(Date1)) Then Exit Function
If Not (IsDate(Date2)) Then Exit Function

'If necessary, swap the dates, to ensure that
'Date1 is lower than Date2
If Date1 > Date2 Then
dtTemp = Date1
Date1 = Date2
Date2 = dtTemp
booSwapped = True
End If

Diff2Dates = Null
varTemp = Null

'What intervals are supplied
booCalcYears = (InStr(1, Interval, "y") > 0)
booCalcMonths = (InStr(1, Interval, "m") > 0)
booCalcDays = (InStr(1, Interval, "d") > 0)
booCalcHours = (InStr(1, Interval, "h") > 0)
booCalcMinutes = (InStr(1, Interval, "n") > 0)
booCalcSeconds = (InStr(1, Interval, "s") > 0)

'Get the cumulative differences
If booCalcYears Then
lngDiffYears = Abs(DateDiff("yyyy", Date1, Date2)) - _
IIf(Format$(Date1, "mmddhhnnss") <= Format$(Date2, "mmddhhnnss"), 0, 1)
Date1 = DateAdd("yyyy", lngDiffYears, Date1)
End If

If booCalcMonths Then
lngDiffMonths = Abs(DateDiff("m", Date1, Date2)) - _
IIf(Format$(Date1, "ddhhnnss") <= Format$(Date2, "ddhhnnss"), 0, 1)
Date1 = DateAdd("m", lngDiffMonths, Date1)
End If

If booCalcDays Then
lngDiffDays = Abs(DateDiff("d", Date1, Date2)) - _
IIf(Format$(Date1, "hhnnss") <= Format$(Date2, "hhnnss"), 0, 1)
Date1 = DateAdd("d", lngDiffDays, Date1)
End If

If booCalcHours Then
lngDiffHours = Abs(DateDiff("h", Date1, Date2)) - _
IIf(Format$(Date1, "nnss") <= Format$(Date2, "nnss"), 0, 1)
Date1 = DateAdd("h", lngDiffHours, Date1)
End If

If booCalcMinutes Then
lngDiffMinutes = Abs(DateDiff("n", Date1, Date2)) - _
IIf(Format$(Date1, "ss") <= Format$(Date2, "ss"), 0, 1)
Date1 = DateAdd("n", lngDiffMinutes, Date1)
End If

If booCalcSeconds Then
lngDiffSeconds = Abs(DateDiff("s", Date1, Date2))
Date1 = DateAdd("s", lngDiffSeconds, Date1)
End If

If booCalcYears And (lngDiffYears > 0 Or ShowZero) Then
varTemp = lngDiffYears & IIf(lngDiffYears <> 1, " yıl", " yıl")
End If

If booCalcMonths And (lngDiffMonths > 0 Or ShowZero) Then
If booCalcMonths Then
varTemp = varTemp & IIf(IsNull(varTemp), Null, " ") & _
lngDiffMonths & IIf(lngDiffMonths <> 1, " ay", " ay")
End If
End If

If booCalcDays And (lngDiffDays > 0 Or ShowZero) Then
If booCalcDays Then
varTemp = varTemp & IIf(IsNull(varTemp), Null, " ") & _
lngDiffDays & IIf(lngDiffDays <> 1, " gün", " gün")
End If
End If

If booCalcHours And (lngDiffHours > 0 Or ShowZero) Then
If booCalcHours Then
varTemp = varTemp & IIf(IsNull(varTemp), Null, " ") & _
lngDiffHours & IIf(lngDiffHours <> 1, " saat", " saat")
End If
End If

If booCalcMinutes And (lngDiffMinutes > 0 Or ShowZero) Then
If booCalcMinutes Then
varTemp = varTemp & IIf(IsNull(varTemp), Null, " ") & _
lngDiffMinutes & IIf(lngDiffMinutes <> 1, " dakika", " dakika")
End If
End If

If booCalcSeconds And (lngDiffSeconds > 0 Or ShowZero) Then
If booCalcSeconds Then
varTemp = varTemp & IIf(IsNull(varTemp), Null, " ") & _
lngDiffSeconds & IIf(lngDiffSeconds <> 1, " seconds", " second")
End If
End If

If booSwapped Then
varTemp = "-" & varTemp
End If

Diff2Dates = Trim$(varTemp)

End_Diff2Dates:
Exit Function

Err_Diff2Dates:
Resume End_Diff2Dates

End Function
'************** Code End *****************


11/12/2011, 02:02

lol4504

sledgeab hocam yardımlarınız için çok teşekkür ediyorum. Modülü oluşturup kodu yerine koydum. Rapor aldığımda doğru çıkıyor. Fakat sizin verdiğiniz resimdeki gibi Arıza Kayıt Formu'nda bunu çıkartamadım. Arıza bitiş tarihi sütununda çıkan saat ibarelerini kaldırdım. fakat bazı arıza kayıtlarında 1 saat fazla bir değer çıkartıyor. ( Örnek = Hata No 5902 )Dosyayı ekte yolluyorum. Bakıp nerede hata yaptığımı söyleyebilir misiniz? Düzenlemenin son halini siz uygulayabilir iseniz çok mutlu olacağım. İyi geceler.

Ek Dosyalar

11/12/2011, 02:27

fatihgns

Merhaba,

sledgeab dediği gibi ArızaData tablosunda "Arıza Bitiş Tarihi" biçimi sadece tarih(dd.mm.yy) olmasına rağmen tarihle beraber saat bilgiside içeriyor.

Bunu daha ayrıntılı görmek için ArızaData tablosunda "Arıza Bildirim Tarihi" ve "Arıza Bitiş Tarihi" biçiminini
(dd.mm.yy hh:nn) olarak değiştirip kaydedin.
Tabloyu açtığınızda örneğin 15.kaydın aşağıdaki değerleri aldığını görürsün.
"Arıza Bildirim Tarihi" 21.09.2010 00:00
"Arıza Bitiş Tarihi"    21.09.2010 04:40

Sonuç olarak bütün kayıtlardan tarih kısmının yanındaki saatleri 00:00 yapman gerekiyor.
Ancak bu şekilde yazdığın formül düzgün çalışacaktır.

Formu tasarım görünümde açtıktan sonra Toplam Arıza Süresi kutusunun içerisine formülünüzü yazarsanız,
form'da istediğiniz süre gelecektir.

Projenizi anlattığım şekilde düzenledim. Tarihteki fazlalık saatleride sildim. Son hali ektedir:
Ek Dosyalar

12/12/2011, 02:03

lol4504

Çok teşekkür ediyorum arkadaşım eline emeğine sağlık. Bu Arıza Takip programına başladığım andan itibaren sorularıma cevap veren tüm arkadaşlarıma teşekkür ediyorum. Allah hepinizden razı olsun. İyi geceler...
12/12/2011, 02:28

ozanakkaya

(11/12/2011, 02:02)lol4504 yazdı: sledgeab hocam yardımlarınız için çok teşekkür ediyorum. Modülü oluşturup kodu yerine koydum. Rapor aldığımda doğru çıkıyor. Fakat sizin verdiğiniz resimdeki gibi Arıza Kayıt Formu'nda bunu çıkartamadım. Arıza bitiş tarihi sütununda çıkan saat ibarelerini kaldırdım. fakat bazı arıza kayıtlarında 1 saat fazla bir değer çıkartıyor. ( Örnek = Hata No 5902 )Dosyayı ekte yolluyorum. Bakıp nerede hata yaptığımı söyleyebilir misiniz? Düzenlemenin son halini siz uygulayabilir iseniz çok mutlu olacağım. İyi geceler.
Arıza Süresi metin kutusunun denetim kaynağına
=Diff2Dates("dhn",(Format([Arıza Bildirim Tarihi],"dd/mm/yyyy")) & " " & [Arıza Bildirim Saati],(Format([Arıza Bitiş Tarihi],"dd/mm/yyyy")) & " " & [Arıza Bitiş Saati],Doğru)
kodunu yazmamışsın, Raporda ise sizin 1. mesajda hatalı olarak belirttiğiniz kod duruyor.

Konu taşınmıştır.