Skip to main content

AccessTr.neT


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

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

Çözüldü #1
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
 Makine ArızaTakip.zip(628.83 KB)


Ek Dosyalar
 Durum İki Tarih Arası Arıza Kayıt Raporu.zip(43.18 KB)


Cevapla
Çözüldü #2
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 *****************

[Resim: 13234782151.png]
Cevapla
Çözüldü #3
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
 Makine ArızaTakip_A.zip(647.88 KB)
Son Düzenleme: 11/12/2011, 02:35, Düzenleyen: lol4504.
Cevapla
Çözüldü #4
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
 Makine ArızaTakip_fatihgns.zip(301.07 KB)
Son Düzenleme: 11/12/2011, 15:40, Düzenleyen: fatihgns.
Cevapla
Çözüldü #5
Ç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...
Cevapla
Çözüldü #6
(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.


Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da