اذهب الي المحتوي
أوفيسنا

احتساب يوم العمل 7 ساعات وليس 24 ساعة في حساب الفرق بين تاريخين


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

السلام عليكم 

اخواني لدي برنامج طلبات واريد احتساب مدة بقاء الطلب عند الموظف

يوم العمل 7 ساعات من السابعة صباحا الى الثانية بعد الظهر

نتخيل طلب كما في المرفق التجريبي

تقدم احد الموظفين بطلب شهادة عمل فان الموظف الخاص بالطلبات يكتب الطلب ومباشرة سيتم كتابة تاريخ الطلب مع الوقت

بعدها يظهر الطلب للميتخدم 1 والذي بدوره سيطبع الطلب ثم يضغط على خانة الاختيار بالانجاز وسيتم كتابة اسمه وتاري ووقت الانجاز

وهكذا لكل من الموظف 2 والموظف 3

في المرفق استعلام احتساب مدةبقاء الطلب لدى كل مستخدم بالدقائق في المستخدم 1 و2 الوقت صحيح لانه في نفس اليوم تم الانجاز لكن مستخدم 3 لانه عمل على الطلب في اليوم التالي فقد كان الناتج كبير لانه احتسب الفترة بعد الدوام ضمن الفترة 

المطلوب

ان يحتسب اليوم 7 ساعات اي ان النتيجة الصحيحة للمستخدم 3 هي 171 دقيقة (153 من اليوم السابق + 18 من اليوم التالي) وليست 1193 كما في الاستعلام

----------------------

طبعا لم اقم باضافة اكواد لتسجيل الوقت لانه مثال لتوصيل المطلوب 

مع جزيل الشكر 

قاعدة البيانات8.mdb

رابط هذا التعليق
شارك

وعليكم السلام حبيبا الغائب عن النظر والموجود في القلب:smile:

 

حيا الله ابو احمد:smile:

 

الطريقة اللي تجي في بالي هي:

1. نحسب الوقت من تاريخ اجاز2 الى نهاية الدوام الساعة 2 ظهرا ،

2. نحسب الوقت من بداية دوام اليوم التالي من الساعة 7 صباحا الى وقت انجاز3 ،

3. نجمع الوقتين 1 + 2  ونحصل على الوقت الذي اخذه الموظف3 :smile:

 

وهذا كود الاستعلام لكل من النقاط الثلاث اعلاه:

1.
Time_Left_Today: DateDiff("n",[DEmp2],DateSerial(Year([DEmp2]),Month([DEmp2]),Day([DEmp2])) & " 2:00:00 PM")


2.
Time_Tomorrow_Til_DEmp3: DateDiff("n",DateSerial(Year([DEmp3]),Month([DEmp3]),Day([DEmp3])) & " 7:00:00 AM",[DEmp3])


3.
Time3: DateDiff("n",[DEmp2],DateSerial(Year([DEmp2]),Month([DEmp2]),Day([DEmp2])) & " 2:00:00 PM")+DateDiff("n",DateSerial(Year([DEmp3]),Month([DEmp3]),Day([DEmp3])) & " 7:00:00 AM",[DEmp3])


وهذا الاستعلام بكامله
SELECT tbl1.Rqu, tbl1.RquD, tbl1.NEmp1, tbl1.DEmp1, DateDiff("n",[rquD],[DEmp1]) AS Time1, tbl1.NEmp2, tbl1.DEmp2, DateDiff("n",[DEmp1],[DEmp2]) AS Time2, tbl1.NEmp3, tbl1.DEmp3, DateDiff("n",[DEmp2],DateSerial(Year([DEmp2]),Month([DEmp2]),Day([DEmp2])) & " 2:00:00 PM") AS Time_Left_Today, DateDiff("n",DateSerial(Year([DEmp3]),Month([DEmp3]),Day([DEmp3])) & " 7:00:00 AM",[DEmp3]) AS Time_Tomorrow_Til_DEmp3, DateDiff("n",[DEmp2],DateSerial(Year([DEmp2]),Month([DEmp2]),Day([DEmp2])) & " 2:00:00 PM")+DateDiff("n",DateSerial(Year([DEmp3]),Month([DEmp3]),Day([DEmp3])) & " 7:00:00 AM",[DEmp3]) AS Time3
FROM tbl1;

 

