اذهب الي المحتوي
أوفيسنا

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

قام بنشر

السلام عليكم ورحمة الله تعالى وبركاته
استاذتى الكرام
فضلا وكرما ممكن مساعدة

المرفق الاتى يحتوى على جدول يوضح الايام التى لم يحضر فيها الموظفين الى العمل ومنها المتتالى والغير متتالى

المطلوب
هل يمكن اظهار عدد الايام المتتاليه فقط ان كانت اكبر من 8 ايام

طبعا قد يكون لموظف ما مثل الموظف صاحب الكود رقم  3  عدد  11  يوم اجمالا ولكنهم غير متصلين فكيف يتم حصر عدد الايام المتتاليه فى التاريخ فقط 

qs.rar

قام بنشر

حياك الله اخ محمد

ماذا لو كان هناك اكثر من غياب متتالي ؟

اي هناك غياب متتالي 3 ايام ثم غياب متفرق 2 يوم ثم غياب متتالي 4 ايام ثم غياب متفرق 3 ايام ثم غياب متتالي 10 ايام ؟

فاي الغياب المتتالي تريد ؟ ام تظهر الكل ؟ وضح اكثر وبدقه

تحياتي

قام بنشر
منذ ساعه, رمهان said:

حياك الله اخ محمد

ماذا لو كان هناك اكثر من غياب متتالي ؟

اي هناك غياب متتالي 3 ايام ثم غياب متفرق 2 يوم ثم غياب متتالي 4 ايام ثم غياب متفرق 3 ايام ثم غياب متتالي 10 ايام ؟

فاي الغياب المتتالي تريد ؟ ام تظهر الكل ؟ وضح اكثر وبدقه

تحياتي

استاذى الحبيب ومعلمى القدير
اريد اظهار الغياب المتتالى فقط والذى يساوى 8  فى تقرير

وما يساوى 10 ايام فى تقرير اخر

قام بنشر

الصق هذا الاستعلام على افتراض اسم الجدول x  بدلا من xxxxxxx

SELECT x.Emp_Code, Sum(DLookUp("1","x","format(day_date,'ddmmyy')=" & Format([day_date]-1,'ddmmyy') & " and emp_code=" & [emp_code])) AS Expr1
FROM x
WHERE (((DLookUp("1","x","format(day_date,'ddmmyy')=" & Format([day_date]-1,'ddmmyy') & " and emp_code=" & [emp_code]))=1))
GROUP BY x.Emp_Code
HAVING (((Sum(DLookUp("1","x","format(day_date,'ddmmyy')=" & Format([day_date]-1,'ddmmyy') & " and emp_code=" & [emp_code])))=8));

وتلاحظ المعيار 8

تسنطيع تغيير المعيار حسب الايام وحسب الموظف

جرب ولي معك عوده

تحياتي

قام بنشر
15 ساعات مضت, رمهان said:

الصق هذا الاستعلام على افتراض اسم الجدول x  بدلا من xxxxxxx


SELECT x.Emp_Code, Sum(DLookUp("1","x","format(day_date,'ddmmyy')=" & Format([day_date]-1,'ddmmyy') & " and emp_code=" & [emp_code])) AS Expr1
FROM x
WHERE (((DLookUp("1","x","format(day_date,'ddmmyy')=" & Format([day_date]-1,'ddmmyy') & " and emp_code=" & [emp_code]))=1))
GROUP BY x.Emp_Code
HAVING (((Sum(DLookUp("1","x","format(day_date,'ddmmyy')=" & Format([day_date]-1,'ddmmyy') & " and emp_code=" & [emp_code])))=8));

وتلاحظ المعيار 8

تسنطيع تغيير المعيار حسب الايام وحسب الموظف

جرب ولي معك عوده

تحياتي

 

استاذى الجليل ومعلمى القدير
انا نفذت كلام حضرتك بالتمام زى ما قلت وتلاحظ الاتى كما فى المرفق

اولا وضعت هذا المعيار   >=3   بدلا من الرقم  8     وهذا على سبيل التجربة

