اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

اريد تعديل على كود توزيع


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

السلام عليكم
الموضوع
هناك جدول رئيسى بعنوان Teacher Class يتم التحديث منه اليا على جدول القصل  Class-teacher من خلال زر التحديث بنموذج Class Information ولا يوجد اى مشاكل فى ذلك
ولكن المشكلة
فى جدول  Teacher Class نرى وجود حصتان متشابهان فى  فصل 1/1 الحصة الاولى يوم الاحد عند الاستاذ/ عبد الفتاح مادة العربى وبين استاذة / نادية مادة دين بعد التحديث يتم فك وحل تعارض الحصص فى جدول Class-teacher ولكن يظل التعارض فى جدول الرئيسى Teacher Class وهذا يظهور فى تقرير تعارض الحصص 
المطلوب

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

‫جدول 1 ‫‬.rar

تم تعديل بواسطه حمدى الظابط
رابط هذا التعليق
شارك

و عليكم السلام ورحمة الله وبركاته أخوي @حمدى الظابط

حاولت أفهم طبيعة المشروع حقك بس ما قدرت .. الظاهر التركيز حقي منخفض شوي 😅

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

هو بس تجربة للتوزيع العشوائي ممكن تستفيد منه

TimeTable.accdb

رابط هذا التعليق
شارك

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

رابط هذا التعليق
شارك

العفو أستاذ @حمدى الظابط

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

بس تفضل في المرفق التالي طورت على المثال بحيث يكون مرتبط بجدول للمعلمين وعدد نصاب كل معلم، وجدول لأيام الأسبوع وعدد الحصص لكل يوم، وجدول يتم فيه تخزين الجدول بعد التوزيع.

هي الفكرة كلها في التوزيع العشوائي، مع اني ودي بضوابط أكثر في التوزيع بس عندي مشروع ثاني محتاج أخلصه.

 

مع فائق الاحترام والتقدير لك

TimeTable1.accdb

رابط هذا التعليق
شارك

السلام عليكم ورحمة الله تحياتى استاذ / حمدى وأيضا الأستاذ /عبد الله كاظم

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

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

افتح نموج التوزيع فيه عدد 3 زر أمر يتم فيهم استدعاء الوحدة النمطية وبالمرفق نموذج Form1 هو عبارة عن progress bar احاول استخدامه كمؤشر لاتمام عملية التوزيع بحيث يرتبط بز أمر بدء التوزيع الموجود بنموذج التوزيع ليظهر لنا عبارة يتم الان توزيع الفصل والمادة من الوحدة النمطية

