تصميم و برمجة فاتورة الشراء

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

اليوم سنبرمج فورم خاص بفاتورة الشراء buypill طبعا اهم فورم بالمشروع هي فاتوره الشراء لانها هي التي سوف نتعامل من خلالها مع الزبون .

 مقدمة عن هذه الفورم buypill

فاتورة الشراء buypill من اهم الفورم بالمشروع وتعتبر الجزء الاكبر بالمشروع لانها تحتوي جميع فورمات التي قمنا ببرمجتها اي ستضم  فورم الموردين , lmporters ltemplacesvb فورم المكان ltemcompany فورم الشركة ltemgroups فورم المجموعة ltems. فورم الاصناف فورم الموظفين users .

كل هذه  الشاشات سوف نقوم بربطها بفاتورة الشراء buypill .

  قد يتسائل البعض ويقول لماذا نربط هذه الشاشات ؟ اقول لكم هذا سوال جيد لو لاحظت اخي المبرمج اي فاتورة شراء تحتاج إلى اصناف صح وبالتالي ربطنا فورم الاصناف بفاتورة الشراء وكذلك نحتاج إلى فورم users اي الموظف الذي يقوم بتسجيل وبيع فاتوره الشراء الئ الزبون وبالتالي نكون قد ربطنا فورم users بفاتورة الشراء وايضا نحتاج الى مكان الصنف تبع مخزن الي عندنا والشركه المنتجه للصنف واي مجموعة ينتمي اليها الصنف وبالتالي نكون قد ربطنا فورم المجموعة ltemgroups وفورم الشركة company وفورم المكان place بفورم فاتورة الشراء buypill وكذلك نحتاج الى فورم lmporters المورد نربطه بفورم الشراء .

طيب ماذا نحتاج بعد في فورم الشراء buypill ؟ 

 نحتاج الى حساب اجمالي مجموع الشراء الكلي 

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

نحتاج الى تحميل بيانات الموردين lmporter وبيانات الاصناف ltems و بيانات الشركة company و بيانات المكان place و بيانات المجموعة groups وبيانات الموظف users كل هذه البيانات  نحتاجها في فاتورة الشراء buypill

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


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

تصميم راس فاتورة الشراء buypill 

 راح يكون تصميم فاتورة الشراء بالشكل التالي : 

 راح يكون على جهة اليمين في الاعلئ فيها بيانات المورد اي رقمه ورصيده الحالي وهاتفه , وعلى جهة اليسار في الاعلى راح يكون فيها رقم الفاتورة وباركود الصنف والتسلسل , اما في الوسط راح يكون داتا كراند فيو datagridview لعرض وتحميل الجدول وبياناته 

 اما تحت على جهة اليمين واليسار راح يكون فيها الحسابات الخاصه بفاتورة الشراء .

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

 اما مايخص برمجة الفورم (الاكواد) سوف تكون فيها نوع من الاحترافية وليس نوع من الصعوبة وايضا فيها نوع من الاكواد المطولة وبنفس الوقت سهله .

وستكون اكواد جديده لم نشرحها من قبل في القناه وراح تستفادون منها هواي في برمجة اي مشروع ضخم  . 

ناتي الى جزء مهم في فاتورة الشراء buypill و هو اضافة وتعديل البيانات بعد اضافتها .

 1⃣ اضافة البيانات (الاصناف) اضافة البيانات على اداة datagridview1 تحتاج توضيح كثير اي نحتاج الى الاصناف ltems لنختار من بينها اسم الصنف ونوعه ومكانه وسعره وكميته وخصمه واضافته هذه البيانات علئ اداة datagridview طبعا هناك طرق كثيره لاضافة هذه البيانات وبالتالي سوف نقوم بانشاء فورم خاص باضافة الصنف وبياناته علئ اداة datagridview1 بحيث نختار اسم الصنف وكميته وسعره وخصمه وصلاحيته وبعدها نضيفه علئ اداة datagridview .…… 2⃣ تعديل البيانات بعد اضافتها…… في بعض الاحيان نحتاج الى تعديل بيانات الصنف اي نريد بعد اضافه اسم الصنف وبياناته على اداة datagridview1 نحتاج إلى تعديل مثلا كميه الصنف او خصمه او تبديل الصنف طيب…… 🔸كيف يتم تعديل الصنف وبياناته ؟؟ هناك طرق كثيره لتعديل البيانات اما عن طريق التكس بوكس او عن طريق اداة datagridview اي داخلها فيما يخص الطريقه الاولئ نحن قمنا في دروس سابقه بتعديل البيانات عن طريق التكس بوكس اما نحن في هذا برنامجنا سوف نعدل البيانات عن طريق اداة datagridview لانه اذا قمنا بوضع تكس بوكس لتعديل البيانات سوف تصبح فورم الشراء buypill ملخبطه وكثيره الادوات عليها ونحن نريد نرتب الفورم بشكل يتناسب مع شكلها………. 🆔🔰 

اما مايخص كيف نضيف المورد الى فاتورة الشراء ؟ سوف نقوم بانشاء فورم خاص بالمورد لنستدعي من خلاله الموردين… 

 🔸قد يسئل سائل ويقول نحن قمنا بانشاء فورم خاص الموردين ؟ اقول له نعم قمنا بانشاء خاص بالموردين ولكن عندما قمنا بانشاء فورم ثاني خاص بالمورد في فاتورة الشراء هذا فقط لتحميل بيانات المورد اي نستدعي بياناته من الفورم الرئيسي lmporters ونحمل بياناته في الفورم الذي قمنا بانشائه في فورم فاتورة الشراء buypill…… والبيانات الخاصه بالمورد التي نحتاجها في فورم فاتورة الشراء هي اسم المورد ورصيده وهاتفه…… اتمنى وصلت الفكره الخاصه بتحميل بيانات المورد في فاتورة الشراء buypill وسيتضح لكم كل شي عند تصميم فاتورة الشراء buypill…… 🆔🔰 

اما مايخص الحسابات التي تطرقنا لها في درس سابق سوف نقوم ببرمجتها وكتابه اكوادها ان شاء الله…

🔰متطلبات فاتورة الشراء buypill… 

 📍نحتاج الى الادوات التاليه :

 1⃣ ـ Button عدد 5 نسمي كل واحد منهم كالتالي ➖ حفظ الفاتورة ➖فاتورة جديدة ➖ حذف الصنف ➖اضافة صنف ➖ـ •••••

 2⃣ تكس بوكس Textbox عدد 11 7 منها للحسابات 1 المورد 1 تسلسل 1 رقم الفاتورة 1 للمستخدم يصبح العدد 👆👆👆 11 📍نغير اسماء برمجياً 1 التسلسل نمسيه buyld 2 رقم الفاتورة نسميه buylnvoiceno 3 المورد نمسيه Buylmporter 4 المستخدم نسميه buyuser 

 ⚠️ملاحظه نضع امام تكس بوكس label للتسميات كما موضح اعلاه 📍نغير اسماء تكس بوكس برمجياً الخاصه بالحسابات (7) كما يلي : Buytotalg ➖اجمالي الجمهور Buytotalp ➖اجمالي الشراء Buyltemcount ➖عدد الاصناف Buyearn ➖الربح المتوقع Buyearnpercent➖نسبه الربح المتوقع Buyadd ➖اضافه الاصناف Buyminus ➖الخصم 

 ⚠️ملاحظه نضع امام كل تكس بوكس label للتسميات كما موضح اعلاه

     3⃣ نضع اداة DateTimePicker عدد 2 واحد للتاريخ واحد للوقت 📍نغير اسماء برمجياً التاريخ ➖ نسميه buydate الوقت ➖ نمسيه 

buytime 4⃣ اداة Datagridview لعرض البيانات عليها…. 5⃣ ندرج ايضا اداة CheckBox عدد 2 واحد منهم للكاش والثاني اجل 📍نغير اسماء برمجياً كاش نسميه Buycash اجل ونسميه Buypostpone 6⃣ نضيف label عدد 4 ونسميهم تسميه ليس برمجياً كالتالي :- 1 التليفون 2 الرصيد الحالي 3 اسمه 0 4 اسمه 0 بحيث الرصيد الحالي امامه 0 والرصيد امامه 0 وكما مبين لكم في الصوره يصبح شكل الفورم كما في الصورة  .

 شكل الفورم النهائي لفاتورة الشراء buypill

تصميم و برمجة فاتورة الشراء

.

 الان  نكمل احد اجزاء الفاتورة وهو راس الفاتوره على جهة اليمين في الاعلى الخاص بالموردين .

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

mainpage.vb
	  
Buypill.MdiParent = Me


Buypill.WindowState = FormWindowState.Maximized


Buypill.Show()

	

لاحظ ترتيب الكود اعلاه كما في صورة رقم 2 

تصميم و برمجة فاتورة الشراء

 🌆لاحظ ايضا عند تنفيذ البرنامج سترى تم اضافة قائمة المشتريات وفاتورة الشراء في فورم الرئيسي manipage كما في صورة رقم 3

تصميم و برمجة فاتورة الشراء

 🔰طيب الان نريد ان نستدعي فورم الموردين في فاتورة الشراء بحيث نختار اي اسم مورد ان ندرجه في فاتورة الشراء……. 

 ✅الخطوات نقوم باضافة فورم خاص بتحميل بيانات المورد التي من خلالها نحمل كافه بيانات المورد وتفاصيله ندرج فورم ونسميه lmporter_Search وندرج على الفورم اداة dataGridView لتحميل البيانات عليها وايضا ندرج تكس بوكس textbox واحد و button واحد ونسميه تسميه غير مبرميجا اسم اختيار 🌆بحيث يصبح الفورم الخاص بتحميل الموردين كما في صورة رقم 4 

تصميم و برمجة فاتورة الشراء

 🔰ثم نذهب إلى فورم فاتورة الشراء Buypill ونضغط على بوتن بجنب تفاصيل المورد الذي قمنا بتسميته بعلامه نقاط •••••••• والذي من خلاله عند ضغط عليه تضهر لدينا فورم lmporter_Search عند الضغط على البوتن نكتب الكود التالي :

Buypill.vb
	  
lmporter_search.ShowDialog()
	

لاحظ ترتيب كود استدعاء فورم lmporter_Search كما في صورة رقم 5 

تصميم و برمجة فاتورة الشراء

 🔰نحمل جدول بيانات المورد وتفاصيله من خلال ضغط على فورم lmporter_Search وفي حدث الود load نكتب الكود التالي :

lmporter_search.vb
	  
load_lmporters()


DataGridView1.DataSource = lmportersdt
	

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

تصميم و برمجة فاتورة الشراء

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

تصميم و برمجة فاتورة الشراء


 🔰ربطنا فورم lmporter_Search بالبوتن ••••••• نريد عند الضغط على اي معلومه خاصه بالمورد المحملة على اداة datagridview يظهر لدينا اسم المورد على تكس بوكس بجنب بوتن ••••••• وبنفس الوقت نريد عند الضغط على زر اختيار في فورم lmporter_search يظهر التليفون الخاص بالمورد وياخذ مكان قميه الليبل 0 تليفون المورد وايضا يظهر الرصيد الحالي الخاص بالمورد مكان قيمة 0 بجانب الليبل 

 🔰اذن نحتاج الى ثلاث اكواد لاظهار اسم مورد على تكس بوكس التليفون الخاص بالمورد مكانه ليبل 0 الرصيد الحالي بالمورد مكانه ليبل 0 

 🔰اذن نحدد اداة datagridview ومن الخصائص نختار الاحداث ونختار حدث SelectionChanged ثم ننقر عليه نقرتين على الحدث ونكتب الاكواد الثلاثه كالتالي :

lmporter_search.vb
	  
Try



'لاضهار اسم المورد


Buypill.Buylmporter.Text = DataGridView1(1, DataGridView1.CurrentRow.Index).Value