والنتيجة

973.Clipboard01.jpg.08154d9d14438f1fabdda9c2304b0014.jpg

 

جعفر

973.قاعدة البيانات8.mdb.zip

  • Thanks 1
رابط هذا التعليق
شارك

مع جزيل الشكر لك استاذ جعفر 

سوال هل سيعمل لو ان الطلب وقف يومين او ثلاثة ثم عمل عليه الموظف في اليوم الرابع فهل ستكون النتجة مضبوطة

اعذرني فقد نسيت الاشارة الى هذه الملاحظة

 

ايضا 

لا يرتبط اليوم التالي بموظف محدد فقد يكون المستخدم ١ هو مو عمل في اليوم التالي وهكذا 

رابط هذا التعليق
شارك

5 دقائق مضت, jjafferr said:

طريقة الحساب (مع تعديل في الشرح ليلائم سؤالك الاخير):

1. نحسب الوقت من تاريخ اجاز2 الى نهاية الدوام الساعة 2 ظهرا ،

2. نحسب الوقت من بداية دوام يوم/وقت انجاز3 من الساعة 7 صباحا الى وقت انجاز3 ،

3. نجمع الوقتين 1 + 2  ونحصل على الوقت الذي اخذه الموظف3 :smile:

 

4 دقائق مضت, عبدالله المجرب said:

سوال هل سيعمل لو ان الطلب وقف يومين او ثلاثة ثم عمل عليه الموظف في اليوم الرابع فهل ستكون النتجة مضبوطة

 

والجواب نعم:smile:

 

جعفر

رابط هذا التعليق
شارك

المشكلة انه تم ربط الحساب بالموظف 

اي ان الموظف الثالث هو الذي يتم احتساب اليوم التالي

===

لا بد ان لا يرتبط بالموظف فقد يكون مستخدم 1 عمل على الطلب في اليوم الثاني ثم جاء مستخدم 2 للعمل في اليوم نفسه ثم مستخدم 3 في نفس اليوم كذلك

اي ان المطلوب ان ما قمت بعمل جميل جدا لكن لابد ان يكون مرن ومع كل المستخدمين

 

ملاحظة 

اذا لم يعمل المستخدم لمدة يومين فانه يضاف 7 ساعات اي 420 دقيقة عن كل يوم وهكذا

رابط هذا التعليق
شارك

منذ ساعه, عبدالله المجرب said:

1. فقد يكون مستخدم 1 عمل على الطلب في اليوم الثاني ثم جاء مستخدم 2 للعمل في اليوم نفسه

2. ثم مستخدم 3 في نفس اليوم كذلك

3. اذا لم يعمل المستخدم لمدة يومين فانه يضاف 7 ساعات اي 420 دقيقة عن كل يوم وهكذا

 

في هذه الحالة ، يجب ان يكون الحساب لكل موظف ، وليس لآخر موظف فقط ، وحساب الوقت يجب ان يتغير الى دقائق:ساعات:ايام :smile:

 

استخدمت وحدات نمطية اثنان ، وارسلت معلومتين لكل موظف لهم ، هكذا:

973.Clipboard03.jpg.9ca1ddcffb7e43008f6e23339bfd76e1.jpg

 

والنتيجة:

973.Clipboard02.jpg.f46977cf80d3b2a27dff11637bd43b62.jpg

 

وهذه الوحدات النمطية التي تقوم بالعمل:

Public Function Calc_Diff(DE1 As Date, DE2 As Date) As String

    Dim Time_Left_day1 As Long
    Dim Time_day2_Morning_Til_DE2 As Long
    Dim Time_days_Between_day1_day2 As Long
    Dim Interval As Long
    
    'all the calculations are in minutes
    'DE1 = Date 1st Employee finished his task
    'DE2 = Date 2nd Employee finished his task
    
    'DE1 & DE2 finished the same day
    If Format(DE1, "yyyymmdd") = Format(DE2, "yyyymmdd") Then
        Interval = DateDiff("n", DE1, DE2)
    
    
    'DE2 finished next day
    ElseIf DateDiff("d", DE1, DE2) = 1 Then
    
        'time from DE1 til the end of the day
        Time_Left_day1 = DateDiff("n", DE1, DateSerial(Year(DE1), Month(DE1), Day(DE1)) & " 2:00:00 PM")
        
        'time from morning til DE2 finished
        Time_day2_Morning_Til_DE2 = DateDiff("n", DateSerial(Year(DE2), Month(DE2), Day(DE2)) & " 7:00:00 AM", DE2)
               
        'add the above
        Interval = Time_Left_day1 + Time_day2_Morning_Til_DE2
    
    
    'DE2 didn't finish next day
    Else
    
        'time from DE1 til the end of the day
        Time_Left_day1 = DateDiff("n", DE1, DateSerial(Year(DE1), Month(DE1), Day(DE1)) & " 2:00:00 PM")
        
        'time from morning til DE2 finished
        Time_day2_Morning_Til_DE2 = DateDiff("n", DateSerial(Year(DE2), Month(DE2), Day(DE2)) & " 7:00:00 AM", DE2)
        
        'time days between day1 and day2
        Time_days_Between_day1_day2 = DateDiff("d", DE1, DE2) * 420 ' 1 working day =  7 hours x 60 minutes/hour = 420 minutes
        
        'add the above
        Interval = Time_Left_day1 + Time_day2_Morning_Til_DE2 + Time_days_Between_day1_day2
        
    End If
    
    ' Format and print the time interval in days, hours, minutes and seconds.
    Calc_Diff = Minutes2Duration(Interval)
    
End Function

Public Function Minutes2Duration(minutes As Long) As String

    Dim dd As Integer, hh As Integer, mm As Integer

    'from: http://bytes.com/topic/access/answers/696226-converting-minutes-days-hours-minutes
    ' modified by jjafferr based on the working day hours
    ' 1 day         = 24 hours x 60 minutes/hour = 1440 minutes
    ' 1 working day =  7 hours x 60 minutes/hour = 420 minutes
    '
    
    dd = minutes \ 420
    minutes = minutes - dd * 420
    hh = minutes \ 60
    mm = minutes Mod 60

    If dd = 0 Then
        'No day adjustment
        Minutes2Duration = Format(dd, "000") & ":" & Format(hh, "00") & ":" & Format(mm, "00")

    Else
        'needs day adjustment
        Minutes2Duration = Format(dd - 1, "000") & ":" & Format(hh, "00") & ":" & Format(mm, "00")
        
    End If
    
End Function

 

جعفر

973.1.قاعدة البيانات8.mdb.zip

رابط هذا التعليق
شارك

هلا والله بالاساتذة الغائبين الحاضرين

والله انا مار سريعا وفي اخر ساعه من يومي

لكن ماادري استاذ جعفر هل تم اخذ الحسبان كذلك ايام الويك اند ؟ 

تحياتي للجميع

رابط هذا التعليق
شارك

حباك الله اخوي رمهان:smile:

 

لا الويك اند ، ولا الاجازات:blink:

بس الحمدلله ، بعد ان تم تحويل الحسبة الى وحدة نمطية ، فالموضوع يمكن معالجته بسهولة ان شاء الله:smile:

 

جعفر

رابط هذا التعليق
شارك

يا مرحبا بالاستاذ رمهان

عمل رائع استاذجعفر 

لكن

لاحظت انه اذا صادف نفس الساعة في اليوم التالي فانه لا يحسب اليوم كما في الصورة

 

