ابوخليل قام بنشر ديسمبر 20, 2019 قام بنشر ديسمبر 20, 2019 السلام عليكم مشروع حملة حج خيرية .. طلب مني توزيع آلي للركاب حسب شروط محددة عدد الباصات 5 يتسع الباص لـــ 49 كرسي لكل باص مشرف خاص عدد المشرفين 5 مع عائلاتهم كل حاج معه مرافقين يختلف عددهم من حاج لآخر ، ويمكن ان يكون الحاج وحيدا المطلوب بضغطة زر التوزيع على الباصات حسب الشروط التالية 1- توزيع المشرفين الخمسة على الباصات الخمسة كل حسب رقم الباص المسجل امامه . 2- توزيع بقية الحجاج على الباصات بشرط مهم وهو ان يكون كل حاج وعائلته ضمن باص واحد . وينطبق ذلك على المشرفين ايضا 3- تعبئة الباصات الاول ثم الذي يليه حتى اكتمال الباصات بالركاب المرفقات : جدولان : رئيسي وفرعي الرئيسي سجل فيه بيانات الحاج والفرعي سجل فيه بيانات المرافقين له يشترك الحاج والمرافقين له بمعرف موحد بينهم : userid ينفرد كل فرد بمعرف خاص به : cardID الشكر مقدما .. لكم جميعا احبتي haj.mdb 2 1
محمد أبوعبدالله قام بنشر ديسمبر 21, 2019 قام بنشر ديسمبر 21, 2019 وعليكم السلام ورحمة الله وبركاته استاذنا الفاضل @ابوخليل سامحني لاني مسحت البيانات واضافات بيانات من عندي حتى افهم جزء من الموضوع اضفت في جدول tblSub_Tsjeel عدد 156 مرافق 5 مشرفين + 84 حاج + 156 مرافق = 245 مقعد = اجمالي مقاعد الباصات 5 * 49 = 245 مقعد نفضل الكود التالي وارجوا ان يكون هو المطلوب واذا كان خطأ فسامحني مرة اخرى فقد حاولت حسب ما فهمت ولك الشكر On Error Resume Next ' تصفير حقل degree mySQL = "Update tbl_Tsjeel" mySQL = mySQL & " SET degree = 0" CurrentDb.Execute (mySQL) ' اذا كان مشرف يأخذ رقم 1 mySQL = "Update tbl_Tsjeel" mySQL = mySQL & " SET degree = 1 WHERE id <=7" CurrentDb.Execute (mySQL) ' اذا كان راكب يأخذ رقم 2 mySQL = "Update tbl_Tsjeel" mySQL = mySQL & " SET degree = 2 WHERE id >7" CurrentDb.Execute (mySQL) 'توزيع المشرفين على 5 باصات mySQL = "Select * From tbl_Tsjeel" mySQL = mySQL & " WHERE degree = '1'" Set rst = CurrentDb.OpenRecordset(mySQL) rst.MoveLast: rst.MoveFirst Do While Not rst.EOF For i = 1 To 5 rst.Edit rst!busNum = Str(i) rst.Update rst.MoveNext Next Loop rst.Close: Set rst = Nothing '============================================================== 'توزيع الحجاج على 5 باصات mySQL = "Select * From tbl_Tsjeel" mySQL = mySQL & " WHERE degree = '2'" Set rst = CurrentDb.OpenRecordset(mySQL) rst.MoveLast: rst.MoveFirst Do While Not rst.EOF For i = 1 To 5 rst.Edit rst!busNum = Str(i) rst.Update rst.MoveNext Next Loop rst.Close: Set rst = Nothing '============================================================== 'توزيع المرافقين على 5 باصات mySQL = "Update tblSub_Tsjeel" mySQL = mySQL & " SET busNum = 0" CurrentDb.Execute (mySQL) Dim strSQL As String strSQL = "UPDATE tbl_Tsjeel " & vbCrLf strSQL = strSQL & " INNER JOIN tblSub_Tsjeel " & vbCrLf strSQL = strSQL & " ON tbl_Tsjeel.userid = tblSub_Tsjeel.userid SET tblSub_Tsjeel.busNum = [tbl_Tsjeel]![busNum];" CurrentDb.Execute (strSQL) haj.mdb تحياتي
ابوخليل قام بنشر ديسمبر 21, 2019 الكاتب قام بنشر ديسمبر 21, 2019 شاكر ومقدر تعبك ابو عبدالله ومحاولتك الوصول الى نتيجة مرضية ولكن الحل بعيد عن المطلوب آمل ان تستحضر التالي في المطلوب : حقل id لا يمكن اعتماده في الشرط والتوزيع لانه عرضة للتغيير كما تعلم فبمجرد حذف البيانات والبدء من جديد حتما سيتغير فالمطلوب وبكل بساطة ان يتم التوزيع حسب المعرف المشترك بين الحاج ومرافقيه ولأضرب لك مثلا : لنفرض ان الباص رقم واحد عند عملية التوزيع تبقى فيه 2 كراسي خالية هنا يجب ان يتم تعبئته بحاج لديه مرافق واحد ، او تعبئته بحاجين مفردين ، ولا يسمح بتعبئته بحاج لديه اكثر من مرافق ، فالمرافق الذي لديه اربعة مرافقين لو سمحنا له لتفرق مرافقوه بين اكثر من باص والمطلوب ان يكون كل حاج ومرافقيه ضمن باص واحد ملحوظة : لصعوبة تطبيق الفكرة (عمليا ) لا بأس ان نحصل في النتيجة النهائية على بعض الكراسي الشاغرة لتعذر تعبئتها ، لذلك يمكن معالجتها يدويا
محمد أبوعبدالله قام بنشر ديسمبر 21, 2019 قام بنشر ديسمبر 21, 2019 7 ساعات مضت, ابوخليل said: حقل id لا يمكن اعتماده في الشرط والتوزيع لانه عرضة للتغيير جميل يا غالي اذا نعتمد على حقل username واذا كان يبدأ بمشرف نعطيه رقم واحد واذا كان حاج نعطيه رقم 2 ليكون كود تحديد degree كالتالي On Error Resume Next ' تصفير حقل degree mySQL = "Update tbl_Tsjeel" mySQL = mySQL & " SET degree = 0" CurrentDb.Execute (mySQL) ' اذا كان مشرف يأخذ رقم 1 واذا كان حاج ياخذ رقم 2 mySQL = "Select * From tbl_Tsjeel" Set rst = CurrentDb.OpenRecordset(mySQL) rst.MoveLast: rst.MoveFirst Do While Not rst.EOF For i = 1 To 5 rst.Edit If Left(rst!UserName, 4) = "مشرف" Then rst!degree = "1" Else rst!degree = "2" End If rst.Update rst.MoveNext Next Loop rst.Close: Set rst = Nothing ارجو ان يكون تم اصلاح هذا الجزء الكود كامل كالتالي On Error Resume Next ' تصفير حقل degree mySQL = "Update tbl_Tsjeel" mySQL = mySQL & " SET degree = 0" CurrentDb.Execute (mySQL) ' اذا كان مشرف يأخذ رقم 1 واذا كان حاج ياخذ رقم 2 mySQL = "Select * From tbl_Tsjeel" Set rst = CurrentDb.OpenRecordset(mySQL) rst.MoveLast: rst.MoveFirst Do While Not rst.EOF For i = 1 To 5 rst.Edit If Left(rst!UserName, 4) = "مشرف" Then rst!degree = "1" Else rst!degree = "2" End If rst.Update rst.MoveNext Next Loop rst.Close: Set rst = Nothing '============================================================== 'توزيع المشرفين على 5 باصات mySQL = "Select * From tbl_Tsjeel" mySQL = mySQL & " WHERE degree = '1'" Set rst = CurrentDb.OpenRecordset(mySQL) rst.MoveLast: rst.MoveFirst Do While Not rst.EOF For i = 1 To 5 rst.Edit rst!busNum = Str(i) rst.Update rst.MoveNext Next Loop rst.Close: Set rst = Nothing '============================================================== 'توزيع الحجاج على 5 باصات mySQL = "Select * From tbl_Tsjeel" mySQL = mySQL & " WHERE degree = '2'" Set rst = CurrentDb.OpenRecordset(mySQL) rst.MoveLast: rst.MoveFirst Do While Not rst.EOF For i = 1 To 5 rst.Edit rst!busNum = Str(i) rst.Update rst.MoveNext Next Loop rst.Close: Set rst = Nothing '============================================================== 'توزيع المرافقين على 5 باصات mySQL = "Update tblSub_Tsjeel" mySQL = mySQL & " SET busNum = 0" CurrentDb.Execute (mySQL) Dim strSQL As String strSQL = "UPDATE tbl_Tsjeel " & vbCrLf strSQL = strSQL & " INNER JOIN tblSub_Tsjeel " & vbCrLf strSQL = strSQL & " ON tbl_Tsjeel.userid = tblSub_Tsjeel.userid SET tblSub_Tsjeel.busNum = [tbl_Tsjeel]![busNum];" CurrentDb.Execute (strSQL) بانتظارك ان شاء الله تحياتي
ابوخليل قام بنشر ديسمبر 21, 2019 الكاتب قام بنشر ديسمبر 21, 2019 لو لاحظت في مثالي المرفق انه يتم ادخال درجة الراكب : degree ، ورقم الباص : busNum من قبل المستخدم بحيث يمكننا ايضا من خلاله منح الدرجة ورقم الباص لأي راكب آخر وبهذا نستطيع تخصيص احد الباصات لفئة معينة من الركاب اما الركاب الذين لا يدخل لهم هذين الحقلين فيطبق عليهم التوزيع العشوائي على الباصات دعنا من المشرفين ومن في حكمهم فبإمكان المستخدم توزيعهم يدويا المهم هو توزيع البقية على الشاغر من الكراسي كمجموعات (الحاج ومرافقيه = مجموعة ) واعتقد انه لن يتحقق ذلك الا باعتماد المعرف المشترك بينهم userid
jjafferr قام بنشر ديسمبر 21, 2019 قام بنشر ديسمبر 21, 2019 السلام عليكم 🙂 اذا تسمحي اخوي ابو خليل ، واخوي محمد ابوعبدالله 🙂 مشاركتي لا تؤدي العمل بضغطة زر ، وانما تقدر تستفيد منها لتوزيع الغرف لاحقا ايضا 🙂 الاختيار ليس تلقائي ، ولكنه يسهل العمل كثيرا 🙂 ومن تجربتي مع الحجاج ، بعض الاوقات في مجموعة تحب ان تكون مع مجموعة اخرى في الباص ، فطريقتي سوف تسهل عليك 🙂 العمل كله بيكون في الجدول tbl_Groups ، والعمل بالمجموعات ، لذا : 1 و 2. استعلامات الحاقية ، فقط لاخذ بيانات الجدولين tbl_Tsjeel والجدول tblSub_Tsjeel الى الجدول tbl_Groups . 4. نموذج العمل هو frm_Main تختار من قائمة "في انتظار التوزيع" (وفي الواقع الاختيار عن طريق userid) ، العدد الذي تريده ، وفي الاسفل بتشوف عدد اختياراتك ، ومجموع الاشخاص اللذين اخترتهم ، تختار الى اي باص تريد ان تلحقهم ، باختيار رقم الباص ، ثم النقر على الزر الاول (السهم من القائمة الى الباصات) ، وتلقائيا تشوف النتائج ، واذا اردت ارجاع اي مجموعة ، فالاختيار يكون من قائمة الباص ، وتنقر على الزر بالاسفل (السهم من الباصات الى القائمة) ، وتلقائيا تشوف النتيجة 🙂 . هي لعبة اكثر منها عمل 🙂 جعفر 1158.haj.mdb.zip 8 1
محمد أبوعبدالله قام بنشر ديسمبر 21, 2019 قام بنشر ديسمبر 21, 2019 استاذنا الغالي بزيادة @jjafferr ما شاء الله عليك وزادك الله من فضله وعلمه منذ ساعه, jjafferr said: هي لعبة اكثر منها عمل لكنها اكثر من رائعة تحياتي 1
ابوخليل قام بنشر ديسمبر 22, 2019 الكاتب قام بنشر ديسمبر 22, 2019 شكرا لك حبيبنا واستاذنا جعفر اقدر لك وقتك وتعبك الذي بذلته فكرتك جميلة الشيء الذي لم اوضحه ان عدد الحافلات الحقيقي 15 حافلة وهي قابلة للزيادة ، ويجب اخذ هذا بالاعتبار عند التصميم ما اريده هو التوزيع العشوائي داخل الجدول tbl_Groups بالشرط الذي بينته اعلاه وبضغطة زر وما ينتج من فراغات بعد التوزيع يمكننا معالجته بفكرتك الرائعة لك ودي واحترامي ،،،
أفضل إجابة jjafferr قام بنشر ديسمبر 22, 2019 أفضل إجابة قام بنشر ديسمبر 22, 2019 السلام عليكم 🙂 واصبح البرنامج مستعد يأخذ اي عدد 🙂 وبواجهة جديدة : . . جعفر 1158.2.mdb.zip 4 5
kaser906 قام بنشر ديسمبر 22, 2019 قام بنشر ديسمبر 22, 2019 27 دقائق مضت, jjafferr said: واصبح البرنامج مستعد يأخذ اي عدد ممتاز فقط واجهة خطأ برقم 2501 عندما يكون خيار تأكيد الاستعلامات الأجرائية مفعل وعند ظهور رسالة التأكيد والنقر على زر لا اعتقد يمكن التغلب عليها بوضع رسالة تأكيد التوزيع وإلغاء الأجراء شكرا لك استاذ 🌹 2
jjafferr قام بنشر ديسمبر 22, 2019 قام بنشر ديسمبر 22, 2019 شكرا جزيلا اخوي كاسر 🙂 الظاهر بالغلط لعبت في اعدادات الاكسس ، وما كانت تطلع لي رسائل التحذير !! بالاضافة الى حلك ، ولكني افضل إخفاء هذه الرسائل بإستعمال : DoCmd.SetWarnings False DoCmd.RunSQL mySQL DoCmd.SetWarnings True و DoCmd.SetWarnings False DoCmd.RunSQL ("Delete * From tbl_Groups") DoCmd.OpenQuery "qry_Append_Tsjeel" DoCmd.OpenQuery "qry_Append_sub_Tsjeel" DoCmd.SetWarnings True وقد تم تحديث الملف المرفق في مشاركتي السابقة ، شكرا لك 🙂 جعفر 4
ابوخليل قام بنشر ديسمبر 22, 2019 الكاتب قام بنشر ديسمبر 22, 2019 يا سلام يابوعبدالله هذا ما كنت ابحث عنه سلمت أناملك يتبقى علي اكمال بعض المتطلبات والخصائص مثل تخصيص حافلة لفئة محددة ومثل حصر انواع من الركاب ككبار السن وذوي الاحتياجات الخاصة ، وكذلك عمل اولوية لمن لم يسبق لهم الحج ، واضافة بعض الخدمات كرسائل sms لا أملك تجاهك اخي الا الدعاء .. فنسأل الله الكريم ان يزيدك علما ورفعة ، وأن يمن عليك بالصحة والعافية وسعة الرزق ، وأن يحفظ عليك أهلك وأولادك . 2
jjafferr قام بنشر ديسمبر 22, 2019 قام بنشر ديسمبر 22, 2019 حياك الله اخوي ابوخليل 🙂 9 دقائق مضت, ابوخليل said: يتبقى علي اكمال بعض المتطلبات والخصائص مثل : 1.تخصيص حافلة لفئة محددة 2. ومثل حصر انواع من الركاب ككبار السن وذوي الاحتياجات الخاصة ، 3. وكذلك عمل اولوية لمن لم يسبق لهم الحج ، 4. واضافة بعض الخدمات كرسائل sms بسبب انك عامل مجموعات في البرنامج ، والبرنامج يشتغل عليه ، والمسميات اللي تشوفها هي عبارة عن مسميات المجموعات ، وعليه ، المجموعات 1 و 2 و 3 ، وزعهم يدويا على الباصات (عن طريق البرنامج طبعا) ، ومو لازم يملؤا الباصات ، وبعديت اعمل توزيع تلقائي ، فيضيف لك بقية العدد للباص ، ويكمل باقي الباصات 🙂 اما رقم 4 ، فما شاء الله تخصصك 🙂 جعفر 3
ابوخليل قام بنشر ديسمبر 22, 2019 الكاتب قام بنشر ديسمبر 22, 2019 كفيت ووفيت استاذنا الكريم انا اعلم ان هذا العمل اخذ من جهدك ووقتك الكثير .. كتب الله اجرك دمت ذخرا لنا 3
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.