ابوخليل قام بنشر منذ 17 ساعات قام بنشر منذ 17 ساعات السلام عليكم طرق احتساب التأخر مختلفة وذلك تبعا لما يرغب فيه ويقررره صاحب العمل في المرفق : جدول الحضور .. وقد تم رصد حضور وانصراف الموظفين ليوم محدد جدول الفترة ومبين فيه : وقت الدخول/ start_work ووقت الخروج/nd_work وقت السماح في الدخول/ 30 / start_free وقت السماح في الخروج/30 / end_free وعدد ساعات العمل المقررة / countWorkHours / 7:30 استعلام : يوجد في الاستعلام ثلاث حقول لاظهار النتيجة : عدد دقائق تأخر الحضور _ رقم : In_Loss عدد دقائق الخروج المبكر _ رقم : out_Loss وقت العمل المحتسب _ وقت / work_Hours_count المطلوب : أيسر طريقة سواء داخل الاستعلام او صنع دالة عامة لهذا الشأن .. انا افضل الدالة العامة .. لاحتمال استخدامها داخل التقارير .. او تطويرها لخدمة المجاميع 1- احتساب (دقائق) التأخر ( كرقم ) عند التاخر في الحضور أو الخروج المبكر بناء على الوقت المسموح على النحو التالي : اذا تأخر في الحضور اكبر من المقرر بدقيقة يتم رصد عدد دقائق تأخر الحضور كاملة ( يحرم فترة السماح ) .. ومثلها الانصراف اذا خرج قبل وقت السماح المقرر 2- يرصد في حقل work_Hours_count ساعات العمل الفعلية المحتسبة ( حسب ما هو موجود في جدول الفترات) اما 7:30 للحضور المنضبط واما ( 7:30 - وقت التأخر ) للحضور المتأخر ملحوظة : تم ضبط سجلات الحضور والانصراف بحيث تغطي جميع الاحتمالاات ملحوظة أخرى : اذا رأيتم ان تكون العمليات والحقول كلها تاريخ ووقت بدلا من قيمة التأخر (رقم) فلكم مطلق الاختيار data.rar
Foksh قام بنشر منذ 15 ساعات قام بنشر منذ 15 ساعات 3 ساعات مضت, ابوخليل said: السلام عليكم وعليكم السلام ورحمة الله وبركاته .. كمشاركة أولى بدون دالة ، وتتكون من 3 أشكال متدرجة ، الإستعلام الأول :- SELECT c.UserId, c.chekIn, c.chekOut, IIf( TimeValue(c.chekIn) > DateAdd("n", f.start_free, f.start_work), DateDiff("n", DateAdd("n", f.start_free, f.start_work), TimeValue(c.chekIn)), 0 ) AS In_Loss, IIf( TimeValue(c.chekOut) < DateAdd("n", -f.end_free, f.end_work), DateDiff("n", TimeValue(c.chekOut), DateAdd("n", -f.end_free, f.end_work)), 0 ) AS out_Loss, Format( IIf( TimeValue(c.chekIn) > DateAdd("n", f.start_free, f.start_work) OR TimeValue(c.chekOut) < DateAdd("n", -f.end_free, f.end_work), DateDiff("n", IIf(TimeValue(c.chekIn) > DateAdd("n", f.start_free, f.start_work), TimeValue(c.chekIn), DateAdd("n", f.start_free, f.start_work) ), IIf(TimeValue(c.chekOut) < DateAdd("n", -f.end_free, f.end_work), TimeValue(c.chekOut), DateAdd("n", -f.end_free, f.end_work) ) ) / 1440.0, f.countWorkHours ), "hh:nn" ) AS work_Hours_count FROM tblcomIn AS c, tbl_Ftrat AS f WHERE f.ftraName = 'الفترة الرئيسية' ORDER BY c.UserId, c.chekIn; Query2 UserId chekIn chekOut In_Loss out_Loss work_Hours_count 1111 2025-07-05 3:50:10 PM 2025-07-05 11:50:12 PM 0 0 07:30 2222 2025-07-05 4:20:16 PM 2025-07-05 11:20:28 PM 0 0 07:30 3333 2025-07-05 4:32:20 PM 2025-07-05 11:28:31 PM 2 0 06:28 4444 2025-07-05 5:01:25 PM 2025-07-05 11:32:34 PM 31 0 05:59 الإستعلام الثاني :- SELECT c.UserId, c.chekIn, c.chekOut, IIf(TimeValue(c.chekIn)>DateAdd("n",f.start_free,f.start_work),DateDiff("n",DateAdd("n",f.start_free,f.start_work),TimeValue(c.chekIn)),0) AS In_Loss, IIf(TimeValue(c.chekOut)<DateAdd("n",-f.end_free,f.end_work),DateDiff("n",TimeValue(c.chekOut),DateAdd("n",-f.end_free,f.end_work)),0) AS out_Loss, Format(IIf(TimeValue(c.chekIn)>DateAdd("n",f.start_free,f.start_work) Or TimeValue(c.chekOut)<DateAdd("n",-f.end_free,f.end_work),DateDiff("n",IIf(TimeValue(c.chekIn)>DateAdd("n",f.start_free,f.start_work),TimeValue(c.chekIn),DateAdd("n",f.start_free,f.start_work)),IIf(TimeValue(c.chekOut)<DateAdd("n",-f.end_free,f.end_work),TimeValue(c.chekOut),DateAdd("n",-f.end_free,f.end_work)))/1440,f.countWorkHours),"Short Time") AS work_Hours_count, 'التفاصيل: ' & IIf(TimeValue(c.chekIn)>DateAdd("n",f.start_free,f.start_work),'تأخر ' & DateDiff("n",DateAdd("n",f.start_free,f.start_work),TimeValue(c.chekIn)) & ' دقيقة','حضور في الموعد') & ' - ' & IIf(TimeValue(c.chekOut)<DateAdd("n",-f.end_free,f.end_work),'انصراف مبكر ' & DateDiff("n",TimeValue(c.chekOut),DateAdd("n",-f.end_free,f.end_work)) & ' دقيقة','انصراف في الموعد') AS Details FROM tblcomIn AS c, tbl_Ftrat AS f WHERE (((f.ftraName)='الفترة الرئيسية') And ((DateValue(c.chekIn))=#7/5/2025#)) ORDER BY c.UserId; Query3 UserId chekIn chekOut In_Loss out_Loss work_Hours_count Details 1111 2025-07-05 3:50:10 PM 2025-07-05 11:50:12 PM 0 0 07:30 التفاصيل: حضور في الموعد - انصراف في الموعد 2222 2025-07-05 4:20:16 PM 2025-07-05 11:20:28 PM 0 0 07:30 التفاصيل: حضور في الموعد - انصراف في الموعد 3333 2025-07-05 4:32:20 PM 2025-07-05 11:28:31 PM 2 0 06:28 التفاصيل: تأخر 2 دقيقة - انصراف في الموعد 4444 2025-07-05 5:01:25 PM 2025-07-05 11:32:34 PM 31 0 05:59 التفاصيل: تأخر 31 دقيقة - انصراف في الموعد الإستعلام الثالث :- SELECT c.UserId, c.chekIn, c.chekOut, IIf(TimeValue(c.chekIn)>DateAdd("n",f.start_free,f.start_work),DateDiff("n",DateAdd("n",f.start_free,f.start_work),TimeValue(c.chekIn)),0) AS In_Loss, IIf(TimeValue(c.chekOut)<DateAdd("n",-f.end_free,f.end_work),DateDiff("n",TimeValue(c.chekOut),DateAdd("n",-f.end_free,f.end_work)),0) AS out_Loss, Format(DateDiff("n",IIf(TimeValue(c.chekIn)<f.start_work,f.start_work,TimeValue(c.chekIn)),IIf(TimeValue(c.chekOut)>f.end_work,f.end_work,TimeValue(c.chekOut)))/1440,"Short Time") AS work_Hours_count, 'التفاصيل: ' & IIf(TimeValue(c.chekIn)>DateAdd("n",f.start_free,f.start_work),'تأخر ' & DateDiff("n",DateAdd("n",f.start_free,f.start_work),TimeValue(c.chekIn)) & ' دقيقة',IIf(TimeValue(c.chekIn)<f.start_work,'حضور مبكر ' & DateDiff("n",TimeValue(c.chekIn),f.start_work) & ' دقيقة','حضور في الموعد')) & ' - ' & IIf(TimeValue(c.chekOut)<DateAdd("n",-f.end_free,f.end_work),'انصراف مبكر ' & DateDiff("n",TimeValue(c.chekOut),DateAdd("n",-f.end_free,f.end_work)) & ' دقيقة',IIf(TimeValue(c.chekOut)>f.end_work,'انصراف متأخر ' & DateDiff("n",f.end_work,TimeValue(c.chekOut)) & ' دقيقة','انصراف في الموعد')) AS Details FROM tblcomIn AS c, tbl_Ftrat AS f WHERE (((f.ftraName)='الفترة الرئيسية') And ((DateValue(c.chekIn))=#7/5/2025#)) ORDER BY c.UserId; Query4 UserId chekIn chekOut In_Loss out_Loss work_Hours_count Details 1111 2025-07-05 3:50:10 PM 2025-07-05 11:50:12 PM 0 0 07:30 التفاصيل: حضور مبكر 10 دقيقة - انصراف متأخر 20 دقيقة 2222 2025-07-05 4:20:16 PM 2025-07-05 11:20:28 PM 0 0 07:00 التفاصيل: حضور في الموعد - انصراف في الموعد 3333 2025-07-05 4:32:20 PM 2025-07-05 11:28:31 PM 2 0 06:56 التفاصيل: تأخر 2 دقيقة - انصراف في الموعد 4444 2025-07-05 5:01:25 PM 2025-07-05 11:32:34 PM 31 0 06:29 التفاصيل: تأخر 31 دقيقة - انصراف متأخر 2 دقيقة data1.zip أم تفضل استخدام دالة 😁 .. ؟ 1
ابوخليل قام بنشر منذ 12 ساعات الكاتب قام بنشر منذ 12 ساعات شكرا اخي @Foksh المعرف 4444 المفترض تأخر الحضور 61 دقيقة بدلا من 31 لأنه حضر 5:1 ووقت الحضور 4:00 ما علينا منها اتركها .. حلولك جميلة ومرجع لمن اراد العمليات من خلال الاستعلامات 2 ساعات مضت, Foksh said: أم تفضل استخدام دالة 😁 .. ؟ نعم هي الافضل للأسباب التالية : بعد تفكير ومراجعة .. رأيت ان التفاصيل وساعات العمل ليست ذات اهمية داخل الاستعلام الرئيسي .. المهم هو ساعات ودقائق التأخر بالنسبة لساعات العمل فهي ثابتة فلماذا نقحمها في الاستعلام .. اما ساعات العمل الناقصة فستخرج في المجاميع في التقرير الزبدة من شرحي اعلاه : نريد دالة نمرر لها وقت الحضور ووقت الانصراف فقط ....... تعيد لنا ساعات ودقائق التأخر فقط ( الدخول + الخروج) .. اما غير المتأخر فتعيد Null وهذا المرفق تم تعديل الاستعلام ملحوظة : رايتك استخدمت اسم الفترة كمعيار .. الى ترى أن id الجدول افضل ؟ data2.rar
Foksh قام بنشر منذ 11 ساعات قام بنشر منذ 11 ساعات جميل ، وهذا ما كنت اعمل عليه في هذه الفكرة ,, ودون شرحها هنا ، في المرفق نموذجين كأفكار قابلة للتحوير والتعديل حسب حاجتنا . مع العلم أنني قمت بإضافات قد لا تحتاجها ، ولكنها من باب الفضول والزيادة 😅 data1-1.zip 2
ابوخليل قام بنشر منذ 9 ساعات الكاتب قام بنشر منذ 9 ساعات جزاك الله خيرا عمل وأفكار ولا أجمل هكذا يصبح الموضوع مرجع .. بل بستان .. يقطف منه الزائر ما شاء . بالنسبة لي احب الاختصارات انظر عملي في المرفق ادناه .. تقرير فقط لا يخفى عليك .. امكانية عرض حضور جميع الموظفين خلال يوم .. او عرض حضور موظف واحد خلال شهر مثلا الاختصار هو في اظهار وقتي الحضور والانصراف .. ومجموع التأخر فيهما .. وتم تلوين الوقت المخالف باللون الأحمر اذا كانت الطباعة بالاسود والابيض يمكننا تظليل خلفية الحقل بدلا من لون الخط الاحمر حسب اعتقادي .. المسؤول ليس بحاجة الى اكثر من ذلك في اسفل التقرير سوف تظهر المجاميع والفروقات d4.rar 2
AbuuAhmed قام بنشر منذ 2 ساعات قام بنشر منذ 2 ساعات 7 ساعات مضت, ابوخليل said: بالنسبة لي احب الاختصارات وهذه دالة مختصرة على نمط دالتيك وهي تعمل للدخول والخروج للدخول النوع 0 أو false للخروج النوع -1 أو true Function LostTime(Period As Integer, ByVal inOutTime As Date, inOutType As Boolean) As Integer Dim rst As Recordset Dim Result As Double Set rst = CurrentDb.OpenRecordset("tbl_Ftrat", dbOpenSnapshot) With rst .FindFirst "id=" & Period If Not .NoMatch Then inOutTime = inOutTime - Fix(inOutTime) If inOutType = 0 Then Result = !start_work - inOutTime + !start_free / 1440 Else Result = inOutTime - !end_work + !end_free / 1440 End If End If End With If Result < 0 Then LostTime = Abs(Round(Result * 1440, 0)) 'rst.Close Set rst = Nothing End Function
ابوخليل قام بنشر منذ 1 ساعه الكاتب قام بنشر منذ 1 ساعه اهلا ابو احمد سرني مرورك ومشاركتك هو انا عملتها بالاول دالة واحدة .. بحيث الدالة تساوي i+x ولكني احتاج للتمييز بين وقت الحضور ووقت الانصراف في التقرير وتلوينها .. لذا اضطررت لجعلها دالتين 43 دقائق مضت, AbuuAhmed said: وهذه دالة مختصرة على نمط دالتيك وهي تعمل للدخول والخروج للدخول النوع 0 أو false للخروج النوع -1 أو true الدالة واضحة وجميلة : inOutTime تمثل حقل الحضور او حقل الانصراف بناء على قيمة المتغير inOutType ولكني لم اعرف اين القيمة المقابلة لــــ inOutType في الاستعلام على فكرة : كنت اعد مسألة اخرى مرتبطة بهذا .. وقفت امامها .
ابوخليل قام بنشر منذ 43 دقائق الكاتب قام بنشر منذ 43 دقائق 15 دقائق مضت, ابوخليل said: على فكرة : كنت اعد مسألة اخرى مرتبطة بهذا .. وقفت امامها . المسألة كالتالي : هذه صورة جدول الحضور من يوم 1/6 وحتى 11/6 الموظف مجاز ايام : 3 ، 4 ، 5 من الشهر بناء على ما تم رصده في جدول الاجازات وغائب يوم : 8 اريد في استعلام اظهار جميع الأيام .. وامام كل سجل حالته : حاضر او مجاز او غائب .. أو تكون ارقام 1 أو 2 أو 3 تعبر عن الحالة
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.