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

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

قام بنشر

السلام عليكم

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

انتظروني بعض الوقت كي اجري تجاربي النهائية على العمليات وعلى المخرجات .

  • Like 3
قام بنشر
4 ساعات مضت, ابوخليل said:

السلام عليكم

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

انتظروني بعض الوقت كي اجري تجاربي النهائية على العمليات وعلى المخرجات .

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

اذا ليس هناك داعي للفترة الثالثة ؟؟

ننتظر ابداعك وتميزك معلمي الفاضل 🤗

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

اذا ليس هناك داعي للفترة الثالثة ؟؟

نعم .. تماما

السر في هذه الدالة التي حلت المشكلة

الدالة تتحدث وليست بحاجة الى شرح  .. حيث تفحص الوقت الحالي هل هو في مساء اليوم  ام لا

  Dim startTime As Date
  Dim endTime As Date
  Dim currentTime As Date
  Dim i As Integer
  startTime = TimeValue("12:01:00")
  endTime = TimeValue("23:59:59")
  currentTime = Time()
  If currentTime > startTime And currentTime < endTime Then
     i = 1
     Else
     i = 2
     End If
 CheckTimeBetween = i

وكان السبب الرئيس في المشكلة هو دالة توقيت المساء سواء الحضور او الانصراف

لأنه عند دخول اليوم التالي يعتبر الدخول المسائي ضمن مساء الغد

لهذا تم تعديل دالتي التوقيت المسائي وفقا لهذه الدالة اعلاه  انظروا  كيف تتعامل الدالتان ادناه

الشرط يقول : اذا الوقت الحالي داخل في شرط الدالة وصحيح .. اي =1 فالتاريخ تاريخ اليوم

وإلا فإن التاريخ هو تاريخ  الأمس

Public Function funFirstTimeB_in()
Dim z As Integer
Dim i As Date, ii As Date, jj As Date
z = Nz(DLookup("free2_in", "tblTimeCtrl"), 0)
If CheckTimeBetween() = 1 Then
i = DLookup("fatrah2_In", "tblTimeCtrl") & " " & Date
ii = DateAdd("n", -z, i)
 Else
 jj = DateAdd("d", -1, Date)
 i = DLookup("fatrah2_In", "tblTimeCtrl") & " " & jj
 ii = DateAdd("n", -z, i)
   End If
funFirstTimeB_in = ii
End Function

Public Function funLastTimeB_Out()
Dim z As Integer
Dim x As Integer, xx As Integer
Dim i As Date, ii As Date, jj As Date
z = Nz(DLookup("free2_out", "tblTimeCtrl"), 0)
x = Nz(DLookup("hours_Work2", "tblTimeCtrl"), 0)
xx = (x * 60) + z
If CheckTimeBetween() = 1 Then
 i = DLookup("fatrah2_In", "tblTimeCtrl") & " " & Date
ii = DateAdd("n", xx, i)
 Else
 jj = DateAdd("d", -1, Date)
 i = DLookup("fatrah2_In", "tblTimeCtrl") & " " & jj
 ii = DateAdd("n", xx, i)
   End If
  funLastTimeB_Out = ii
End Function

 

للتجربة والتأكد ان كل شيء تمام  جعلت عند التوقيع  في الفترتين كليهما .. تظهر رسالتان الاولى لبداية التوقيع والثانية لنهايته

اذا الامور تمام يمكنك تعطيل وايقاف هذه الرسائل

بداية التوقيع = وقت الدخول الرسمي - الوقت المتاح قبل

نهاية التوقيع = وقت الدخول الرسمي + عدد ساعات العمل + الوقت المتاح بعد

جعلت الاوقات المتاحة بالدقائق من اجل دقة الاختيار

 

  • Like 1
قام بنشر

بالنسبة للتوقيع فهو مفتوح

الاول حضور والثاني خروج .. ويمكن تكرار الدخول والخروج عدة مرات في الفترة الواحدة

اما خارج الوقت المتاح للفترة فلا يمكن التوقيع

بقي شيء لم اتأكد منه هل سيوقع انصراف في الغد لو لم يتمكن من التوقيع اليوم بسبب خروج الوقت  .. هذه ثغرة يجب ان اتأكد منها .. لأنه يجب ان يبقى حقل الانصراف فارغا

