|
مثال لكتابة الكود |
تمت إضافة الدرس بتاريخ 24/8/1423هـ
يهدف هذا الدرس للتدريب على كيفية كتابة الأكواد خطوة خطوة وحل المشاكل التي تظهر أثناء عمل الكود .
في هذا الدرس سأتكلم عن كيفية كتابة كود مطبقاً الشرح على مثال طُلب مني حله .
المثال عبارة عن تسجيل معاملات تحول لعدد من الموظفين وكل معاملة لها تصنيف وتجمع عدد من مواضيع المعاملات في تصنيف معين وأخرى في تصنيف آخر وهكذا والتصنيف الذي يحدده هو المسؤل .
يقوم المسؤل بتصنيف العاملة ثم لديه قائمة ثابتة ومرتبة بأسماء الموظفين لديه فيوزع المعاملات على هؤلاء الموظفين فمثلا يبدأ في تصنيف أ بالموظف محمد ثم يليه عبدالله وفي تصنيف ب يبدأ بمحمد ثم عبدالله ثم سعد ثم إذا جاءات معاملة وصنفت على ب فيعطيها الذي يلي سعد -خالد- ثم إذا جاءات معاملة واعطيت تصنيف أ فيعطيها الذي يلي عبدالله وهو هنا سعد وهكذا بشرط أن لايكون الموظف في إجازة فإذا كان في إجازة يعطيها الذي يليه في الترتيب .
والمطلوب : أن يختار المستخدم الرمز أو التصنيف فيظهر اسم الموظف المحولة إليه المعاملة تلقائياً ويكون هذا الموظف هو التالي لآخر موظف حولت اليه المعاملة حسب ترتيب القائمة وهي هنا جدول الموظفين طبعا كما سبق بشرط أن لايكون هذا الموظف في إجازة .
هذه صور للجداول في القاعدة :
1- جدول الرموز :

2- جدول الموظفين :

3- جدول التسجيل :

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

خطوات
إنشاء الكود :
مقدمة : المهمة الأساسية في كتابة الكود أولا هي فهم المشكلة المراد حلها فهماً جيداً ثم البدء بتجربة أفضل الحلول لها ، وطبعا لاتظن أن المبرمج يأتي بالحل دفعة واحدة فهذا خاصة مع صعوبة المشكلة وتعقدها لايفعله غالباً إلا المحترفين في البرمجة والذين لهم ممارسة طويلة في كتابة الأكواد ومع ذلك الكود عرضه للخطأ ولابد من تجربته ، وعند ظهور مشكلة ما أو عدم عمل الكود بالوجه المطلوب فلا بد من تبسيط الكود وتجربته سطر سطر حتى نصل للسطر سبب المشكلة ثم بعد ذلك نضع الحل المناسب .
1- كما سبق في الطلب نريد أن يختار المستخدم تصنيف المعاملة فيظهر له تلقائياً اسم الموظف المحولة إليه المعاملة ، لذلك أفضل مكان لوضوع الكود هو في حدث بعد التحديث لقائمة التصنيف يعني تظهر الجهة بعد اختيار تصنيف من القائمة مباشرة .
2- أول سؤال لابد من تحويله إلى كود هو ما رقم الموظف الأخير المسجل سابقاً في جدول التسجيل ، في هذا التصنيف الذي تم اختياره لنختار الموظف الذي بعده في القائمة وهي هنا جدول الموظفين ؟ -يجب أن تفهم هذا السؤال جيداً- .
لنفرض أن التصنيف م أ وسجل في جدول التسجيل محمد وعبدالله فالموظف الأخير المسجل عبدالله ورقمه 2 والموظف المحالة اليه المعاملة الجديدة الآن هو سعد ورقمه في الجدول 3 .
إذا الخطوة الأولى معرفة رقم الموظف الأخير المسجل للصنف الذي تم اختياره -أنسى الآن موضوع الإجازات سنأتي لها فيما بعد - ، انتبه للعبارة جيداً معرفة رقم الموظف الأخير للصنف الذي تم اختياره وليس الموظف الأخير في جدول التسجيل فقط بل لابد أن يكون أخيراً بالنسبة للصنف حتى ولو كان ليس آخر سجل مسجل .
لمزيد إيضاح أنظر الصورة :