وطلب اخير خو جمع الوقت بحيث يبين كم اخذ الطلب في دورته حتى انجز وكذلك سيكون لدي جدول اخر يحدد لكل طلب مدة هي المدة الافتراضية وسيكون هناك مقارنة بينها وبين مجموع هذه الساعات

 

مع جزيل الشكر على هذا العمل 

 

12.jpg

رابط هذا التعليق
شارك

السلام عليكم

 

تفضل:

الاستعلام اصبح:

973.1.Clipboard02.jpg.ceebfac22e29ca397ccaf0b5f0c37249.jpg

.

ونتائج النموذج:

973.1.Clipboard01.jpg.e20b91b4b8b076bcf1be75cd52a3b8c5.jpg

.

والوحدة النمطية:

Public Function Calc_Diff(DE1 As Date, DE2 As Date) As Long

    Dim Time_Left_day1 As Long
    Dim Time_day2_Morning_Til_DE2 As Long
    Dim Time_days_Between_day1_day2 As Long
    Dim Interval As Long
    
    'all the calculations are in minutes
    'DE1 = Date 1st Employee finished his task
    'DE2 = Date 2nd Employee finished his task
    
    'DE1 & DE2 finished the same day
    If Format(DE1, "yyyymmdd") = Format(DE2, "yyyymmdd") Then
        Interval = DateDiff("n", DE1, DE2)
    
    
    'DE2 finished next day
    ElseIf DateDiff("d", DE1, DE2) = 1 Then
    
        'time from DE1 til the end of the day
        Time_Left_day1 = DateDiff("n", DE1, DateSerial(Year(DE1), Month(DE1), Day(DE1)) & " 2:00:00 PM")
        
        'time from morning til DE2 finished
        Time_day2_Morning_Til_DE2 = DateDiff("n", DateSerial(Year(DE2), Month(DE2), Day(DE2)) & " 7:00:00 AM", DE2)
               
        'add the above
        Interval = Time_Left_day1 + Time_day2_Morning_Til_DE2
    
    
    'DE2 didn't finish next day
    Else
    
        'time from DE1 til the end of the day
        Time_Left_day1 = DateDiff("n", DE1, DateSerial(Year(DE1), Month(DE1), Day(DE1)) & " 2:00:00 PM")
        
        'time from morning til DE2 finished
        Time_day2_Morning_Til_DE2 = DateDiff("n", DateSerial(Year(DE2), Month(DE2), Day(DE2)) & " 7:00:00 AM", DE2)
        
        'time days between day1 and day2
        Time_days_Between_day1_day2 = DateDiff("d", DE1, DE2) * 420 ' 1 working day =  7 hours x 60 minutes/hour = 420 minutes
        
        'add the above
        Interval = Time_Left_day1 + Time_day2_Morning_Til_DE2 + Time_days_Between_day1_day2
        
    End If
    
    ' Format and print the time interval in days, hours, minutes and seconds.
    'Calc_Diff = Minutes2Duration(Interval)
    Calc_Diff = Interval
    
End Function

Public Function Minutes2Duration(minutes As Long) As String

    Dim dd As Long, hh As Integer, mm As Integer

    'from: http://bytes.com/topic/access/answers/696226-converting-minutes-days-hours-minutes
    ' modified by jjafferr based on the working day hours
    ' 1 day         = 24 hours x 60 minutes/hour = 1440 minutes
    ' 1 working day =  7 hours x 60 minutes/hour = 420 minutes
    '
    
    dd = minutes \ 420
    minutes = minutes - dd * 420
    hh = minutes \ 60
    mm = minutes Mod 60

'    If dd = 0 Then
        'No day adjustment
        Minutes2Duration = Format(dd, "000") & ":" & Format(hh, "00") & ":" & Format(mm, "00")

'    Else
        'needs day adjustment
'        Minutes2Duration = Format(dd - 1, "000") & ":" & Format(hh, "00") & ":" & Format(mm, "00")
        
'    End If
    
End Function

 

جعفر

973.1.قاعدة البيانات8.mdb.zip

  • Thanks 2
رابط هذا التعليق
شارك

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