اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

الردود الموصى بها

قام بنشر

الخبراء الافاضل

عيدكم مبارك   عيد فطر سعيد

اريد تنفيذ الشكل الموجود بالصورة فى الاستعلام

Untitled.png

JO_IN_OUT.accdb

قام بنشر

كل عام وانت بخير استاذ @jo_2010 وكل الاخوة والاساتذة الافاضل 

المشكلة لديك ان الدالة تنظر الى الفرق بين الساعات والدقائق ولم تاخذ بالحساب الايام 

عملت لك بطريقتين... التقليدية ...والثانية بواسطة موديول 

 

JO_IN_OUT.rar

قام بنشر

وعليكم السلام ورحمة الله وبركاته ,,

عيدكم مبارك جميعاً ، واسمحوا لي بمشاركة أخي الأستاذ @Eng.Qassim ..

فكرتي البسيطة والتي لا تـُـنقِص من جهده ولا تـُـزايد عليه ، وإنما طريقة أخرى دون الحاجة الى عمليات حسابية في الاستعلام ..

 

SELECT Tbl_IN_OUT.ID, Tbl_IN_OUT.Nname, Tbl_IN_OUT.Start_Day, Tbl_IN_OUT.End_Day, Int(DateDiff('n',[Start_Day],[End_Day])/1440) & " يوم و" & 
    Int((DateDiff('n',[Start_Day],[End_Day]) Mod 1440)/60) & " ساعات و" & 
    DateDiff('n',[Start_Day],[End_Day]) Mod 60 & " دقائق و" & 
    DateDiff('s',[Start_Day],[End_Day]) Mod 60 & " ثانية" AS [الفرق الزمني], Int(DateDiff('n',[Start_Day],[End_Day])/1440) AS الأيام, Int((DateDiff('s',[Start_Day],[End_Day]) Mod 86400)/3600) AS الساعات, Int((DateDiff('s',[Start_Day],[End_Day]) Mod 3600)/60) AS الدقائق, DateDiff('s',[Start_Day],[End_Day]) Mod 60 AS الثواني
FROM Tbl_IN_OUT;

حيث صب تركيزي على استخدام الدالة DateDiff المخصصة لحساب الفروق الزمنية ،

لعرض الفرق بين الوقتين كسلسلة نصية كاملة + وحدات زمنية منفصلة ( أيام ، ساعات ، دقائق ، ثواني ) .

 

قام بنشر
7 ساعات مضت, Foksh said:

والتي لا تـُـنقِص من جهده ولا تـُـزايد عليه

كل عام وانت بالف خير استاذي العزيز @Foksh

بالعكس..زيادة الخير خيرين ..لكني لم اتطرق الى الثواني حسب طلب السائل ...ثم اني تقصدت ان اضع موديول (للبعض طبعا) الذين لايعرفون كيفية تمرير البيانات والحصول على النتائج ...انا شخصيا من محبي استخدام ال Module & Class خارج خلفية النماذج او الاستعلام 

قام بنشر

الخبير الفاضل Eng.Qassim

اشكرك على سرعة الاستجابة ومن اجل الحلول المتعددة لكن او تصحيح بعض الامور كما بالصورة

Untitled.png

قام بنشر

الخبير الفاضل Foksh

شكرا على الاجابة المختصرة التى تعطى نتائج رائعة هل من الممكن مساعدتى حتى احصل على كل مااريد فى هذا الاستعلام كما بالصورة لك خالص الشكر

قام بنشر
منذ ساعه, jo_2010 said:

الخبير الفاضل Foksh

شكرا على الاجابة المختصرة التى تعطى نتائج رائعة هل من الممكن مساعدتى حتى احصل على كل مااريد فى هذا الاستعلام كما بالصورة لك خالص الشكر

تفضل التعديل التالي :-