تلاحظ الاتى 

الموظف رقم   1   فى الستعلام اصبح عدد ايام غيابه المتتاليه هى  6             النتيجه غير صحيحه 
ومن الجدول بالمراجعه تبين ان عدد الايام   هى    7
01.jpg.ab1404f6b23d08fda51701bfb0a58cbf.jpg01.jpg.ab1404f6b23d08fda51701bfb0a58cbf.jpg
الموظف رقم     3     فى الستعلام اصبح عدد ايام غيابه المتتاليه هى  7        النتيجه صحيحه 
ومن الجدول بالمراجعه تبين ان عدد الايام   هى    7
03.jpg.a541e4b5c71c3b2859a7169a086e64b8.jpg


------------------------------------------------------------------------------------------------------

وقمت بالتجربة مرة أخرى بحذف المعيار نهائيا تبين الاتى
الموظف رقم   1   فى الستعلام اصبح عدد ايام غيابه المتتاليه هى  6             النتيجه غير صحيحه           المفروض  7    طبقا للجدول
01.jpg.ab1404f6b23d08fda51701bfb0a58cbf.jpg
الموظف رقم   2   فى الستعلام اصبح عدد ايام غيابه المتتاليه هى  1             النتيجه غير صحيحه           المفروض  2    طبقا للجدول
02.jpg.cbcaef47a4e35fb022cbc9bff1c896cd.jpg
الموظف رقم   3   فى الستعلام اصبح عدد ايام غيابه المتتاليه هى  7             النتيجه صحيحه                               7    طبقا للجدول

03.jpg.a541e4b5c71c3b2859a7169a086e64b8.jpg

qs_2.rar

قام بنشر
25 دقائق مضت, jjafferr said:

هل شفت الرابط اللي ارفقته لك؟

نعم يا استاذى الحبيب ومعلمى القدير ولكن واجهنى به المشكلى الاتية
يقوم بجمع كل الايام المتتاليه من اول الشهر الى اخر الشهر 

وانا فقت كل ما اريده الايام المتتاليه التى يكون عددها 8 ايام فقط وان كان هناك 8  فى اول السهر و 8 فى اخر الشهر يظهر الـ 8 اللى فى اخر الشهر فقط 

وهناك مشكلة اخرى
المرفق فى الموضوع الذى تفضلتم به يعتمد على كلمتى غياب وحضور

وفى البرنامج عندى لا استخدم هذه الكلمات 

ولذلك اعجبتنى طربقة الاستاذ رمهان لانها عامة ومطلقة فقط سأحاول جاهدا العمل على فهم الية الاستعلامات والاكواد بداخلها لحل المشاكل سالفة الذكر

قام بنشر

البرنامج يرى التواريخ بين التاريخين ،

ثم يحسب الايام المتتالية (3 ايام في الرابط)  ، ولا يهمه مكان الايام المتتاليه !!

واذا وجد ايام متتالية حسب الطلب ، لا يحسب الايام المتتاليه الاخرى.

 

رجاء المحاولة مرة اخرى:smile:

 

جعفر

قام بنشر (معدل)
3 دقائق مضت, jjafferr said:

البرنامج يرى التواريخ بين التاريخين ،

ثم يحسب الايام المتتالية (3 ايام في الرابط)  ، ولا يهمه مكان الايام المتتاليه !!

واذا وجد ايام متتالية حسب الطلب ، لا يحسب الايام المتتاليه الاخرى.

 

رجاء المحاولة مرة اخرى:smile:

 

جعفر

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

ولكن سأحاول التجربة مرة اخرى

تم تعديل بواسطه ابا جودى
قام بنشر
منذ ساعه, jjafferr said:

البرنامج يرى التواريخ بين التاريخين ،

ثم يحسب الايام المتتالية (3 ايام في الرابط)  ، ولا يهمه مكان الايام المتتاليه !!

واذا وجد ايام متتالية حسب الطلب ، لا يحسب الايام المتتاليه الاخرى.

 

رجاء المحاولة مرة اخرى:smile:

 