'لاضهار التليفون

Buypill.Label4.Text = DataGridView1(2, DataGridView1.CurrentRow.Index).Value


'لاضهار الرصيد الحالي

Buypill.Label3.Text = DataGridView1(5, DataGridView1.CurrentRow.Index).Value
Catch ex As Exception


End Try
End Sub
	

🌀⚙شرح الكود

  عملنا داله Try لمنع خطا عند تنفيذ البرنامج في السطر الأول الخاص بتحميل اسم المورد على تكس بوكس مثل ماتعرف اخي المبرمج ترتيب حقل اسم المورد على اداة datagridview 1 لذلك اعطينا قميه 1 في سطر ثاني الخاص اضهار التليفون الخاص بالمورد كتبنا Buyill ثم Label4 لان اسم الليبل 0 بجانب التليفون اسمه برمجيا ليبل 4 ثم ترتيب حقل التليفون على اداة datagridview هو 2 في سطر ثالث كود الخاص باضهار الرصيد الحالي للمورد هو نفسه كود اظهار تليفون المورد ولكن فقط اختلف لدينا ليبل اسمه label3 وترتيب حقل الرصيد الحالي على اداة datagridview هو 5 

 📍هذا كل مافي الاكواد الثلاثه لاحظ ترتيب الاكواد الثلاثه كما في الصورة  

تصميم و برمجة فاتورة الشراء

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

 🔰نريد عند اختيار بيانات مورد معين وضغط على زر خيار يغلقلي نافذة lmporter_Search وذلك من خلاله كتابه كود على زر اختيار الموجود على فورم lmporter_search كالتالي

lmporter_search.vb
	  
Me.Close()
	

لاحظ صور عند تنفيذ البرنامج كما في الصور .

تصميم و برمجة فاتورة الشراء

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



 صورة رقم  عند اختار اسم مورد معين وضغط على زر اختيار سوف يتم اغلاق نافذة lmporter_search ويظهرلي بيانات مورد على تكس بوكس وليبل… ..


الان نحتاج إلى تحميل حقول جدول buypill في قاعدة البيانات ولكن هذه الحقول الموجوده في جدول buypill نحتاج قسم منها اي نحتاج بعض من هذه الحقول لكن السوال كيف نعمل ذلك؟ مثل ما تعرفون اكو شي اسمه تقرير وعلاقات بين الجداول في الاكسس وساشرح ذلك في درس قادم…… . اذن نذهب إلى مديول الخاص بنا وننشئ متغيرات للداتا تيبل وداتا ادبتر و ld للترقيم التلقائي و Code لجلب اعلى رقم في جدول وايضا لود load لتحميل بيانات الجدول 

 📍انشاء متغيرات للداتا تيبل وداتا ادبتر و ld خاصه بفورم فاتورة الشراء Buypill نكتب الكود التالي :

Module1.vb
	  

Public buypilldt As New DataTable


Public buypillda As New OleDbDataAdapter


Public mynewldbuypill As Integer
	

انشاء اجراء خاص باللود load

Module1.vb
	  

Public Sub load_buypill()


buypilldt.Clear()


buypillda = New OleDbDataAdapter("select * from buypill", con)


buypillda.Fill(buypilldt)


End Sub
	

انشاء اجزاء خاص بالكود Code

Module1.vb
	  

Public Sub code_buypill()


Dim dt As New DataTable


Dim da As New OleDbDataAdapter("select max(buyld) from buypill", con)


da.Fill(dt)


If IsDBNull(dt(0)(0)) = True Then


mynewldbuypill = 1


Else


mynewldbuypill = dt(0)(0) + 1


End If


End Sub
	

🌆لاحظ ترتيب الاكواد الثلاثه اعلاه في المديول كما في صورة رقم صورة رقم  اكواد الثلاثه

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


 نذهب إلى فورم فاتورة الشراء ونضغط عليه نقرتين وفي حدث اللود load نكتب الكود التالي :

Buypill.vb
	  

Load_buypill()

DataGridView1.DataSource = buypilldt
	

⚠️ملاحظه 

هذا الكود اعلاه لا نحتاجه لكن فقط نجرب به زر الحفظ الذي سوف نقوم بانشاءه بعد قليل 

 🔰نقوم بانشاء اجراء خاص بتفريغ التكس بوكس من البيانات ننقر نقرتين على فورم فاتورة الشراء وتحت عنوان public Class ننشئ الاجراء ويصبح الكود كالتالي :-

Buypill.vb
	  

Public Sub newpuybill()


code_buypill()

Buyadd.Text = 0

Buycash.Checked = True

Buydate.Text = Now.Date

Buyearn.Text = 0

Buyearnpercent.Text = 0

Buyld.Text =

mynewldbuypill

Buylmporter.Text = ""

Buylnvoiceno.Text = ""

Buyltemcount.Text = 0

Buyminus.Text = 0

Buypostpone.Checked =
False

Buytime.Text = Now

Buytotalp.Text = 0

Buytotalg.Text = 0

Buyuser.Text = ""

End Sub
	

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

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

نستدعي هذا الاجراء في حدث اللود load نكتبه ()newpuybill وايضا ننقر نقرتين على زر فاتورة جديده ونكتبه )()newpuybill وايضا ننقر نقرتين على زر حفظ الفاتورة ونكتبه ()newpuybill

🔰 برمجة زر حفظ الفاتورة ايضا نقوم بانشاء اجراء خاص بالحفظ ويصبح الكود كالتالي :

Buypill.vb
	  

Public Sub save_buypill()


buypilldt.Rows.Add()


Dim last As Integer = buypilldt.Rows.Count - 1


buypilldt.Rows(last).Item
("Buyadd") = Buyadd.Text


buypilldt.Rows(last).Item
("Buycash") = Buycash.Checked


buypilldt.Rows(last).Item
("Buydate") = Buydate.Value



buypilldt.Rows(last).Item
("Buyearn") = Buyearn.Text


buypilldt.Rows(last).Item
("buyearnpercent") = Buyearnpercent.Text


buypilldt.Rows(last).Item
("Buyld") = Buyld.Text


buypilldt.Rows(last).Item
("Buylmporter") = 
Buylmporter.Text


buypilldt.Rows(last).Item
("Buylnvoiceno") = Buylnvoiceno.Text


buypilldt.Rows(last).Item
("Buyltemcount") = Buyltemcount.Text


buypilldt.Rows(last).Item
("Buyminus") = Buyminus.Text



buypilldt.Rows(last).Item
("Buypostpone") = Buypostpone.Checked


buypilldt.Rows(last).Item
("Buytime") = Buytime.Value


buypilldt.Rows(last).Item
("Buytotalp") = Buytotalp.Text


buypilldt.Rows(last).Item
("Buytotalg") = Buytotalg.Text


buypilldt.Rows(last).Item
("Buyuser") = Buyuser.Text


Dim save As New OleDbCommandBuilder
(buypillda)


buypillda.Update(buypilldt)


buypilldt.AcceptChanges()


End Sub
	

لاحظ ترتيب الكود كما في صورة رقم 

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

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

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

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



 سنقوم الآن بانشاء جدول خاص بفاتورة الشراء…

طيب كيف نقوم بانشاء هذا الجدول ؟ هل نقوم بانشاء جدول وحقول جديدة ؟ الجواب كلا…… 

 📍لنرجع الى قاعدة بيانات في الاكسس سنلاحظ وجود عدة جداول وسنقوم بانشاء جدول من هذا الجداول خاص بفاتورة الشراء كيف ذلك؟ 

 📍يوجد شي في الاكسس اسمه تصميم الاستعلام من خلاله نقوم بانشاء علاقة بين الجداول ونحن سنقوم بانشاء علاقه بين جدولين هما جدول الاصناف ltems وجدول operations……… 

 📍اذن سوف تكون العلاقه بين الجدولين بين الحقلين حقل ltemname من جدول ltems و حقل operltem من جدول operations بحيث خط متصل بين الجدولين بين هذين الحقلين… بعد ذلك نقوم باختيار الحقول التي نريدها من هذه الجدولين وبالتالي يصبح لدينا استعلام او جدول خاص بفاتورة الشراء…… 

 🔸طيب كيف نقوم بانشاء هذا الاستعلام ؟ نذهب الى قاعدة بيانات اكسس الخاصه ببرنامجنا السوبر ماركت نفتحها ومن شريط القوائم الخاص بالاكسس نختار انشاء ومن المجموعات نختار تصميم الاستعلام وستظهر لدينا نافذة الاستعلام وفيها جميع الجداول نختار منها جدولين ltems و operations ونضغط على اضافة… بعد ذلك نصل بين حقل ltemname الى حقل Operltem وذلك من خلال السحب والافلات بعد ذلك يصبح لدينا علاقه بين الجدولين بخط موصل بين الحقلين ثم نقوم باختيار الحقول التي نريدها والتي ستظهر بفاتورة الشراء وذلك من خلال النقر نقرتين على الحقل وسيسقط تلقائيا تحت العلاقه 

 🔸وسنختار الحقول التاليه التي نريدها ونحتاجها في فاتورة الشراء وهي كالتالي :- Operld buyld Operltem ltemprice ltemqty ltemplace buyqty buytotalg buydisconund buyuintprice buytotalb buyearn buynotes Operdate Opertime Operuser بعد اختيار جميع الحقول اعلاه المطلوبه نضغط على حفظ ونسمي الاستعلام buyQ ويصبح لدينا استعلام خاص بفاتورة الشراء . لاحظ انشاء العلاقه بين الجدولين كما في الصور التاليه : 

 صورة رقم 1 انشاء علاقه بين جدولين

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

 صورة رقم 2 تكملة انشاء علاقه بين جدولين 

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

 صورة رقم 3 تكملة انشاء علاقه بين جدولين 


 صورة رقم 4 تكملة انشاء علاقه بين جدولين قمنا باسقاط الحقول التي نريدها ونحتاجها في فاتورة الشراء

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





 

صورة رقم 5 تكملة اسقاط الحقول التي نريدها ونحتاجها في فاتورة الشراء 



 صورة رقم 6 تكملة اسقاط الحقول التي نريدها ونحتاجها في فاتورة الشراء

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

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

 بعد ما قمنا بانشاء علاقه وجدول خاص بفاتورة الشراء (استعلام) الان نريد ان نربط هذا الجدول او الاستعلام بفورم فاتورة الشراء Buypill كيف ذلك ؟ 

 📍نذهب الى فورم فاتورة الشراء وسنقوم بانشاء اجراء خاص بتحميل حقول جدول الاستعلام… قد يسئل سائل ويقول لماذا ننشئ اجراء لتحميل هذا الاستعلام ؟ الجواب لانه سوف نحتاج هذا الاجراء كثيرا ومتعارف عليه عندما نريد ان نحمل بيانات اي جدول نقوم بانشاء كود في لود load نفسه ولكن ليس من المعقول عندما نحتاج هذا جدول في نفس الفورم نقوم بكتابه نفس الكود الخاص بتحميل بيانات جدول الاستعلام لذلك عزيزي المبرمج يجب ان تفهم ان انشاء الاجراء نستطيع ان نستخدمه على الفورم نفسه في اي مكان في الفورم نفسه اما المديول فهذا يمكننا ان نستخدمه علئ مستوى المشروع باكملة…… . 

 📍اذن نقوم بانشاء اجراء ونسميه loadbuyQ ونكتب الكود التالي :

Buypill.vb
	  
Public Sub loadbuyQ()


Try


Dim dt As New DataTable


Dim da As New OleDbDataAdapter


dt.Clear()


da = New OleDbDataAdapter("SELECT operations.operld, operations.buyld, operations.operltem, operltemexp, ltems.ltemprice, ltems.ltemqty, ltems.ltemplace, operations.buyqty, operations.buytotalg, operations.buydisconund, operations.buyunitprice, operations.buytotalb, operations.buyearn, operations.buynotes, operations.operdate, operations.opertime, operations.operuser FROM ltems , operations where ltems.ltemname=operations.operltem and buyld = " & Buyld.Text & "", con)


