أقسام الوصول السريع (مربع البحث)

تصميم صرف بالأكسس.

تصميم نموذج صرف بالأكسس

 مع تحميل ملف الشرح

نموذج صرف في الاكسس
عمل نموذج صرف

سيتم شرح كيفية عمل نموذج صرف مع ارفاق العمل على شكل اكسس Microsoft Access هو برنامج قاعدة بيانات يسهل إنشاء تطبيقات إدارة المعلومات والبيانات. عند تصميم نموذج صرف في Access، يمكنك إنشاء واجهة مستخدم تفاعلية لإدارة عملية الصرف.

هنا الخطوات الأساسية لتصميم نموذج صرف في Access:

  • إنشاء قواعد البيانات: 

سنقوم بإنشاء قاعدة بيانات جديدة في Access. سنقسمها إلى عدة جداول لتخزين المعلومات المختلفة مثل المعاملات المالية، المستخدمين، الحسابات البنكية، إلخ.

  • تصميم الجداول: 

بعد إنشاء قاعدة البيانات سوف نقوم بتصميم الجداول وتحديد الحقول اللازمة لكل جدول. وسنتأكد من العلاقات بين الجداول وتحديد المفاتيح الأساسية.

  • إنشاء واجهة المستخدم: 

سنقوم بإنشاء نماذج وتقارير مخصصة لتسهيل التفاعل مع البرنامج. سنصمم نماذج الإدخال والتحرير وأيضًا تقارير الخروج.

  • تطوير الوظائف والإجراءات: 

بعد إنشاء قاعدة البيانات والواجهة، سنقوم بتطوير الوظائف والإجراءات اللازمة لتنفيذ العمليات المحاسبية مثل إدخال المعاملات، إجراء الحسابات، إنشاء التقارير، إلخ.

  • اختبار وتصحيح الأخطاء: 

سنقوم بتشغيل البرنامج واختباره بعناية للتأكد من سلامة العمليات والتصحيح أي أخطاء قد تظهر.

  • التوثيق والتدريب: 

سنقوم بإعداد وثائق تفصيلية للبرنامج وتدريب المستخدمين على استخدامه.

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

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

وسنقوم بالتالي في هذا الدرس.

  • كيفية ادخال البيانات عبر النموذج 
  • كيفية حفظ البيانات داخل النموذج
  • كيفية حذف صرف او بيانات الصرف
  • كيفية التعديل في نموذج الصرف
  • كيفية استعراض سند صرف 
  • كيفية طباعة سند الصرف

أولاً: نقوم بإضافة جدول جديد 

  1. نقوم بإضافة الحقول المطلوبة وذلك بحسب طبيعة عملك لنموذج الصرف.
  2. نحن سنقوم بعمل الجدول وذلك لعمل نموذج صرف محاسبي .
  3. سنقوم بتسمية الجدول كالتالي: Accounts
  4. وبتكون أسماء الحقول كالتالي:

ID

Date_qab

ID_Gn_HH

no_bankH

AccId_qb

Details

Check_No

إلى آخر الحقول كما هو موضح في الصورة التالية:

حقول مصدر السجلات
أسماء حقول الجدول
ثانياً: نقوم بعمل نموذج جديد ثم إضافة الحقول إلى النموذج. 

خطوات بناء النموذج باستخدام جدول Accounts كمصدر للسجلات:

  • إنشاء النموذج:

في Access انتقل إلى علامة تبويب "إنشاء" ثم انقر على زر "النماذج" واختر "نموذج جديد" لإنشاء نموذج جديد.

يمكنك الاطلاع على: إنشاء النماذج CREATE FORMS في الأكسس

  • تحديد مصدر بيانات السجلات: 

في نافذة إنشاء النموذج الجديدة، انقر على "اختيار الجداول/الاستعلامات" واختر جدول "Accounts" كمصدر للسجلات.

  • تخصيص تخطيط النموذج: 

سحب الحقول من جدول "Accounts" إلى تخطيط النموذج لإضافتها. وأيضًا تغيير تنسيق وتخطيط العناصر حسب الحاجة.

  • إضافة عناصر إضافية: 

إذا كان هناك حقول أخرى تريد إضافتها إلى النموذج والتي ليست موجودة في جدول "Accounts"، يمكنك إضافتها يدويًا عن طريق سحبها من شريط الأدوات.

  • حفظ النموذج: 
بعد إنشاء النموذج والربط به بجدول "Accounts" كمصدر للسجلات، الخطوة التالية هي إضافة الحقول من جدول "Accounts" إلى تخطيط النموذج، لأجل القدرة على عرض بيانات الحسابات في نموذج الصرف.

إليك الخطوات:

  • في تصميم النموذج انقر بزر الماوس الأيمن في منطقة التخطيط الرئيسية وحدد "إضافة حقول".
  • في نافذة "إضافة الحقول"، ستجد قائمة بجميع الحقول المتاحة في جدول "Accounts". 
  • قم بتحديد الحقول التي تريد إضافتها إلى النموذج.
  • بمجرد تحديد الحقول انقر على "إضافة" لإدراجها في تخطيط النموذج.
  • يمكنك الآن سحب وإفلات هذه الحقول في الأماكن المناسبة في تخطيط النموذج حسب تفضيلاتك.

اقرأ أيضاُ: ماهي طرق فتح برنامج إدارة قواعد البيانات Microsoft Access ؟

ء

الحقول الى النموذج
إضافة الحقول الى النموذج

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

وسيتم إرفاق الملف للتطبيق عليه. 