ويسجل له دخول جديد

قام بنشر

ما شاء الله .. فكرة جميلة ومحكمة لتلافي مشكلة الفترة المسائية ( تسجيل الحضور في يوم ، والخروج في اليوم التالي ) ..

وبما أنك اكتشفت ثغرة ، فاسمح لي باقتراح وملاحظة بسيطين أيضاً ، وهو أنني لاحظت من خلال الدالتين انهما تستخدمان DLookup في كل عملية ما يقارب 7 مرات . ومع وجود حدث التايمر في النموذج ..... :rol:  

حيث يمكن التعديل بحيث نستخدم استدعاء DLookup تقريباً 3 مرات تقريباً عند كل عملية تسجيل حضور أو انصراف .

قام بنشر
2 دقائق مضت, Foksh said:

ما شاء الله .. فكرة جميلة ومحكمة لتلافي مشكلة الفترة المسائية ( تسجيل الحضور في يوم ، والخروج في اليوم التالي ) ..

وبما أنك اكتشفت ثغرة ، فاسمح لي باقتراح وملاحظة بسيطين أيضاً ، وهو أنني لاحظت من خلال الدالتين انهما تستخدمان DLookup في كل عملية ما يقارب 7 مرات . ومع وجود حدث التايمر في النموذج ..... :rol:  

حيث يمكن التعديل بحيث نستخدم استدعاء DLookup تقريباً 3 مرات تقريباً عند كل عملية تسجيل حضور أو انصراف .

تمام

اليك المرفق النهائي بعد معالجة ثغرة توقيع الانصراف من الغد

آمل ان تجري التحسينات المقترحة .. دمت ذخرا لاخوانك ومحبيك

ChkInOut_CNet2.rar

قام بنشر

فكرتي في التعديل كالتالي للدالتين :-

Public Function funFirstTimeB_in() As Date
    Dim z As Integer
    Dim fatrahIn As Date
    Dim baseDate As Date
    
    z = Nz(DLookup("free2_in", "tblTimeCtrl"), 0)
    fatrahIn = Nz(DLookup("fatrah2_In", "tblTimeCtrl"), #12:00:00 AM#)
    
    If CheckTimeBetween() = 1 Then
        baseDate = Date
    Else
        baseDate = DateAdd("d", -1, Date)
    End If
    
    funFirstTimeB_in = DateAdd("n", -z, CDate(fatrahIn & " " & baseDate))
End Function

Public Function funLastTimeB_Out() As Date
    Dim z As Integer, x As Integer, xx As Integer
    Dim fatrahIn As Date
    Dim baseDate As Date
    
    z = Nz(DLookup("free2_out", "tblTimeCtrl"), 0)
    x = Nz(DLookup("hours_Work2", "tblTimeCtrl"), 0)
    fatrahIn = Nz(DLookup("fatrah2_In", "tblTimeCtrl"), #12:00:00 AM#)
    
    xx = (x * 60) + z
    
    If CheckTimeBetween() = 1 Then
        baseDate = Date
    Else
        baseDate = DateAdd("d", -1, Date)
    End If
    
    funLastTimeB_Out = DateAdd("n", xx, CDate(fatrahIn & " " & baseDate))
End Function

 

 

ChkInOut_CNet2.zip

قام بنشر
57 دقائق مضت, Foksh said:

فكرتي في التعديل كالتالي للدالتين :-

بارك الله فيك .. اجدت وأفدت

المهم هو توقيع فوكش .. جميلة هذه التوقيعات .. تذكرنا ببعض 

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

غالب هذه الاعمال لإخوة لنا هنا .. ولكن لا يوجد عليها علامات تذكرنا بهم .. اقل حق من حقوقهم ان ندعو لهم في ظهر الغيب

 

انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد

يجب ان تكون عضوا لدينا لتتمكن من التعليق

انشئ حساب جديد

سجل حسابك الجديد لدينا في الموقع بمنتهي السهوله .

سجل حساب جديد

تسجيل دخول

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

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

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

Important Information