جعفر

السلام عليكم ورحمة الله تعالى وبركاته

استاذى الجليل 
اعتذر للاثقال على كاهلكم
ولكن تلك هى النتيجة التى توصلت اليها بناء على الموضوع الذى تفضلتم به على وبعد نقل الموديولات الخاصة وانشاء الاستعلامات المساعدة وبعض التعديلات الطفيفة
كانت تلك هى النتيجة
01.thumb.png.3255652afa704c80c5a647d667ad0b1b.png
بالنسبه لكود الموظف  80914  عدد الايام المتتاليه هى 9  من واقع الاستعلام    
ولكن بمراجعة الجدول عدد الايام المتتاليه هى   8
-----------------------------------------------------------------------------------------------------------------
المشكله الكبرى والنتيجه الغريبه جدا مع الموظف كود     28241
الايام المتتاليه هى فقط 3   بينما تظهر فى الاستعلام   6
04.png.df7680b2fa74ee453f020e0f8b30dd43.png
-----------------------------------------------------------------------------------------------------------------
وتلك الصور ايضا توضح نفس الاختلافات كما هو الحال مع الموظف كود 80914 الاختلافات
02.png.f553c92191d6dd3357ff6e1a7d96de9b.png


03.png.31cf1dbde37e632ff669d1eaa3d3f23c.png
وهذا على سبيل المثال وليس الحصر

حصر الغياب.rar

قام بنشر

كان في خطأ في الكود ، والحمدلله استطعت معرفته وتغييره:smile:

 

حاليا الكود يعطيك فقط اذا في ايام متتالية اكثر من 8 ايام مثلا (انت تحدد هذا اليوم ، وحتى ممكن نضعه في النموذج الذي به التواريخ من-الى).

 

الكود اصبح:

Option Compare Database

Function Check_Abs(EN)
On Error GoTo err_Check_Abs

If EN = 0 Then
aaaa = 1
End If
    'EN = Employee Name     WAS
    'EN = Employee Code     NOW
    
    Dim rst As DAO.Recordset
    
    fD = [Forms]![frm_get_attendance_data]![Date_From]
    eD = [Forms]![frm_get_attendance_data]![Date_To]
    
    'myCriteria = "[Emp_Name]='" & EN & "'"
    myCriteria = "[Emp_Code]=" & EN
    myCriteria = myCriteria & " And [Leave_Type]='غياب'"
    myCriteria = myCriteria & " And [day_date] Between " & DateFormat(fD) & " And " & DateFormat(eD)
    
    'Set rst = CurrentDb.OpenRecordset("Select * From tbl_Attendance_in Where [Emp_Name]='" & EN & "' And [Leave_Type]='غياب' And [day_date] Between '" & DateFormat(fD) & "' And '" & DateFormat(eD) & "'")
    Set rst = CurrentDb.OpenRecordset("Select * From tbl_Attendance_in Where " & myCriteria & " Order by [day_date]")
    rst.MoveLast: rst.MoveFirst
    RC = rst.RecordCount
    
    Seq = 1
    Prev_Date = rst![day_date]
    
    For i = 1 To RC
        
        If rst![day_date] = DateAdd("d", 1, Prev_Date) Then
            Seq = Seq + 1
            
            'do we have a Next Day
            'Next Day
            iNext_Day = DateAdd("d", 1, rst![day_date])
            
                'Move to Next Records
                'and compare days
                rst.MoveNext
                
                If rst![day_date] <> iNext_Day And Seq >= 8 Then
                    Check_Abs = Correct_Names(Seq)
                    Exit For
                End If
                
                rst.MovePrevious

        Else
            Seq = 1
        End If
        
        Prev_Date = rst![day_date]
        
Next_ii:
        rst.MoveNext
    Next i
    
'    If Seq >= 8 Then
'        Check_Abs = Seq & " ايام متتالية"
'    Else
'        Check_Abs = RC & " ايام غير متتالية"
'    End If
    
Exit_Check_Abs:

    rst.Close: Set rst = Nothing
    
