ابوخليل قام بنشر منذ 23 ساعات قام بنشر منذ 23 ساعات السلام عليكم ورحمة الله احبتي واخوتي الخبراء وكافة اعضاء هذا المنتدى المبارك اريد ان اشارككم عقولكم .. ونضيف الى المنتدى دروسا جديدة مفيدة وحيث ازعم اني معلم في هذا المنتدى .. فأنا اعطي درسا للمبتدئين .. ولمن يريدون انشاء مشاريعهم .. ان الاستشارة ودراسة المشروع من جميع جوانبه اهم شيء في العمل .. لا بد من استشارة اهل الخبرة قبل البدء في اول خطوة . وعن نفسي لا اجد غضاضة في الاستشارة في امور تبدو بديهية للمبتدىء وأول خطوة هي اعداد الجداول .. ومازلت عند رأيي ان ضبط الجداول بالشكل الصحيح عبارة عن تنفيذ 80% من المشروع .. ندخل لصلب الموضوع : صاحب العمل طلب ان تكون الاجراءات كخطوط عريضة على النحو التالي : ١- امكانية تحديد وقت دوام الموظف لفترة صباحية. ( 4 ساعات) ٢- امكانية تحديد وقت دوام الموظف لفترة مسائية. ( 4 ساعات) ٣- امكانية تحديد وقت دوام الموظف فترتين صباحية ومسائية. ٤- امكانية تحديد وقت دوام الموظف فترة دوام كامل ٨ او ٩ ساعات. 5- امكانية تعديل وقت دوام موظف فترة مختلفة مؤقته مثل المحاسب يكون البرنامج مرن بحيث يخدم في برمضان ( عند تغير وقت العمل ) هذه الطلبات اخذتها نسخ لصق المطلوب .. ما الجداول التي احتاجها لهذه الجزئية .. التي هي التحكم بهذه المتطلبات علما ان العملية مطلوب ان تكون آلية من غير تدخل المستخدم المستخدم فقط يقوم باعداد هذه الضوابط من خلال جدول التحكم
ابوخليل قام بنشر منذ 22 ساعات الكاتب قام بنشر منذ 22 ساعات سنأخذ الجداول واحد واحد : الأول : جدول رصد الحضور والانصراف : ( الحقل الواحد) المعرف / حقل رصد وقت الحضور والانصراف Now / حقل النوع : ( O/I) ما رأيكم ؟؟
Moosak قام بنشر منذ 22 ساعات قام بنشر منذ 22 ساعات وعليكم السلام ورحمة الله وبركاته معلمنا القدير .. 🙂 🌹 وأنا أحد تلاميذك أسمحلي بأن أطرح فكرتي في هذا الموضوع ( وقد عملت على مشروع مشابه) .. 🙂 أولا : نفترض أن الموظف له فترة دوام محددة (من ضمن القائمة التي ذكرتها) بين تاريخين محددين مثال : 1- شهر رمضان له أوقات دوام مختلفة عن باقي الشهور. 2- الموظف أنتقل من موقع عمل لموقع آخر له فترة دوام مختلفة. 3- الموظف تغيرت ورديته من صباحية إلى مسائية أو العكس. 4- والأمثلة كثيرة ..... ثانيا : نقوم بتصميم جدول فرعي لجدول الموظفين (جدول الورديات) يتم فيه إضافة سجل لكل نوع دوام للموظف حسب نوع الوردية وتحديد الفترة الزمنية (من تاريخ) ---> (إلى تاريخ). ثالثا : تصميم نموذج فرعي يضاف لنموذج الموظفين يتم فيه تعبئة هذه البيانات التي ذكرناها في جدول الورديات . رابعا : يتم احتساب مدة العمل والتأخير والانصراف المبكر وعدد ساعات العمل التي أداها الموظف بناءً على فترة دوامه المذكورة في جدول الورديات . وهذه صور توضيحية حسب المشروع الذي عملت عليه وهو خاص ببرنامج لأحد الاخوة 🙂 : جدول الورديات : نموذج بيانات الموظفين + النموذج الفرعي للورديات ( الورديات التي ليس لها تاريخ نهاية هي ورديات مستمرة حتى تاريخ اليوم ولها اعتبار في كود الحسابات) : صورة مقربة للنموذج الفرعي : القائمة المنسدلة للورديات تأخذ بياناتها من جدول فرعي آخر يتم فيه تسجيل أنواع الورديات والبيانات المتعلقة بها : بعد هذا قمنا بتصميم جملة من الدوال الخاصة بجلب البيانات الخاصة بتفاصيل الورديات من الجداول وتطبيقها على الموظفين وحساب ما يطلب حسابه .. هذا باختصار وسلامتكم 🙂
ابوخليل قام بنشر منذ 21 ساعات الكاتب قام بنشر منذ 21 ساعات تمام بارك الله فيك بالنسبة لجدول الورديات ( من تاريخ الى تاريخ ) لسنا بحاجته .. والسب ان العمل مدني مستمر اذا سيكون الجدول الفرعي : صباحية / مسائية / دوام كامل/ دوام خاص وامام كل وردية بياناتها : وقت الحضور ووقت الانصراف .. والسماح وفي جدول الأسماء حقل (x) لاختيار الوردية المناسبة للموظف عند التوقيع حقل(x) سيحمل البيانات والمواصفات الخاصة به الموجودة في جدول الورديات ويتم تعامل الاجراءات الخاصة في فورم التوقيع بناء على ذلك صح؟ ما رأيك
ابوخليل قام بنشر منذ 21 ساعات الكاتب قام بنشر منذ 21 ساعات استدراك : الدوام الخاص الافضل ان يكون متاح له اكثر من تبويب مثل : خاص1 ، خاص2 ، خاص3 وهكذا ... وبرمجيا فعلا هو متاح الى مالا نهاية والسبب انه قد يوجد اكثر من موظف خاص اوقاته تختلف عن الآخر وهنا يتبين اننا بحاجة الى جدول فرعي واحد فقط .. يتم تسجيل الفترات وأسماءها من قبل المستخدم حسب تصوري الآن اصبح المشروع اكثر مرونة من حيث تحديد الفترات هل هذا التصور سليم ؟
ابوخليل قام بنشر منذ 19 ساعات الكاتب قام بنشر منذ 19 ساعات هذا مثال لعرض ما تم نقاشه نريد اجراء العمليات عليه والضبط حسب جدول الفترات الحقلان : startWithFree و endWithFree ستختفي من الفورم مستقبلا ولكني وضعتها للاستئناس والتأكد من النتيجة comOutDb.rar
Foksh قام بنشر منذ 18 ساعات قام بنشر منذ 18 ساعات وعليكم السلام ورحمة الله وبركاته ،، موضوع ثري وجميل للنقاش ، ويستحق فعلاً أن يُبنى على تصور شامل ودقيق من البداية . وبحسب ما فهمت من تصوركم – وهو تصور متطور ومرن – لدي نقطة بسيطة أحب أن أطرحها للنقاش :- هل سيُؤخذ بعين الاعتبار مسألة ( التأخيرات المسموحة ) ؟ يعني مثلاً :- إذا تأخر الموظف عن وقت حضوره بـ 5 دقائق ، هل يُعتبر (حاضراً ضمن الوقت أم متأخراً ) ؟؟؟؟ لهذا أعتقد أنه من المفيد – وربما الضروري 😅 – أن تكون هناك حقول مثل :- StartTime و EndTime لكل وردية . وحقل إضافي مثل AllowedDelayMinutes ( الحد الأقصى للتأخير المقبول ) . هذا يُسهل مستقبلاً حساب التأخير والانصراف المبكر ، ويجعل النظام أكثر دقة وواقعية ، خاصة إذا تم استخدام البيانات لاحقاً في تقييم الأداء أو إعداد تقارير زمنية . مجرد وجهة نظر قابلة للنقاش 🌷 ، ومتابع معكم للإستفادة من الآراء والتجارب . وهو فعلاً ما تم إدراجه في مرفق معلمنا أبو خليل ، ولكن جاء ردي قبل أن أرى المرفق في آخر مشاركة له 👌 وبناءً على الملف المرفق ، قمت بإضافة حقل جديد نصي = "FtraID" ، في الجدول "tblcomIn" ، وقيمته يتكون رقم الفترة التي سجل فيها الموظف حضور أو انصراف . وتم اعتماد القيم ( 1 = حضور ، 2 = انصراف ، 3 = حضور متأخر ) في الحقل chekType داخل نفس الجدول . بحيث نعالج :- التأكد من إدخال رقم الموظف وعدم تركه فارغاً . التحقق من وجود الموظف في جدول الموظفين tblNames . تحديد الفترة الزمنية المناسبة (الفترة الحالية) حسب الوقت الآن من حقول start_work وend_work في جدول الفترات tbl_Ftrat . إذا لم تكن الفترة الحالية ضمن أي فترة معرفة ، يتم تسجيل حركة دخول متأخر ( chekType = 3 ) . إذا كانت الفترة الحالية معروفة :- * حساب عدد حركات الدخول ( chekType = 1 أو 3 ) والخروج ( chekType = 2 ) للموظف في نفس الفترة واليوم الحالي. * منع تسجيل دخول جديد في نفس الفترة واليوم إذا كان الموظف قد أكمل دورة دخول وخروج ( أي أن عدد الدخول أقل أو يساوي عدد الخروج ) . * تحديد نوع الحركة القادمة ( دخول أو خروج ) حسب آخر حركة مسجلة للموظف في نفس الفترة واليوم . * تسجيل الحركة الجديدة (دخول ، خروج ، أو دخول متأخر) في جدول tblcomIn مع ربطها بالفترة . * إعلام المستخدم برسالة تأكيد نوع الحركة والفترة . وهذا ملف التعديل ، لإجراءاتكم بالنتيجة اذا كانت غير مطابقة أو يوجد احتمالات لم تخطر لي حالياً .. comOutDb.zip
ابوخليل قام بنشر منذ 11 ساعات الكاتب قام بنشر منذ 11 ساعات اهلا وسهلا وصباح جميل باطلالة الفوكش قرأت شرحك اعلاه واطلعت على المرفق عمل ولا اجمل .. فشكرا لك توضيح : حقول السماح ليس لها دور في عمليات واجراءت الحضور والانصراف ، وانما ينحصر عملها عند حصر ساعات العمل في الاستعلامات .. مثلا الفترة الصباحية 4 ساعات ومجموع فترات السماح ( الحضور والانصراف )=30 دقيقة هنا يكون ساعات العمل النظامية المطالب بها الموظف ولا يعتبر متأخر هي 3:30 دقيقة من هنا يجب ضبط وقت التوقيع والانصراف فلا يسمح له بالتوقيع قبل الوقت المحدد باكثر من 5 الى 10 دقائق وكذلك الانصراف يجب ضبط وقت ما بعد التوقيع الرسمي ملاحظاتي : 1- اضافة حقل يبين الفترة في جدول الحضور جميل جدا .. سيساعد مستقبلا على سهولة ويسر التصفية حسب الفترات 2- حقل نوع الحضور : ارى ان حضور وانصراف ( 1 ، 2 ) كافيا ولا حاجة لنوع دخول متأخر .. ( سوف ابين ذلك) بالنسبة للدخول المتأخر فلسنا بحاجة الى اظهاره عند الاجراء .. وسوف يظهر في الاستعلام بناء على المعطيات لأن كل توقيع مستقل بذاته .. ايضا وجوده في الجدول يسبب اضطراب .. لأن المطلوب هو هل هذا التوقيع دخول ام خروج ؟ اذا ترى ان بيان حالة الحضور مهمة فالافضل يخصص لها حقل مستقل .. ويضاف ايضا حالة خروج مبكر ( لاحظ هناك يوجد خروج الاستئذان) .. لذا ارى انه بلاش منها كلها 3- يسمح بالتوقيع المتكرر التوقيع الأول حضور والثاني انصراف خلال الجلسة الواحدة لاحتمال تفعيل نظام الاستئذان .. وكما هو معلوم يتم لاحقا حصر التوقيعات حسب اليوم والفترة 4- يلزم عمل ضابط وقت بين كل توقيعين دقيقة واحدة على الأقل ( بحيث لا يسمح بالتوقيع الثاني الا بعد انقضاء الوقت المحدد ... وذلك تلافيا للخطأ غير المقصود) ................................ بناء على الملاحظات اعلاه نحن بحاجة الى جدول كنترول يرصد فيه : 1- الوقت المتاح قبل موعد الحضور الرسمي 2- الوقت المتاح بعد موعد الانصراف الرسمي 3- ضابط وقت بين كل توقيعين وغيرها من ادوات التحكم التي قد نحتاجها وتظهر لنا اثناء التصميم اكرر شكري وامتناني .. 1
Foksh قام بنشر منذ 5 ساعات قام بنشر منذ 5 ساعات معلمي الفاضل .. بناءً على ما أسلفتم ، ومن خلال الجدول الجديد الخاص بالتحكم :- تم تعديل اسلوب مطابقة الفترة لتراعي السماح قبل و بعد . التحقق من آخر توقيع للموظف بحيث إذا مضى عليه أقل من waitBtween دقيقة ، فيتم رفض التوقيع الجديد . وبناءً عليه ، يكون تعديلي بهذا الشكل :- Private Sub ID_AfterUpdate() On Error GoTo Err_Handler Dim db As DAO.Database Dim rsEmp As DAO.Recordset Dim rsShift As DAO.Recordset Dim rsCtrl As DAO.Recordset Dim rsLastMove As DAO.Recordset Dim UserId As String Dim empName As String Dim currentTime As Date Dim shiftId As Variant Dim checkType As String Dim sql As String Dim periodName As String Dim startWork As Date, endWork As Date Dim allowedBefore As Long, allowedAfter As Long, waitBetween As Long Dim lastTime As Date UserId = Trim(Me.id) If UserId = "" Then MsgBox "يرجى إدخال رقم الموظف", vbExclamation + vbMsgBoxRight, "" Exit Sub End If currentTime = Time() Set db = CurrentDb sql = "SELECT * FROM tblNames WHERE UserId = '" & UserId & "'" Set rsEmp = db.OpenRecordset(sql) If rsEmp.EOF Then MsgBox "رقم الموظف غير موجود في جدول الموظفين", vbExclamation + vbMsgBoxRight, "" rsEmp.Close Exit Sub End If empName = Nz(rsEmp!s_name, "الموظف") rsEmp.Close Set rsCtrl = db.OpenRecordset("SELECT TOP 1 * FROM tbl_Ctrl") If rsCtrl.EOF Then MsgBox "يرجى التحقق وضبط اعدادات التحكم", vbCritical + vbMsgBoxRight, "" Exit Sub End If waitBetween = Nz(rsCtrl!waitBtween, 1) allowedBefore = Nz(rsCtrl!timeBefore, 0) allowedAfter = Nz(rsCtrl!timeAfter, 0) rsCtrl.Close shiftId = "0" periodName = "غير محددة" Set rsShift = db.OpenRecordset("SELECT * FROM tbl_Ftrat") Do While Not rsShift.EOF startWork = DateAdd("n", -allowedBefore, rsShift!start_work) endWork = DateAdd("n", allowedAfter, rsShift!end_work) If currentTime >= TimeValue(startWork) And currentTime <= TimeValue(endWork) Then shiftId = CStr(rsShift!id) periodName = rsShift!ftraName Exit Do End If rsShift.MoveNext Loop rsShift.Close '------------------------- ( في حال أردنا التخصيص ) '' If shiftId = "0" Then '' MsgBox "لا توجد فترة مناسبة للوقت الحالي ، لا يمكن تسجيل التوقيع", vbExclamation + vbMsgBoxRight, "" '' Exit Sub '' End If '------------------------- sql = "SELECT TOP 1 chekInOut FROM tblcomIn WHERE UserId = '" & UserId & "' ORDER BY chekInOut DESC" Set rsLastMove = db.OpenRecordset(sql) If Not rsLastMove.EOF Then lastTime = rsLastMove!chekInOut If DateDiff("s", lastTime, Now) < (waitBetween * 60) Then MsgBox "لا يمكنك التوقيع مرتين خلال أقل من " & waitBetween & " دقيقة", vbExclamation + vbMsgBoxRight, "" rsLastMove.Close Exit Sub End If End If rsLastMove.Close sql = "SELECT TOP 1 chekType FROM tblcomIn WHERE UserId = '" & UserId & "' AND DateValue(chekInOut) = Date() AND FtraID = '" & shiftId & "' ORDER BY chekInOut DESC" Set rsLastMove = db.OpenRecordset(sql) If Not rsLastMove.EOF Then If rsLastMove!chekType = "1" Then checkType = "2" Else checkType = "1" End If Else checkType = "1" End If rsLastMove.Close sql = "INSERT INTO tblcomIn (UserId, chekInOut, chekType, FtraID) VALUES " & _ "('" & UserId & "', #" & Format(Now, "yyyy-mm-dd hh:nn:ss") & "#, '" & checkType & "', '" & shiftId & "')" db.Execute sql, dbFailOnError MsgBox "تم تسجيل " & IIf(checkType = "1", "الدخول", "الخروج") & vbCrLf & _ "الموظف: " & empName & vbCrLf & "الفترة: " & periodName, vbInformation + vbMsgBoxRight, "" Me.id = "" Me.id.SetFocus Exit Sub Err_Handler: MsgBox " : خطأ أثناء تنفيذ العملية" & vbCrLf & Err.Description, vbCritical + vbMsgBoxRight, "" End Sub ملاحظة .. في الجزء :- shiftId = "0" periodName = "غير محددة" استخدمته لتهيئة متغيرين رئيسيين قبل الدخول في حلقة البحث عن الفترة الحالية المناسبة ( tbl_Ftrat ) . حيث أن القيمة ( 0 ) هنا تعني مبدئياً : ( لا توجد فترة مناسبة تم تحديدها بعد ) . وطبعاً سيتم تعيين قيمة فعلية له لاحقاً من الجدول tbl_Ftrat عندما يطابق الوقت الحالي فترة ما داخل الجدول . من خلال الجملة :- If currentTime >= TimeValue(startWork) And currentTime <= TimeValue(endWork) Then shiftId = CStr(rsShift!id) بحيث إذا وجد وقت يطابق الفترة ، يتم تعيين رقم الفترة الحقيقي . وكذلك الأمر فيما يتعلق بـ "غير محددة" .... والهدف كان في فكري ، للتحكم في الحالات غير المتوقعة :- فإذا لم يعثر على فترة مناسبة ضمن الوقت والسماح ، تبقى القيم الافتراضية ( 0 و غير محددة ) . ولتسجيل التوقيع حتى في حال عدم المطابقة . في بعض الحالات ، قد ترغب بتسجيل التوقيع رغم عدم انطباقه على أي فترة . ( من باب الإحتياط ) وطبعاً قابل لتخصيصه كجزء شرطي . فمثلاً إذا أردت منع التوقيع تماماً في حالة عدم مطابقة أي فترة ، يمكن وضع شرط كالآتي في نهاية حلقة البحث :- Loop rsShift.Close If shiftId = "0" Then MsgBox "لا توجد فترة مناسبة للوقت الحالي ، لا يمكن تسجيل التوقيع", vbExclamation + vbMsgBoxRight, "" Exit Sub End If وطبعاً سيتم إلغاء التسجيل وعدم تنفيذ باقي الكود !!! وطبعاً وجب التذكير بأنني أخذت على عاتقي تعديل منطق احتساب وقت الانتظار بين التوقيعين ليكون مقروناً ومشروطاً بالموظف الحالي فقط . يعني لو أردنا الانتظار دقيقة لتسجيل الحضور لـ 20 موظف على سبيل المثال !! فهذا يعني أن آخر موظف سيكون متأخراً 20 دقيقة هههههههه حسب الوقت الذي سيتم تسجيله له ( صحيح ) ، ولذا ألزمت التحقق من فترة الانتظار برقم الموظف . فكرتي المتواضعة .. comOutDb2.zip
ابوخليل قام بنشر منذ 3 ساعات الكاتب قام بنشر منذ 3 ساعات تمام .. زادك الله علما .. وبارك فيك اقتباس فمثلاً إذا أردت منع التوقيع تماماً في حالة عدم مطابقة أي فترة ، يمكن وضع شرط كالآتي في نهاية حلقة البحث :- نعم هذا افضل كثيرا .. وإلا لماذا جعلنا وقت متاح قبل وبعد الوقت الرسمي للتوقيع ملاحظة : جرب الموظف سالم .. فترته خاص من التاسعة الى الحادية عشر ونصف صباحا لاحظت : الساعة عندي الآن 4:20 مساء 1- سمح له بالتوقيع 1- الرسالة تبين انه في الصباح رغم ان التوقيع الآن ...................................................................................................................................... دعنا الآن من الأكواد وضبطها لتحقيق الشروط المهم الآن هل الجداول وحقولها مكتملة ... وهل طريقة التصميم صحيحة اكتشفت الآن ان حقول الوقت المتاح قبل وبعد التوقيع يجب ان تكون ضمن جدول الفترات وفائدة ذلك : حصر الفترة الزمنية في مكان واحد .. لأن وقت التوقيع سيحصر الوقت : من/الى .. وغير جيد اضافة هذه الفترة داخل الجملة البرمجية صحيح سيوجد تكرار لأننا سنرصد هذه القيم امام كل فترة ، ولكن ايضا مفيد فيما لو اردنا تخصيص فترة ما بوقت متاح اكبر او اصغر اذا جدول الفترات يجب اعادة النظر فيه .. وسوف اقوم باعداده ورفعه ان شاء الله على النحو التالي : المعرف / الدخول الرسمي / الخروج الرسمي / فترة سماح دخول / فترة سماح خروج / وقت متاح قبل / وقت متاح بعد / بداية توقيع حضور/ نهاية توقيع خروج / ساعات(وقت العمل الفعلي) ما خط بالاحمر هو الذي تحصره الدالة .. ومن خلاله يتم قبول او رفض التوقيع .. بداية توقيع حضور = الدخول الرسمي - وقت متاح قبل نهاية توقيع خروج = الخروج الرسمي + وقت متاح بعد ساعات وقت العمل الفعلي = نستخرج الفرق بين الوقتين : ( الدخول الرسمي و الخروج الرسمي ) - فترات السماح المرونة هنا تتحقق .. فيمكن اجبار الموظفين على التوقيع في الوقت المحدد بدون وقت سماح .. واعتبار ساعات العمل كاملة من الدخول الرسمي وحتى الخروج الرسمي
Foksh قام بنشر منذ 3 ساعات قام بنشر منذ 3 ساعات 10 دقائق مضت, ابوخليل said: جرب الموظف سالم .. فترته خاص من التاسعة الى الحادية عشر ونصف صباحا لاحظت : الساعة عندي الآن 4:20 مساء 1- سمح له بالتوقيع 1- الرسالة تبين انه في الصباح رغم ان التوقيع الآن قد يكون تنسيق الوقت !!! لكن انظر الوقت والتنفيذ الآن .. 12 دقائق مضت, ابوخليل said: دعنا الآن من الأكواد وضبطها لتحقيق الشروط دعنا منها الآن .👍. 12 دقائق مضت, ابوخليل said: اكتشفت الآن ان حقول الوقت المتاح قبل وبعد التوقيع يجب ان تكون ضمن جدول الفترات وفائدة ذلك : طبعاً إذا كان لكل فترة وقت إتاحة مخصص ومختلف عن الفترة السابقة . أي لا نريد شمول الفترات جميعها بوقت إتاحة ثابت !! ومن هنا كل شيء سيكون عبارة عن بيانات وليس برمجة .. وهذه خطوة ذكية جداً أنك ستعتمد على حقول محسوبة .. وعلى سبيل المثال بهذا الشكل رح نعتمد على start_signin و end_signout بدل ما نعتمد على VBA ( start_signin و end_signout = حقلين افتراضيات يعبران عن بداية ونهاية التوقيع )
ابوخليل قام بنشر منذ 1 ساعه الكاتب قام بنشر منذ 1 ساعه تمام استاذنا قمت باعداد وضبط جدول الفترات ووضعت start_signin و end_signout حقول حقيقية في الجدول يمكنك الاطلاع على النموذج الآن نريد (دالة مربوطة بمعرف الموظف) في الوحدة النمطية .. تعالج جميع احتمالات الفترات الموجودة لا اعلم هل يكفي ربط معرف الموظف بالدالة ام نربط معه رقم الفترة ايضا على اعتبار ان رقم الفترة موجود في سجل الموظف comOutDb3.rar
Foksh قام بنشر منذ 55 دقائق قام بنشر منذ 55 دقائق لهذا السؤال :- 27 دقائق مضت, ابوخليل said: لا اعلم هل يكفي ربط معرف الموظف بالدالة ام نربط معه رقم الفترة ايضا هذا سيعتمد على ما إذا كان لكل موظف فترة واحدة فقط يومياً ( ومن سياق الحديث السابق لا اعتقد ذلك !! ) ، فيكفي ربط الدالة بمعرف الموظف فقط . أما إذا كان يمكن أن يسجل الموظف توقيعاً في أكثر من فترة (صباحي + مسائي) ، فهنا من الأفضل أن تأخذ الدالة أيضاً FtraID ( رقم الفترة ) لضمان دقة التحليل . والدالة الجميلة ، لي تعقيب واحد عليها . في السطر :- If minutes > 59 Then hours = hours + 1: minutes = 0 أرى أنه غير ضروري !! لأنه من المستحيل أن تكون minutes أكبر من 59 بسبب عملية Mod 60 السابقة !!!! أما فيما يخص الدالة ، فقط لأني سأخرج من العمل بعد قليل ، وسأحاول البدء بمشاركة بسيطة بأقرب فرصة .
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.