SELECT Tbl_IN_OUT.ID, Tbl_IN_OUT.Nname, Tbl_IN_OUT.Start_Day, Tbl_IN_OUT.End_Day, Int(DateDiff('n',[Start_Day],[End_Day])/1440) & " يوم و" & 
       Int((DateDiff('n',[Start_Day],[End_Day]) Mod 1440)/60) & " ساعات و" & 
       DateDiff('n',[Start_Day],[End_Day]) Mod 60 & " دقائق و" & 
       DateDiff('s',[Start_Day],[End_Day]) Mod 60 & " ثانية" AS [الفرق الزمني], Int(DateDiff('n',[Start_Day],[End_Day])/1440) AS الأيام, Int((DateDiff('s',[Start_Day],[End_Day]) Mod 86400)/3600) AS الساعات, Int((DateDiff('s',[Start_Day],[End_Day]) Mod 3600)/60) AS الدقائق, DateDiff('s',[Start_Day],[End_Day]) Mod 60 AS الثواني, Format(Int(DateDiff('s',[Start_Day],[End_Day])/3600), "00") & ":" & 
       Format(Int((DateDiff('s',[Start_Day],[End_Day]) Mod 3600)/60), "00") AS [مجموع الساعات والدقائق]
FROM Tbl_IN_OUT;

 

قام بنشر

مشاركة مع اساتذتى الكرام واحبابى 

اليك هذه الاكواد
 

Public Function CalculateTimeDifference(startDate As Variant, endDate As Variant) As String
    On Error GoTo ErrorHandler

    Dim totalSeconds As Double
    Dim days As Long
    Dim hours As Long
    Dim minutes As Long
    Dim seconds As Long

    ' التحقق من أن التاريخين ليسا فارغين وهما صالحان
    If IsNull(startDate) Or IsNull(endDate) Then
        CalculateTimeDifference = "أحد التواريخ فارغ"
        Exit Function
    ElseIf Not IsDate(startDate) Or Not IsDate(endDate) Then
        CalculateTimeDifference = "أحد التواريخ غير صالح"
        Exit Function
    End If

    ' تحويل التاريخين إلى نوع Date
    Dim start As Date
    Dim endD As Date
    start = CDate(startDate)
    endD = CDate(endDate)

    ' حساب الفرق بالثواني
    totalSeconds = DateDiff("s", start, endD)

    ' التحقق من القيمة السالبة
    If totalSeconds < 0 Then
        CalculateTimeDifference = "تاريخ النهاية يجب أن يكون بعد تاريخ البداية"
        Exit Function
    End If

    ' تحويل الثواني إلى أيام
    days = Int(totalSeconds / 86400)  ' 86400 = عدد ثواني اليوم
    totalSeconds = totalSeconds - (days * 86400)

    ' تحويل الثواني إلى ساعات
    hours = Int(totalSeconds / 3600)  ' 3600 = عدد ثواني الساعة
    totalSeconds = totalSeconds - (hours * 3600)

    ' تحويل الثواني إلى دقائق
    minutes = Int(totalSeconds / 60)

    ' الثواني المتبقية
    seconds = totalSeconds - (minutes * 60)

    ' إرجاع النتيجة كنص
    CalculateTimeDifference = days & " أيام, " & hours & " ساعات, " & minutes & " دقائق, " & seconds & " ثواني"

    Exit Function

ErrorHandler:
    CalculateTimeDifference = "حدث خطأ: " & Err.Description
End Function


