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

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

قام بنشر (معدل)

عندي تقرير فرعي يظهر الاجازات بدون مرتب الحاصل عليها الموظف

المساعدة المطلوبة 

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

1 رعاية اسرة في الفترة من 12/12/2019 و تنتهي في 11/12/2023

2 مرافقة زوج في الفترة من 12/3/2007 و تنتهي في 11/12/2019 مرفق صورة للتوضيح

 

Untitled.png

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

وعليكم السلام 🙂

 

اعمل استعلام تجميعي بنوع الاجازة (Group by) ، واختار الاقل (Min) للتاريخ الاعتباري ، واختار الاكبر (Max) لتاريخ نهاية الاجازة.

قام بنشر (معدل)

السلام عليكم استاذنا و معلمنا 

شكرا علي اهتمامك

عملت استعلام تجميعي 

بس المشكله اني لما طبقت علي موظفة اخري اخذت اجازة رعاية طفل ثلاث سنوات( من 1/9/1994 حتي 31/8/1997 ) متصلة ثم عادت للعمل و بعد ذلك قامت بنفس نوع الاجازة (رعاية طفل) لمدة سنة اخري رابعة ( من 2/12/1998 حتي 1/12/1999 )

عند تطبيق الاستعلام التجميعي 

اخرج بداية الاجازة الاولي (1/9/1994 ) علي انها بداية الاجازة ثم اخرج نهاية الاجازة الثانية ( 1/12/1999 ) علي انها نهاية الاجازة و اصبحت اجازة متصله 

فهل من حل ان لو الاجازة متصلة يضم البداية علي النهاية 

و لو مش متصله يفصل و يذكر الاجازة ببدايتها و نهايتها 

تم تعديل بواسطه ِAbo_El_Ela
قام بنشر (معدل)

تمام 

فلنفترض ان محمد موظف اخذ اجازة للعمل بالخارج في فترتين 

الفترة الاولي (1/1/2018 حتي 31/12/2020) 

عبارة عن ثلاث سنوات متصله يعني بدات الاجاة يوم 1/1/2018 و لم يعد للعمل الا يوم 1/1/2021 

بس صدر ليها ثلاثة قرارات وزارية بمعني ثلاثة سجلات سوف تظهر في التقرير الفرعي 

 

 

ثم حصل علي اجازة اخري 

الفترة الثانية (1/1/2022 حتي 31/12/2022)

 

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

اللي بدور علية 

انه يضم الثلاث سنوات الاولي مع بعض لتصبح كالاتي 

 

Untitled1.png

بدلا من 

Untitled2.png

هل وصلت الفكرة و لا محتاجة توضيح 

قام بنشر

الظاهر من بياناتك في الصورة في او مشاركة ،

الاجازة المتصلة:

تاريخ بداية الاجازة = تاريخ نهاية الاجازة السابقة + 1 يوم

 

يمكننا عمل كود ليعمل المطلوب ، ولا ارى طريقة لعمله في استعلام !!

 

اذن نحن بحاجة الى بيانات كثيرة ومتنوعة لتحليل وعمل اللازم 🙂

  • Thanks 1
  • أفضل إجابة
قام بنشر

السلام عليكم 🙂

 

للتجربة والتأكد من اني فهمت الموضوع ، رجاء عمل التالي:

1. شغل الدالة Make_Groups ،

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

image.png.7b4503a0689a7819a19c349ba161056c.png

.

عندما تنتهي الدالة من عملها ، ستظهر لك رسالة "Done" ،

عندها رجاء تشغيل الاستعلام qry_Vacations والتأكد بأن بياناتها كما تريد 🙂

 

الدالة تضع بياناتها في الجدول tbl_V_Seq ، وهو جدول تجميع الاجازات المستمرة 🙂

1581.سجل المحضرين_be.accdb.zip

  • Like 2
قام بنشر

بسم الله ماشاء الله 

الله اكبر علي حضرتك 

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

 

 

شكرا استاذنا العظيم 

ربنا يبارك في حضرتك

 

طبعا براحتك خالص و علي اقل من مهلك و لما حضرتك تفضي ممكن افهم الفكرة 

قام بنشر

السلام عليكم 🙂

 

- تم الغاء الجدول tbl_V_Seq ،

- تم اضافة الحقل Seq الى الجدول tblVacations ،