ونواصل الآن في عملية بناء هذا النموذج من خلال إضافة الأكواد البرمجية إليه لذلك احرص على التركيز وذلك لتجنب أي خطأ عند بناء الكود البرمجي.

 حقل رقم الصندوق/ البنك.

  • مصدر السجلات: 

رقم الصندوق / البنك يحتاج إلى تحديد مصدر سجلاته، وبالطبع سيكون مصدر السجلات له هو جدول tblcash جدول النقدية، ونقوم بذلك من الجهة اليسار للأكسس بحيث نختار نافذة بيانات ـ ثم مصدر السجلات كما هو موضح في الصورة التالية:

مصدر السجلات في الاكسس
مصدر السجلات

  • عمل الأكواد لحقل رقم الصندوق/ البنك: 

الاسم البرمجي لحقل الصندوق هو: txtCASHsar

الخطوة التالية هي إضافة التعليمات البرمجية الفعلية. ويجب على الجميع التركيز حتى لا يقع في أي خطأ، وعند قيامك بالتطبيق قم بتحديد الحقل "txtCASHsar" في تخطيط النموذج.

  • انتقل إلى علامة تبويب "خصائص" للحقل المحدد.
  • في قسم "الأحداث"، حدد "قبل التحديث" من القائمة المنسدلة. 

وسنقوم بعمل الأكواد لحقل رقم الصندوق للوصول إلى النتائج التالية:

لضبط عملية الترقيم بحيث يكون الترقيم تسلسلي بحسب رقم الصندوق أو البنك 

إنشاء نظام لتتبع ترقيم السندات المالية بناءً على رقم الصندوق أو البنك المحدد في نموذج الصرف.

الهدف هو أن يكون الترقيم التسلسلي للسندات مرتبطًا بكل صندوق/بنك على حدة.

على سبيل المثال:

  • إذا كان رقم الصندوق/البنك هو 1، فسيبدأ الترقيم من 1 وينتقل تلقائيًا إلى 2، 3، 4 وهكذا.
  • إذا كان رقم الصندوق/البنك هو 2، فسيبدأ الترقيم من 1 وينتقل تلقائيًا إلى 2، 3، 4 وهكذا.
  • عند اختيار رقم الصندوق/البنك في نموذج الصرف، يقوم بجلب العدد التسلسلي بحسب رقم الصندوق ثم يأخذ أكبر قيمة.
  • استخدم هذا الرقم التسلسلي كرقم السند للصرف الحالي.
  • يقوم بزيادة الرقم التسلسلي لذلك الصندوق/البنك بواحد في قاعدة البيانات.
هذه الخطوات ستضمن أن يتم ترقيم السندات بشكل تسلسلي حسب رقم الصندوق/البنك المحدد في كل صرف

في حال أن المستخدم قام بمحاولة إدخال بيانات بدون الضغط على زر الإضافة.

في حالة عدم الضغط على زر الإضافة لإضافة سجل جديد، يجب أن يظهر للمستخدم رسالة تنبيه توضح أنه يجب عليه الضغط على زر الإضافة أولاً حتى يتمكن من إدخال بيانات جديدة.

هذا الحل سيضمن منع المستخدم من إدخال بيانات جديدة دون الضغط على زر الإضافة أولاً.

في حال أن الحساب موقف:

إذا تم توقيف أحد الحسابات المستخدمة في عملية الصرف. فعند محاولة الصرف من هذا الحساب الموقف، سيظهر للمستخدم رسالة تفيد بأن هذا الحساب تم توقيفه وبالتالي لا يمكن الصرف منه.

هذه الميزة تساعد في منع المستخدم من إجراء أي عمليات صرف من حسابات موقفة أو محظورة.

في حالة أن الشهر مقفل:

في حال كان الشهر الذي يتم إجراء الصرف فيه مقفلاً، سيقوم النموذج بعرض رسالة تفيد المستخدم بأن هذا الشهر مقفل

وبالتالي لا يمكن إجراء أي عمليات صرف فيه.
هذه الميزة تساعد في منع إجراء عمليات صرف في شهر مقفلة، مما يحافظ على سلامة البيانات المالية.

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

إذا كان السند الذي يتم التعديل عليه قد تم ترحيله بالفعل، سيعرض النموذج رسالة توضح أن هذا السند قد تم ترحيله وبالتالي لا يمكن إجراء أي تعديلات عليه.

هذا الكود يضمن عدم إجراء تعديلات على السندات التي تم ترحيلها،  وهذا  يحافظ على سلامة البيانات المالية.

بيانات المستخدم غير مكتملة:

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

في حال التحقق من أن السند تحت الانتظار:

إذا قام المستخدم بحفظ عملية صرف مع تحديد أنها "تحت الانتظار"، فلن يتم ترحيلها تلقائيًا عند ترحيل النموذج.

هذه العملية ستبقى "تحت الانتظار" حتى يقوم المستخدم بتفعيلها يدويًا. عند إعادة فتح النموذج والتعديل على هذه العملية، سيتم الحفظ التلقائي مباشرة.

نبدأ بتطبيق الأكواد:

انتقل إلى علامة تبويب "خصائص" للحقل المحدد. في قسم "الأحداث"، حدد "قبل التحديث" من القائمة المنسدلة.

حدث قبل التحديث

سوف نقوم بإضافة حدث قبل التحديث وذلك للأمور التالية:

1. لضبط عملية الترقيم بحيث يكون الترقيم تسلسلي بحسب رقم الصندوق أو البنك.

مثلاً قمنا باختيار رقم الصندوق 1 بالطبع سيدأ الترقيم بدايةً من رقم: (1)، لكن إذا قمنا بإضافة سجل جديد آخر وتم اختيار صندوق رقم: (2) ، السؤال هل سيكون رقم الصرف: (1) أو بيكون الرقم: (2) بناء على الترتيب السابق للرقم: (1) للصندوق1

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