da.Fill(dt)
DataGridView1.DataSource = dt


Catch ex As Exception


MsgBox(ex.Message)


End Try


End Sub
	
Buypill.vb
	  Public Sub loadbuyQ()
	  Try
	  Dim dt As New DataTable
	  Dim da As New OleDbDataAdapter
	  dt.Clear()
	  da = New OleDbDataAdapter("SELECT operations.operld, operations.buyld, operations.operltem, operltemexp, ltems.ltemprice, ltems.ltemqty, ltems.ltemplace, operations.buyqty, operations.buytotalg, operations.buydisconund, operations.buyunitprice, operations.buytotalb, operations.buyearn, operations.buynotes, operations.operdate, operations.opertime, operations.operuser FROM ltems , operations where ltems.ltemname=operations.operltem and buyld = " & Buyld.Text & "", con)
	  da.Fill(dt)
	  DataGridView1.DataSource = dt
	  Catch ex As Exception
	  MsgBox(ex.Message)
	  End Try
	  End Sub
	  
	

⚙🌀شرح الكود

 قمنا بانشاء داله try لمنع حدوث أي خطأ ثم عرفنا داتا تيبل dt وداتا ادبتر da وهذا متعارف عليه سابقه ثم فضينا dt وجعلنا da تساوي داتا ادبتر ثم بين قوسين كتبنا جملة Select والحقول التابعه لجدول الاستعلام ثم كتبنا اداة datagridview تساوي داتا سورس وتساوي dt وبعدها msgbox وفائدتها عند حدوث خطا ستظهر لنا رساله ثم انهينا جملة الاجراء end sub 

 لاحظ ترتيب الكود اعلاه كما في صورة رقم 

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

 ⚠️ملاحظه اخي المبرمج اذا حدث لك مشكلة عند تنفيذ البرنامج ولم تظهر حقول الاستعلام بفاتورة الشراء فاتبع الطريقه التاليه : اذهب الى الاستعلام الذي قمنا بانشاءه في جدول operations وافتح الاستعلام buyQ واضغط على اسم الاستعلام في جهة اليمنئ واختار خيار طريقة عرض SQL وسيظهر لك الكود الخاص بجميع الحقول قم بتحديده ونسخه باكملة 🌆 كما في صورة رقم 

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


… 

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



ثم اذهب الى الاجراء الذي قمنا بانشاءه ونفس الكود وبعد جملة select قم بنسخ الكود وعند نسخ الكود ستلاحظ وجود اقواس زائده وكلمات ايضا زائده مثلا lnner، JoIn ، on , and , هذه كلها زائده قم بمسحها بحيث يصبح الكود الذي قمته بنسخه مثل الكود الذي قمت انا بشرحه قبل قليل ولذلك وضعت لكم صوره مقارنه بين الكود الذي وضعته انا والكود الذي قمتم بنسخه من الاستعلام كل الي عليكم ان تجعلوا كود الذي قمتم بنسخه مثل الكود الذي وضعته لكم وشرحته……. 

لاحظ الصوره رقم 

تصميم و برمجة فاتورة الشراء

لـ فرق بين كودين كود الذي وضعته انا والكود الذي سوف تقومون بنسخه من الاستعلام…… . هذا في حاله حدوث مشكلة اما اذا لم تحدث مشكلة عند تنفيذ البرنامج وظهرت حقول الاستعلام بفاتورة الشراء باستخدام كود الذي وضعته لكم فلا اشكال في ذلك .

⚠️ ملاحظه
 عندما تطبقون كود الذي قمت بوضعه انا ولم تحدث مشكلة فهذا جيد اما حدث مشكلة وقمت بتطبيق الطريقه الثانيه باستخدام كود SQl الذي قمتم بنسخه من الاستعلام وبعد ذلك ضبطه معكم الكود بعد مسح كلمات والاقواس الزائده كما في مقارنه بين كودين في صوره وعند انتهاء من كتابتكم للكود سترون حقل لم يتم ادراجه عند نسخكم كود من الاستعلام SQL وانا قمت بادراجه ضمن الحقول في جملة select وبعد حقل operltme قموا بكتابه حقل operltemexp حتى يصبح جدول الخاص بفاتورة الشراء كامل…… 🌆لاحظ كتابه حقل operltemexp كما في صوره رقم 5
تصميم و برمجة فاتورة الشراء

الفرق بين الكودين بعد الانتهاء من انشاء اجراء خاص بجدول فاتورة الشراء نقوم باستدعاء هذا الاجراء في حدث اللود load فروم ونكتبه ()loadbuyQ ونضعه ايضا في زر فاتورة جديده وفي زر حفظ الفاتورة…… 

 ⚠️ملاحظه نقوم بمسح الكود الذي وضعناه في حدث اللود load فروم وهو

DataGridView1.DataSource = buypilldt

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

تصميم و برمجة فاتورة الشراء

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

في الاجزاء السابقة انتهينا من تصميم فورم lmporter_search خاص بتحميل بيانات الموردين وايضا قمنا بانشاء علاقه بين جدولين هما ltems وجدول operations لكي ننشئ استعلام خاص بجدول فاتورة الشراء وبالتالي اصبح لدينا فورم فاتورة الشراء جاهزه لبرمجتها وادخال البيانات وحفظها داخل جدول الاستعلام الذي قمنا بانشاءه…….. 

 🔰 كيف نضيف الاصناف الى فاتورة الشراء ؟ 

 الجواب نستطيع ان نضيف الاصناف ltems الئ فاتورة الشراء من خلال فورم الاصناف ltems بواسطه فورم جديد نقوم باضافته الئ فورم فاتورة الشراء اي سنقوم بانشاء فورم خاص بتحميل بيانات الاصناف ونستدعيها من خلال فورم فاتورة الشراء كما فعلنا عند تحميل بيانات الموردين .

 🔰نقوم باضافة فورم ونسميه ltem_search وراح يكون فيها كالتالي :- 

 🔸الكمية التي من خلالها نختار الكميه من الاصناف التي نريد ان نبيعها 

 🔸الخصم اذا اردنا ان نضيف خصم على صنف للزبون 🔸الصلاحيه اي تاريخ بيع الصنف 

 🔸ملاحظات اذا اردنا اضافة اي ملاحظات على صنف 🔸ايضا راح يكون فيها بحث عن الاصناف من خلال Textbox وراح يكون البحث كالتالي :- ➖ بحث بالباركود ➖ بحث بالرقم ➖ بحث بالاسم 

 🔸ايضا راح يكون فيها 8 ليبلات label لحساب الاتي : ➖حساب اجمالي الجمهور ➖حساب اجمالي الشراء ➖حساب سعر الوحدة ➖الربح الفائدة من هذا الليبلات هي بمجرد اختيار كمية لصنف معين سوف يقوم بالحسابات الاربعه اعلاه اي يحسب الكمية المشتراه في سعرها وايضا اجمالي الشراء ويظهر سعر الوحده وعند اضافة خصم سوف يحسب الربح 

🔰اذن سوف ندرج الادوات التالية على الفورم : 

 1⃣ اداة Textbox عدد 4 ونغير تسميه كل واحد منهم برمجيا كالتالي :- ➖الكمية ونسميها qtyin ➖ الخصم ونسميه discoundin ➖الصلاحيه ونسميها Exp ➖ملاحظات ونسميها notes ونضع امام كل Textbox ليبل label ونسميها كما اعلاه حتى نعرف كل تكس بوكس……

 2⃣ايضا ندرج Textbox واحد للبحث عن الاصناف وندرج ايضا اداة RadioButton ثلاثه للبحث عن الاصناف كالتالي :- ➖بحث بالباركود ➖ بحث بالرقم ➖ بحث بالاسم وتبقى الاسماء برمجيا كما هي لا نغيرها فقط نغير اسم اداة RadioButton للاثلاثه التي اضفناها 

 3⃣ نضيف label عدد 8 خاصه بالحسابات الاربعه التي تكلمنا عنها ولا يحتاج إلى تغير اسمائها برمجيا تبقى نفس اسمها ولكن نغير الاسماء ليس برمجيا بحيث تصبح الليبلات 8 كما يلي :- ➖ليبل الاول نسميه اجمالي الجمهور ➖ ليبل الثاني نسميه اجمالي الشراء ➖ليبل الثالث نمسيه سعر الوحدة ➖ليبل الرابع نسميه الربح فيصبح مجموع ليبلات بعد تسميه 4 ثم نضع امام كل من الليبلات اعلاه ليبل امامها ونغير الاسماء الئ 0 بحيث تضهر ع فورم امام كل حساب 0 

 4⃣نضع اداة datagridview لتحميل البيانات عليها ثم نضع Button واحد ونسميه اختيار بحيث عند اختيار الصنف والكمية والخصم والصلاحيه والملاحظات ونضغط على زر خيار فيحول البيانات علئ فورم فاتورة الشراء…….. 

يصبح الفورم النهائي ltem_search كما في صورة رقم 

تصميم و برمجة فاتورة الشراء

تصميم و برمجة فاتورة الشراء

 … ..بعد ما انتهينا من تصميم فورم الخاص بتحميل الاصناف سنقوم بتحميل بيانات الاصناف……… 

 🔰 اولا سنربط فورم ltem_search بفورم فاتورة الشراء لو رجعنا إلى فاتورة الشراء سنجد زر اسمه اضافة صنف ننقر عليه نقرتين ونكتب الكود التالي :

Buypill.vb
	  
	
ltme_search.ShowDialog()
	

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

 🔰ثانيا تحميل بيانات الاصناف علئ فورم ltem_search… ننقر نقرتين على فورم ltem_search وفي حدث اللود load نكتب الكود التالي : ======تحميل بيانات الاصناف

ltem_search.vb
	  

load_ltmes()


DataGridView1.DataSource = ltmesdt
	

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

  صورة رقم 1

تصميم و برمجة فاتورة الشراء

نفذنا البرنامج وضغطنا على اضافة صنف 

 صورة رقم 2

تصميم و برمجة فاتورة الشراء

بعد ان قمنا بالضغط على اضافة صنف ضهرت لدينا فورم ltem_search وتم تحميل بيانات الاصناف عليها صورة رقم 3
تصميم و برمجة فاتورة الشراء

لفورم ltem_search بيانات الاصناف


 🔰في الجزاء السابق انتهينا من تصميم فورم ltem_search الخاص بتحميل بيانات الاصناف ومن خلالها نستطيع اضافة الصنف وكميته وسعره وملاحظاته وجميع بيانات الصنف علئ فاتورة الشراء وايضا قمنا بتحميل بيانات الاصناف علئ الفورم……

… 📍 الان نكمل  وسنتكلم ونبرمج البحث داخل فورم ltem_search ، والبحث سيكون بثلاثه انواع : البحث بالرقم البحث بالباركود البحث بالاسم اي نبحث داخل الفورم عن الصنف بثلاثه طرق و لو رجعنا لتصميم فورم ltem_search نلاحظ وضعنا 3 RadioButton التي من خلالها نبحث عن الصنف وسمينا كل واحده منها للبحث عن الاصناف…….. 

 📍اما انت عزيزي المبرمج فلك الحريه في اختيار نوع البحث المناسب لك وانا شرحت ذلك في عده دروس سابقه 📍اذن نبرمج هذه الانواع من البحث وسنضع الكود داخل Textbox الخاص بالبحث اي ننقر نقرتين عليه ونكتب الاكواد الثلاثه واحد تلو الاخر وكما يلي : 1⃣البحث بالرقم اي نبحث عن الصنف من خلال رقم عند تسلسل الحقول ويكون الكود كالتالي : '======== بحث بالرقم

ltem_search.vb
  

If RadioButton1.Checked =
True Then