فسعد هنا هو الأخير في الصنف م أ وفي الصنف م ب الأخير هو محمد .
3- السطر الأول في الكود يجيب على هذا التساؤل ماهو رقم الموظف الأخير في الصنف لذلك نستخدم دالة المجال DLast والتي يبحث بواسطتها عن السجل الأخير ، ويمكن معها وضع شروط مناسبة لنا وهي هنا أن يكون الصنف في الجدول يطابق الصنف الذي تم اختياره من القائمة :
|
Dim الموظف_الأخير_للتصنيف_الحالي As Variant
|
(اضطررت لوضع الكود كصورة لأنه يلخبط العبارة بسبب وجود الكلمات العربية) .
السطر الأول إعلان عن متغير لتخزين القيمة الراجعة فيه وهو من النوع Variant لاحتمال أن تكون القيمة العائدة Null وذلك في حالة عدم وجود أي موظف في هذا التصنيف سابق أو بمعنى آخر التصنيف جديد وكذلك إذا كان الجدول لايوجد فيه أي سجلات .
السطر الثاني يقول ابحث عن آخر سجل في جدول التسجيل في حقل الجهة -أسماء الموظفين- بشرط أن يكون حقل التصنيف في الجدول يساوي التصنيف وهي القائمة الموجودة على النموذج .
الآن سيعيد لنا رقم الموظف في الجدول حسب الشروط التي حددناها .
4- الخطوة التالية معرفة من الموظف الذي يلي الموظف الذي عرفنا رقمه باستخدام الكود السابق :
|
|
هذا السطر يقول اريد أول رقم لموظف في جدول الموظفين بشرط أن يكون رقم الموظف اكبر من الرقم الذي يحمله المتغير المسمى الموظف_الأخير_للتصنيف_الحالي ، واستخدمنا دالة DFirst لأن مطلوبنا هو الحصول على أول رقم مباشرة يكون اكبر من الرقم في المتغير .
طبعا النتيجة تخزين رقم الموظف التالي في القائمة المسماة الجهة في النموذج والتي بدورها تحوله الى ما يقابله من الأسماء .
5- الآن يتبقى ألا يكون الموظف التالي في إجازة (وهو المؤشر في حقل إجازة بعلامة صح انظر جدول الموظفين) ولذلك نعدل في الكود كما يلي :
|
|
تلاحظ هنا أنه تمت إضافة العبارة and إجازة=False وبعبارة اخرى : ويكون حقل الإجازة لهذا الموظف False أي بدون علامة صح أي ليس في إجازة .
لاحظ أنه تمت إضافة مسافة قبل and حتى لاتشتبك مع التي قبلها .
6- الآن لم يتبقى سوى وضع الكود عند عدم وجود سجلات لأن السطر الثاني الموجود في رقم 3 قد يعيد قيمة فارغة Null في حالة كون التصنيف جديد أو في حالة عدم وجود سجلات في جدول التسجيل لذلك لابد من مراعة هذا الأمر في الكود .
لاحظ الكود كاملاً بعد التعديل :
|
|
السطر الثالث الذي فيه if الشرطية يقول إذا لم يكن المتغير المسمى الموظف_الأخير_للتصنيف_الحالي فارغاً وأيضا الموظف_الأخير_للتصنيف_الحالي أصغر من اكبر رقم في جدول الموظفين ليس في إجازة ، وذلك أنه يمكن أن يكون -كما سبق- المتغير فارغاً فلا بد هنا من عبارة اخرى غير عبارة DFirst المشروطة -السطر الخامس- لأنها في هذه الحالة (جدول التسجيل فارغ أو التصنيف غير موجود بجدول التسجيل لأنه تصنيف جديد) قطعاً ستعيد قيمة Null وكذلك نفس الشيء إذا استكمل الدوران على كل الموظفين حتى وصل إلى الأخير فهنا من هو الموظف التالي طبعا لايوجد لذلك نستخدم عبارة أخرى في هذه الحالة وهي هنا التي تلي كلمة Else .
7- السطر ما قبل الأخير يعيد رقم أول موظف وهذه الجملة تستخدم في حالة :
(1) فراغ جدول التسجيل من السجلات ( السطر الأول يعيد Null ) .
(2) التصنيف غير مسجل سابقاً بجدول التسجيل ( السطر الأول يعيد Null ) .
(3) عند استكمال الدوران على كل الموظفين الغير مجازين ( مخالف للشرط في السطر الرابع ) .
وإلى لقاء مع كود آخر .........................
|
مثال بالأكسس 97 |
الأمثلة مضغوطة تحتاج إلى برنامج فك الضغط انقر هنا لتحميل البرنامج |
مثال بالأكسس 2000 |
![]()