[TABLE.Fields(I) = MOALEM![fsl
     [TABLE.Fields(I + 1) = MOALEM![sub

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

اليكم المرفق ولكما تحياتىDatabase2.rar

رابط هذا التعليق
شارك

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

رابط هذا التعليق
شارك

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

الأخ @خالد عبد الغفار شوف التعديل في المرفق التالي ان شاء الله يكون هو المطلوب.

بخصوص شرح الكود تفضل

Private Function getAllPer() As Long 'يقوم بحساب مجموع الحصص الاسبوعية في الجدول بناء على البيانات في جدول [tblDays]
    Dim str As String
    Dim rst As Recordset
    
    str = "SELECT * FROM tblDays"
    
    Set rst = CurrentDb.OpenRecordset(str)
    
    If Not (rst.EOF) Then
        getAllPer = 0
        rst.MoveFirst
        
        Do Until rst.EOF = True
            getAllPer = getAllPer + rst!NoOfClasses
            rst.MoveNext
        Loop
    End If
End Function
Private Function getAllTCCount() As Long 'يقوم بحساب مجموع انصبة جميع المعلمين من الحصص من جدول [tblTeachers]
    Dim str As String
    Dim rst As Recordset
    
    str = "SELECT * FROM tblTeachers"
    
    Set rst = CurrentDb.OpenRecordset(str)
    
    If Not (rst.EOF) Then
        getAllTCCount = 0
        rst.MoveFirst
        
        Do Until rst.EOF = True
            getAllTCCount = getAllTCCount + rst!classCount
            rst.MoveNext
        Loop
    End If
End Function
'هذا الفانكشن حق عمل رقم عشوائي بين رقمين ومو أنا الكاتبه
Private Function GetRndNo(ByVal lLowerVal As Long, ByVal lUpperVal As Long, Optional bInclVals As Boolean = True) As Long
    On Error GoTo Error_Handler
    
    Dim lTmp As Long
 
    'Swap the lLowerVal and lUpperVal values, if they were inversed in the originating
    '   function call
    If lLowerVal > lUpperVal Then
        lTmp = lLowerVal
        lLowerVal = lUpperVal
        lUpperVal = lTmp
    End If
 
    'Adjust the boundary values should the user specify to exclude them from the
    '   possible returned values
    If bInclVals = False Then
        lLowerVal = lLowerVal + 1
        lUpperVal = lUpperVal - 1
    End If
 
    'Calculate our random number!
    Randomize
    GetRndNo = Int((lUpperVal - lLowerVal + 1) * Rnd + lLowerVal)
 
Error_Handler_Exit:
    On Error Resume Next
    Exit Function
 
Error_Handler:
    'LogError Err.Number, Err.Description, sModName & "\GetRndNo", , True, Erl
    MsgBox "The following error has occured" & vbCrLf & vbCrLf & _
           "Error Number: " & Err.Number & vbCrLf & _
           "Error Source: GetRndNo" & vbCrLf & _
           "Error Description: " & Err.Description & _
           Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
           , vbOKOnly + vbCritical, "An Error has Occured!"
           
    Resume Error_Handler_Exit
End Function
Private Sub test05() 'هنا يتم توزيع الجدول باستخدام جميع ما في الأعلى

    'تعريف المتغيرات المستخدمه في الكود
    Dim strTeacher As String, strDay As String, strTimeTable
    Dim rstTeacher As Recordset, rstDay As Recordset, rstTimeTable As Recordset
    Dim randOFDays As Long
    Dim randOFDaysX As Long
    Dim TCount As Long
    
    Dim TCCount As Integer
    Dim dayC As Integer
    Dim xCls As String
    Dim toExit1 As Long
    
    
    'هنا اختبار إذا تم ادخال بيانات أيام الاسبوع. إذا لا توجد سجلات يخرج من العملية
    If DCount("dayID", "tblDays") = 0 Then Exit Sub
    
    'عمل استعلام للجدول [tblTeachers]
    strTeacher = "SELECT * FROM tblTeachers"
    Set rstTeacher = CurrentDb.OpenRecordset(strTeacher)
    
    'الذهاب إلى السجل الأول في جدول المعلمين
    rstTeacher.MoveFirst
    
    TCount = 0 'اعطاء قيمة صفر للمتغير اللي يختبر عدد المعلمين بحيث يزيد مع كل دورة وهو عداد للمعلمين
    
    'البدء في الدخول لوب للمعلمين، بمعني يدخل المعلم الأول ويوزع جدوله وبعدها ينتقل للمعلم الثاني... وهكذا
    'بالامكان عمل لوب على المعلمين بطريقة ثانية
    Do
        TCCount = 0 'اعطاء قيمة صفر للمتغير اللي استخدمه لاختبار عدد حصص المعلم الحالي وهو عداد حصص المعلم
line00:
        toExit = 0 'هذا المتغير استخدمه للأمان يمكن يكون في خطأ في البيانات المدخله ويدخل اللوب ولا يقدر يطلع منه. فهذا طوق نجاة:)
        dayC = 0 ' متغير لاختبار الأيام في اللوب التالي وهو عداد الأيام
        While dayC < DCount("dayID", "tblDays") 'بداية لوب الأيام بحث يعطي المعلم حصة في اليوم العشوائي الأول وبعدها حصة في ثاني إلى أن يكمل عدد الأيام
line01:
            If TCCount = rstTeacher!classCount Then GoTo line02 ' هنا اختبار إذا قيمة المتغير تساوت مع عدد نصاب المعلم الحالي يروح إلى [line02]
            
            randOFDays = GetRndNo(1, DCount("dayID", "tblDays")) 'اختيار يوم عشوائي
            If randOFDays = randOFDaysX Then GoTo line01 'اختبار إذا كان اليوم العشوائي الأول يتساوي مع اليوم العشوائي الذي سيليه ينتقل [line01]
            randOFDaysX = randOFDays 'اسناد قيمة اليوم العشوائي إلى متغير يستخدم في الاختبار السابق
            
            'هنا بداية تعبئة الجدول
            strDay = "SELECT * FROM tblDays" 'عمل استعلام لجدول الأيام
            
            Set rstDay = CurrentDb.OpenRecordset(strDay)
            rstDay.Move randOFDays - 1
            
            'هنا يتم اختيار حصة عشوائية
            xCls = "cls" & GetRndNo(1, rstDay!NoOfClasses)
            
            'هنا الاستعلام لجدول [TimeTable] بناء على اليوم المختار في السابق
            strTimeTable = "SELECT TimeTable.* FROM TimeTable WHERE (((TimeTable.theDay)=" & randOFDays & "));"
            Set rstTimeTable = CurrentDb.OpenRecordset(strTimeTable)
            
            'اختبار أن الحصة المختارة عشوائياً في هذا اليوم لم يسجل فيها شيء
            If IsNull(rstTimeTable.Fields(xCls)) Then
                'فإذا كانت فاضية يتم تحديثها ويدخل فيها اختصار المعلم
                CurrentDb.Execute "UPDATE TimeTable SET " & xCls & "= '" & rstTeacher!Shortcut & "' WHERE ((([theDay])=" & randOFDays & "));"
                
                TCCount = TCCount + 1 'زيادة واحد على عدد حصص المعلم
            Else
                toExit = toExit + 1
                If toExit = 10000 Then Exit Sub
                
                'إذا كانت الحصة غير فاضية يتم الرجوع إلى [line01] لإختيار حصة أخرى
                GoTo line01
            End If
            
            dayC = dayC + 1 'هنا يتم زيادة واحد على قيمة عداد الأيام
            If TCCount < rstTeacher!classCount And dayC = DCount("dayID", "tblDays") Then GoTo line00
        Wend
line02:
        TCount = TCount + 1 'هنا يتم زيادة واحد على قيمة عداد المعلمين
        rstTeacher.MoveNext 'الانتقال للمعلم التالي
    Loop While TCount < DCount("teacherID", "tblTeachers") 'العودة للوب حتى ينتهي من جميع المعلمين
    
End Sub
Private Sub Command0_Click()
    CurrentDb.Execute "DELETE * FROM TimeTable" 'يقوم بحذف البيانات في جدول [tiemYable]
    CurrentDb.Execute "INSERT INTO TimeTable ( theDay ) SELECT dayID FROM tblDays;" 'يقوم باضافة أرقام الأيام في جدول [TimeTable]
    Me.subfrmTimeTable.Requery 'يقوم بعمل اعادة استعلام النموذج الفرعي [subfrmTimeTable]
    
    getAllPer 'استدعاء فانكشن حساب عدد الحصص الاسبوعية
    getAllTCCount 'استدعاء مجموع انصبة المعلمين
    
    If getAllTCCount > getAllPer Then 'اختبار إذا كان مجموع انصبة المعلمين أكبر من عدد الحصص الاسبوعية فيخرج من العملية
        MsgBox "عدد الحصص الأسبوعية أقل من مجموع أنصبة المعلمين!"
        Exit Sub
    Else
        test05 'استدعاء sub لعمل توزيع الجدول
    End If
End Sub

 

والمعذرة إذا كان الشرح غير جيد

Database2_1.zip

رابط هذا التعليق
شارك

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

بالنسبة للتعديل المراد عمله فى نموذج التوزيع لم يتم ما هو مطلوب هو اساسا نموذج Form1 بيحمل كنسبه مئويه

لكن المطلوب أنى لما أضغط على زر بدء التوزيع يعمل مؤشر progress bar اثناء عملية التوزيع  مع استبدال عبارة يتم الأن توزيع 20% او 40% 

بالآتى يتم الآن توزيع 1/1 قراءة مثلا

طب ودول هايجيبهم منين من الوحدة النمطيه 

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

   هذا هو الفصل  [TABLE.Fields(I) = MOALEM![fsl
   هذه هى المادة  [TABLE.Fields(I + 1) = MOALEM![sub

ارجو ان يكون المطلوب قد اتضح

ولك الشكر ةتقبل تحياتى

رابط هذا التعليق
شارك

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

‫جدول 1 ‫‬.rar

رابط هذا التعليق
شارك

أستاذ @حمدى الظابط

في نقطتين:

1- لما بكبس على توزيع آلي بهنق معاي الأكسس (الظاهر أن الاكسس بدخل لوب وما بيطلع منها)، في المرفق اللي أنت أرسلته وكما اللي أرسله الأستاذ خالد عبدالغفار.

2- المعذرة قاعد أحاول أفهم فكرة توزيع الجدول اللي أنت ما أستاذ @خالد عبد الغفار تشتغلوا عليها وماني قادر أفهمها فيا ريت يكون توضيح حق فكرة عمل المشروع وآلية التوزيع وبعدها إذا أقدر أساعد بالخدمة.

 

مع فائق التحية

تم تعديل بواسطه عبدالله كاظم
  • Like 1
رابط هذا التعليق
شارك

معذرة اخى عبد الله فعلا انت محق كان المفترض بدء المشروع من اول تصميم الجداول والاستعلامات والنماذج والمخرجات ( التقارير) شيئا فشيئا كمشروع جماعى

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

رابط هذا التعليق
شارك

استاذ عبد الله كاظم

اشكرك على التعقيب وسوف اشرح لك فكرة البرنامج  اولا هذا البرنامج من عمل شركة العرف 7 وهى نسخة مفتوحة المصدر معموله للتعليم الصناعى السعودى وتم الحصول عليها من احد المواقع للتعديل عليها على حسب احتياج العمل على حسب نظام التعليم لكل الدولة
    -------------------------------------------------------------------------------------------------------------------------------------------------------
شرح البرنامج اولا الجداول
جدول الفصل باسم Class-teacher وجدول المادة والمعلم باسم  Teacher Class وهذا هو الجدول الرئيسى

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

جدول بيانات المادة فيه بيانات المادة وهناك شرط مهم عند التوزيع وهو عند الضغط بنعم (صح) على حقل فردي يكون توزيع الحصص مفردة وعند الضغط بنعم (صح) على حقل مزدوجة يكون توزيع الحصص حصتان منناليتان ( على ان لا تتكرر المادة لنفس الفصل فى نفس اليوم سواء فردى او مزدوجة ) مع مراعاة ان مادة العربى لها نصيب الاسد فى اجمالى نصاب عدد الحصص فمن المحتمل ان يجبر البرنامج اعطاء ثلاث حصص فى اليوم اذا لازم الامر لنفس الفصل ويفضل مايكونش الثلاث حصص لنفس الفصل متتالية

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

الشرط الثالث  ان وجد  رقم حصة لبداية او نهاية الحصص لاحد ايام الاسبوع يلتزم البرنامج بشروط التوزيع
ملحوظة / سوف يشرح ويوضح هذه الشروط  السابقة نموذج بيانات المعلمين الموجود بالملف

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

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

وهذا الموضوع للاضاح اكثروفى نفس الموضوع

جداول مدرسية وتوزيع آلي للمواد والحصص للمعلمين
 

وهذا هو الملف الذى سوف يتم العمل عليه

 

 

 

 

جدول الحصص.rar

تم تعديل بواسطه حمدى الظابط
رابط هذا التعليق
شارك

  • 3 weeks later...

استاذ @ عبد الله كاظم @

ممكن اعرف الطريقة الثانية لتوزيع المعلم كما اشرة حضرتك فى شرح كود البرنامج الخاص بك ولك تحياتى وكل عام وحضرتك بخير

   TCount = 0 'اعطاء قيمة صفر للمتغير اللي يختبر عدد المعلمين بحيث يزيد مع كل دورة وهو عداد للمعلمين
    
    'البدء في الدخول لوب للمعلمين، بمعني يدخل المعلم الأول ويوزع جدوله وبعدها ينتقل للمعلم الثاني... وهكذا
    'بالامكان عمل لوب على المعلمين بطريقة ثانية
    Do

 

 

تم تعديل بواسطه حمدى الظابط
رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information