Try


If TextBox1.Text 
  Nothing Then


  ltmesdt.Clear()


  ltmesda = New
  OleDbDataAdapter("select * from ltems where ltemld = " & TextBox1.Text & "", con)
  ltmesda.Fill(ltmesdt)


  Else


  load_ltmes()


  End If


  Catch ex As Exception


  End Try


  End If

2⃣ البحث بالباركود ايضا ننقر نقرتين على تكس بوكس textbox الخاص بالبحث ونكتب الكود التالي : =========== بحث بالباركود

ltem_search.vb
  
  If RadioButton2.Checked =

  True Then


  Try


  If TextBox1.Text 
	Nothing Then


	ltmesdt.Clear()


	ltmesda = New OleDbDataAdapter("select * from ltems where ltembarcode = '" & TextBox1.Text & "'", con)
	ltmesda.Fill(ltmesdt)


	Else


	load_ltmes()

	End If

	Catch ex As Exception

	End Try

	End If

  
3⃣ البحث باالاسم ننقر نقرتين على تكس بوكس textbox الخاص بالبحث ونكتب الكود التالي : ========== بحث بالاسم ltem_search.vb
  
	If RadioButton3.Checked = True Then


	Try


	If TextBox1.Text <>
	  Nothing Then


	  ltmesdt.Clear()

	  ltmesda = New OleDbDataAdapter("select * from ltems where ltemname like '%" & TextBox1.Text & "%'", con)
	  ltmesda.Fill(ltmesdt)


	  Else


	  load_ltmes()


	  End If

	  Catch ex As Exception


	  End Try


	  End If

	  End Sub

	

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

 لاحظ ترتيب الاكواد الثلاثه كما في صورة رقم 

تصميم و برمجة فاتورة الشراء



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

……… 

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

 🔰 برمجة و حساب الحسابات وهذه الحسابات كالتالي :- 📍اجمالي الجمهور Total 

 📍اجمالي الشراء Totalb 

 📍اجمالي الشراء للوحدة unitprice 

 📍الربح المتوقع earn ➖ حساب اجمالي الجمهور ويحسب بضرب الكمية في السعر اي كل كمية تضرب في سعرها وبالتالي يعطينا اجمالي الجمهور في تكس بوكس……

Total = qty * price