- يمكنك نقل هذه الدالة الى برنامج الواجهة ، واستعماله هناك ،

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

- اقترح اضافة الحقل Seq الى نموذج الاجازات ، ويدويا تعطيه:

  1. رقم التسلسل للاجازة السابقة ، اذا كانت الاجازة الجديدة استمرار للاجازة السابقة ،
  2. الرقم التسلسل التالي.

 

 

Option Compare Database
Option Explicit

Function Make_Groups()

    'نريد عمل لكل اجازات مستمرة ، مجموعة خاصة بها
    'وبما انه لا توجد معلومة مميزة في السجل لتوضح الفرق بين الاجازة العادية والاجازة المستمرة
    'فوجب التفكير في عمل هذه المجموعات
    'ورأيت ان اسهل طريقة لعمل هذه المجموعات ، هو عمل رقم مسلسل لكل سجل
    'فالاجازات المستمرة يكون لها نفس الرقم ، وعند انتهائها ، فالسجل التالي يحصل على الرقم المسلسل التالي
    '
    '
    'بعد تحليل البيانات، اتضح ان الاجازة المستمرة معناها
    'تاريخ بداية الاجازة الجديدة = تاريخ نهاية الاجازة السابقة + 1 (يوم واحد)
    '
    'فعليه، بدأنا بأول اجازة وتم اعطاءها رقم مسلسل
    'ثم ننتقل الى السجل التالي ، ونتأكد من نتائج المعادلة اعلاه
    'فإذا كانت النتيجة نفسها ، فمعناه انها اجازة مستمرة ونعطي السجل نفس الرقم
    'واذا كانت الاجازة منقطعة ، فنقوم بإضافة 1 الى الرقم المسلسل ، وهكذا
    '
    '
    'tbl_V_Seq تم الغاء الجدول
    'واضافة الحقل Seq
    'الى الجدول
    'tblVacations
    '
    
    Dim rstV As DAO.Recordset
    Dim rstVG As DAO.Recordset
    Dim Seq As Long
    Dim Last_EndDate As Date
    
    'rstV  = tblVacation                    بيانات الجدول
    'rstVG = tblVacation Group By emp_code  ارقام الموظفين بدون تكرار من الجول
    
    'تنظيف الحقل Seq من البيانات السابقة
    CurrentDb.Execute ("UPDATE tblVacation SET Seq = Null")
    
    'ارقام الموظفين بدون تكرار، والفرز تصاعدي
    Set rstVG = CurrentDb.OpenRecordset("SELECT emp_code FROM tblVacation GROUP BY emp_code ORDER BY emp_code")
    rstVG.MoveFirst
        
    
    'حلقة دوران حتى نشمل جميع الموظفين
    Do Until rstVG.EOF

        'سجلات كل موظف
        Set rstV = CurrentDb.OpenRecordset("SELECT * FROM tblVacation WHERE emp_code=" & rstVG!emp_code)
        
        'اذا لا توجد بيانات للموظف، ابدأ التسلسل 1
        If rstV.RecordCount = 0 Then
            'No Record
            Seq = 1
        End If
                
    
        'اول قيمة للمقارنة ، ونجعلها فارغة
        Last_EndDate = 0
        
        'حلقة دوران لمقارنة سجلات الموظف
        Do Until rstV.EOF
        
            'اذا تاريخ نهاية الاجازة تساوي تاريخ نهاية الاجازة السابقة+1
            If rstV!VacationStartDate = Last_EndDate Then
            
                'نعم
                'اعمل تعديل على السجل، واعطيه رقم التسلسل السابق
                rstV.Edit
                    rstV!Seq = Seq
                rstV.Update
                
            Else
                
                'لا
                'اعمل تعديل على السجل، واعطيه رقم التسلسل السابق+1
                rstV.Edit
                    Seq = Seq + 1
                    rstV!Seq = Seq
                rstV.Update
                
            End If
            
            'تاريخ نهاية الاجازة+1
            Last_EndDate = rstV!VacationEndDate + 1
            
        rstV.MoveNext
        Loop

    rstVG.MoveNext
    Loop
    
    
    rstV.Close:  Set rstV = Nothing
    rstVG.Close: Set rstVG = Nothing
    
    MsgBox "Done"
    
End Function

 

 

جعفر

1581.1.سجل المحضرين_be.accdb.zip

  • 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