احدد وقت يحسب فيه الاضافي النهاري ووقت للاضافي الليلي

Viewed 25

محتاج اعمل وقت بصمة لاضافي الشفت الليلي ووقت لاضافي الشفت النهاري لاني الشفت الليلي له معادلة بحسبة غير حسبة النهاري

1 Answers

لا يوجد في النظام «وقت بصمة» مستقل يفرّق بين الإضافي النهاري والإضافي الليلي. الطريقة المتبعة أن نميّز ملف الدوام نفسه (نهاري / ليلي)، ثم نكتب مؤشر أداء مستقلاً لكل حالة بالمعادلة الخاصة بها.

الخطوة الأولى: تمييز ملف الدوام نهاري / ليلي

  • استخدم أحد الحقول النصية الحرة في ملف الدوام (description1description5) لتخزين نوع الوردية.
  • إن لم يكن الحقل ظاهراً على الشاشة، أظهره عن طريق تعديل شاشة لملف الدوام، ويمكن تسميته «الوردية».
  • ضع في ملفات الدوام النهارية القيمة diurnal وفي الليلية Night — أي قيمتين متفق عليهما، والمهم الثبات على كتابتهما.
  • يُفضَّل تقييد قيم الحقل من إعدادات الحقول والشاشات بقائمة قيم مسموحة، حتى لا يؤدي اختلاف في الكتابة أو مسافة زائدة إلى نتيجة صفرية بلا أي رسالة خطأ.

الخطوة الثانية: مؤشر أداء لكل وردية

في شاشة مؤشر الأداء:

  • نوع المؤشر = نظامى
  • المؤشر النظامى = مؤشر يدوي يومي من جملة SQL
  • ثم اكتب في خانة جملة SQL الشرط الذي يقرأ نوع الوردية من ملف الدوام.

الجملة تُنفَّذ لكل يوم على حدة من سطور احتساب الحضور والانصراف، وكل ما يوضع بين { } هو حقل من سطر الحضور اليومي، ومنه:

المتغير معناه
{shift.description1} نوع الوردية من ملف الدوام — ويمكن الوصول لأي حقل آخر في ملف الدوام بنفس الأسلوب
{netOvertime} صافي الوقت الإضافي لليوم
{netWorkingHours} صافي ساعات العمل الفعلية لليوم
{isWeekEnd} هل اليوم عطلة أسبوعية
{netMissionTime} صافي وقت المأمورية
{firstInTime} / {lastOutTime} أول بصمة دخول وآخر بصمة خروج في اليوم

مثال — إضافي يوم عمل للوردية الليلية، ولا يُحتسب إلا إذا تجاوز الإضافي 3 ساعات:

select case when {shift.description1} = N'Night' and {netOvertime} > 3
            then {netOvertime} else 0 end

ويُنشأ مؤشر مقابل للوردية النهارية بتغيير القيمة إلى N'diurnal' وبمعادلة الحساب النهارية.

مثال آخر — إضافي يوم الراحة الأسبوعية لوردية 12 ساعة نهارية، مع اعتبار اليوم كاملاً 12 ساعة إذا بلغ 11.75 ساعة فأكثر:

select case
    when {shift.description1} = N'diurnal' and {isWeekEnd} = 1
    then case when {netWorkingHours} >= 11.75 then 12 else {netWorkingHours} end
    else 0
end

الخطوة الثالثة: تحديد الأيام التي يعمل فيها المؤشر

في نفس الشاشة توجد خانات:

  • لا يتم احتسابه في أيام العمل
  • لا يتم احتسابه في أيام العطلات الأسبوعية
  • لا يتم احتسابه في أيام العطلات الرسمية
  • لا يتم احتسابه في أيام الأجازات

استعملها للفصل بين مؤشر «إضافي يوم عمل» ومؤشر «إضافي يوم راحة»: الأول يُستبعد في العطلات الأسبوعية والرسمية والأجازات، والثاني يُستبعد في أيام العمل. هذه الخانات تُصفّر ناتج الجملة في الأيام المستبعدة، فلا حاجة لتكرار نفس الشرط داخل جملة SQL.

الخطوة الرابعة: الربط بالراتب

استعمل كل مؤشر داخل معادلة مفرد الراتب المناسب، وستظهر المعادلات المرتبطة به في قسم معادلات حساب المفرد بشاشة المؤشر. ثم نفّذ احتساب حضور وانصراف وسجل رواتب لشهر تجريبي وقارن النتائج قبل الاعتماد.

ملاحظتان:

  • حقل نوع الدوام في شاشة مؤشر الأداء (الدوام الأساسي / الدوام الإضافي / أى منهما) لا يُقصد به النهاري والليلي، وإنما التفرقة بين الدوام الأساسي والدوام الإضافي المسند للموظف، فهو لا يصلح للتفرقة المطلوبة هنا.
  • إذا كان النهاري والليلي على ملف دوام واحد، يمكن بدلاً من حقل الوردية بناء الشرط على وقت البصمة نفسه باستعمال {firstInTime} و {lastOutTime} داخل نفس جملة SQL.

للمزيد: مؤشرات الأداء