Exit Function
err_Check_Abs:

    If Err.Number = 3021 Then
        If Seq >= 8 Then
            Check_Abs = Correct_Names(Seq)
        Else
            Check_Abs = ""
        End If
        Resume Exit_Check_Abs
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
    End If
    
End Function

Function Correct_Names(N)

    Select Case N
        Case 2
            Correct_Names = " يومان متتاليان"
            
        Case 3 To 10
            Correct_Names = N & " ايام متتالية"
            
        Case Else
            Correct_Names = N & " يوم متتالي"
            
    End Select
    
End Function

 

جعفر

 

588.حصر الغياب.mdb.zip

  • Like 1
قام بنشر

عزيزي ابو جودي

الان الجديد في الطلب هو انه عند تساوي معيار ياتي بالاخير

وهنا تحتاج شوية تفكير فخليني اخلص شغلات لدي ونركز حبتين بتاخذ حل رمهاني :wink2:

والاستاذ القدير جعفر اتى بالحل بالكود وانا افكر بلاستعلام

تحياتي للجميع

  • Like 1
قام بنشر

معليش استعنت بالكود لسرعة 

الفكره عبارة عن اضافة عمود جديد بالجدول يمثل فئه

فكل متتالي له فئة حسب الموظف . لانه يمكن ان يكون هناك اكثر من تتالي فيمثل فئه خاصه

هذا الكود والاستعام query2  بالمرفق وتستطيع تعمل معيارك زي ماتحب

Set rs = CurrentDb.OpenRecordset("select * from x order by emp_code,day_date"): rs.MoveFirst
xd = rs!day_date
xn = 1
rs.Edit
rs!ord = xn
rs.Update
For i = 2 To rs.RecordCount
rs.MoveNext
If rs!day_date - xd <> 1 Then xn = xn + 1
rs.Edit
rs!ord = xn
rs.Update
xd = rs!day_date
Next

بالتوفيق

qs.rar

قام بنشر (معدل)
في 2/16/2017 at 21:53, jjafferr said:

كان في خطأ في الكود ، والحمدلله استطعت معرفته وتغييره:smile:

 

حاليا الكود يعطيك فقط اذا في ايام متتالية اكثر من 8 ايام مثلا (انت تحدد هذا اليوم ، وحتى ممكن نضعه في النموذج الذي به التواريخ من-الى).

 

الكود اصبح:


Option Compare Database

Function Check_Abs(EN)
On Error GoTo err_Check_Abs

If EN = 0 Then
aaaa = 1
End If
    'EN = Employee Name     WAS
    'EN = Employee Code     NOW
    
    Dim rst As DAO.Recordset
    
    fD = [Forms]![frm_get_attendance_data]![Date_From]
    eD = [Forms]![frm_get_attendance_data]![Date_To]
    
    'myCriteria = "[Emp_Name]='" & EN & "'"
    myCriteria = "[Emp_Code]=" & EN
    myCriteria = myCriteria & " And [Leave_Type]='غياب'"
    myCriteria = myCriteria & " And [day_date] Between " & DateFormat(fD) & " And " & DateFormat(eD)
    
    'Set rst = CurrentDb.OpenRecordset("Select * From tbl_Attendance_in Where [Emp_Name]='" & EN & "' And [Leave_Type]='غياب' And [day_date] Between '" & DateFormat(fD) & "' And '" & DateFormat(eD) & "'")
    Set rst = CurrentDb.OpenRecordset("Select * From tbl_Attendance_in Where " & myCriteria & " Order by [day_date]")
    rst.MoveLast: rst.MoveFirst
    RC = rst.RecordCount
    
    Seq = 1
    Prev_Date = rst![day_date]
    
    For i = 1 To RC
        
        If rst![day_date] = DateAdd("d", 1, Prev_Date) Then
            Seq = Seq + 1
            
            'do we have a Next Day
            'Next Day
            iNext_Day = DateAdd("d", 1, rst![day_date])
            
                'Move to Next Records
                'and compare days
                rst.MoveNext
                
                If rst![day_date] <> iNext_Day And Seq >= 8 Then
                    Check_Abs = Correct_Names(Seq)
                    Exit For
                End If
                
                rst.MovePrevious

        Else
            Seq = 1
        End If
        
        Prev_Date = rst![day_date]
        
