24-03-15, 10:02 AM
(آخر تعديل لهذه المشاركة : 24-03-15, 10:14 AM {2} بواسطة الفيومي116.)
بسم الله وعلى بركة الله نبدأ مرحلة حفظ الفاتورة
الآن وبعد تطبيق كل الخطوات السابقة أصبحت كل خلايا جداول قاعدة البيانات يقابلها بيانات موجودة علي الفورم بقى فقط تخزينها من البرنامج لقاعدة البيانات وهنا سأعتمد على أنني سأقوم بعمل SUB حفظ خاص لكل جدول وترتيبهم داخل اجراء مفتاح الحفظ
نبدأ بالجدول الأول جدول رأس الفاتورة نقوم بإنشاء Sub جديد ونسميه SUB saveHeader ويكون الكود كالتالي
حفظ جدول TblPay كود :
الآن حفظ الأصناف المباعة
نقوم بعمل حلقة تكرار من صفر وحتي نهاية صفوف الداتا جريد فيو وهنا يمكننا حفظ رقم الفاتورة اما بمربع رقم الفاتورة أو بالصف المخفي من الداتا جريد فيو
يكون الكود بالشكل التالي
والآن بعد كتابة جميع الأكواد لمفتاح الحفظ نضعها في حدث Button1_Click ونراعي الترتيب حيث ((( لابد ))) من وضع SUB حفظ رأس الجدول اولاً لأن باقي الجداول مرتبطة به برقم الفاتورة ويكون الكود كالتالي :
وهكذا نكون انتهينا من 80% من العمل وتم حفظ الفاتورة بنجاح في قاعدة البيانات ويتبقي لنا عمل تقرير البيع وطباعته
للحوار بقية ......
ولا تنسوني ووالدتي ( رحمها الله ) بصالح الدعاء
دمتم بخير
السلام عليكم ورحمة الله وبركاته
مشكلة المشاكل بالنسبة لي على الأقل وأكبر معضلة واجهتني في عمل برنامجي هي عمل تقرير للطباعة وأعتقد انه أقل المواضيع شرحاً بشكل عملي لسبب وحيد أننا نستخدم طريقة الكود في الاتصال بقاعدة البيانات وأغلب شروحات التقارير تستخدم الاتصال بالداتا ست عن طريق المعالج ما يسبب ( لخبطة ) لأغلب المستخدمين
وبعد التنقل ما بين الريبورت والكريستال ريبوت عشرات المرات استقريت علي الريبورت لأنه أفضل من ناحية أنني لن احتاج لأي إضافات أقوم بتنزيلها علي أجهزة العملاء وبعد مئات المحاولات الفاشلة استطعت أن أقوم بعمل التقرير بطريقة ( قد تكون قديمة ) ولكنها جاءت نتيجة العديد من المحاولات لكنني قررت أن أقوم بشرحها لعل غيري يستفيد ...
نبدأ على بركة الله
الآن نتوجه إلى قاعدة البيانات ونقوم بفتح برنامج الأكسس ومن قائمة إنشاء نقوم بعمل استعلام في وضع التصميم وإضافة الثلاث جداول ونقوم بإضافة جميع الخلايا التي نريدها في الاستعلام مع مراعاة أن أول خلية يتم اختيارها هي HeaderID
ونقوم بحفظ الاستعلام بأسم Report_Print
الآن نتوجة الي الفيجوال بيسك ومن قائمة Project نختار Add new Item ومنها نختار Dataset
ثم نضغط كليك يمين ونختار Add Data Table
ونقوم بتغيير اسم الجدول إلى اي أسم نشاء ونضيف إليه خلايا بعدد خلايا الاستعلام الذي قمنا بإنشائه سابقا ونسمي الخلايا بنفس أسماء خلايا الاستعلام
ليصبح الشكل النهائي للجدول كالآتي
الآن من ومن قائمة Project نختار Add new Item ومنها نختار Report
سيفتح أمامنا تقرير فارغ من قائمة أدوات التقرير يمكننا سحب الأدوات التي تتناسب مع التقرير لكن أهم أداة هي الجدول سنقوم بسحب جدول من قائمة أدوات التقرير ووضعه بمنتصف منطقة التصميم عند إفلات الجدول ستظهر رسالة بتحديد نوع الاتصال بقاعدة البيانات سنختار Dataset1 التي قمنا بإنشائها ومنها نختار الجدول الذي قمنا بتصميمه
كما في الصورة
الآن يمكننا وضع باقي الأدوات وإضافة أعمدة للجدول حسب ما نريد ليصبح الشكل كالتالي :
إلى هنا انتهينا من تصميم التقرير بقي تحديد الخلايا على التقرير وما يقابلها من الداتا ست وهناك طريقتين لعمل ذلك
الطريقة الأولى عن طريق فتح قائمة View ومنها إختيار report data لتظهر لنا قائمة الخلايا المتاح اضافتها للتقرير ويمكننا اختيار داتا ست 1 وسحب الخلية وافلاتها علي مايقابلها في التقرير
الطريقة الثانية عن طريق الضغط علي مربع النص المراد تحديد قيمة له والضغط بمفتاح الفأرة الأيمن واختيار Expression ومن القائمة اليسرى نختار Dataset ومنها نقوم باختيار الخلية المقابلة لها في القيمة ونكرر ذلك مع باقي مربعات النص
الآن يبتبقي لنا تحديد خلايا الجدول وهي عن طريق النقر داخل خلية الجدول ليظهر لنا مربع تحديد القيمة ونختار منها قيمة كل خلية وما يقابلها في البيانات
أما آخر خلية وهي غير موجودة في قاعدة البيانات أصلا هي مربع نص المبلغ المتبقي وهي رقم محسوب لم اشاء أن أضعه في قاعدة البيانات ويمكننا هنا أن نضع له كود عن طريق والضغط بمفتاح الفأرة الأيمن واختيار Expression وكتابة الكود التالي :
=First(Fields!BillTottal.Value, "DataSet1")-First(Fields!Paid.Value, "DataSet1")
ليصبح الشكل النهائي كما يلي
الآن اقتربنا على الانتهاء تبقي لنا إضافة فورم جديد ووضع أداة ReportViewer عليه واختيار التقرير الذي قمنا بإنشائه
مع ملاحظة أنه بمجرد اختيار التقرير سيتم إضافة Dataset1 , SalahDTBindingSource اوتوماتيكيا للتقرير
نغلق هذا الفورم ونعود الي اول فورم قمنا بتصميمه الخاص بالفاتورة في حدث الضغط علي مفتاح الحفظ نريد الآن ان يقوم بالطباعه بمجرد الانتهاء من الحفظ
نذهب الي حدث Button1_Click
الأمر ببساطة الان نحن نمتلك داتا ست بها جدول قمنا بتصميمه غير مرتبط ولا يحتوي علي اي بيانات هذا الجدول هو مصدر بيانات التقرير لذلك إن استطعنا ملئ الجدول بالبيانات ستعرض علي التقرير بسهولة
نقوم أولا باضافة جملة اتصال جديدة وجلب مكتبات داتا لاننا سنقوم بتعبئة الجدول عن طريق داتا ادابتر
ثم نذهب الي الأكسس ونقوم بفتح الاستعلام في وضع SQL وننسخ الكود الموجود به ثم نضعه في جملة الاستعلام بوضع شرط كالتالي
اولا نقوم بتعريف متغير جديد كالتالي
Dim NO As String = Val(txtBillNo.Text)
ثم الكود :
الان نحن نملك داتا ادابتر DA وتم تخزين جميع البيانات به الان نقوم بتعبئة الداتا ست بالبيانات كالتالي
ونقوم بامر فتح الفورم الذي يحتوي علي عارض التقارير
ليكون الكود النهائي كالتالي
والآن مع الصور
التقرير في وضع المعاينة
صورة مقربة للتقرير
وهكذا نكون انتهينا من عمل فاتورة مبيعات وربطها بداتا ست وحفظها في قاعدة البيانات وطباعتها
لاتنسونا بصالح الدعاء
دمتم بخير
الآن وبعد تطبيق كل الخطوات السابقة أصبحت كل خلايا جداول قاعدة البيانات يقابلها بيانات موجودة علي الفورم بقى فقط تخزينها من البرنامج لقاعدة البيانات وهنا سأعتمد على أنني سأقوم بعمل SUB حفظ خاص لكل جدول وترتيبهم داخل اجراء مفتاح الحفظ
نبدأ بالجدول الأول جدول رأس الفاتورة نقوم بإنشاء Sub جديد ونسميه SUB saveHeader ويكون الكود كالتالي
PHP كود :
Try
Dim Header As New DAL
Dim Bill_Date As Date = CDate(DateTimePicker1.Text).ToString("yyyy/MM/dd")
Dim TottalBill As Double = Val(DGVsum.Text) - Val(txtDisc.Text)
Header.Editdata("insert into tbl_Header (CustomerName,OutDate,BillTottal) Values ('" & txtCust.Text & "' ,'" & Bill_Date & "' ,'" & TottalBill & "' ) ")
Catch ex As Exception
MsgBox(ex.Message)
End Try
حفظ جدول TblPay كود :
PHP كود :
Sub Save_TblPay()
Dim Bill_Date As Date = CDate(DateTimePicker1.Text).ToString("yyyy/MM/dd")
Dim TblPaySave As New DAL
TblPaySave.Editdata("insert into TblPay (HeaderID,Paid,PaidFrom,PaidDate) Values ('" & txtBillNo.Text & "' ,'" & txtPay.Text & "' ,'" & txtCust.Text & "' ,'" & Bill_Date & "' ) ")
End Sub
الآن حفظ الأصناف المباعة
نقوم بعمل حلقة تكرار من صفر وحتي نهاية صفوف الداتا جريد فيو وهنا يمكننا حفظ رقم الفاتورة اما بمربع رقم الفاتورة أو بالصف المخفي من الداتا جريد فيو
يكون الكود بالشكل التالي
PHP كود :
Sub Save_TblProducts()
Try
Dim cmd As New DAL
For I As Integer = 0 To DataGridView1.Rows.Count - 1
cmd.Editdata("insert into TblProducts ( HeaderID , ProductsName , ProductsCount , ProductsPrice , ProductsTottal ) VALUES ('" & txtBillNo.Text & "' , '" & DataGridView1.Rows(I).Cells(0).Value & "' , '" & DataGridView1.Rows(I).Cells(1).Value & "' , '" & DataGridView1.Rows(I).Cells(2).Value & "' , '" & DataGridView1.Rows(I).Cells(3).Value & "' )")
Next
Catch ex As Exception
MsgBox(ex.Message, 16, "خطأ")
End Try
End Sub
والآن بعد كتابة جميع الأكواد لمفتاح الحفظ نضعها في حدث Button1_Click ونراعي الترتيب حيث ((( لابد ))) من وضع SUB حفظ رأس الجدول اولاً لأن باقي الجداول مرتبطة به برقم الفاتورة ويكون الكود كالتالي :
PHP كود :
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
SaveHeader()
Save_TblProducts()
Save_TblPay()
MessageBox.Show("تم حفظ الفاتورة بنجاح ", "تم", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
End Sub
وهكذا نكون انتهينا من 80% من العمل وتم حفظ الفاتورة بنجاح في قاعدة البيانات ويتبقي لنا عمل تقرير البيع وطباعته
للحوار بقية ......
ولا تنسوني ووالدتي ( رحمها الله ) بصالح الدعاء
دمتم بخير
السلام عليكم ورحمة الله وبركاته
مشكلة المشاكل بالنسبة لي على الأقل وأكبر معضلة واجهتني في عمل برنامجي هي عمل تقرير للطباعة وأعتقد انه أقل المواضيع شرحاً بشكل عملي لسبب وحيد أننا نستخدم طريقة الكود في الاتصال بقاعدة البيانات وأغلب شروحات التقارير تستخدم الاتصال بالداتا ست عن طريق المعالج ما يسبب ( لخبطة ) لأغلب المستخدمين
وبعد التنقل ما بين الريبورت والكريستال ريبوت عشرات المرات استقريت علي الريبورت لأنه أفضل من ناحية أنني لن احتاج لأي إضافات أقوم بتنزيلها علي أجهزة العملاء وبعد مئات المحاولات الفاشلة استطعت أن أقوم بعمل التقرير بطريقة ( قد تكون قديمة ) ولكنها جاءت نتيجة العديد من المحاولات لكنني قررت أن أقوم بشرحها لعل غيري يستفيد ...
نبدأ على بركة الله
الآن نتوجه إلى قاعدة البيانات ونقوم بفتح برنامج الأكسس ومن قائمة إنشاء نقوم بعمل استعلام في وضع التصميم وإضافة الثلاث جداول ونقوم بإضافة جميع الخلايا التي نريدها في الاستعلام مع مراعاة أن أول خلية يتم اختيارها هي HeaderID
ونقوم بحفظ الاستعلام بأسم Report_Print
الآن نتوجة الي الفيجوال بيسك ومن قائمة Project نختار Add new Item ومنها نختار Dataset
ثم نضغط كليك يمين ونختار Add Data Table
ونقوم بتغيير اسم الجدول إلى اي أسم نشاء ونضيف إليه خلايا بعدد خلايا الاستعلام الذي قمنا بإنشائه سابقا ونسمي الخلايا بنفس أسماء خلايا الاستعلام
ليصبح الشكل النهائي للجدول كالآتي
الآن من ومن قائمة Project نختار Add new Item ومنها نختار Report
سيفتح أمامنا تقرير فارغ من قائمة أدوات التقرير يمكننا سحب الأدوات التي تتناسب مع التقرير لكن أهم أداة هي الجدول سنقوم بسحب جدول من قائمة أدوات التقرير ووضعه بمنتصف منطقة التصميم عند إفلات الجدول ستظهر رسالة بتحديد نوع الاتصال بقاعدة البيانات سنختار Dataset1 التي قمنا بإنشائها ومنها نختار الجدول الذي قمنا بتصميمه
كما في الصورة
الآن يمكننا وضع باقي الأدوات وإضافة أعمدة للجدول حسب ما نريد ليصبح الشكل كالتالي :
إلى هنا انتهينا من تصميم التقرير بقي تحديد الخلايا على التقرير وما يقابلها من الداتا ست وهناك طريقتين لعمل ذلك
الطريقة الأولى عن طريق فتح قائمة View ومنها إختيار report data لتظهر لنا قائمة الخلايا المتاح اضافتها للتقرير ويمكننا اختيار داتا ست 1 وسحب الخلية وافلاتها علي مايقابلها في التقرير
الطريقة الثانية عن طريق الضغط علي مربع النص المراد تحديد قيمة له والضغط بمفتاح الفأرة الأيمن واختيار Expression ومن القائمة اليسرى نختار Dataset ومنها نقوم باختيار الخلية المقابلة لها في القيمة ونكرر ذلك مع باقي مربعات النص
الآن يبتبقي لنا تحديد خلايا الجدول وهي عن طريق النقر داخل خلية الجدول ليظهر لنا مربع تحديد القيمة ونختار منها قيمة كل خلية وما يقابلها في البيانات
أما آخر خلية وهي غير موجودة في قاعدة البيانات أصلا هي مربع نص المبلغ المتبقي وهي رقم محسوب لم اشاء أن أضعه في قاعدة البيانات ويمكننا هنا أن نضع له كود عن طريق والضغط بمفتاح الفأرة الأيمن واختيار Expression وكتابة الكود التالي :
=First(Fields!BillTottal.Value, "DataSet1")-First(Fields!Paid.Value, "DataSet1")
ليصبح الشكل النهائي كما يلي
الآن اقتربنا على الانتهاء تبقي لنا إضافة فورم جديد ووضع أداة ReportViewer عليه واختيار التقرير الذي قمنا بإنشائه
مع ملاحظة أنه بمجرد اختيار التقرير سيتم إضافة Dataset1 , SalahDTBindingSource اوتوماتيكيا للتقرير
نغلق هذا الفورم ونعود الي اول فورم قمنا بتصميمه الخاص بالفاتورة في حدث الضغط علي مفتاح الحفظ نريد الآن ان يقوم بالطباعه بمجرد الانتهاء من الحفظ
نذهب الي حدث Button1_Click
الأمر ببساطة الان نحن نمتلك داتا ست بها جدول قمنا بتصميمه غير مرتبط ولا يحتوي علي اي بيانات هذا الجدول هو مصدر بيانات التقرير لذلك إن استطعنا ملئ الجدول بالبيانات ستعرض علي التقرير بسهولة
نقوم أولا باضافة جملة اتصال جديدة وجلب مكتبات داتا لاننا سنقوم بتعبئة الجدول عن طريق داتا ادابتر
ثم نذهب الي الأكسس ونقوم بفتح الاستعلام في وضع SQL وننسخ الكود الموجود به ثم نضعه في جملة الاستعلام بوضع شرط كالتالي
اولا نقوم بتعريف متغير جديد كالتالي
Dim NO As String = Val(txtBillNo.Text)
ثم الكود :
PHP كود :
Dim DA As New OleDbDataAdapter("SELECT tbl_Header.HeaderID, tbl_Header.CustomerName, tbl_Header.OutDate, tbl_Header.BillTottal, TblPay.Paid, TblProducts.ProductsName, TblProducts.ProductsCount, TblProducts.ProductsPrice, TblProducts.ProductsTottal FROM (tbl_Header INNER JOIN TblPay ON tbl_Header.HeaderID=TblPay.HeaderID) INNER JOIN TblProducts ON tbl_Header.HeaderID=TblProducts.HeaderID WHERE (((tbl_Header.HeaderID)= " & NO & " ));", Con)
الان نحن نملك داتا ادابتر DA وتم تخزين جميع البيانات به الان نقوم بتعبئة الداتا ست بالبيانات كالتالي
PHP كود :
DA.Fill(frm_Print.DataSet1, "SalahDT")
ونقوم بامر فتح الفورم الذي يحتوي علي عارض التقارير
PHP كود :
frm_Print.Show()
ليكون الكود النهائي كالتالي
PHP كود :
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
SaveHeader()
Save_TblProducts()
Save_TblPay()
Try
Dim NO As String = Val(txtBillNo.Text)
Dim DA As New OleDbDataAdapter("SELECT tbl_Header.HeaderID, tbl_Header.CustomerName, tbl_Header.OutDate, tbl_Header.BillTottal, TblPay.Paid, TblProducts.ProductsName, TblProducts.ProductsCount, TblProducts.ProductsPrice, TblProducts.ProductsTottal FROM (tbl_Header INNER JOIN TblPay ON tbl_Header.HeaderID=TblPay.HeaderID) INNER JOIN TblProducts ON tbl_Header.HeaderID=TblProducts.HeaderID WHERE (((tbl_Header.HeaderID)= " & NO & " ));", Con)
DA.Fill(frm_Print.DataSet1, "SalahDT")
frm_Print.Show()
Catch ex As Exception
MsgBox(ex.Message)
End Try
MessageBox.Show("تم حفظ الفاتورة بنجاح ", "تم", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
End Sub
والآن مع الصور
التقرير في وضع المعاينة
صورة مقربة للتقرير
وهكذا نكون انتهينا من عمل فاتورة مبيعات وربطها بداتا ست وحفظها في قاعدة البيانات وطباعتها
لاتنسونا بصالح الدعاء
دمتم بخير