➖ حساب اجمالي الشراء وهو عباره عن ناتج اجمالي الجمهور ناقص ناتج مضروب بين قوسين ( اجمالي الجمهور في الخصم وكما في المعادله التاليه :

Totalb = Total - (Toatl * discound)

➖ حساب الربح المتوقع ويحسب

earn = total - Totalb

اي هو ناتج اجمالي الجمهور ناقص اجمالي الشراء ➖ حساب اجمالي الشراء للوحده وهو عباره عن اجمالي الشراء تقسيم الكمية وتحسب كما في المعادلة التالية :

Unitprice = totalb / qty

🔰تعديل الصنف وتفاصيله نحتاج الى تعديل البيانات مرتين وكالتالي 1⃣ تعديل الحقول التي تحتاج الى تعديل بعد الاضافة وهي حقل الكمية buyqty حقل الخصم buydisconund حقل الملاحظات notes حقل الصلاحية 2⃣ تعديل الحسابات اي عند تعديل الكمية اوتوماتيكيا سوف تتغير الحسابات وكذلك عند تغير الخصم ايضا ستتغير الحسابات تلقائيا 

 📍بعد اضافة الصنف علئ داتا كراند فيو نريد ان نعدل مثلا كمية معينه او خصم معين او ملاحظات…… 

 هناك طريقتين لتعديل الصنف اما عن طريق الداتا كراند فيو datagridview او عن طريق تكس بوكس TextBox نحن قمنا عدة مرات بشرح تعديل البيانات عن طريق Textbox وفي مشروعنا هذا سنعدل البيانات عن طريق اداة datagridview وسنرى كيف يتم ذلك ان شاء الله…… 

 📍ماهي الحقول التي نريد تعديلها بعد الاضافة ليس من المعقول ان نعدل كل الحقول وانما فقط الحقول التي تحتاج إلى تعديل والحقول التي تحتاج إلى تعديل بعد اضافة الصنف كالتالي :- ➖ حقل الكمية buyqty مثلا عندما نختار صنف معين ونريد بيع كمية معينه وبعد الاضافة نريد ان نعدل على الكمية ويتم التعديل من خلال من داخل داتا كراند فيو datagridview .... ➖ حقل الخصم buydisconund ايضا نعدل كل الخصم بعد الاضافة من داخل داتا كراند فيو datagridview ..... ➖ حقل الصلاحيه نعدل على الصلاحيه بعد الاضافة من داخل داتا كراند فيو datagridview…… . ➖حقل الملاحظات ايضا نعدل على الملاحظات من داخل داتا كراند فيو datagridview بعد الاضافة…… هذه الحقول التي نعدل عليها بعد الاضافة من داخل داتا كراند فيو datagridview…… 

 📍تعديل الحسابات داخل اداة datagridview تلقائيا عند تعديل كمية صنف معين سوف تتغير الحسابات تلقائيا دون تدخل منا والحسابات او الحقول التي تتغير تلقائيا بعد تعديل على صنف كالكمية كالتالي :- ➖ حقل اجمالي الشراء Total ➖ حقل اجمالي الجمهور Totalb ➖ حقل الخصم buydisconund ➖ حقل الربح المتوقع earn 

 وسيتضح لكم كل شي اثناء كتابه الاكواد

    📍قبل كل شي نقوم بانشاء اجراء خاص بتفريغ (نفضيه) البيانات من النصوص ننقر نقرتين على فورم ltem_search ونكتب الكود التالي :

ltem_search.vb
  

	  Public Sub newitem()


	  qtyin.Text = 0

	  discoundin.Text = 0

	  exp.Value = Now.Date

	  notes.Text = Nothing

	  End Sub

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

تصميم و برمجة فاتورة الشراء


 📍 في حدث اللود load الخاص بفورم ltem_search نكتب الكود التالي :

ltem_search.vb
  
	  RadioButton3.Checked = True

فائده هذا الكود هو عند البحث عن الاصناف ولابد من نختار نوع البحث سواء بالرقم او الباركود او الاسم ويجب ان يكون علامه اختيار على اي نوع من انواع البحث وهذه هي فائده الكود…… 

 📍وفي نفس الحدث اللود load نكتب الكود التالي :

ltem_search.vb
  
	  TextBox1.Text = Nothing

	  TextBox1.Focus()

السطر الأول هو جعل تكس بوكس الخاص بالبحث لا يساوي شي السطر الثاني هو جعل التكس بوكس textbox الخاص بالبحث يفلتر البيانات عند البحث 

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

 📍اذن نبدا علئ بركة الله نذهب الى فورم ltem_search وننقر نقرتين على زر خيار ونكتب الكود التالي :

ltem_search.vb
	  If qtyin.Text = 0 Then


	  MsgBox(" يرجى ادخال كمية مناسبه ")


	  qtyin.Focus()


	  ElseIf discoundin.Text = 0
	  Then

	  MsgBox(" يرجئ ادخال خصم مناسب")

	  discoundin.Focus()


	  ElseIf exp.Value = Now.Date Then


	  MsgBox(" يرجئ ادخال تاريخ اكبر من اليوم")


	  exp.Focus()


	  Else 
	  ==

	  '=======sava ltems


	  Dim itemname As String
	  = DataGridView1(2, DataGridView1.CurrentRow
	  .Index).Value


	  Dim dt As New
	  DataTable


	  Dim cmd As New OleDbCommand


	  dt.Clear()


	  cmd = New OleDbCommand("insert into operations (buyld,operltem,buyqty,buydisconund,buynotes,operltemexp,buytotalg,buytotalb,buyunitprice
	  ,buyearn) values (" & Buypill.Buyld.Text & ",'" & itemname & "'," & qtyin.Text & "," & discoundin.Text & ",'" & notes.Text & "',#" & exp.Value & "#," & Val(Label7.Text) & "," & Val(Label8.Text) & "," & Val(Label10.Text) & "," & Val(Label12.Text) & ")", con)


	  con.Open()


	  cmd.ExecuteNonQuery()


	  con.Close()


	  Buypill.loadbuyQ()
		  

⚙Ⓜ️ شرح الكود

      السطور التسعه في المقدمة وضعنا رسائل تاكيد على المستخدم ادخال البيانات علئ كل تكس بوكس ولا يتركها فارغه الفائده من هذه رسائل التاكيد عدم حدوث اخطاء وكذلك عدم اضافة صنف بدون كمية وخصم وصلاحيه… . عند تنفيذ البرنامج وذهاب الى اضافة صنف ثم تظهر فورم ltem_search وعند الضغط على زر اختيار بدون كتابه البيانات سوف تظهر للمستخدم رسائل تاكيد تجبره على كتابه البيانات في تكس بوكس…… اما مايخص بعد كلمة Else فهذا كود خاص بالاضافة الاصناف والحفظ داخل قاعدة البيانات اول سطر عرفنا متغير ltemname وحددنا ترتيب الحقل في داتا كراند فيو datagridview هو 2 ثم عرفنا متغيرات للداتا تيبل وداتا ادبتر ثم فضينا dt وبعدها وهو اهم شي هو Cmd هذا متغير عرفنا في بدايه الفورم ثم كتبنا جملة lnsert الخاصه بالحفظ وكتبنا الحقول بين قوسين التي نريد اضافتها في داتا كراند فيو datagridview وهي كالتالي (buyld,operltem,buyqty,buydisconund,buynotes,operltemexp,buytotalg,buytotalb,buyunitprice ,buyearn ثم وضعنا قيمه كل حقل مثلا حقل. buyqty اخذت قيمه " & qtyin.Text & " ولا ننسى علامات التنصيص اذا كان نص نستخدم علامات تنصيص " " واذا كان رقم مثل buyld نستخدم علامات تنصيص مع علامات كنتيشن '" "' وهكذا ثم غلقنا الاتصال ()con.Open وبعدها حملنا جدول الاصناف اي الاستعلام ( )Buypill.loadbuyQ……

 🌇لاحظ ترتيب الكود كما في صورة رقم  

تصميم و برمجة فاتورة الشراء

 ايضا وضعت لكم الكود كاملا في ملف نصي حتى ماتتعبوا في كتابه الكود وكذلك وضعت لكم فيديو لتجربه الاضافة وايضا لكي ترون الكود بالترتيب

شاهد بالفيديو كيف تم ترتيب كود الاضافة الخاص باضافة الاصناف



شاهد ايضا تجربه كود الاضافة واضفنا بيانات على اداة datagridview وتم حفظ البيانات في قاعدة البيانات


…..

…… 

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

  في الجزاء السابق انتهينا من اضافة الصنف وتفاصيله علئ داتا كراند فيو datagridview اليوم سنكمل الدرس ببرمجة الحسابات وايضا اضهار هذه الحسابات على الليبلات 8 التي وضعناها على فورم ltem_search… .. ⚠️

✅ لكن قبل ان نبرمج الحسابات واضهارها احب ان انوه على كود سطر برمجي جدا مهم واغلب الدروس القادمه سيكون موجود هذا السطر البرمجي وهو :

	  DataGridView1(3,DataGridView1.CurrentRow.Index).Value) 

لاحظ اخي المبرمج هذا الكود اعلاه ماذا فهمت منه لو ناتي علئ ترجمة الكود سوف يتضح بان كلمة datagridview عبارة عن داتا كراند فيو لاظهار البيانات عليها وكلمة CurrentRow عبارة عن حقل موجود في داتا كراند فيو datagridview وكلمة Value عبارة عن قيمة اذن الكود عبارة عن حقل موجود في داتا كراند فيو مع قيمته ولكن اهم شي في هذا الكود هو الرقم وبدون الرقم لا ينفع شي وفائده الرقم هو ترتيب الحقل علئ داتا كراند فيو او مكان او تسلسل الحقل علئ داتا كراند فيو وبالتالي ولمعرفة ترتيب او تسلسل اي حقل على داتا كراند فيو نبدا الحساب من الصفر… .. لناخذ مثال حتى يتضح كل شي لنفترض مثلا لدينا 5 حقول على داتا كراند فيو وكالتالي ld , name , phone, address, user انظر الى هذه الحقول الخمسة يبدا الترتيب من اليسار والحساب من الصفر اي لو اردنا معرفة ترتيب حقل phone على داتا كراند فيو سوف يكون رقمة 2 لماذا لانه الصفر لا يحسب في اول حقل وهو ld وهكذا هو من المفترض ان يكون رقمة 3 لانه بعده حقلين يصبح 3 لكن في البرمجة الرقم الاول لا يحسب وعندما اقول ان الصفر لا يحسب مو بمعنى لا ياخذ قيمته في البرمجة لا وانما الرقم الاول وهو 0 لا ياخذ بقيمته عند حساب الحقول بعده ولكن حقل 0 ياخذ بقيمته اذا تطلب ذلك…………

 ♻️ ولو رجعنا للكود الذي كتبناه اعلاه سنرى رقم 3 بين قوسين هذا الرقم هو ترتيب احد الحقول في داتا كراند فيو datagridview وسنرى هذا الكود يتكرر لدينا كثيراً لذلك اخي المبرمج يجب ان نفهم الكود افضل من كتابته وفهم الكود وتطبيقه سوف تتقن وتحترف البرمجة باسرع وقت ممكن…… 

 🔰🔰ايضا قبل برمجة الحسابات سنبرمج زر الحذف الموجود على فورم فاتورة الشراء…… 

 ننقر نقرتين على زر حذف صنف ونكتب الكود التالي :

Buypill.vb
			

	  Dim dt As New DataTable

	  Dim da As New OleDbDataAdapter

	  dt.Clear()

	  da = New
	  OleDbDataAdapter("delete from operations where operld = " & DataGridView1(0,DataGridView1.CurrentRow.Index).Value & "", con)


	  da.Fill(dt)


	  DataGridView1.DataSource = dt


	  loadbuyQ()


	  End Sub
		  

Ⓜ️⚙ شرح الكود

     عرفنا متغيرات للداتا تيبل و اول د بي دي داتا ادبتر وفضينا dt وبين قوسين كتبنا جملة الحذف delete في جدول operations بشرط where الحذف يكون عن طريق ld وهو اول حقل في داتا كراند فيو لذلك اخذ قيمه 0 لاحظ اخي المبرمج استخدمنا قيمه 0 لحقل operld الموجود على داتا كراند فيو لانه ترتيبه او تسلسله 0 ثم بعد ذلك جعلنا داتا كراند فيو تساوي داتا سورس وبعدها حملنا جدول الاستعلام loadbuyQ  لاحظ ترتيب كود الحذف كما في صورة 

تصميم و برمجة فاتورة الشراء

🔰 برمجة الحسابات عند اضافة الصنف علئ داتا كراند فيو datagridview وايضا برمجة اضهار هذه الحسابات على الليبلات 4 ➖حساب اجمالي الشراء ➖حساب اجمالي الجمهور ➖حساب اجمالي الشراء للوحدة ➖حساب الربح المتوقع وللتذكير التكستات بوكس التي وضعناها علئ فورم ltem_search الخاصه بالكمية والخصم اسمائها هي : الكمية اسمها برمجيا qtyin الخصم اسمه برمجيا discoundin حتى يتضح لكم الفرق بين هذه الاسماء وبين التي سوف نعرفها في متغير الخاص بالحسابات…… . 

 ⚠️يجب ان نكون دقيقين جدا في الحسابات…… . 

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

ltem_search.vb
	  public class ltem_search
		  

نقوم بانشاء اجراء خاص بالحسابات واضهارها على الليبلات 8 نقوم بانشاء اجراء عام ونسميه buycalculation ونكتب الكود التالي :

ltem_search.vb
			
	  Public Sub buycalculation()

	  ==== اجراء خاص بالحسابات
	 
	  
		   Try


	  Dim ltem As String

	  Dim qty, discound, price, unitprice, total, totalb, earn As Double


	  ltem = DataGridView1(2,DataGridView1.CurrentRow.Index).Value


	  qty = Val(qtyin.Text)


	  discound =
	  Val(discoundin.Text) / 100


	  price = DataGridView1(6, DataGridView1.CurrentRow
	  .Index).Value


	  total = qty * price
	  
	  
	  =================== 
	  حساب اجمالي الجمهور
	  
	  

	  totalb = total - (total * discound) '============= حساب اجمالي الشراء


	  unitprice = totalb / qty 
	  ==== حساب اجمالي الشراء للوحدة

	  earn = total - totalb '===================== حساب الربح لمتوقع

	  '===============اضهار الحسابات في الليبلات على فورم اضافة الاصناف
	  '========================
	  Label7.Text = total
	  ========= اضهار حساب اجمالي الجمهور في الليبل


	  Label8.Text = totalb '======= اضهار حساب اجمالي الشراء في الليبل


	  Label10.Text = unitprice '=========== اضهار اجمالي الشراء للوحدة في الليبل


	  Label12.Text = earn '================= اضهار حساب لربح المتوقع في لليبل


	  Catch ex As Exception

	  End Try


	  End Sub
		  

⚙Ⓜ️ شرح الكود

     وضعنا الكود تحت داله try لمنع حدوث أي خطأ ثم عرفنا متغير ltem ثم عرفنا متغيرات التاليه الكمية qty الخصم discound السعر price سعر الوحدة unitprice اجمالي الجمهور total اجمالي الشراء Totalb الربح earn ➖ثم جعلنا كل متغير وله قيمته مثلا متغير ltem اخذ قيمته من ترتيب الحقل في داتا كراند فيو وهو 2 بين قوسين وكما شرحت لكم متابعي القناه في بدايه حديثنا عن هذا الكود اعلاه الذي تكرر الان في هذا كود الحسابات ➖اما كمية qty اخذت قيمتها من Val من المدخلات التي يدخلها المستخدم في تكس بوكس اسمه qtyin ➖كذلك الخصم discound اخذ قيمته من Val من المدخلات التي يدخلها المستخدم في تكس بوكس اسمه discoundin ➖اما السعر price اخذ قيمته من ترتيب حقل في داتا كراند فيو وتسلسله هو 6 في داتا كراند فيو ولو راجعت اخي المبرمج ترتيب الحقول ستجد حقل السعر price في داتا كراند فيو هو 6 بدون اخذ قيمه اول حقل عند حسابه لانه قلنا صفر لا ليس له قيمه عند جمعه مع رقم ثاني… ➖ ثم جعلنا متغير total يساوي الكمية في السعر ➖ بعدها حسبنا اجمالي الشراء بالمعادلة التالية Totalb = Total - (Toatl * discound) ➖ وبعدها حسبنا اجمالي الشراء للوحده Unitprice = totalb / qty ➖ثم حسبنا الربح earn = total - Totalb ➖

⚠️ ثم اضهرنا الحسابات الاربعه على الليبلات 4 علئ فورم ltem_search ملاحظه اخي المبرمج يجب ان يكون اسم الليبل الموجود على فورم ltem_search يساوي احد الحسابات التي تظهر على على الفورم… . مثلا اجمالي الشراء الموجود علئ فورم ltem_search ومقابيله 0 يجب ان يكون اسم الليبل 0 يقابل احد الحسابات في الكود مثلا Label 7 اضهرنا عليه حساب اجمالي الجمهور total وهكذا…….. 

 🔰🔰⚠️ثم نقوم باستدعاء هذا الاجراء في حدث اللود load فروم ltem_search ➖ننقر نقرتين على تكس بوكس الكمية ونستدعي الاجراء ➖ ننقر نقرتين على تكس بوكس الخصم ونستدعي الاجراء ➖ ننقر نقرتين على اداة datagridview ومن الخصائص نختار الاحداث ونختار حدث selectionchanged ونستدعي الاجراء 🌇 لاحظ ترتيب كود الحسابات كما في صورة رقم 1 🌇ايضا وضعت لكم فيديو لعمليه الاضافة مع الحسابات واضهار الحسابات على الليبلات 8 صورة رقم 1 ترتيب كود الحسابات

تصميم و برمجة فاتورة الشراء

لاحظوا الكتابه باللون الاخضر في الصوره لكي تعرفوا معنى كل سطر من الكود

     فيديو يوضح كيف اضفنا صنف جديد مع حساب الحسابات الخاصه بالربح والخصم واجمالي الشراء واجمالي الجمهور وايضا كيف حذفنا الصنف


الان كيف نعدل على البيانات بعد اضافتها على فاتورة الشراء…… 

 🔰🔰 تعديل البيانات ((الحسابات + الحقول (الكمية + الخصم + الملاحظات + الصلاحية )) 

 📍كيف نعدل على البيانات بعد اضافتها علئ داتا كراند فيو ؟ 

 📍كيف نعدل الحسابات وهي داخل داتا كراند فيو ؟ 

 📍كيف نعدل على بعض الحقول التي نحتاجها ؟ 

 📍 كيف ننزل الحسابات على تكس بوكس اي نريد ان نجمع الحسابات وانزالها علئ تكس بوكس المخصص لها مثلا ياخذ كل حساب تكس بوكس الخاص به كالتالي : ➖تكس بوكس اجمالي الجمهور ➖تكس بوكس اجمالي الشراء ➖تكس بوكس عدد الاصناف ➖تكس بوكس الربح المتوقع ➖تكس بوكس نسبه الربح المتوقع 

 ⚠️ملاحظه تكس بوكس عدد الاصناف نقصد به كم صنف اشترينا او كم صنف على داتا كراند فيو….. 

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

…… 🔸 تعديل البيانات من اداة datagridview كيف نعدل على الكمية والخصم والصلاحيه من خلال داتا كراند فيو ؟ مثلا لدينا الصنف التالي : اسم الصنف مثلا عصير الصلاحية 2018 كميته في المخزن 700 سعره 10

وعند شراء الصنف اعلاه مثلا 5 كمية وخصم 2 وصلاحيه 2019 واضفنا بيانات على داتا كراند فيو datagridview وتم حساب الحسابات اوتوماتيكيا اي اصبح سعر الشراء 50 لان 5 * 10 = 50 وسعر وحده 9.8 واجمالي الشراء 49 ونريد ان نعدل البيانات مثلا نريد شراء 15 كمية بدل 5 واعطانا خصم على كمية 3 % او يبقى نفسه الخصم عند تعديل البيانات سوف تتغير مباشره الحسابات تلقائيا وتختلف الارقام (الحسابات) اذن التعديل على البيانات نحتاج الى برمجة هذه هذه الخطوات………
 
 ⚠️ ملاحظه

 المثال اعلاه افتراضي ™ نحتاج الى : 
 🔺 برمجة كود تعديل الحسابات داخل اداة datagridview 
 🔺ونحتاج الى كود تعديل الكمية والخصم والصلاحيه والملاحظات من خلال اداة datagridview 
 🔺 نحتاج الى كود حفظ التعديل داخل قاعدة البيانات 🔺 نحتاج الى كود جمع الحسابات وانزالها علئ تكس بوكس المخصص لها 
 🔰برمجة تعديل الحسابات والحقول سنحتاج عده اكواد للتعديل والحفظ لان اي تعديل للبيانات من فاتورة الشراء بدون حفظ التعديل داخل قاعدة البيانات لا فائدة من ذلك لابد من التعديل وبنفس الوقت يحفظلي ويحدث البيانات داخل قاعدة البيانات في جدول مخصص له…… وسيكون التعديل من خلال داتا كراند فيو اي مثلا نعدل الكمية والخصم والصلاحيه والملاحظات من خلال الحقل المخصص لهم على داتا كراند فيو datagridview وبالتالي سوف تتأثر الحسابات بالتعديل مثلا عند تعديل كمية سوف يتغير حساب سعر الوحدة اوتوماتيكيا وكذلك الخصم سوف يتغير وايضا مجموع اجمالي الجمهور والشراء سيتغيرون اوتوماتيكيا تلقائيا بدون تدخل منا………
 📍نحتاج الى : 
 🔸 كود تعديل الحقول الاربعه هي الكمية والخصم والصلاحيه والملاحظات من خلال داتا كراند فيو datagridview في حدث selectionchanged
 🔸 نحتاج الى كود تعديل الحسابات داخل داتا كراند فيو datagridview وجمع هذه الحسابات واضهارها على تكس بوكس اي كل حساب ينزل على تكس بوكس الخاص به…  

برمجة كود تعديل الحقول الاربعه هي الكمية والخصم والصلاحيه والملاحظات من خلال داتا كراند فيو datagridview في حدث selectionchanged 
 ✅ نحدد اداة datagridview في فورم فاتورة الشراء Buypill ومن الخصائص نختار الاحداث ونختار حدث selectionchanged وننقر عليه نقرتين ونكتب الكود التالي : Buypill.vb
	  Dim qty, disconund As Double


	  Dim exp As Date


	  Dim notes As String


	  qty = DataGridView1(7, DataGridView1.CurrentRow.
	  Index).Value


	  disconund = DataGridView1(9, DataGridView1.CurrentRow.
	  Index).Value


	  exp = DataGridView1(3, DataGridView1.CurrentRow.
	  Index).Value


	  notes = DataGridView1(13, DataGridView1.CurrentRow.
	  Index).Value


	  Dim dt As New DataTable
	  Dim cmd As New OleDbCommand


	  dt.Clear()


	  cmd = New OleDbCommand("update operations set buyqty = " & qty & " ,buydisconund = " & disconund & " ,buynotes = '" & notes & "' ,operltemexp = #" & exp & "# where operld = " & DataGridView1(0, DataGridView1.CurrentRow.Index).Value & "", con)



	  con.Open()

	  cmd.ExecuteNonQuery()

	  con.close()

	  loadbuyQ()
		  

Ⓜ️⚙ شرح الكود

      عرفنا متغيرات qty, disconund , exp Notes الصلاحية exp الخصم disconund الكمية qty الملاحظات notes بحيث تاخذ هذه المتغيرات ما يقابلها من حقول في جدول اي ياخذ متغير الكمية قيمه حقل الكمية في الجدول وهكذا ثم اعطينا قميه كل متغير في داتا كراند فيو datagridview من خلال السطر الذي قمنا بالتنويه عليه في درس سابق الا وهو Qty =DataGridView1(7 ,DataGridView1.CurrentRow .Index).Value لاحظ اخي المبرمج ترتيب او تسلسل حقل الكمية qty على داتا كراند فيو هو 7 وهكذا اخذت المتغيرات قيمتها من جدول وحسب كل ترتيب او تسلسل الحقل علئ داتا كراند فيو datagridview ثم عرفنا متغيرات للداتا تيبل و Cmd ثم كتبنا بين قوسين جملة التحديث او التعديل update لتعديل البيانات في جدول operations وكتبنا كل حقل من جدول ما يقابله من متغيرات التي قمنا بتعريفها اعلاه واخيرا قفلنا الاتصال con.close و استدعينا جدول الاستعلام loadbuyq لتحديث البيانات بعد كل عمليه تعديل…… .. لاحظ ترتيب كود تعديل الحقول الاربعه كما في صورة رقم

تصميم و برمجة فاتورة الشراء



 ايضا شاهد فيديو لعمليه التعديل داخل داتا كراند فيو datagridview

🌇ايضا شاهد فيديو ترتيب الفيديو صورة رقم 1 ترتيب كود تعديل الحسابات الحقول الاربعه صورة رقم 2 تكملة الصوره رقم 1 كود ترتيب كود تعديل ولكن بسبب طول سطر كود خاص بـ Cmd وضعت تكملة بهذه الصوره

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

datagridview ننقر نقرتين على فورم فاتورة الشراء وتحت عنوان public class buypill نقوم بانشاء اجراء خاص بتعديل الحسابات ونسمي الاجراء buycale ويصبح الكود كالتالي :

Buypill.vb
	  Public Sub buycale() 


	  '======اجمالي الجمهور

	  DataGridView1(8, DataGridView1.CurrentRow.Index).Value = Val(DataGridView1(7, DataGridView1.CurrentRow.Index).Value) * Val(DataGridView1(4, DataGridView1.CurrentRow.Index).Value)



	  '============اجمالي الشراء
	  DataGridView1(11, DataGridView1.CurrentRow.Index).Value = Val(DataGridView1(8, DataGridView1.CurrentRow.Index).Value) - (Val(DataGridView1(8, DataGridView1.CurrentRow.Index).Value) * (Val(DataGridView1(9, DataGridView1.CurrentRow.Index).Value) / 100))




	  '=============سعر  الوحدة 
	  DataGridView1(10, DataGridView1.CurrentRow.Index).Value = Val(DataGridView1(11, DataGridView1.CurrentRow.Index).Value) / DataGridView1(7, DataGridView1.CurrentRow.Index).Value



	  '================الربح
	  DataGridView1(12, DataGridView1.CurrentRow.Index).Value = Val(DataGridView1(8, DataGridView1.CurrentRow.Index).Value) - DataGridView1(11, DataGridView1.CurrentRow.Index).Value
	  '========================

	  '==============جمع اجمالي الجمهور الكلي واجمالي الشراء الكلي 
	  اي كم اجمالي في داتا كراند فيو سيجمعة ويضعة ع تكس بوكس


	  Dim total, totalb, count, earn, perc As Double


	  For i As Integer = 0 To DataGridView1.Rows.Count - 1


	  total = total + Val(DataGridView1(8, DataGridView1.Rows(i).Index).
	  Value)



	  totalb = totalb + Val(DataGridView1(11, DataGridView1.Rows(i).Index).
	  Value)



	  count = DataGridView1.Rows.Count


	  earn = total - totalb


	  perc = (1 - (totalb / total)) * 100


	  Next

	  '=============لوضع الحسابات على التكس بوكس


	  Buytotalg.Text = total

	  Buytotalp.Text = totalb

	  Buyltemcount.Text = count

	  Buyearn.Text = earn

	  Buyearnpercent.Text =
	  Math.Round(perc, 2)


	  End Sub
		  

⚙Ⓜ️ شرح الكود 

⚠️ملاحظه الاكواد الاربعه الاولى كل حساب عباره عن سطر واحد ولكن بسبب طول الكود لحساب معين يصبح هكذا عده اسطر ولكن انا وضعت لكم فيديو حتئ تعرفوا ترتيب الاكواد عملنا اجراء ثم اكواد الحسابات الاربعه هي اجمالي الجمهور اجمالي الشراء سعر الوحده والربح وقلت في درس سابق بان كود سوف يتكرر معنا بكثره وها هو تكرر لدينا اعلاه مثلا حساب اجمالي الجمهور في اي ترتيب او تسلسله علئ داتا كراند فيو datagridview ترتيبه هو 8 بيساوي قيمه سعر الوحدة تسلسله 4 مضروب في الكمية تسلسلها 7 علئ داتا كراند فيو وهكذا بقيه الاكواد اجمالي الشراء وسعر الوحده والربح نفس الكلام… .. ثم برمجنا كود جمع الحسابات اي مثلا عدد الاصناف التي تضاف إلى داتا كراند فيو كم صنف نفرض مثلا 4 وكل صنف لديه سعر وكميته وخصمه وربحه وبالتالي سوف نجمع هذه الاصناف الاربعه بحيث نجمع ربح او سعر وحده تبع صنف اول مع ربح او سعر الوحدة تبع صنف ثاني الئ ان نصل الى جمع الاصناف الاربعه ثم نضع مجموع هذه الاصناف علئ تكس بوكس مخصص لها وهكذا بقيه مجاميع الحسابات وايضا نضع مجموع عدد الاصناف التي تضاف إلى تكس بوكس مخصص لها وايضا نفس الكلام في الربح واجمالي الشراء والجمهور ونسبه الربح… . عرفنا متغيرات total - totalb, count , earn , perc, ونقصد بـcount مجموع عدد الاصناف علئ داتا كراند فيو datagridview ثم كتبنا جملة لوب For حتئ يجمعلي جميع الاصناف وبعدها اخذ كل متغير قيمته من داتا كراند فيو مثلا total اخذ قيمته من total موجود داخل داتا كراند فيو وكذلك totalb نفس الكلام وبقيه حسابات نفس الكلام ايضا….. بعدها عملنا على وضع الحسابات على تكس بوكس اي كل حساب اخذ تكس بوكس الخاص به وهكذا هذا كل مافي الكود…… بعد ذلك نقوم باستدعاء هذا الاجراء في حدث اللود load فروم فاتورة الشراء وكذلك في في حدث selectionchanged اي مع كود تعديل حسابات الاربعه نضعه اخر شي وايضا نضعه في زر حفظ الفاتورة لحين برمجة زر حفظ الفاتورة…….. 🌇لاحظ ترتيب كود برمجة الحسابات وجمع الحسابات و ضعها في تكس بوكس كما في صورة رقم 1

تصميم و برمجة فاتورة الشراء

، 2
تصميم و برمجة فاتورة الشراء

🌇 ايضا شاهد فيديو لعمليه تعديل الحسابات وكيف تم وضع مجاميع الحسابات اوتوماتيكيا علئ تكس بوكس مخصص له

🌇 وكذلك شاهد فيديو لترتيب الكود 

 


الان  سنقوم بانشاء كود خاص بحفظ التعديل داخل قاعدة البيانات اكسس بعد التعديل عليها وهذه الحقول هي : Buydisconund Buyearn Buynotes Buyqty Buytotalb Buytotalg Buyunitprice Operltemexp

هذه  الحقول التي سوف تتغير اوتوماتيكيا تلقائيا ماعدا حقل الكمية buyqty وحقل الملاحظات والصلاحيه كود سهل ليس فيه صعوبه وكالعاده سوف يكون كود Val(DataGridView1(11, DataGridView1.Rows(i).Index). Value) هو الذي 👆 سوف نستخدمه بكثره عند تعديل الحقول داخل داتا كراند فيو datagridview 
 🔸اذن نذهب إلى فورم فاتورة الشراء ثم ننقر نقرتين على زر حفظ فاتورة ونكتب الكود التالي : وقبل كتابه الكود نقوم بتعريف متغير فوق اي تحت public class Buypill كالتالي : Buypill.vb
	  Public opertioncmd As New OleDbCommand

		  

ثم نكتب الكود في زر حفظ فاتورة

Buypill.vb
	  If Buylnvoiceno.Text = Nothing Then

	  MsgBox("يرجى اخال رقم الفاتورة")
	  Buylnvoiceno.Focus()


	  ElseIf Buylmporter.Text = Nothing Then
	  MsgBox("يرجى اختيار المورد")


	  Buylmporter.Focus()
	  ElseIf Buycash.Checked = False And Buypostpone.
	  Checked = False Then

	  MsgBox("يرجى اختيار نوع التعامل اجل او نقدي")

	  Buycash.Focus()

	  ElseIf

	  DataGridView1.Rows.Count = 0 Then

	  MsgBox("لاتوجد اصناف لحفظها")


	  Else


	  buycale()


	  For i As Integer = 0 To DataGridView1.Rows.Count - 1


	  opertioncmd = New OleDbCommand("update operations set buydisconund = " & DataGridView1(9, DataGridView1.Rows(i).Index)
	  .Value & ", buyearn = " & DataGridView1(12, DataGridView1.Rows(i).Index)
	  .Value & ",buynotes = '" & DataGridView1(13, DataGridView1.Rows(i).Index)
	  .Value & "',buyqty = " & DataGridView1(7, DataGridView1.Rows(i).Index)
	  .Value & ",buytotalb = " & DataGridView1(11, DataGridView1.Rows(i).Index)
	  .Value & ",buytotalg = " & DataGridView1(8, DataGridView1.Rows(i).Index)
	  .Value & ",buyunitprice = " & DataGridView1(10, DataGridView1.Rows(i).Index)
	  .Value & ",operltemexp = #" & DataGridView1(3, DataGridView1.Rows(i).Index)
	  .Value & "# where operld = " & DataGridView1(0, DataGridView1.Rows(i).Index)
	  .Value & "", con)


	  con.Open()
	  opertioncmd.ExecuteNonQuery()

	  con.Close()


	  Next

		  

⚙Ⓜ️ شرح الكود : 

 ➖ طبعا الكود سهل وشرحته اكثر من مره في السطور الاولى وضعنا شروط عند حفظ فاتورة بحيث عند ضغط على حفظ الفاتورة خاليه بدون ادخال اصناف ومورد ورقم فاتوره او بدون وضع علامه صح امام تعامل بالبيع كاش او اجل سوف يظهر له رساله تحتوي لا توجد اصناف لحفظها وعند مثلا اضافة صنف وحفظنا ايضا تظهر له رساله ادخل رقم فاتورة وعند ادخال رقم فاتورة ونحفظ ايضا تظهر لنا رساله يرجئ اختيار مورد وعند اختيار مورد ونحفظ كذلك تظهر لنا رساله يرجئ اختيار نوع تعامل اجل او نقدي وعند اختيار نقدي ونحفظ سوف يحفظ لنا فاتورة الشراء هذه تمسى قيود الادخال اي انا اقيد المستخدم بادخال كافه تفاصيل الفاتوره ومن ثم يستطيع الحفظ وبالتالي استطعنا ان نتجاوز الاخطاء عند حفظ وتنفيذ برنامج… .. ➖ثم استدعينا اجراء خاص بتعديل الحسابات الذي قمنا بانشاءه سابقا ثم عرفنا كود خاص بداله For اي سوف يعدل صف الصنف من بدايه اول حقل الئ اخر حقل ➖ ثم عملنا جملة التحديث وكتبنا ترتيب او تسلسل الحقول في داتا كراند فيو التي اشرنا لها اعلاه الى ان نصل الى كلمة شرط where عندما يساوي حقل operld بيساوي صفر 0 وانتهينا الاتصال con.close 💡هذا كل مافي الكود  لاحظ ترتيب كود كما في صور رقم 1 ، 2 ، 3 ، 4 ، 5

تصميم و برمجة فاتورة الشراء

تصميم و برمجة فاتورة الشراء





تصميم و برمجة فاتورة الشراء
نقص

ثم نقوم بانشاء اجراء خاص بتعديل الكمية ltemqty وحفظ التعديل داخل قاعدة البيانات اكسس…… ....... ايضا نذهب إلى فورم فاتورة الشراء ونضغط على زر حفظ الفاتورة وتحت الكود السابق نكتب الكود التالي : وقبل كتابه الكود نقوم بتعريف متغير فوق تحت public class كالتالي :

Buypill.vb
	  Public ltemscmd As New OleDbCommand

		  

ثم نكتب الكود التالي 

Buypill.vb
	  For z As Integer = 0 To DataGridView1.Rows.Count - 1


	  Dim newqtw As Double


	  newqtw = Val(DataGridView1(7, DataGridView1.Rows(z).Index).Value) + Val(DataGridView1(5, DataGridView1.Rows(z).Index).Value)


	  ltemscmd = New OleDbCommand("update ltems set ltemqty = " & newqtw & " where ltemname = '" & DataGridView1(2, DataGridView1.Rows(z).Index).Value & "' ", con)


	  con.Open()

	  ltemscmd.ExecuteNonQuery()


	  con.Close()


	  Next

		  

⚙Ⓜ️ شرح الكود :

 عرفنا متغير ltemscmd ثم كتبنا داله For كما في كود سابق ثم عرفنا متغير للكمية newqtw وجعلنا قيمته من ترتيب حقل موجود داخل داتا كراند فيو هو تسلسله 7 ثم كتبنا جملة التحديث update وكتبنا حقل الكمية ltemqty الموجود علئ داتا كراند فيو حتئ يتم التعديل عليه عندما Where يساوي حقل ltemname الذي تسلسله علئ داتا كراند فيو هو 2 ثم فتحنا اتصال con.Open() واغلقنا الاتصال con.close 🌇 لاحظ ترتيب كود كما في صورة رقم

تصميم و برمجة فاتورة الشراء

1 صورة رقم 1 لكود تعديل حقل الكمية ltemqty وحفظ التعديل في قاعدة البيانات بعد تعديل 

 سوف نعدل على رصيد المورد بحيث اذا تم بيع فاتورة الشراء اجل سوف يضيف اجمالي شراء الفاتورة لرصيد المورد اما اذا تم بيع فاتورة الشراء نقدي" سوف يبقى رصيد المورد كما هو… . 

 🔸اي لنفرض لدينا مورد احمد ورصيده الحالي هو 5000 وتم شراء فاتوره له بقيمه 4000 وبالتالي اذا كان التعامل او الشراء اجل سوف تضاف مبلغ اجمالي شراء الفاتوره وهو 4000 الئ رصيدة الحالي هو 5000 ويصبح مجموع رصيد 9000 اي 5000 + 4000 = 9000 اما اذا تم شراء فاتورة نقدا سوف يبقى رصيد المورد كما هو 5000 باعتبار الاخير قام بدفع مبلغ اجمالي فاتورة الشراء هي 4000 

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

 🔸اذن نذهب إلى فاتورة الشراء ونضغط على زر حفظ الفاتورة ونكتب الكود تحت الاكواد السابقه التي قمنا بشرحها سابقا وقبل ذلك نعرف متغير خاص بكود تعديل المورد نعرفه فوق تحت public class كما يلي :

Buypill.vb
	  Public lmporterscmd As New OleDbCommand
		  

بعد ذلك نكتب كود خاص بتعديل رصيد المورد في زر حفظ فاتوره كالتالي :

Buypill.vb
	  If Buypostpone.Checked = True Then


	  Dim newbalenc As Double


	  newbalenc = Val(Buytotalp.Text) + Val(Label3.Text)


	  lmporterscmd = New OleDbCommand("update lmporter set lmporterbalance = " & newbalenc & " where lmportername = '" &
	  Buylmporter.Text & "'", con)


	  con.Open()

	  lmporterscmd
	  .ExecuteNonQuery()


	  con.Close()


	  End If

		  

⚙Ⓜ️ شرح الكود : السطر اول جعلنا زر اجل غير معلم عليه اي لا توجد عليه علامه اختيار صح ثم عرفنا متغير newbalenc بعد ذلك جعلنا متغير newbalenc يساوي قيمه اجمالي الشراء زائد قيمه الرصيد الحالي للمورد ثم كتبنا جملة تحديث update لتعديل حقل رصيد مورد في جدول المورد عندما Where اسم مورد يساوي تكس بوكس الخاص بالمورد ثم انهينا الاتصال con.close 🌇 لاحظ كود ترتيب تعديل رصيد مورد كما في صورة رقم 1

تصميم و برمجة فاتورة الشراء

🌇 ايضا شاهد فيديو مثال تطبيق لرصيد مورد الحالي وبعد اضافة مبلغ اجمالي الشراء له 

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

راح نتكلم عن شي مهم هناك بعض الامور يجب الاخذ بها بنضر الاعتبار بفاتورة الشراء وهي 
 🔸مثلا اذا تم بيع 3 اصناف مختلفه والتكن مثلا( س + ص + ع ) وتم اضافة الاصناف الثلاثه علئ داتا كراند فيو وداخل قاعدة البيانات ثم اراد المشتري شراء كميه اخرى من صنف (س) هل من الممكن اضافة صف رابع علئ داتا كراند فيو وحفظها داخل جدول اي يتكرر من الخطا ان يضيف صنف رابع في داتا كراند فيو ويحفظلي داخل قاعدة البيانات….. طبعا هو ليس غلط لكن يجب ان يكون هناك احترافيه في نظام الذي نعمل عليه وبالتالي عند شراء نفس صنف ونفس صلاحيه يجب ان لا يضيف صف رابع وانما يجب ان يجمع الكمية الاولى والثانيه بنفس الصنف ويبقى لدينا ثلاثه اصناف وليس اربعه بشرط ان يكون نفس الصنف ونفس صلاحيه…… اذن نحتاج إلى كود لجمع الكميات اذا كانت نفس الصنف والصلاحيه وايضا نحتاج الى جدول جديد…… 
 🔸 طيب اذا تم بيع صنف و له صلاحيه وكمية مختلفه واردنا بيع صنف ثاني بنفس اسم الصنف و كمية وصلاحيه مختلفه في هذه الحاله سوف يبحث لي في الجدول اذا كان هناك نفس الصنف وكمية مختلفه سوف يدرج لي صف جديد للصنف الثاني……… . 
 🔸 اما اذا تم بيع نفس الصنف ونفس الصلاحيه ولكن كمية مختلفه وعند بيع مره ثانيه نفس الصنف ونفس صلاحيه ولكن الكمية مختلفه في هذه الحالة سوف نقوم باضافة الصنفين لنفس الاسم ولكن كل واحد وله كمية مختلفه عن الاخر وبالتالي نحتاج الى جدول جديد في قاعدة بيانات لاضافة وحفظ اسعار الكميات المختلفه لنفس الصنف…… .. مثلا نفرض لدينا صنف س وسعره 12 وتبع بيع ثلاثه مرات نفس الصنف ولكن كل مره كمية مختلفه وبالتالي سوف يحفظ الثلاثه اصناف كل صنف له صف في قاعدة بيانات وله كمية مختلفه ولاطبيق ذلك نحتاج جدول نقوم بانشاءه داخل قاعدة البيانات 
 🔰اذن يصبح لدينا ثلاثه امور مهمه يجب ان نبرمجها حتئ يصبح نظام سوبر ماركت او فاتورة الشراء جاهزه للعمل وهذه الامور هي : 
 📍 نحتاج الى برمجة كود في حالة تم بيع نفس الصنف والصلاحيه ولكن كمية مختلفه وبالتالي سوف يجمع الكميه الاولى مع الثانيه ويبقى صف واحد في داتا كراند فيو و في قاعدة بيانات ولتطبيق ذلك نحتاج الى انشاء جدول جديد في قاعدة البيانات…….. 
 📍 ايضا نحتاج الى برمجة كود في حالة تم بيع نفس الصنف ولكن كمية وصلاحيه مختلفه 📍كذلك برمجة كود في حالة تم بيع نفس الصنف ونفس صلاحيه ولكن كمية مختلفه وبالتالي سوف يضيف الاصناف المتشابهه بكميات مختلفه وبالتالي نحتاج الى انشاء جدول جديد في قاعدة البيانات…… 
 ⚙ اذن سوف نقوم بانشاء ثلاثه اكواد وجدولين جديدين في قاعدة بيانات 
 نقوم بانشاء جدولين جديدين في قاعدة البيانات الجدول الاول سوف يكون التعامل معه اذا تم بيع نفس الصنف وصلاحيه ولكن الكمية مختلفه وايضا للتعامل معه اذا تم بيع نفس الصنف ولكن الصلاحية والكمية مختلفه اما الجدول الثاني سوف يكون التعامل معه اذا تم بيع نفس الصنف ونفس صلاحيه ولكن الكمية مختلفه ، نذهب إلى قاعدة البيانات ونقوم بانشاء الجدولين كالتالي : 1⃣ الجدول الاول نسميه Expqty ويحتوي على الحقول التاليه id ➖➖ ترقيم تلقائي drugname➖➖ نص Price➖➖➖➖ عملة qty➖➖➖➖رقم exp➖➖تاريخ/وقت avgunitprice➖تاريخ/وقت كل حقل👆👆 له نوع خاص بالبيانات التي سوف يحتويها 🌇 لاحظ ترتيب جدول qtyexp كما في صورة رقم 1 2⃣
تصميم وبرمجة مشروع سوبر ماركت فيجول بيسك دوت نت
2
انشاء جدول خاص بالتعامل اذا تم بيع نفس الصنف ونفس صلاحيه ولكن الكمية مختلفه ونسمي الجدول expqtyuint ويحتوي الجدول على الحقول التاليه : id ➖➖ ترقيم تلقائي drugname➖➖ نص Price➖➖➖➖ عملة qty➖➖➖➖رقم exp➖➖تاريخ/وقت Unitprice ➖➖ عملة جدول expqtyuint نفس جدول expqty ولكن فقط اختلاف في حقل unitprice 🌇 لاحظ ترتيب حقول جدول expqtyuint كما في صورة رقم 2 
تصميم وبرمجة مشروع سوبر ماركت فيجول بيسك دوت نت

 🔰 بعد ذلك نقوم بتعريف متغيرات خاصه بالجدولين ولود load خاص بجدول expqty ويكون ذلك في مديول خاص بنا ننقر عليه نقرتين ونكتب الكود التالي : Module1.vb
			
	  Public expqtydt As New DataTable


	  Public expqtyda As New OleDbDataAdapter


	  Public mynewldexpqty As Integer


	  Public expqtycmd As New OleDbCommand


	  Public Sub load_expqty()

	  expqtydt.Clear()

	  expqtyda = New OleDbDataAdapter("select * from expqty", con)

	  End Sub
		  

🌇لاحظ ترتيب كود اعلاه كما في صورة رقم 3

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

وسيتضح لكم كل شي عند برمجة الاكواد صورة رقم 1 ترتيب جدول expqty صورة رقم 2 ترتيب جدول expqtyuint صورة رقم 3 ترتيب كود تعريف متغيرات للجدولين واجراء لود load لتحميل حقول جدول expqty 💻⚙ في الدرس القادم سوف نبرمج ثلاثه اكواد خاصه بالتعامل مع الثلاثه حالات السابقه التي قمنا بشرحها……… وبعد ماننتهي من برمجة هذه الاكواد الثلاثه نكون قد انتهينا من برمجة وتصميم فاتورة الشراء Buypill بشكل كامل وجاهزه للعمل عليها باذن الله…

… 🔰💻وسننتقل بعدها الى ماتبقى من مشروعنا سوبر ماركت الضخم

💻Ⓜ️السلام عليكم ورحمة الله وبركاته نكمل معاكم اخر ما تبقى من درسنا الخاص بفاتورة الشراء…… ➖في الدرس السابق قمنا بانشاء جدولين جديدين للتعامل معهم في الحالات الثلاثه التي شرحناها سابقا……… 🔰 برمجة الحاله الاولى اذا تم شراء نفس الصنف ونفس الصلاحية وكمية مختلفه…… سوف نقوم بانشاء كود (جملتين) اولا (جملة select ) يدورلي في جدول expqty اذا كان هناك موجود نفس الصنف ونفس الصلاحية وكمية مختلفه يقوم بتعديل (update الجملة الثانيه) على الكمية القديمه (السابقه) ويجمعها مع الكمية الجديده وبالتالي يصبح لدينا نفس صنف ولكن الكمية زادت لانه جمعنا الكمية القديمه مع الجديده مثال نفترض لدينا صنف اسمه (س) لة كمية 22 صلاحيته 2018/6/2 وهذا 👆👆 الصنف محفوظ داخل جدول expqty واردنا اضافة صنف اخر ولكن نفس الصنف السابق (س) ونفس الصلاحيه ولكن كمية مختلفه ولتكن 8 وبالتالي عند اضافة الصنف سوف يعدل ويجمع كمية الاولى 22 مع الكمية الثانيه 8 وتصبح مجموع الكمية 30 وبالتالي عدلنا فقط على الكمية ولم نضيف صف جديد في جدول expqty وهكذا…… 📍لبرمجه هذا الكلام نحتاج كود فيه جملتين جملة select وجملة update اذن نذهب إلى فورم ltem_search وننقر نقرتين على زر اختيار ونكتب الكود التالي تحت كود سابق الخاص باضافة الاصناف والكود كالتالي :

ltem_search.vb
			

	  Dim itemname1 As String
	  = DataGridView1(2, DataGridView1.CurrentRow
	  .Index).Value


	  Dim currqty As Double

	  Dim pr As Double = DataGridView1(6, DataGridView1.CurrentRow
	  .Index).Value


	  Dim dt2 As New DataTable


	  Dim da2 As New OleDbDataAdapter


	  dt2.Clear()


	  da2 = New OleDbDataAdapter("select * from expqty where drugname = '" & itemname1 & "' and exp = #" & exp.Value & "#", con)


	  da2.Fill(dt2)


	  If dt2.Rows.Count > 0 Then


	  currqty = dt2.Rows(0).Item("qty")


	  Dim newqty As Double = Val(qtyin.Text)


	  Dim tot As Double = currqty + newqty


	  expqtycmd = New OleDbCommand("update expqty set qty = " & tot & " where drugname = '" & itemname1 & "' and exp = #" & exp.Value & "#", con)


	  con.Open()

	  expqtycmd.ExecuteNonQuery()


	  con.Close()


	  End If
		  

💻Ⓜ️ شرح الكود : الكود سهل جدا سوينه جملتينه هي جمله select الخاصه بالبحث عن اسم صنف ونفس صلاحيه ولكن كمية مختلفه وجملة update الخاصه بالتعديل وبالتالي اذا بحثت جمله select ووجدت نفس صنف ونفس صلاحيه سوف تنتقل إلى جملة التحديث update لتعديل جمع كمية القديمه مع الجديده ويبقى نفس صنف في صف واحد لم يتكرر اسم صنف

 🔸الجمله الاولى select ➖عرفنا متغير ltemname1 خاص باسم الصنف وتسلسله على داتا كراند فيو 2 ➖ عرفنا متغير currqty على اساس انها كمية قديمه محفوظه في جدول expqty ➖عرفنا pr على اساس انه قيمه كمية قديمه في داتا كراند فيو تسلسلها 6 ➖ عرفنا dt2 للداتا تيبل ➖ عرفنا da2 للداتا ادبتر ➖ فضينا داتا تيبل clear ➖ عملنا بين قوسين جملة select بمعنى يبحث From لي في جدول expqty بشرط where اذا كان نفس اسم الصنف drugname و and نفس صلاحيه exp اذا وجد نفس هذا الصنف يقوم بتعديل update كمية اي يجمع كمية القديمه مع الجديده ويبقى نفس الصنف في صف واحد 

 🔸 الجملة الثانيه هي update خاصه بجمع كمية القديمه مع الجديده ➖ عرفنا متغير newqty اي كمية جديده ➖عرفنا متغير tot علئ اساس هو مجموع كمية القديمه مع الجديده cruuqty + newqty…… ➖ ثم كتبنا بين قوسين جملة التعديل update ثم يجمع tot الكميتين عندما where يساوي نفس الصنف drugname ونفس صلاحيه exp ➖ اخر شي انهينا اتصال con.Close هذا كل👆👆 مافي الكود…… 🌇لاحظ ترتيب كود اعلاه كما في صورة رقم 1

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

🌇 ايضا شاهد فيديو كيف تم تطبيق الكود وكيف تم اضافة صنف نفس الصنف المحفوظ داخل جدول expqty وجمع الكمية القديمه مع الجديده

… .. 

 🔰سنبرمج الحاله الثانيه هي اذا تم شراء نفس الصنف ولكن الكمية والصلاحيه مختلفه وبالتالي سوف يضيف الصنف ويحفظه في جدول expqty على اساس اختلاف الصلاحية…… . 

 📍 اذن ننقر نقرتين على فورم ltem_search وننقر نقرتين على زر اختيار وتحت الكود السابق الخاصه بالحاله الاولى نكتب الكود التالي الخاص بالحاله الثانيه :

ltem_search.vb
			


	  Dim dt3 As New DataTable

	  Dim da3 As New OleDbDataAdapter

	  dt3.Clear()

	  da3 = New OleDbDataAdapter("select * from expqty where drugname = '" & itemname1 & "' and exp = #" & exp.Value & "#", con)



	  da3.Fill(dt3)

	  If dt3.Rows.Count = 0 Then

	  Dim dt1 As New DataTable

	  Dim cmd1 As New OleDbCommand

	  dt1.Clear()

	  cmd1 = New OleDbCommand("insert into expqty (drugname, qty, exp, price) values ('" & itemname1 & "'," & qtyin.Text & ", #" & exp.Value & "#," & pr & ")", con)


	  con.Open()
	  cmd1.ExecuteNonQuery()

	  con.Close()

	  End If
		  

⚙Ⓜ️شرح الكود : ايضا عملنا جملتين جملة select وجملة lnsert بحيث عند اضافة صنف سوف يبحثلي اذا كان موجود في جدول نفس الصنف والكمية والصلاحيه مختلفين سوف يضيفلي حقل جديد بجملة lnsert…… . الكود ليس فيه جديد وانما نفس كود سابق في حالة الاولى ولكن في حالة الاولى جملة select وجملة تحديث update وهنا في حالة ثانيه جملة select وجملة lnsert وباقي المتغيرات تم شرحها في كود سابق 🌇 لاحظ ترتيب كود اعلاه كود برمجة الحاله الثانيه كما في صورة رقم 1

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

🌇 ايضا شاهد فيديو كيف تم اضافة صنف على اساس اختلاف الصلاحية

… . 🌇 

 🔰برمجة الحالة الثالثه هي نفس الحاله الاولى لكن اذا تم شراء نفس الصنف ونفس الصلاحية وكمية مختلفه سوف يضيفلي الاصناف وكل صنف له وحده سعر اي يضيف الاصناف المتشابهه ولكن كل صنف له سعر وحده…… . ننقر نقرتين على فورم ltem_search وننقر نقرتين على زر خيار ونكتب الكود تحت كود الحاله الثانيه كالتالي :

ltem_search.vb
			
	  Dim dt4 As New DataTable

	  Dim cmd4 As New OleDbCommand

	  dt4.Clear()


	  cmd4 = New OleDbCommand("insert into Expqtyuint (drugname, qty, exp, price,unitprice) values ('" & itemname1 & "'," & qtyin.Text & ", #" & exp.Value & "#," & pr & "," & Val(Label10.Text) & ")", con)


	  con.Open()

	  cmd4.ExecuteNonQuery()

	  con.Close()
		  

⚙Ⓜ️ شرح الكود : تم شرح الكود عده مرات عرفنا متغيرات للداتا تيبل وداتا ادبتر ثم فضينا جدول من بيانات ثم كتبنا جملة lnsert لاضافة الاصناف في جدول Expqtyuint وكتبنا اسماء حقول جدول Expqtyuint واخذ حقل قيمته 🌇 لاحظ ترتيب كود اعلاه كما في صورة رقم 1 ، 2

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

🌇 ايضا شاهد فيديو كيف تم اضافة اصناف متشابهه ولكن في كل مره كميات مختلفه للاصناف 🌇

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

الى هنا انتهينا من برمجة وتصميم فورم فاتورة الشراء بشكل كامل واصبحت جاهزه للعمل عليها وبعد شروحات كثيره اصبح بامكانك اخي المبرمج برمجة اي مشروع سوبر ماركت او اي مشروع يحتوي على قاعدة بيانات وحسابات ⚠️⚠️لكن لم ينتهي مشروعنا الضخم وسنرمج فورم اخر ان شاء الله……