24-03-15, 06:23 AM
نستكمل ما بدأناه (بعون الله وتوفيقه )في السابق وسنقوم بكتابة أكواد اضافة البيانات علي الفاتورة
نذهب الآن إلى الفورم الذي سنعمل عليه فاتورة وهنا عندي Form1
افتراضيا
من جدول رأس الفاتورة وجدول السداد سنضيف ما يناسبها من ادوات التحكم من مربعات نص وخلافة سأضع الشكل النهائي لصورة الفورم ولكن مايهمني حقآ هنا هو طريقة تخريج الاصناف للبيع وستكون كالتالي
نضع داتا جريد فيو داخل الفورم وننسق الأدوات على النحو الذي يعجبنا وهذا هو الشكل النهائي لشكل الفورم الذي قمت بتصميمه
مع الوضع في الاعتبار أنني قمت بعمل خلايا الداتا جريد فيو كما هو موضح بالصورة التالية وعمل خليه اسمها HeaderNO وحددت خاصيى فيزابل لها بالقيمة False حتي لا تظهر للمستخدم وسنستخدمها للربط مع الجدول Header
ومن الملاحظ هنا أنني سأكتب بيانات كل منتج وعند كتابة الكمية المباعة والضغط علي مفتاح انتر سيتم اضافة العناصر الي الداتا جريد فيو ومسح الخلايا استعدادا لادخال منتج جديد
الان انتهينا من التصميم ننتقل الي مرحلة الأكواد
في البداية كان أكثر ما يشغل بالي أن جدول هيدر هو ترقيم تلقائي لرقم الفاتورة وهنا سأقوم بحفظ جدولين آخرين لابد من أن أكون اعرف رقم الفاتورة من قبل الحفظ لذلك سنقوم بكتابة كود يذهب لجدول الهيدر ويجلب آخر رقم فاتورة مسجلة ويضيف عليها رقم 1 وسنضع هذا الكود في تحميل الفورم وبذلك نضمن وجود رقم الفاتورة من بداية تحميل الفورم
نستخدم الكود التالي
نضع الكود السابق في تحميل الفورم
بديهيا أن اسم العميل وتاريخ الفاتورة سيقوم المستخدم بتحديدهم يدويا فلن نتطرق إليهم توفيرا للوقت والمجهود ولعدم تشعب الموضوع حتى لا نخرج عن سياق موضوعنا الأساسي
الان نحن نملك تكست بوكس سنكتب فيه اسم الصنف ونحدد سعرة والكمية المباعه مع العلم بأنه قمت بتحديد الخلية الاخيرة المجموع ReadOnly لاننا سنقوم بجلب المجموع اوتوماتيكيا وعندما يكون التركيز في مربع نص الكمية المباعه عند الضغط علي مفتاح انتر سيتم ادراج الخلايا في الداتا جريد فيو ومسح الخلايا ووضع التركيز علي مربع اسم الصنف استعدادا لكتابة صنف جديد
ولعمل هذا نحدد مربع نص الكمية المباعه وفي حدث KeyDown سنكتب الكود التالي
ليصبح شكل الفاتورة النهائي كالاتي
وهنا سينتقل المستخدم الي خانة الخصم اذا اراد ان يكتب خصم علي الفاتورة أو يترك القيمة الافتراضية صفر ويذهب الي خانة المبلغ المدفوع لكتابة المبلغ المدفوع
طبعا سنضع شرط ان المستخدم لن يستطيع حفظ الفاتورة اذا كان المبلغ المدفوع = صفر ولكن هذا في حدث مفتاح الحفظ لن نشرحة الان لكن يهمنا هنا أن نضع كود في حالة تغير النص في مربع المبلغ المدفوع يقوم بحساب الخصم ويقوم بطرحة من المبلغ الاجمالي للفاتورة ثم يخصم المبلغ المدفوع من الناتج ويكتب المتبقي في مربع المبلغ المتبقي
وسنقوم بعمل ذلك في حدث TextChanged لمربع النص المبلغ المدفوع
ويكون الكود كالتالي
حتى هذه المرحلة الكلام جميل وكلنا نعرفه ولا مشكلة
من الدرس القادم بإذن الله سنبدأ بوضع أكواد الحفظ في قاعدة البيانات استعدادا لعمل تقرير الطباعة وطباعة الفاتورة
وإن شاء الله سأضع ملف المشروع وملف PDF للشرح والصور في نهاية الدرس
نستكمل لاحقا إن شاء الله
دمتم بخير
نذهب الآن إلى الفورم الذي سنعمل عليه فاتورة وهنا عندي Form1
افتراضيا
من جدول رأس الفاتورة وجدول السداد سنضيف ما يناسبها من ادوات التحكم من مربعات نص وخلافة سأضع الشكل النهائي لصورة الفورم ولكن مايهمني حقآ هنا هو طريقة تخريج الاصناف للبيع وستكون كالتالي
نضع داتا جريد فيو داخل الفورم وننسق الأدوات على النحو الذي يعجبنا وهذا هو الشكل النهائي لشكل الفورم الذي قمت بتصميمه
مع الوضع في الاعتبار أنني قمت بعمل خلايا الداتا جريد فيو كما هو موضح بالصورة التالية وعمل خليه اسمها HeaderNO وحددت خاصيى فيزابل لها بالقيمة False حتي لا تظهر للمستخدم وسنستخدمها للربط مع الجدول Header
ومن الملاحظ هنا أنني سأكتب بيانات كل منتج وعند كتابة الكمية المباعة والضغط علي مفتاح انتر سيتم اضافة العناصر الي الداتا جريد فيو ومسح الخلايا استعدادا لادخال منتج جديد
الان انتهينا من التصميم ننتقل الي مرحلة الأكواد
في البداية كان أكثر ما يشغل بالي أن جدول هيدر هو ترقيم تلقائي لرقم الفاتورة وهنا سأقوم بحفظ جدولين آخرين لابد من أن أكون اعرف رقم الفاتورة من قبل الحفظ لذلك سنقوم بكتابة كود يذهب لجدول الهيدر ويجلب آخر رقم فاتورة مسجلة ويضيف عليها رقم 1 وسنضع هذا الكود في تحميل الفورم وبذلك نضمن وجود رقم الفاتورة من بداية تحميل الفورم
نستخدم الكود التالي
PHP كود :
Try
Dim BillNo As New DataTable
BillNo = New DAL().selectdatatable(" Select * FROM tbl_Header ")
For i As Integer = 0 To BillNo.Rows.Count
txtBillNo.Text = BillNo.Rows(i)(0).ToString + 1
Next
Catch ex As Exception
' MsgBox(ex.Message)
End Try
نضع الكود السابق في تحميل الفورم
بديهيا أن اسم العميل وتاريخ الفاتورة سيقوم المستخدم بتحديدهم يدويا فلن نتطرق إليهم توفيرا للوقت والمجهود ولعدم تشعب الموضوع حتى لا نخرج عن سياق موضوعنا الأساسي
الان نحن نملك تكست بوكس سنكتب فيه اسم الصنف ونحدد سعرة والكمية المباعه مع العلم بأنه قمت بتحديد الخلية الاخيرة المجموع ReadOnly لاننا سنقوم بجلب المجموع اوتوماتيكيا وعندما يكون التركيز في مربع نص الكمية المباعه عند الضغط علي مفتاح انتر سيتم ادراج الخلايا في الداتا جريد فيو ومسح الخلايا ووضع التركيز علي مربع اسم الصنف استعدادا لكتابة صنف جديد
ولعمل هذا نحدد مربع نص الكمية المباعه وفي حدث KeyDown سنكتب الكود التالي
PHP كود :
Private Sub txtCount_KeyDown(sender As Object, e As KeyEventArgs) Handles txtCount.KeyDown
' الحدث عند الضغط على انتر
If e.KeyCode = Keys.Enter Then
' التأكد من أن خلية اسم الصنف غير فارغة
'ويمكنك هنا اضافة باقي مربعات النص هنا أنا اضع الفكرة فقط
If txtProd.Text = "" Then
MsgBox("خطأ")
Return
End If
' ضرب الكمية في السعر للحصول على الاجمالي
txtProdTottal.Text = Val(txtCount.Text) * Val(txtPrice.Text)
' اضافة المبلغ الاجمالي هنا لخلية اجمالي الفاتورة قبل الخصم
DGVsum.Text += Val(txtProdTottal.Text)
' اضافة المبلغ الاجمالي هنا لخلية اجمالي الفاتورة بعد الخصم
TXTNotPaid.Text += Val(txtProdTottal.Text)
' كود وضع العناصر داخل الجدول
For Each R As DataGridViewRow In DataGridView1.Rows
R.HeaderCell.Value = (R.Index + 1).ToString
Next
DataGridView1.Rows.Add()
DataGridView1.Item(0, DataGridView1.Rows.Count - 1).Value = txtProd.Text ' وضع اسم الصنف في الخلية الاولي
DataGridView1.Item(1, DataGridView1.Rows.Count - 1).Value = txtPrice.Text ' وضع سعر الصنف في الخلية الثانية
DataGridView1.Item(2, DataGridView1.Rows.Count - 1).Value = txtCount.Text ' وضع الكمية في الخلية الثالثة
DataGridView1.Item(3, DataGridView1.Rows.Count - 1).Value = txtProdTottal.Text ' الاجمالي في الخلية الرابعة
DataGridView1.Item(4, DataGridView1.Rows.Count - 1).Value = txtBillNo.Text ' هنا نضع رقم الفاتورة في الخلية الغير ظاهرة
txtProd.Text = String.Empty
txtPrice.Text = String.Empty
txtCount.Text = String.Empty
txtProdTottal.Text = String.Empty
txtProd.Focus()
End If
End Sub
ليصبح شكل الفاتورة النهائي كالاتي
وهنا سينتقل المستخدم الي خانة الخصم اذا اراد ان يكتب خصم علي الفاتورة أو يترك القيمة الافتراضية صفر ويذهب الي خانة المبلغ المدفوع لكتابة المبلغ المدفوع
طبعا سنضع شرط ان المستخدم لن يستطيع حفظ الفاتورة اذا كان المبلغ المدفوع = صفر ولكن هذا في حدث مفتاح الحفظ لن نشرحة الان لكن يهمنا هنا أن نضع كود في حالة تغير النص في مربع المبلغ المدفوع يقوم بحساب الخصم ويقوم بطرحة من المبلغ الاجمالي للفاتورة ثم يخصم المبلغ المدفوع من الناتج ويكتب المتبقي في مربع المبلغ المتبقي
وسنقوم بعمل ذلك في حدث TextChanged لمربع النص المبلغ المدفوع
ويكون الكود كالتالي
PHP كود :
Private Sub txtPay_TextChanged(sender As Object, e As EventArgs) Handles txtPay.TextChanged
TXTNotPaid.Text = (Val(DGVsum.Text) - Val(txtDisc.Text) - Val(txtPay.Text))
End Sub
حتى هذه المرحلة الكلام جميل وكلنا نعرفه ولا مشكلة
من الدرس القادم بإذن الله سنبدأ بوضع أكواد الحفظ في قاعدة البيانات استعدادا لعمل تقرير الطباعة وطباعة الفاتورة
وإن شاء الله سأضع ملف المشروع وملف PDF للشرح والصور في نهاية الدرس
نستكمل لاحقا إن شاء الله
دمتم بخير