فاذا قمنا بإضافة صرف اخر وتم اختيار رقم الصندوق2 فإنه يقوم بالترقيم بحسب رقم الصندوق2 وبيكون رقم السند: (1)  وليس : (2)

لتنفيذ هذا يمكن استخدام الكود التالي:

typcashsarf = [txt_Ndafsarf] & [txt_Ndafsarf] & [txtCASHsar
AccId_sarf = DLookup("[accid_cash]", "tblcash", "[notyp_cash] = " & [typcashsarf]) MsgBox End If

شرح الكـــــود:

typcashsarf :

نستخدم متغير typcashsarf لتتبع نوع الدفع (نقداً، شيك) وأيضا نوع السند(صرف، قبض).

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

1. txt_Ndafsarf: نوع الدفع (نقد، شيك)

2. txt_Ndafsarf: نوع السند( صرف، قبض)

3. txtCASHsar : رقم الصندوق أو البنك نحن نقوم بإدخال

ثم يقوم النموذج بإيجاد قيمة الحقل typcashsarf والذي من خلاله نقوم بعملية الترقيم بحسب رقم الصندوق أو البنك

typcashsarf= يساوي

typcashsarf = [txt_Ndafsarf] & [txt_Ndafsarf] & [txtCASHsar]

مثلا:

نوع السند = صرف قيمته 1

نوع الدفع= نقدا قيمته 1

رقم الصندوق= 1

إذا الحقل يساوي =111

مثال اخر

نوع السند = قبض قيمته 2

نوع الدفع= شيك قيمته 2

رقم الصندوق المدخل= 1

إذا الحقل يساوي =221

AccId_sarf = DLookup("[accid_cash]", "tblcash", "[notyp_cash] = " & [typcashsarf])

AccId_sarf: هو حقل رقم حساب الصندوق أو البنك.

نقوم بجلبه من جدول الصناديق في قاعدة البيانات
AccId_sarf = DLookup("[accid_cash]", "tblcash", "[notyp_cash] = " & [typcashsarf])

AccId_sarf

رقم الحساب في جدول الصناديق

tblcash

اسم جدول الصناديق

notyp_cash: 

حقل تحديد نوع الحساب هل هو صندوق أو بنك

typcashsarf

مربع نص في النموذج تم شرحه مسبقاً.

ومعنى الكود هو: 

قم بجلب رقم الحساب المسجل في جدول الصناديق بشرط إذا كان رقم نوع الحساب في جدول الصناديق يساوي مربع نص النموذج: typcashsarf

2. في حال أن المستخدم قام بمحاولة إدخال بيانات بدون الضغط على زر الإضافة.

إذا قام المستخدم بالضغط على حقل رقم الصندوق، ولم يقم بالضغط على زر "إضافة سجل جديد"، على الإطلاق فيجب أن يظهر للمستخدم تنبيه يوضح أنه يجب عليه الضغط على زر "إضافة سجل جديد" أولاً قبل إدخال أي بيانات جديدة.

هذه المعالجة تتعامل مع المستخدم أنه لا يستطيع أن يقوم بإدخال بيانات جديدة قبل إنشاء سجل جديد في النظام. وهذا سيساعد في الحفاظ على سلامة البيانات وتجنب أي أخطاء أو تداخلات في البيانات.

لتنفيذ هذا يمكن استخدام الكود التالي

الكود الخاص بالزر

If Me.vusar = 0 Then
 MsgBox "عفوا اضغط زر الإضافة ", vbCritical, "تنبيه"
DoCmd.CancelEvent
Exit Sub
End Ifub

في هذا الكود:

شرح الكـــــود:

نستخدم متغير vusar لتتبع ما إذا كان المستخدم قد ضغط على زر الإضافة أم لا.

عند الضغط على زر الإضافة، نقوم بتحديث قيمة vusar إلى (1).

عند حفظ البيانات (بالضغط على زر الحفظ)، نتحقق من قيمة vusar ويعيد قيمته إلى (0) أو قيمة خالية

إذا لم يتم الضغط على زر الإضافة فسيتم عرض رسالة التنبيه للمستخدم.

3. في حال أن المستخدم قام بمحاولة إدخال بيانات بدون الضغط على زر نوع الدفع(نقداً، شيك)

في حالة عدم الضغط على زر نوع الدفع: (نقداً، شيك) لإضافة سجل جديد، يجب أن يظهر للمستخدم رسالة تنبيه تقول له أنه يجب عليه الضغط على زر نقداً أو شيك أولاً لأجل يستطيع إضافة بيانات جديدة في النموذج

وهذا يُفيد بأن المستخدم لا يستطيع إدخال بيانات جديدة دون الضغط على زر نوع الدفع أولاً: (نقداَ، شيك)

لتنفيذ ذلك يتطلب القيام بالكود التالي:

If Me.nn = 0 Then
MsgBox "هل العملية نقداً أو شيك ", vbCritical, "تنبيه"
DoCmd.CancelEvent
Exit Sub
End If

نستخدم متغير nn لتتبع ما إذا كان المستخدم قد ضغط على زر نوع الدفع أم لا. عند الضغط على زر نوع الدفع، نقوم بتحديث قيمة nn إلى 1. وعندما نقوم بحفظ البيانات (بالضغط على زر الحفظ)، يقوم النموذج بتحديث قيمة nn ويعيد قيمته إلى 0 أو قيمة خالية

إذا لم يتم الضغط على زر نوع الدفع فسيتم عرض رسالة التنبيه للمستخدم.

4. في حال أن المستخدم قام بمحاولة إدخال بيانات والحساب موقف.

1. إذا قام المستخدم بتوقيف حساب معين من خلال شاشة إدارة الحسابات، فسيتم تحديث حالة ذلك الحساب إلى "موقف".

2. عندما يحاول المستخدم إدخال رقم الحساب المُوقَّف في عملية الصرف يجب أن تظهر رسالة تنبيه تُخبره بأن الحساب تم توقيفه وأنه عليه تغيير رقم الحساب قبل أن يتمكن من استكمال العملية.في هذا المثال:

If Me.type_hesabsr2 = True Then
 MsgBox "عفواً الحساب موقف ", vbCritical, "تنبيه"
DoCmd.CancelEvent
Exit Sub
End If

1. نستخدم متغير `type_hesabsr2` لمعرفة حالة الحساب (نشط أو موقف) وهذا الحقل يقوم بجلب قيمته من جدول أرقام الحسابات.

2. عند محاولة إدخال رقم الحساب، نتحقق من قيمة `type_hesabsr2 .

3. إذا كان الحساب موقف (أي type_hesabsr2 هو "false")، فسيتم عرض رسالة تنبيه للمستخدم.

وهذا يفيد بأن المستخدم لا يستطيع إضافة بيانات أو التعديل عليه وذلك بسبب أن الحساب قد تم توقيفه كما هو واضح بالصورة التالية:


حالة الحساب
حالة الحساب

5. في حال أن المستخدم قام بمحاولة إدخال بيانات ورقم السند مرحل.

في حال قد تم ترحيل السند الذي سيتم تعديله فإنه ستظهر رسالة تنبيه توضح بأن السند قد تم ترحيله ولا يمكن التعديل عليه:

هذا الكود يضمن عدم إجراء تعديلات على السندات التي تم ترحيلها، مما يحافظ على سلامة البيانات المالية.

If Me.tarhelsarf = -1 Then 
MsgBox "السيد:" & Me.username_sar & "   " & ("عفوا السند مرحل") & vbCr
DoCmd.CancelEvent

If Me.tarhelsarf = -1 Then 
MsgBox "السيد:" & Me.username_sar & "   " & ("عفوا السند مرحل") & vbCr
DoCmd.CancelEvent

tarhelsarf: 

اسم حقل  الترحيل ويحمل قيمة (نعم/لا) في مصدر السجلات، ونقوم بالترحيل من شاشة ترحيل السندات، سيتم شرحها لاحقاً.

6. في حال أن المستخدم قام بمحاولة إدخال بيانات والشهر مقفل.

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

If closed = -1 Then
MsgBox "السيد:" & "" & Me.username_sar & "   " & ("عفوا الشهر موقف") & vbCr
 beforsarf = False

closed: 
اسم حقل  توقيف الحساب ويحمل قيمة (نعم/لا) في مصدر السجلات

ونقوم بتوقيف الشهر من شاشة الأشهر، سيتم شرحها لاحقاً.

وأخيراً:

7. عند إضافة رقم الصندوق/ البنك سيتم التالي بشكل تلقائي:

عند إضافة رقم الصندوق/ البنك سيتم التالي بشكل تلقائي:

- في حال كان الحساب بالعملة الأجنبية: 

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

إضافة رقم الصندوق
إضافة رقم الصندوق

في حال كان الحساب بالعملة المحلية: فإذا كانت العملة بالعملة المحلية فإنه يخفي حقل السعر كما هو موضح في الصورة التالية:

اسم الصندوق
اسم الصندوق

حقل المبلغ:

    حقل المبلغ: اسمه البرمجي: textDaensarf

    الكود يقوم بالتحقق من العملية قبل الإضافة:

    DoCmd.If IsNull(Trim(Me.txtCASHsar)) Then
    MsgBox "لا يمكن إضافة المبلغ قبل اختيار رقم الحساب ", vbCritical, "تنبيه"
    DoCmd.CancelEvent
    Exit Sub
    End If
    textRseedsarf = DLookup("[rs]", "[Qarseda]", "[AccId_sarf]=[AccId] ")
    MsgBox "رصيد غير كافي - رصيدك الحالي هو " & textRseedsarf & " " & pr_acy & " " & "فقط لاغير"
    textRseedsarf.Requery

    nmsarf.Visible = True
    If Me.textDaensarf > Me.textRseedsarf Or Me.textRseedsarf = "" Then
    If Me.textRseedsarf > 0 Then
    End If

    MsgBox "رصيد غير كافي - الرصيد عليكم هو " & textRseedsarf & " " & pr_acy & " " & "فقط لاغير"
    If MsgBox("هل تريد الاستمرار بالعملية", vbYesNo, "تأكيد الاستمرار") = vbNo Then
    DoCmd.CancelEvent
    Me.Undo
    'texbb = Forms![FN_SARFSHEEK1]![formSHEEK]![TTOO]
    If Me.CurrTypes = True Then
    Me.pricesar.Visible = False
    Me.price_sar1.Visible = False
    End If
    If Me.CurrTypes = False Then
    Me.pricesar.Visible = True
    End If
    Me.price_sar1.Visible = True
    Refresh
    [userq] = [Nu]
    Me.Refresh
    End If
    Else
    End If

    • في حالة المحاولة بإدخال المبلغ قبل عملية الضغط على زر الإضافة.

    • في حالة أن الحساب رصيده غير كافي لعملية الصرف فإنه يقوم بتنبيه المستخدم واعطاءه خيارين هل تريد المتابعة 
    textRseedsarf = DLookup("[rs]", "[Qarseda]", "[AccId_sarf]=[AccId] ")

    إذا كان نعم يقوم البرنامج بتمكين المستخدم بتكملة الصرف، وفي حال اختار لا، يقوم البرنامج بعملية التراجع للصرف.

    ءاخر

    رصيد غير كافي
    الحساب رصيده غير كافي


    حساب المبلغ بالعملة المحلية:

    عند إدخال المبلغ بالعملة الأجنبية، النموذج يقوم تلقائيًا بحساب المعادل بالعملة المحلية عن طريق ضرب المبلغ بسعر الصرف المدخل.

    هذا المبلغ بالعملة المحلية يظهر في حقل مخصص لذلك.

    عناصر النموذج:

      النموذج يحتوي على ثلاثة عناصر مهمة وهي:

      طبعاً كما هو معروف أن السند المحاسبي أو القيد أو الصرف يتكون من قيدين الأول مدين والثاني دائن

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

      العنصر الأول: 

      الجزء العلوي والذي يحتوي على الحقول التي تم شرحها سابقاً

      الجزء الثاني: 

      هو عبارة عن تفاصيل سند الصرف.

      الجزء الثالث:

      عبارة عن عرض لسند الصرف بعد القيام بعملية الحفظ.

      عناصر النموذج:
      عناصر النموذج:

      قائمة الأزرار:




        قائمة الأزرار:
        قائمة الأزرار:
        • زر الحفظ: 
        يقوم بحفظ البيانات الجديدة أو المعدلة في النظام.  CmdE_sar
        • زر التعديل: 
        يتيح للمستخدم تعديل البيانات الموجودة. CmdE_sar
        • زر الحذف: 
        يحذف السجل أو البيانات المحددة من النظام. cmdD
        • زر الجديد:

        1.  يفتح نموذج جديد للإدخال. CmdNsar
        2. عند الضغط على زر "جديد"، يتم فتح جميع الحقول في النموذج لإتاحة إدخال البيانات الجديدة.
        3. في حالة الوضع الافتراضي، تكون بعض الحقول مقفلة لمنع التعديل العشوائي.

        شرح إضافة أزار تحكم في النموذج

        نقوم أولاً بعمل زر جديد ونسميه جديد وأيضاً نقوم بالتسمية البرمجية للزر: CmdNsar

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

        CmdNsar زر جديد
        CmdNsar

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

        ماهي خصائص الزر
        خصائص الزر 

        عند الضغط على زر الإضافة يجب أيضاً الضغط على نوع الصرف هل هو نقداً أو شيك، وفي حالة عدم الضغط على زر نوع الصرف ستظهر لك رسالة تنبيه بأنه يجب عليك اختيار نوع الصرف على نقداً أو شيك كما هو موضح في الصورة التالية:

        نوع الصرف
        نوع الصرف
        زر الإضافة: 
        يقوم بإتاحة إدخال بيانات 

        زر الحفظ:

        سوف يقوم البرنامج بفحص الحقول الفارغة قبل السماح بعملية الحفظ لضمان اكتمال البيانات، كما يقوم بفحص الصحة والاتساق للعمليات السابقة قبل السماح بالتنفيذ الجديد، وفي حال وجود أخطاء يقوم بإبلاغ المستخدم.

        زر التراجع:

        يتيح للمستخدم التراجع عن آخر عملية تعديل تمت. وسيتم الشرح بالتفصيل كالتالي:

        كود زر الجديد:  CmdNsar

        زر "جديد" يتم إعادة تسميته إلى "تراجع"

        وزر "تعديل" يتم تغييره تلقائيًا إلى زر "حفظ"
        هذا التغيير في أزرار التحكم يسهل تدفق العمل للمستخدم عند إنشاء إدخالات جديدة أو تحرير إدخالات موجودة.

        عندما يضغط المستخدم على "جديد"، سيعمل البرنامج على تجهيز الحقول للإدخال الجديد، وتغيير الأزرار لتتناسب مع هذه العملية، ليصبح زر جديد هو زر التراجع.

        الكود التالي يقوم بالتحقق من الصلاحيات سيتم شرح نموذج الصلاحيات لاحقاً

        إذا كان المستخدم يملك صلاحيات الإضافة فإنه يقوم الصرف بفتح الحقول وتمكينها وإذا كان المستخدم ليس له صلاحيات الإضافة فإن النموذج يظهر له رسالة بأن ليس له صلاحيات الإدخال.

        On Error Resume Ne
        If DLookup("[a]", "[FrmAbility]", "[Nu]=[sn] And [FRM]='FN_SARFSHEEK1'") = True Then
        Me.AllowEdits = True

        الكود التالي يقوم بالتحقق من الصلاحيات، هل المستخدم يملك صلاحية فتح النموذج أم أنه لا يملك صلاحية ذلك.

        • FrmAbility: 

        اسم جدول الصلاحيات
        • SN:
        رقم المستخدم في جدول الصلاحيات
        • Nu: 
        رقم المتسخدم:
        • FN_SARFSHEEK1:
        اسم النموذج الذي تشتغل عليه وتستفسر عنه في الصلاحيات
        • a:
        اسم عمود تفعيل الصلاحية في جدول الصلاحيات

        ومعنى الكود: 

        تحقق من العمود:a  في جدول الصلاحياتFrmAbility هل هو نعم أم لا بشرط إذا كان:SN يساوي: Nu في النموذج 
        يساوي:
        تمكين الحقول من الإضافة أو التعديل:

         Me.AllowEdits = True

        On Error Resume Next
        If DLookup("[s]", "[FrmAbility]", "[Nu]=[sn] And [FRM]='FN_SARFSHEEK1'") = True Then
        Me.AllowEdits = True

        حقل الرصيد:

        textRseedsarf = DLookup("[rs]", "[Qarsedafn]", "[AccId_sarf]=[AccId] ")

         الكود التالي: 
        نحن قمنا بإضافة حقل في النموذج وسميناه الرصيد وعليه هذا الكود يقوم بجلب الرصيد الخاص برقم حساب الصندوق او البنك  الذي قمنا بإدخاله في رقم الصندوق أو رقم البنك، وبمجرد إدخال رقم الحساب أو رقم البنك يظهر لنا الرصيد في الحقل المحدد 

        • textRseedsarf : اسم حقل الرصيد في النموذج
        • Qarsedafn: اسم عمود الرصيد في استعلام الرصيد
        • Qarsedafn: اسم استعلام الرصيد
        • AccId_sarf: اسم رقم الحساب في استعلام الرصيد
        • AccId: اسم رقم الحساب في النموذج
        if beforsarf = False Then Exit Sub
        يقوم الكود السابق من التحقق من الأمور التالية:
        1. هل السند مرحل أم لا.
        2. هل الشهر مقفل أم لا.
        3. هل الشهر موقف أم لا.
        4. هل الفترة المحاسبية متاحة أم لا.
         
        Private Function beforsarf() As Boolean Dim mnthsarf As Integer Dim closed As Integer Dim locked As Integer Dim fr_tosa As Integer mnthsarf = DLookup("[mnth]", "period_detail", "[mnth] = " & [monthh]) closed = DLookup("[closed]", "period_detail", "[mnth] = " & [monthh]) locked = DLookup("[locked]", "period_detail", "[mnth] = " & [monthh]) fr_tosa = DLookup("[fr_to]", "period_detail", "[mnth] = " & [monthh])
        If Me.tarhelsarf = -1 Then MsgBox "السيد:" & Me.username_sar & " " & ("عفوا السند مرحل") & vbCr DoCmd.CancelEvent beforsarf = False Exit Function Else beforsarf = True End If If closed = -1 Then MsgBox "السيد:" & "" & Me.username_sar & " " & ("عفوا الشهر موقف") & vbCr beforsarf = False Exit Function Else beforsarf = True End If If locked = -1 Then MsgBox "السيد:" & "" & Me.username_sar & " " & ("عفوا الشهر مقفل") & vbCr beforsarf = False Exit Function Else beforsarf = True End If If fr_tosa = 0 Then MsgBox "السيد:" & "" & Me.username_sar & " " & ("عفوا الفترة المحاسبية موقفة") & vbCr beforsarf = False Exit Function Else beforsarf = True End If End Function

        Qarsedafn: اسم استعلام الرصيد

        إذا كان زر جديد والذي اسمه البرمجي:CmdNsar اسمه جديد

        قم بعملية تمكين عملية الإدخال وقم بعمل سجل جديد: 

        DoCmd.GoToRecord ,, acNewRec


        If CmdNsar.Caption = "جديد" Then
        AllowAdditions = True
        AllowEdits = True
        AllowDeletions = True

        DoCmd.GoToRecord , , acNewRec


        LogType = 1

        vusar = 1
        userq = Nu
        comput_h_sar2 = pcsarf1
        comput_h2_sar2 = pcsarf2

        typ_hawsar = 1
        typcashsarf = ""
        formSHEEK.Enabled = True
        cas_sar.Enabled = True
        che_sar.Enabled = True


        CmdNsar.Caption = "تراجع"
        CmdE_sar.Caption = "حفظ"
        الأكواد التالية هي عبارة عن أسماء حقول الصرف وهنا تقوم هذه الأكواد بتمكينها لإدخال البيانات في النموذج
        Me.txtCASHsar.locked = False
        Me.txtsanadhasar.locked = False
        Me.textDaensarf.locked = False
        Me.pricesar.locked = False
        Me.txtDetailssar.locked = False
        Me.texDate_sar.locked = False
        Me.pr_acy.locked = False
        Me.CurrNamesarf.locked = False
        Me.Q_wait.locked = False
        Me.CENTER_hdsar.locked = False
        Me.typroj_hdsar.locked = False
        Me.activ_hdsar.locked = False

        Me.txtCASHsar.Enabled = True
        Me.txtsanadhasar.Enabled = True
        Me.textDaensarf.Enabled = True
        Me.pricesar.Enabled = True
        Me.txtDetailssar.Enabled = True
        Me.texDate_sar.Enabled = True
        Me.pr_acy.Enabled = True
        Me.CurrNamesarf.Enabled = True
        Me.Q_wait.Enabled = True
        Me.CENTER_hdsar.Enabled = True
        Me.typroj_hdsar.Enabled = True
        Me.activ_hdsar.Enabled = True


        cas_sar.locked = False
        che_sar.locked = False
        srt.locked = False


        formSHEEK.locked = False
        formSHEEK.Enabled = True
        srt.Enabled = True

        الكود التالي: هو عبارة عن عن عملية ادخال البيانات
        Else
         If vusar = 1 Then
        On Error Resume Next
        DoCmd.RunCommand acCmdSelectAllRecords
        DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

        DoCmd.RunCommand acCmdSaveRecord
        DoCmd.RunCommand acCmdRefresh
        DoCmd.GoTغ
        oRecord , , acNext
         DoCmd.CancelEvent
                Me.Undo
        Refresh
        Me.Refresh
        CmdNsar.Caption = "جديد"
        CmdE_sar.Caption = "تعديل"

        Refresh
        Me.Refresh
        'If DEELLEETT = False Then Exit Sub
        nmsarf.Visible = False
        الأكواد التالية هي عبارة عن أسماء حقول الصرف وهنا تقوم هذه الأكواد بإقفال تمكين عملية إدخال البيانات في النموذج

        Me.txtsanadhasar.locked = True
        Me.texDate_sar.locked = True
        Me.txtCASHsar.locked = True
        Me.textDaensarf.locked = True
        Me.pricesar.locked = True
        Me.txtDetailssar.locked = True
        Me.Q_wait.locked = True

        Me.CurrNamesarf.locked = True
        Me.Q_wait.locked = True

        cas_sar.locked = True
        che_sar.locked = True

        formSHEEK.locked = True
        formSHEEK.Enabled = True

        nn = ""
         vusar = ""
            Refresh
        Me.Refresh

        End If
        End If
        Else
        Me.AllowEdits = False
        MsgBox "السيد:" & Me.username_sar & " ــ " & ("عفوا لديك صلاحية") & vbCr
        DoCmd.CancelEvent
        Exit Sub
        End If
        End Sub

        زر التعديل CmdE_sar:

        زر التعديل CmdE_sar : يتيح للمستخدم تعديل البيانات الموجودة.

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

        كما في الصورة التالية:

        تعديل السند
        تعديل السند

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


        If IsNull(Me.txtsanadhasar) Then MsgBox "السيد:" & Me.username_sar & " ــ " & ("عفوا لا يوجد بيانات للتعديل") & vbCr DoCmd.CancelEvent Exit Sub End If

        لا يوجد بيانات للتعديل
        عرض رسالة بأنه لا يوجد بيانات للتعديل
        الكود التالي يقوم بالتحقق من الصلاحيات وقد تم شرح الصلاحيات سابقاً.
        IfDLookup("[e]", "[FrmAbility]", "[Nu]=[SN] And [FRM]='FN_SARFSHEEK1'") = True Then

        • FrmAbility: 

        اسم جدول الصلاحيات
        • Nu: 
        رقم المتسخدم في النموذج
        • FN_SARFSHEEK1:
        هذا يشير الى اسم النموذج الذي تعمل عليه.
        • e:
        اسم عمود تفعيل الصلاحية في جدول الصلاحيات  (التعديل)

        ومعنى الكود: 

        تحقق من العمود:في جدول الصلاحياتFrmAbility هل هو نعم أم لا بشرط إذا كان:SN يساوي: Nu في النموذج. يساوي:True فإن:  Then. تمكين الحقول من الإضافة أو التعديل: Me.AllowEdits = True

        If CmdE_sar.Caption = "تعديل" Then

        الكود التالي يقوم بالمهام التالية:

        في حال أن السند قد تم ترحيله:

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

        فبمجرد ترحيل السند لن يتمكن المستخدم بإجراء أي تعديل، وذلك لضمان عدم حدوث أي تغييرات عشوائية أو غير مصرح بها تؤثر على السجلات المالية.

        هذا الكود الذي تم ذكره يضمن هذا الأمر بشكل فعال. وعند محاولة المستخدم إدخال بيانات التعديل على سند تم ترحيله، سيتم عرض رسالة تنبيه للمستخدم لإبلاغه بعدم إمكانية إجراء أي تعديلات. وهذا يحافظ على سلامة البيانات المالية في النظام.

        في حال أن البيانات غير المكتملة:

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

        في حال عملية تحت الانتظار:

        إذا قام المستخدم بحفظ عملية صرف مع تحديد أنها "تحت الانتظار"، فلن يتم ترحيلها تلقائيًا من شاشة الترحيل. هذه العملية ستبقى "تحت الانتظار" حتى يقوم المستخدم بإلغاءها يدويًا. وعند إعادة فتح النموذج والتعديل على هذه العملية، سيتم الحفظ مباشرة.

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

        vusar = 2 هنا نقوم بتأمين الحقول بعد أن نقوم بالضغط على زر الحفظ حتى لا يستطيع أحد التلاعب بالبيانات. 

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

        وبناءً على ذلك يتم تنفيذ إجراء معين:

        • إذا كانت العملة محلية (type_of_currency = true):
        يتم استدعاء الدالة show_price_field() لإظهار حقل السعر.
        • إذا كانت العملة أجنبية (type_of_currency == false):
        - يتم استدعاء الدالة show_foreign_price_fields() 

        لإظهار الحقول المرتبطة بالسعر الأجنبي.

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

        زر الحذف cmdD:

        زر الحذف cmdD : يحذف السجل أو البيانات المحددة من النظام. 

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

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

        التحقق من وجود بيانات للحذف
        التحقق من وجود بيانات للحذف


        If IsNull(Me.txtsanadhasar) Then MsgBox "السيد:" & Me.username_sar & " ــ " & ("عفوا لا يوجد بيانات للحذف") & vbCr Else



        Private Sub CmdD_Click()
        On Error Resume Next
        srt.Requery
        If IsNull(Me.txtsanadhasar) Then
        MsgBox "السيد:" & Me.username_sar & " ــ " & ("عفوا لا يوجد بيانات للحذف") & vbCr
        Else

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


        If DLookup("[d]", "[FrmAbility]", "[Nu]=[SN] And [FRM]='FN_SARFSHEEK1'") = True Then


        الكود التالي يقوم بالتحقق من الصلاحيات هل تملك صلاحيات الحذف أم لا.

        • FrmAbility: 

        اسم جدول الصلاحيات

        ومعنى الكود: 

        تحقق من العمود:d الموجود في جدول الصلاحياتFrmAbility هل هو نعم أم لا بشرط إذا كان:SN يساوي: Nu في النموذج 

        يساوي:True فإنه يمكنه عملية الحذف مالم يتم إظهار رسالة تفيد بأنه ليس له صلاحية الحذف  

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

        If DLookup("[d]", "[FrmAbility]", "[Nu]=[sn] And [FRM]='FN_SARFSHEEK1'") = True Then

        يقوم الكود من التحقق من اشياء كثيرة وقد تم ذكرها في زر التعديل منها

        في حال أن السند الذي تريد حذفه قد تم ترحيله بالفعل، فإن النموذج المستخدم لإجراء الحذف سيعرض رسالة للمستخدم توضح بأن السند قد تم ترحيله مسبقاً

        زر البحث:

        يتم اختيار رقم الحساب البنكي أو الصندوق من قائمة الخيارات المتاحة.

        • يتم إدخال رقم الصرف في الحقل المخصص لذلك.
        • الضغط على زر البحث

        بعد الضغط على زر البحث، يتم عرض تفاصيل الصرف كاملة وإمكانية تعديلها.

        في حالة أن الصرف لم يتم ترحيله، والمستخدم له صلاحية التعديل والشهر غير مقفل فإنه يتم تمكين المستخدم من تعديل الحقول المختلفة بعد الضغط على زر "تعديل".

        زر البحث:
        زر البحث:

        On Error Resume Next
        If (Me.txtsanadhasar) > 0 Then
        AllowAdditions = True
        AllowEdits = True
        AllowDeletions = True
        DoCmd.GoToRecord , , acNewRec
        End If
        t1sarf.Visible = True
        n2 = [formSHEEK]![TTOO]
        n3 = n2 - n1
        [n2] = Forms![formSHEEK]![TTOO]

        If DLookup("[s]", "[FrmAbility]", "[Nu]=[sn] And [FRM]='FN_SARFSHEEK1'") = True Then
        Me.AllowEdits = True
        If Me.CurrTypes = True Then
        Me.pricesar.Visible = False
        End If
        If Me.CurrTypes = False Then
        Me.pricesar.Visible = True
        Me.pricesar.locked = False
        [userq] = [Nu]
        End If
        If IsNull(Me.t4sarf) Then
        MsgBox "يجب عليك إدخال رقم السند !", vbCritical, "تنبيه"
        DoCmd.CancelEvent
        Me.t4sarf.SetFocus

        Exit Sub
        End If
        If IsNull(Me.t1sarf) Then
        MsgBox "يجب عليك إدخال رقم النقدية !", vbCritical, "تنبيه"
        Me.t1sarf.SetFocus
        DoCmd.CancelEvent
        Exit Sub
        End If
        t2 = 2
        [txt_Search_IDsarf] = [t2] & [bysarf] & [t1sarf] & [t4sarf]
        DoCmd.ApplyFilter , "[alTekrar_header] = forms!FN_SARFSHEEK1!txt_Search_IDsarf"
        n2 = [formSHEEK]![TTOO]
        n3 = n2 - n1
        [n2] = Forms![formSHEEK]![TTOO]
        'arsedaa.Requery
        'textRseedsarf = arsedaa
        textRseedsarf.Requery
        If Me.txt_Ndafsarf = 1 Then
        hawsarf.Visible = False
        hawsarf1.Visible = False
        hawsarf22.Visible = False
        hawsarf33.Visible = False
        Else
        hawsarf.Visible = True
        hawsarf1.Visible = True
        hawsarf22.Visible = True
        hawsarf33.Visible = True
        End If
        If Me.typ_hawsar = 2 Then
        hawsarf = True

        hawsarf1 = False

        End If

        If Me.typ_hawsar = 3 Then

        hawsarf = False

        hawsarf1 = True

        End If

        If Me.txt_Ndafsarf = 1 Then

        cas_sar = True

        che_sar = False

        End If

        If Me.txt_Ndafsarf = 2 Then
        cas_sar = False
        che_sar = True
        End If
        Me.txtCASHsar.locked = True
        Me.txtsanadhasar.locked = True
        Me.textDaensarf.locked = True
        Me.pricesar.locked = True
        Me.txtDetailssar.locked = True
        Me.texDate_sar.locked = True

        Me.pr_acy.locked = True

        Me.CurrNamesarf.locked = True
        Me.Q_wait.locked = True
        Me.pricesar.Visible = False
        If textDaensarf > 0 Then
        nmsarf.Visible = True
        End If
        If textDaensarf = 0 Or textDaensarf = "" Then
        Me.nmsarf = "" & NoToTxt(Abs(textDaensarf), [CurrNamesarf], [fakkasarf]) & " فقط لا غير "
        End If
        If textDaensarf < 0 Then
        nmsarf = "دائن " & NoToTxt(Abs(textDaensarf), [CurrNamesarf], [fakkasarf]) & " فقط لا غير "
        Else
        nmsarf = NoToTxt(Abs(textDaensarf), [CurrNamesarf], [fakkasarf]) & " فقط لا غير "
        End If
        CmdE_sar.Caption = "تعديل"
        Else
        MsgBox "السيد:" & "" & Me.username_sar & " " & ("عفوا ليس لديك صلاحية العرض")

        End If

        Exit Sub

        وأخيراً زر الطباعة:

        تقوم باختيار نوع السند الذي تريده:

        • سند صرف 
        • سند شيك
        • سند خاص بالعميل


        زر الطباعة
        زر الطباعة:

        صورة سند صرف

        صورة سند صرف
        صورة سند صرف

        صورة سند الشيك




        سند الشيك
        صورة سند الشيك

        .

        أيضاً يمكنك التحميل من الرابط التالي:

        تعليقات