ابوخليل قام بنشر منذ 5 ساعات قام بنشر منذ 5 ساعات السلام عليكم طرق احتساب التأخر مختلفة وذلك تبعا لما يرغب فيه ويقررره صاحب العمل في المرفق : جدول الحضور .. وقد تم رصد حضور وانصراف الموظفين ليوم محدد جدول الفترة ومبين فيه : وقت الدخول/ 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 قام بنشر منذ 3 ساعات قام بنشر منذ 3 ساعات 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
ابوخليل قام بنشر منذ 1 ساعه الكاتب قام بنشر منذ 1 ساعه شكرا اخي @Foksh المعرف 4444 المفترض تأخر الحضور 61 دقيقة بدلا من 31 لأنه حضر 5:1 ووقت الحضور 4:00 ما علينا منها اتركها .. حلولك جميلة ومرجع لمن اراد العمليات من خلال الاستعلامات 2 ساعات مضت, Foksh said: أم تفضل استخدام دالة 😁 .. ؟ نعم هي الافضل للأسباب التالية : بعد تفكير ومراجعة .. رأيت ان التفاصيل وساعات العمل ليست ذات اهمية داخل الاستعلام الرئيسي .. المهم هو ساعات ودقائق التأخر بالنسبة لساعات العمل فهي ثابتة فلماذا نقحمها في الاستعلام .. اما ساعات العمل الناقصة فستخرج في المجاميع في التقرير الزبدة من شرحي اعلاه : نريد دالة نمرر لها وقت الحضور ووقت الانصراف فقط ....... تعيد لنا ساعات ودقائق التأخر فقط ( الدخول + الخروج) .. اما غير المتأخر فتعيد Null وهذا المرفق تم تعديل الاستعلام ملحوظة : رايتك استخدمت اسم الفترة كمعيار .. الى ترى أن id الجدول افضل ؟ data2.rar
Foksh قام بنشر منذ 7 دقائق قام بنشر منذ 7 دقائق جميل ، وهذا ما كنت اعمل عليه في هذه الفكرة ,, ودون شرحها هنا ، في المرفق نموذجين كأفكار قابلة للتحوير والتعديل حسب حاجتنا . مع العلم أنني قمت بإضافات قد لا تحتاجها ، ولكنها من باب الفضول والزيادة 😅 data1-1.zip
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.