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

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

قام بنشر

السلام عليكم

طرق احتساب التأخر  مختلفة وذلك تبعا لما يرغب فيه ويقررره صاحب العمل

في المرفق :

جدول الحضور .. وقد تم رصد حضور وانصراف الموظفين ليوم محدد

جدول الفترة ومبين فيه :

وقت الدخول/ 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

قام بنشر
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

 

أم تفضل استخدام دالة 😁 .. ؟

 

  • Like 1
قام بنشر

شكرا اخي @Foksh

 المعرف 4444 المفترض تأخر الحضور 61 دقيقة بدلا من 31  لأنه حضر  5:1  ووقت الحضور 4:00

ما علينا منها اتركها ..

حلولك جميلة ومرجع لمن اراد العمليات من خلال الاستعلامات

2 ساعات مضت, Foksh said:

 

أم تفضل استخدام دالة 😁 .. ؟

 

نعم  هي الافضل للأسباب التالية :

بعد تفكير ومراجعة .. رأيت ان التفاصيل وساعات العمل ليست ذات اهمية داخل الاستعلام الرئيسي .. المهم هو ساعات ودقائق التأخر

بالنسبة لساعات العمل فهي ثابتة فلماذا نقحمها في الاستعلام .. اما ساعات العمل الناقصة فستخرج في المجاميع في التقرير

الزبدة من شرحي اعلاه :

نريد دالة نمرر لها وقت الحضور ووقت الانصراف فقط ....... تعيد لنا ساعات ودقائق التأخر فقط ( الدخول + الخروج) .. اما غير المتأخر فتعيد Null

وهذا المرفق تم تعديل الاستعلام

ملحوظة : رايتك استخدمت اسم الفترة كمعيار  .. الى ترى أن id الجدول افضل ؟

data2.rar

قام بنشر

جميل ، وهذا ما كنت اعمل عليه في هذه الفكرة ,,

ودون شرحها هنا ، في المرفق نموذجين كأفكار قابلة للتحوير والتعديل حسب حاجتنا . مع العلم أنني قمت بإضافات قد لا تحتاجها ، ولكنها من باب الفضول والزيادة 😅 

 

data1-1.zip

  • Like 1
قام بنشر

جزاك الله خيرا

عمل وأفكار ولا أجمل 

هكذا يصبح الموضوع مرجع .. بل بستان .. يقطف منه الزائر ما شاء .

بالنسبة لي احب الاختصارات

انظر عملي في المرفق ادناه .. تقرير فقط

لا يخفى عليك .. امكانية عرض حضور جميع الموظفين خلال يوم .. او عرض حضور موظف واحد خلال شهر مثلا

الاختصار هو في اظهار وقتي الحضور والانصراف .. ومجموع التأخر فيهما ..  وتم تلوين الوقت المخالف باللون الأحمر

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

حسب اعتقادي .. المسؤول ليس بحاجة الى اكثر من ذلك

في اسفل التقرير  سوف تظهر المجاميع والفروقات

 

 

d4.rar

  • Like 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