Next_ii:
        rst.MoveNext
    Next i
    
'    If Seq >= 8 Then
'        Check_Abs = Seq & " ايام متتالية"
'    Else
'        Check_Abs = RC & " ايام غير متتالية"
'    End If
    
Exit_Check_Abs:

    rst.Close: Set rst = Nothing
    
Exit Function
err_Check_Abs:

    If Err.Number = 3021 Then
        If Seq >= 8 Then
            Check_Abs = Correct_Names(Seq)
        Else
            Check_Abs = ""
        End If
        Resume Exit_Check_Abs
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
    End If
    
End Function

Function Correct_Names(N)

    Select Case N
        Case 2
            Correct_Names = " يومان متتاليان"
            
        Case 3 To 10
            Correct_Names = N & " ايام متتالية"
            
        Case Else
            Correct_Names = N & " يوم متتالي"
            
    End Select
    
End Function

 

جعفر

 

588.حصر الغياب.mdb.zip


السلام عليكم ورحمة الله تعالى وبركاته
جزاكم الله تعالى خيرا :fff:
بفضل الله تعالى الحسابات تمام حتى الان من الوهلة الاولى والتجربة المبدئية ولكن ان شاء الله اخبركم بالنتيجه استاذى الجليل بعد تجربتها جيدا ومرارا وتكرارا للتأكد من النتيجة

 

18 ساعات مضت, رمهان said:

معليش استعنت بالكود لسرعة 

الفكره عبارة عن اضافة عمود جديد بالجدول يمثل فئه

فكل متتالي له فئة حسب الموظف . لانه يمكن ان يكون هناك اكثر من تتالي فيمثل فئه خاصه

هذا الكود والاستعام query2  بالمرفق وتستطيع تعمل معيارك زي ماتحب


Set rs = CurrentDb.OpenRecordset("select * from x order by emp_code,day_date"): rs.MoveFirst
xd = rs!day_date
xn = 1
rs.Edit
rs!ord = xn
rs.Update
For i = 2 To rs.RecordCount
rs.MoveNext
If rs!day_date - xd <> 1 Then xn = xn + 1
rs.Edit
rs!ord = xn
rs.Update
xd = rs!day_date
Next

بالتوفيق

qs.rar

استاذى الجليل 
اعتذر لاثقالى على كاهلك
استحى بطلبى اولا : فأرجو من استاذى الحبيب ومعلمى الجليل الاستاذ جعفر ان يلتمس العذر لى بعد ان تم التوصل الى النتيجه المرجوة وحتما تم بذل الجهد والوقت الثمين فوالله ليس تقليلا او عدم رضا
بفضل الله تعالى صم مجهودة وكرمه يملئنى كل الرضا بما قدمه استاذى الجليل :fff: ولكن انا اطمع فى التماس العفو من استاذ جعفر بأعادة النظر مرة اخرى والرجوع لفكرة الاستاذ الجليل رمهان فكما يقال زيادة الخير اطمع فى فهم اكثر من فكرة والوصول الى نفس النتيجه بعدة طرق 

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

وللاسف عندما حاولت التطبيق على الجدول الذى به البيانات الحقيقية والمراد معالجتها فوجئت بنتائج مخالفة ومغايرة تماما ولا ادرى السبب
اطلب منكم على استحياء توضيح سبب تلك النتيجه الغريبه اسأل الله تعالى ان ينير قلوبكم بتقواه ودروبكم بهداه 

واخيرا وليس اخرا
اسال الله تعالى العلى العظيم رب العرش العظيم ان يغفر لكل اساتذتنا الكرام وكل من تعلمنا على ايديهم ومنهم وكل من اثقلنا على كاهلهم وتحملوا جهلنا بحلمهم واخطائنا بعلمهم وان يعفر لوالديهم وان يبارك لهم فى ذريتهم وان يرزقهم شربة من يد نبينا وحبيبنا محمد صلى الله عليه وسلم والنظر الى وجهه الكريم  

