كل الانشطه
- الساعة الأخيرة
-
محمد عبد الناصر started following استدعاء بيانات بشرطين
-
السلام عليكم ورحمة الله وبركاته اخواتي فالله في الملف المرفق يوجد في العمود B مجموعه من ارقام ملفات مسجل بها بيانات اريد عند كتابة الرقم في الخليه F6 و كتابة نوع البيان بجانبها في الخليه G6 ان يقوم باستدعاء البيانات من شيت رقم الملف ويكتبها في العمود H6 و i6 الملف المرفق موضح المطلوب شكرا مقدما لكل من يساهم في حل المطلوب BB.xlsx
-
قد يكون تنسيق الوقت !!! لكن انظر الوقت والتنفيذ الآن .. دعنا منها الآن .👍. طبعاً إذا كان لكل فترة وقت إتاحة مخصص ومختلف عن الفترة السابقة . أي لا نريد شمول الفترات جميعها بوقت إتاحة ثابت !! ومن هنا كل شيء سيكون عبارة عن بيانات وليس برمجة .. وهذه خطوة ذكية جداً أنك ستعتمد على حقول محسوبة .. وعلى سبيل المثال بهذا الشكل رح نعتمد على start_signin و end_signout بدل ما نعتمد على VBA ( start_signin و end_signout = حقلين افتراضيات يعبران عن بداية ونهاية التوقيع )
- Today
-
تمام .. زادك الله علما .. وبارك فيك نعم هذا افضل كثيرا .. وإلا لماذا جعلنا وقت متاح قبل وبعد الوقت الرسمي للتوقيع ملاحظة : جرب الموظف سالم .. فترته خاص من التاسعة الى الحادية عشر ونصف صباحا لاحظت : الساعة عندي الآن 4:20 مساء 1- سمح له بالتوقيع 1- الرسالة تبين انه في الصباح رغم ان التوقيع الآن ...................................................................................................................................... دعنا الآن من الأكواد وضبطها لتحقيق الشروط المهم الآن هل الجداول وحقولها مكتملة ... وهل طريقة التصميم صحيحة اكتشفت الآن ان حقول الوقت المتاح قبل وبعد التوقيع يجب ان تكون ضمن جدول الفترات وفائدة ذلك : حصر الفترة الزمنية في مكان واحد .. لأن وقت التوقيع سيحصر الوقت : من/الى .. وغير جيد اضافة هذه الفترة داخل الجملة البرمجية صحيح سيوجد تكرار لأننا سنرصد هذه القيم امام كل فترة ، ولكن ايضا مفيد فيما لو اردنا تخصيص فترة ما بوقت متاح اكبر او اصغر اذا جدول الفترات يجب اعادة النظر فيه .. وسوف اقوم باعداده ورفعه ان شاء الله على النحو التالي : المعرف / الدخول الرسمي / الخروج الرسمي / فترة سماح دخول / فترة سماح خروج / وقت متاح قبل / وقت متاح بعد / بداية توقيع حضور/ نهاية توقيع خروج / ساعات(وقت العمل الفعلي) ما خط بالاحمر هو الذي تحصره الدالة .. ومن خلاله يتم قبول او رفض التوقيع .. بداية توقيع حضور = الدخول الرسمي - وقت متاح قبل نهاية توقيع خروج = الخروج الرسمي + وقت متاح بعد ساعات وقت العمل الفعلي = نستخرج الفرق بين الوقتين : ( الدخول الرسمي و الخروج الرسمي ) - فترات السماح المرونة هنا تتحقق .. فيمكن اجبار الموظفين على التوقيع في الوقت المحدد بدون وقت سماح .. واعتبار ساعات العمل كاملة من الدخول الرسمي وحتى الخروج الرسمي
-
في عالم الأعمال الحديث، أصبح التواصل المباشر مع العملاء من خلال الرسائل النصية أداة تسويقية لا غنى عنها. ومع التطور الرقمي، ظهر العديد من المنصات التي تقدم خدمات الرسائل النصية بشكل احترافي، وأبرزها موقع إرسال رسائل sms باسم شركتك، حيث يمكنك من خلاله تعزيز الهوية التجارية والتواصل مع العملاء باسم علامتك التجارية. لماذا تستخدم موقع إرسال رسائل sms باسم شركتك؟ الفرق كبير بين إرسال رسالة من رقم عشوائي وبين إرسالها باسم شركتك. عند استخدام موقع إرسال رسائل sms باسم شركتك، تظهر الرسائل النصية للمستلمين باسم شركتك الرسمي، مما يعزز الثقة ويزيد من احتمالية فتح الرسالة والتفاعل معها. الرسائل النصية التي تُرسل من خلال موقع إرسال رسائل sms باسم شركتك تُستخدم في العديد من الأغراض مثل: الحملات التسويقية. التنبيهات المهمة. تأكيد الطلبات والمواعيد. المتابعة مع العملاء. كل ذلك يتم من خلال واجهة استخدام سهلة تتيح لك إرسال الرسائل بشكل جماعي خلال ثوانٍ، مع إمكانية تتبع التقارير ونتائج الحملة. أهمية اختيار باقات الرسائل النصية المناسبة من أجل الاستخدام الفعّال والمستمر لخدمة الرسائل النصية، من المهم اختيار واحدة من باقات الرسائل النصية التي تناسب احتياجاتك. هناك تنوع كبير في باقات الرسائل النصية التي تقدمها المنصات المختلفة، ومنها: الباقات الشهرية: مثالية للشركات الصغيرة والمتوسطة. الباقات المفتوحة: تلائم الحملات الموسمية المكثفة. الباقات حسب الدول: مناسبة عند إرسال رسائل دولية. باقات مخصصة: حسب القطاعات مثل العيادات أو المتاجر أو المدارس. اختيار الباقة الأنسب من بين باقات الرسائل النصية يوفر لك التكلفة ويمنحك مرونة في عدد الرسائل وسرعة الإرسال. مزايا استخدام موقع إرسال رسائل sms باسم شركتك استخدامك لـ موقع إرسال رسائل sms باسم شركتك يمنحك عددًا من المزايا، من أبرزها: الاحترافية: وصول الرسائل باسمك التجاري يزيد من مصداقيتك. السرعة: إرسال آلاف الرسائل في لحظات. التحكم: تقارير مفصلة توضح من استلم الرسائل ومن تفاعل. الدعم: بعض المواقع تقدم دعمًا فنيًا مميزًا وتكاملًا مع أنظمة الـ CRM. وبالطبع، عند اختيار الموقع، تأكد من أنه يقدم باقات الرسائل النصية متنوعة وأسعار تنافسية. كيف تبدأ؟ للبدء، كل ما عليك هو التسجيل في موقع إرسال رسائل sms باسم شركتك، اختيار واحدة من باقات الرسائل النصية المناسبة، ثم إعداد حملتك بسهولة. غالبًا ما يتم تفعيل اسم المرسل خلال وقت قصير، لتبدأ في التواصل الاحترافي مع جمهورك. الختام سواء كنت شركة ناشئة أو مؤسسة كبيرة، فإن استخدام موقع إرسال رسائل sms باسم شركتك يمنحك أفضلية واضحة في السوق. ومع وجود خيارات متعددة من باقات الرسائل النصية، ستجد بالتأكيد الباقة التي تناسب حجم عملك وميزانيتك. لا تتردد في بدء تجربتك اليوم، وارتقِ بمستوى تواصلك مع العملاء بثقة واحترافية.
-
معلمي الفاضل .. بناءً على ما أسلفتم ، ومن خلال الجدول الجديد الخاص بالتحكم :- تم تعديل اسلوب مطابقة الفترة لتراعي السماح قبل و بعد . التحقق من آخر توقيع للموظف بحيث إذا مضى عليه أقل من 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
-
جرب الكود التالي: Sub CheckDifferences() Dim ws As Worksheet Dim lastRow As Long Dim r As Long Dim values(1 To 7) As Variant Dim result As String Dim i As Integer, j As Integer Dim count As Integer Dim isFirstDiff As Boolean Set ws = ThisWorkbook.Sheets("Sheet1") ' ✏️ غيّر اسم الشيت إذا لزم lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row ' تنظيف العمود O قبل الكتابة ws.Range("O3:O" & lastRow).ClearContents ws.Range("O3:O" & lastRow).Interior.ColorIndex = xlNone ws.Range("O3:O" & lastRow).Font.ColorIndex = xlAutomatic For r = 3 To lastRow ' قراءة القيم من C إلى I For i = 1 To 7 values(i) = ws.Cells(r, i + 2).Value Next i result = "" isFirstDiff = True For i = 1 To 7 count = 0 For j = 1 To 7 If values(j) = values(i) Then count = count + 1 Next j If count = 1 Then If Not isFirstDiff Then result = result & " و " End If result = result & "العمود " & Chr(64 + i + 2) & " مختلف" isFirstDiff = False End If Next i With ws.Cells(r, 15) ' العمود O .Value = Trim(result) If result <> "" Then .Interior.Color = vbYellow ' تعبئة باللون الأصفر .Font.Color = vbRed ' الخط باللون الأحمر End If End With Next r End Sub
-
تمام أستاذي الكريم تم عمل المطلوب
-
اضفت جدولا للتحكم فقط comOutDb2.rar
-
السلام عليكم ورحمة الله وبركاتة الرجاء مساعدتى فى هذه المشكلة يوجد اعمدة بأسماء الاصناف لكل بلد وتم عمل المطلوب من خلال معادلة اكسيل ومعادلة VBA من خلال المعادلة المرتبطة بالكود VBA =GetUniqueColumns(C3:I3) اريد تنسيق العمود O3 الاعمدة المختلفة كل الخلية باللون الاصفر و الحروف باللون الاحمر كما هو مدرج فى الصورة Sub FormatUniqueColumnsDirectly() Dim ws As Worksheet Dim DataRange As Range Dim uniqueColsCollection As New Collection ' This will store the unique column letters Dim cell As Range Dim count As Long Dim colLetter As String Dim targetColumn As Excel.Range Dim i As Long ' --- إعداداتك --- ' 1. تأكد من أن اسم الورقة صحيح Set ws = ThisWorkbook.Sheets("Sheet1") ' غيّر "Sheet1" إلى اسم ورقتك الفعلي ' 2. تأكد من أن نطاق البيانات صحيح ' هذا النطاق هو الذي سيتم البحث فيه عن القيم الفريدة. ' على سبيل المثال، إذا كانت بياناتك في الأعمدة من A إلى Z، ومن الصف 1 إلى الصف 100 Set DataRange = ws.Range("A1:Z100") ' اضبط هذا على نطاق بياناتك الفعلي Debug.Print "Worksheet Name: " & ws.Name Debug.Print "Data Range to check for uniqueness: " & DataRange.Address ' --- الخطوة 1: تحديد الأعمدة الفريدة بناءً على القيم الفريدة داخل النطاق --- ' (هذا هو جوهر ما كانت تفعله دالة GetUniqueColumns) For Each cell In DataRange ' تأكد من أن الخلية ليست فارغة، وإلا فقد يتم عد الخلايا الفارغة كقيم فريدة If Not IsEmpty(cell.Value) Then ' حساب عدد تكرارات القيمة في النطاق الكلي count = Application.WorksheetFunction.CountIf(DataRange, cell.Value) If count = 1 Then ' إذا كانت القيمة فريدة (تظهر مرة واحدة فقط) ' الحصول على حرف العمود من عنوان الخلية (مثال: من $C$5 نحصل على C) colLetter = Split(cell.Address(True, False), "$")(0) Debug.Print "Found unique value: " & cell.Value & " in column: " & colLetter On Error Resume Next ' لتجنب الأخطاء إذا تم إضافة نفس حرف العمود بالفعل uniqueColsCollection.Add colLetter, CStr(colLetter) ' إضافة حرف العمود إلى المجموعة On Error GoTo 0 End If End If Next cell Debug.Print "Number of unique columns identified: " & uniqueColsCollection.count ' --- الخطوة 2: تطبيق التنسيق على الأعمدة الفريدة التي تم تحديدها --- If uniqueColsCollection.count > 0 Then For Each columnLetter In uniqueColsCollection Debug.Print "Attempting to format column: " & columnLetter ' الحصول على كائن العمود بالكامل باستخدام حرف العمود On Error Resume Next ' في حالة كان حرف العمود غير صالح أو فارغ Set targetColumn = ws.Columns(columnLetter) On Error GoTo 0 If Not targetColumn Is Nothing Then Debug.Print "Applying formatting to column: " & columnLetter ' تطبيق التنسيق على العمود المحدد With targetColumn.Interior .Color = RGB(255, 255, 0) ' تعبئة صفراء End With With targetColumn.Font .Color = RGB(255, 0, 0) ' خط أحمر .Bold = True ' خط عريض .Size = 12 ' حجم الخط End With ' إضافة حدود للعمود With targetColumn .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders.Weight = xlThin ' حدود رفيعة End With targetColumn.ColumnWidth = 15 ' ضبط عرض العمود targetColumn.HorizontalAlignment = xlCenter ' محاذاة النص في المنتصف Else Debug.Print "Error: Could not set targetColumn for letter: " & columnLetter & ". It might be an invalid column letter." End If Set targetColumn = Nothing ' إعادة تعيين المتغير للتكرار التالي Next columnLetter Else MsgBox "لا توجد أعمدة فريدة لتنسيقها في النطاق المحدد.", vbInformation End If ' --- تنظيف المتغيرات --- Set ws = Nothing Set DataRange = Nothing Set uniqueColsCollection = Nothing End Sub ' Keep your GetUniqueColumns function if you still need it for displaying the message Function GetUniqueColumns(DataRange As Range) As String Dim cell As Range Dim uniqueCols As New Collection Dim tempArr() As String Dim result As String Dim i As Long Dim colLetter As String Dim count As Long For Each cell In DataRange count = Application.WorksheetFunction.CountIf(DataRange, cell.Value) If count = 1 Then colLetter = Split(cell.Address(True, False), "$")(0) On Error Resume Next uniqueCols.Add colLetter, CStr(colLetter) On Error GoTo 0 End If Next cell If uniqueCols.count = 0 Then ReDim tempArr(0 To 0) Else ReDim tempArr(1 To uniqueCols.count) For i = 1 To uniqueCols.count tempArr(i) = "العمود " & uniqueCols.Item(i) & " مختلف" Next i End If If UBound(tempArr) = 0 Or uniqueCols.count = 0 Then result = "" ElseIf UBound(tempArr) = 1 Then result = tempArr(1) Else For i = 1 To UBound(tempArr) If i = 1 Then result = tempArr(i) Else result = result & " و " & tempArr(i) End If Next i End If GetUniqueColumns = result End Function 2025 اسم التوكيل.xlsm
-
بسم الله مشاء الله تسلم ايدك استاذ محمد دا المطلوب بعينه ... الله ينور عليك واسف جدا علي تعب حضرتك جعله الله في موازين حسناتك ان شاء الله
-
اهلا وسهلا وصباح جميل باطلالة الفوكش قرأت شرحك اعلاه واطلعت على المرفق عمل ولا اجمل .. فشكرا لك توضيح : حقول السماح ليس لها دور في عمليات واجراءت الحضور والانصراف ، وانما ينحصر عملها عند حصر ساعات العمل في الاستعلامات .. مثلا الفترة الصباحية 4 ساعات ومجموع فترات السماح ( الحضور والانصراف )=30 دقيقة هنا يكون ساعات العمل النظامية المطالب بها الموظف ولا يعتبر متأخر هي 3:30 دقيقة من هنا يجب ضبط وقت التوقيع والانصراف فلا يسمح له بالتوقيع قبل الوقت المحدد باكثر من 5 الى 10 دقائق وكذلك الانصراف يجب ضبط وقت ما بعد التوقيع الرسمي ملاحظاتي : 1- اضافة حقل يبين الفترة في جدول الحضور جميل جدا .. سيساعد مستقبلا على سهولة ويسر التصفية حسب الفترات 2- حقل نوع الحضور : ارى ان حضور وانصراف ( 1 ، 2 ) كافيا ولا حاجة لنوع دخول متأخر .. ( سوف ابين ذلك) بالنسبة للدخول المتأخر فلسنا بحاجة الى اظهاره عند الاجراء .. وسوف يظهر في الاستعلام بناء على المعطيات لأن كل توقيع مستقل بذاته .. ايضا وجوده في الجدول يسبب اضطراب .. لأن المطلوب هو هل هذا التوقيع دخول ام خروج ؟ اذا ترى ان بيان حالة الحضور مهمة فالافضل يخصص لها حقل مستقل .. ويضاف ايضا حالة خروج مبكر ( لاحظ هناك يوجد خروج الاستئذان) .. لذا ارى انه بلاش منها كلها 3- يسمح بالتوقيع المتكرر التوقيع الأول حضور والثاني انصراف خلال الجلسة الواحدة لاحتمال تفعيل نظام الاستئذان .. وكما هو معلوم يتم لاحقا حصر التوقيعات حسب اليوم والفترة 4- يلزم عمل ضابط وقت بين كل توقيعين دقيقة واحدة على الأقل ( بحيث لا يسمح بالتوقيع الثاني الا بعد انقضاء الوقت المحدد ... وذلك تلافيا للخطأ غير المقصود) ................................ بناء على الملاحظات اعلاه نحن بحاجة الى جدول كنترول يرصد فيه : 1- الوقت المتاح قبل موعد الحضور الرسمي 2- الوقت المتاح بعد موعد الانصراف الرسمي 3- ضابط وقت بين كل توقيعين وغيرها من ادوات التحكم التي قد نحتاجها وتظهر لنا اثناء التصميم اكرر شكري وامتناني ..
-
السلام عليكم استاذى العزيز Hegazee شكرا جدا لحضرتك ومجهودك وافى وعرضك رائع وارجوا ان تتقبل تحياتى وان يتقبل الله دعواتى لشخصكم الكريم السلام عليكم
- Yesterday
-
وعليكم السلام ورحمة الله وبركاته ،، موضوع ثري وجميل للنقاش ، ويستحق فعلاً أن يُبنى على تصور شامل ودقيق من البداية . وبحسب ما فهمت من تصوركم – وهو تصور متطور ومرن – لدي نقطة بسيطة أحب أن أطرحها للنقاش :- هل سيُؤخذ بعين الاعتبار مسألة ( التأخيرات المسموحة ) ؟ يعني مثلاً :- إذا تأخر الموظف عن وقت حضوره بـ 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
-
كيف يمكن لي ان اطلب خدمة وتعديل على قاعدة بيانات خاصة بي اكسس واضافة صلاحيات المستخدمين فقط وتشفير وحماية النظام برقم القرص الصلب هل يمكن لاخد مساعدتي بمقابل مادي ويتم التواصل معي لو سمحتوا لي مشاريع كثيرة واريد احد يساعدني بارك الله فيكم كيف يمكن الوصول الى شخص فاهم بشكل غير عادي معه مبلغ مادي وينجز طلبي خلال ايام وهل يسمح لي بطرح رقم هاتفي واتساب في المنتدى ؟ تواصل معي واتساب / 00967784455777
-
فوزي صلاح اليافعي started following عبد الله قدور
-
هذا مثال لعرض ما تم نقاشه نريد اجراء العمليات عليه والضبط حسب جدول الفترات الحقلان : startWithFree و endWithFree ستختفي من الفورم مستقبلا ولكني وضعتها للاستئناس والتأكد من النتيجة comOutDb.rar
-
تسلم كتر خيرك وانا اسف لتعبك معايا شكرا
-
استدراك : الدوام الخاص الافضل ان يكون متاح له اكثر من تبويب مثل : خاص1 ، خاص2 ، خاص3 وهكذا ... وبرمجيا فعلا هو متاح الى مالا نهاية والسبب انه قد يوجد اكثر من موظف خاص اوقاته تختلف عن الآخر وهنا يتبين اننا بحاجة الى جدول فرعي واحد فقط .. يتم تسجيل الفترات وأسماءها من قبل المستخدم حسب تصوري الآن اصبح المشروع اكثر مرونة من حيث تحديد الفترات هل هذا التصور سليم ؟
-
تمام بارك الله فيك بالنسبة لجدول الورديات ( من تاريخ الى تاريخ ) لسنا بحاجته .. والسب ان العمل مدني مستمر اذا سيكون الجدول الفرعي : صباحية / مسائية / دوام كامل/ دوام خاص وامام كل وردية بياناتها : وقت الحضور ووقت الانصراف .. والسماح وفي جدول الأسماء حقل (x) لاختيار الوردية المناسبة للموظف عند التوقيع حقل(x) سيحمل البيانات والمواصفات الخاصة به الموجودة في جدول الورديات ويتم تعامل الاجراءات الخاصة في فورم التوقيع بناء على ذلك صح؟ ما رأيك
-
حركة الإرباك هذه تحصل حتى عندما يكون لديك نموذج آخر وهو مفتوح وعليه تايمر .. وأنت تشتغل على نموذج آخر مش عليه تايمر .. أو حتى وأنت تكتب أكوادك في موديول عام .. هذا ما كان يقصده المعلم العود @jjafferr ... ويظهر أن الكود اللي عملته حضرتك يتصرف بنفس الطريقة التي يتصرفها التايمر المضمن في نماذج الأكسس (حسب ما أفاد المعلم العود ) 🙂
-
Moosak started following تصميم جداول برنامج حضور وانصراف _ نقاش
-
وعليكم السلام ورحمة الله وبركاته معلمنا القدير .. 🙂 🌹 وأنا أحد تلاميذك أسمحلي بأن أطرح فكرتي في هذا الموضوع ( وقد عملت على مشروع مشابه) .. 🙂 أولا : نفترض أن الموظف له فترة دوام محددة (من ضمن القائمة التي ذكرتها) بين تاريخين محددين مثال : 1- شهر رمضان له أوقات دوام مختلفة عن باقي الشهور. 2- الموظف أنتقل من موقع عمل لموقع آخر له فترة دوام مختلفة. 3- الموظف تغيرت ورديته من صباحية إلى مسائية أو العكس. 4- والأمثلة كثيرة ..... ثانيا : نقوم بتصميم جدول فرعي لجدول الموظفين (جدول الورديات) يتم فيه إضافة سجل لكل نوع دوام للموظف حسب نوع الوردية وتحديد الفترة الزمنية (من تاريخ) ---> (إلى تاريخ). ثالثا : تصميم نموذج فرعي يضاف لنموذج الموظفين يتم فيه تعبئة هذه البيانات التي ذكرناها في جدول الورديات . رابعا : يتم احتساب مدة العمل والتأخير والانصراف المبكر وعدد ساعات العمل التي أداها الموظف بناءً على فترة دوامه المذكورة في جدول الورديات . وهذه صور توضيحية حسب المشروع الذي عملت عليه وهو خاص ببرنامج لأحد الاخوة 🙂 : جدول الورديات : نموذج بيانات الموظفين + النموذج الفرعي للورديات ( الورديات التي ليس لها تاريخ نهاية هي ورديات مستمرة حتى تاريخ اليوم ولها اعتبار في كود الحسابات) : صورة مقربة للنموذج الفرعي : القائمة المنسدلة للورديات تأخذ بياناتها من جدول فرعي آخر يتم فيه تسجيل أنواع الورديات والبيانات المتعلقة بها : بعد هذا قمنا بتصميم جملة من الدوال الخاصة بجلب البيانات الخاصة بتفاصيل الورديات من الجداول وتطبيقها على الموظفين وحساب ما يطلب حسابه .. هذا باختصار وسلامتكم 🙂