Public Function CalculateTimeParts(startDate As Variant, endDate As Variant, part As String) As Long
    On Error GoTo ErrorHandler
    
    Dim years As Long
    Dim months As Long
    Dim days As Long
    Dim hours As Long
    Dim minutes As Long
    Dim seconds As Long
    Dim tempDate As Date
    
    ' التحقق من أن التاريخين ليسا فارغين
    If IsNull(startDate) Or IsNull(endDate) Then
        CalculateTimeParts = 0
        Exit Function
    End If
    
    ' التحقق من ترتيب التواريخ
    If startDate > endDate Then
        CalculateTimeParts = 0
        Exit Function
    End If
    
    ' البدء بحساب الفرقات الزمنية
    tempDate = startDate
    
    ' حساب الفرق في السنوات
    years = DateDiff("yyyy", tempDate, endDate)
    tempDate = DateAdd("yyyy", years, tempDate)
    
    ' حساب الفرق في الأشهر
    months = DateDiff("m", tempDate, endDate)
    tempDate = DateAdd("m", months, tempDate)
    
    ' التأكد من عدم وجود قيم سالبة بعد التعديلات
    If tempDate > endDate Then
        months = months - 1
        tempDate = DateAdd("m", -1, tempDate)
    End If
    
    ' حساب الفرق في الأيام
    days = DateDiff("d", tempDate, endDate)
    tempDate = DateAdd("d", days, tempDate)

    ' حساب الفرق في الساعات
    hours = DateDiff("h", tempDate, endDate)
    tempDate = DateAdd("h", hours, tempDate)

    ' حساب الفرق في الدقائق
    minutes = DateDiff("n", tempDate, endDate)
    tempDate = DateAdd("n", minutes, tempDate)

    ' حساب الفرق في الثواني
    seconds = DateDiff("s", tempDate, endDate)

    ' التأكد من عدم وجود قيم سالبة نهائياً
    If months < 0 Then months = 0
    If days < 0 Then days = 0
    If hours < 0 Then hours = 0
    If minutes < 0 Then minutes = 0
    If seconds < 0 Then seconds = 0

    ' إرجاع الجزء المطلوب
    Select Case part
        Case "Years": CalculateTimeParts = years
        Case "Months": CalculateTimeParts = months
        Case "Days": CalculateTimeParts = days
        Case "Hours": CalculateTimeParts = hours
        Case "Minutes": CalculateTimeParts = minutes
        Case "Seconds": CalculateTimeParts = seconds
        Case Else: CalculateTimeParts = 0
    End Select
    
    Exit Function
    
ErrorHandler:
    CalculateTimeParts = 0
End Function



الاستعلام الاول والمعتمد على الإجراء : CalculateTimeDifference

SELECT 
    Tbl_IN_OUT.ID, 
    Tbl_IN_OUT.Nname, 
    Tbl_IN_OUT.Start_Day, 
    Tbl_IN_OUT.End_Day, 
    CalculateTimeDifference([Start_Day], [End_Day]) AS Sub_Time
FROM 
    Tbl_IN_OUT;



الاستعلام الثانى والمعتمد على الإجراء : CalculateTimeParts

SELECT 
    Tbl_IN_OUT.ID, 
    Tbl_IN_OUT.Nname, 
    Tbl_IN_OUT.Start_Day, 
    Tbl_IN_OUT.End_Day, 
    CalculateTimeParts([Start_Day], [End_Day], "Years") AS Years_Diff,
    CalculateTimeParts([Start_Day], [End_Day], "Months") AS Months_Diff,
    CalculateTimeParts([Start_Day], [End_Day], "Days") AS Days_Diff,
    CalculateTimeParts([Start_Day], [End_Day], "Hours") AS Hours_Diff,
    CalculateTimeParts([Start_Day], [End_Day], "Minutes") AS Minutes_Diff,
    CalculateTimeParts([Start_Day], [End_Day], "Seconds") AS Seconds_Diff
FROM Tbl_IN_OUT;

 

قام بنشر (معدل)

المبدع ابو جودي

خالص الشكر لتعب حضرتك وعمل هذة الدالة الرائعة ولكنى اريد الشكل كما بالصورة هل هذا ممكن ام انا اطلب طلب غير ممكن 

هل استطيع تنفي1 ما بالصورة وكيف استطيع تجميع الساعات والدقائق

5:22+7:13 على مدار الشهر حتى اصل الى الاضافى فى عدد ساعات العمل 

ملحوظة عدد الايام فى الدالة يعطى نتيجة خطا

31/3/2025 8:00AM  الى 1/4/2025 10:05AM

الفرق 26 ساعة و5 دقائق

فى الدالة اللى حضرتك  كتبتها تعطى يومين وهو فى الحقيقة يوم واحد و2 ساعة و5 دقائق

 خالص الشكر

Untitled.png

تم تعديل بواسطه jo_2010
قام بنشر (معدل)

بالنسبة الى عدد الساعات والدقائق ...جرب هذه المحاولة 

 

JO_IN_OUT 1.rar

اذا اردتها لن تكون بهذه الضورة 38:52

اعمل حقل اخر في الاستعلام وضع هذا السطر 

 [TotalHours] & ":" & [TotalMinutes]

 

تم تعديل بواسطه Eng.Qassim

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information