امين امين امين

qs (1).rar

تم تعديل بواسطه ابا جودى
قام بنشر

ممكن توضح السجل الغريب او السجلات واين الغريب وما هو

انا جربت المرفق وتمام

تحياتي

قام بنشر
2 ساعات مضت, ابا جودى said:

استحى بطلبى اولا : فأرجو من استاذى الحبيب ومعلمى الجليل الاستاذ جعفر ان يلتمس العذر لى بعد ان تم التوصل الى النتيجه المرجوة وحتما تم بذل الجهد والوقت الثمين فوالله ليس تقليلا او عدم رضا
بفضل الله تعالى صم مجهودة وكرمه يملئنى كل الرضا بما قدمه استاذى الجليل :fff: ولكن انا اطمع فى التماس العفو من استاذ جعفر بأعادة النظر مرة اخرى والرجوع لفكرة الاستاذ الجليل رمهان فكما يقال زيادة الخير اطمع فى فهم اكثر من فكرة والوصول الى نفس النتيجه بعدة طرق 

بالعكس ، انا دائما اقول:

اقتباس

في اعتقادي ، مشاركة أكثر من شخص في الرد على السؤال ، هو فائدة للجميع ، فمنه نتعلم الطرق الاخرى للإجابة على السؤال ، ونتعلم خبايا البرمجة :rol:

 

جعفر

  • Like 3
قام بنشر (معدل)
منذ ساعه, رمهان said:

ممكن توضح السجل الغريب او السجلات واين الغريب وما هو

انا جربت المرفق وتمام

تحياتي

انا اسف جدا جدا جدا انا المشكله فى انا  
انا سرحت ونسيت اعدل على الاستعلام خلف زر الامر بما يناسبنى لذلك تم احتساب كل الايام غياب

 

اعتذر جدا جدا جدا صار كل شئ تمام بفضل الله عزوجل جزاكم الله خيرا
وهذا المرفق كما ينيغى ان يكون

شكر الله لكم انت واستاذ جعفر :fff::rol:

qs_3.rar

تم تعديل بواسطه ابا جودى
قام بنشر

السؤال الان اخ ابو جودي

كيف سيكون معيارك لاستخراج الغياب المتتالي الاخير عند التساوي مع عدد اول او وسط الشهر ؟

قام بنشر
17 ساعات مضت, رمهان said:

السؤال الان اخ ابو جودي

كيف سيكون معيارك لاستخراج الغياب المتتالي الاخير عند التساوي مع عدد اول او وسط الشهر ؟

استاذى العزيز ومعلمى الجليل 
كل الشكر والتقدير لاهتمام حضرتك جزاكم الله خيرا

اليه العمل فى الجزء ده من الناحية الادارية وحسب فهمى من مسئول الشئون الادارية ان الموظف اذا غاب 8 ااييام متصلين دون تقديم اجازة يجب ارسال خطاب بانذاره بالانقطاع عن العمل مما يؤدى الى رفد الموظف اذا وصل الحد الى 10 ايام 

ولذلك طلب منى عمل تنبيه وفتح تقرير لمن يتخطى هذه النسبه 

ولذلك من يصل الى العدد 8 متصلين فى حالة عودته الى العمل وتسويه الاجزات وتسوية موقفه القانونى سأقوم بعمل استعلام تحديث لتلك الفترة بين تاريخ البدء والانتهاء بمسح قيم 

ord 

لهذا الموظف وبذلك لن يتكرر مطلقا هذا العدد  8   ايام متصلين وبهذه الطريقة اعتقد سوف لا يكون هناك داعى لتحديد ايام لانها لن تتكرر والله اعلم بالتجربة ان وقفت فى شئ سوف اوافى حضراتكم 

 

جزاكم الله خيرا  :fff: استاذ رمهان 

جزاكم الله خيرا  :fff: استاذ جعفر 

  • Like 1

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