[VB.NET] الشرح المتكامل لطريقة عمل فاتورة مبيعات وطباعتها - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم قواعد البيانات (http://vb4arb.com/vb/forumdisplay.php?fid=40) +--- قسم : قسم مقالات قواعد البيانات تحت بيئة الـ.NET (http://vb4arb.com/vb/forumdisplay.php?fid=42) +--- الموضوع : [VB.NET] الشرح المتكامل لطريقة عمل فاتورة مبيعات وطباعتها (/showthread.php?tid=11852) |
الشرح المتكامل لطريقة عمل فاتورة مبيعات وطباعتها - الفيومي116 - 24-03-15 بسم الله الرحمن الرحيم بسم الله والصلاة والسلام علي رسول الله ( صلى الله عليه وسلـم ) إخواني الإعزاء وأساتذتنا الأفاضل في البداية عذراً على المقدمة والتي قد تبدو حادة بعض الشيء وذلك بسبب التقارير في فيجوال بيسك دوت نت التقارير ليست سهلة وليست صعبة أيضا ولكن عندما بدأت اتعلم عمل التقارير واجهتني مشكلة الشروحات فأغلب المواضيع التي يطلب فيها الاعضاء المساعدة في عمل تقرير أجد الاجابة ( اذهب للرابط التالي ) بدون وضع حل مجدي وفي الغالب الرابط يكون لموضوع يطلب صاحبة نفس الطلب ويكون الرد عليه ( اذهب للرابط التالي ) ..... وهكذا وللأمانة تكرم بعض الاخوه لعمل مشروع ورفعه ولكن انا لا اريد كود جاهز انا اريد أن اعرف كيف حصلنا على الناتج وأعتقد أن أكثر موضوعين فقيرين جداااااااااااااااااااااااااااا في الشروحات الخاصة بهم ( الفواتير + التقارير ) لذلك وبعد أكثر من شهر في البحث عن حل استطعت بمساعدة الأخوة ان اقوم بعمل فاتورة تعتمد على ثلاث جداول ن قاعدة البيانات كيفية تصميمها وكيف نقوم بحفظها وطباعتها استرخ وأحضر كوباً من الشاي و واستعد لنبدأ من البدااااااية لأني كمبتدأ اشفق علي المبتدئين أمثالي والذين يريدون الشرح المفصل لذلك قررت أن يكون شرحي علي قدر الإمكان بسيط وسهل ومن البداية لنبدأ على بركة الله أولا نبدأ من برنامج أكسس لإنشاء قاعدة بيانات وهنا سأعتمد على الكتابة أكثر من الشرح لأن الأغلب يستطيع عمل قاعدة بيانات بسم الله : نفتح برنامج أكسس في الغالب أنا أفضل اوفيس 2007 لأن إبتداء من 2010 و 2013 فأن قاعدة بيانات أكسس محمية برقم سر بها العديد من المشاكل حسب موقع مايكروسوفت إذا فبديهيا أنا الان امام أكسس 2007 قاعدة بيانات جديدة بأسم TestDB محمية برقم سري 123456 انشاء جدول في وضع التصميم أطلق عليه (tbl_Header) وهو لرأس الفاتورة ويحتوي على الخلايا التالية HeaderID ترقيم تلقائي CustomerName نص OutDate نوع تاريخ ووقت بتنسيق تاريخ قصير "13/13/2013" ( عكاشة ستايل ) BillTottal رقم ( عدد عشري ) طبعا انا مشروعي به ما يقرب من 20 خلية ولكن هنا انا اعتمد علي فهم الطريقة ويمكنكم فهم الفكره وتطبيقها بطريقتكم الخاصة هذا الجدول به اسم العميل وتاريخ الفاتورة وتكلفتها وانا اعتمدت على ثلاث جداول وليس أثنان لسبب أنني اريد أن يكون عندي سند قبض منفصل عن الفاتورة كما سأشرحة عند الإنتهاء من شرح الجداول الجدول الثاني جدول tblProducts وبه سنضع به تفاصيل المنتجات المباعه مثل النوع والعدد والكمية والسعر كالتالي : ProductsID ترقيم تلقائي مفتاح اساسي HeaderID رقم صحيح لربطة مع الجدول السابق رأس الفاتورة ProductsID عدد صحيح لربطة مع جدول المنتجات ( هنا ساعمله نص لتقليل عدد الجداول المستخدمة في الشرح ) ProductsCount رقم ( عدد الكمية المباعه ) ProductsPrice رقم ( سعر الوحدة ) ProductsTottal رقم ( اجمالي سعر الوحدات المباعه ) الجدول الثالث والأخير هنا هو جدول المبالغ المالية المستلمة من العميل فمثلا العميل قام بشراء منتجات معينة بتكلفة 500 جنيه مصري وقام بسداد 200 جنيه والباقي سيقوم بسداد 100 جنيه علي فترات متقطعة لذلك قمت بعمل جدول خاص بالمبالغ المالية مرتبط بجدول الرأس عن طريق رقم الفاتورة اسم الجدول TblPay ويحتوي على : PayID حقل ترقيم تلقائي HeaderID رقم طويل لربطة مع جدول الرأس Paid رقم ( المبلغ المدفوع ) PaidFrom رقم ( مدفوع من ..) وهنا لان ربما في قسط من الاقساط يرسل العميل شخص آخر لسداد المبلغ المستحق PaidDate تاريخ السداد تاريخ ووقت بتنسيق تاريخ قصير ثم من أدوات قاعدة البيانات نقوم بربط الجداول كما في الصورة التالية وهكذا نكون انتهينا من قاعدة البيانات إستراحة مع فنجان صغير من القهوة ونعود بأذن الله لنستكمل ما بدأناه في رعاية الله وأرحب بالنقد والأسئلة دمتم بخير RE: الشرح المتكامل لطريقة عمل فاتورة مبيعات وطباعتها - abulayth - 24-03-15 السلام عليكم بارك الله فيك وصحتين وعافية على القهوة يعطيك العافية RE: الشرح المتكامل لطريقة عمل فاتورة مبيعات وطباعتها - الفيومي116 - 24-03-15 الجزء الثاني نبدأ من الفيجوال بيسك دوت نت 2012 وهي النسخة المفضلة لدي نبدأ على بركة الله نفتح الفيجوال بيسك ونبدأ مشروع جديد وهنا أسميته Bill نقوم بنسخ قاعدة البيانات التي صممناها في الفقرة السابقة الي مسار البرنامج في المسار التالي Bill\Bill\bin\Debug ونعود الي برنامج فيجوال بيسك من قائمة Project اختيار Add new Item ونختار كلاس جديد أسميته DAL ونبدأ مرحلة كتابة الكود بسم الله نبدأ باستيراد مكتبات العمل مع قاعدة البيانات في التصريحات العامة PHP كود : Imports System.Data.OleDb ثم تحديد جملة الإتصال PHP كود : Public Class DAL بعدها سنقوم بكتابة ثلاث دوال وهم ما سنستخدمهم في عمليات الادراج والحذف طوال عمل البرنامج وهم بالترتيب ''' الدلة المسؤولة عن الاتصال المغلق ''' الدلة المسؤولة عن الاتصال المفتوح ''' التعديل في البيانات PHP كود : ''' <summary> PHP كود : ''' <summary> '''''''''''''''''''''''''''''''''''''''''''' ( 3 ) PHP كود : ''' <summary> نقوم بحفظ الكلاس ونغلقة لن نحتاجة مره أخرى لنا عودة ان شاء الله .............................. RE: الشرح المتكامل لطريقة عمل فاتورة مبيعات وطباعتها - الفيومي116 - 24-03-15 نستكمل ما بدأناه (بعون الله وتوفيقه )في السابق وسنقوم بكتابة أكواد اضافة البيانات علي الفاتورة نذهب الآن إلى الفورم الذي سنعمل عليه فاتورة وهنا عندي Form1 افتراضيا من جدول رأس الفاتورة وجدول السداد سنضيف ما يناسبها من ادوات التحكم من مربعات نص وخلافة سأضع الشكل النهائي لصورة الفورم ولكن مايهمني حقآ هنا هو طريقة تخريج الاصناف للبيع وستكون كالتالي نضع داتا جريد فيو داخل الفورم وننسق الأدوات على النحو الذي يعجبنا وهذا هو الشكل النهائي لشكل الفورم الذي قمت بتصميمه مع الوضع في الاعتبار أنني قمت بعمل خلايا الداتا جريد فيو كما هو موضح بالصورة التالية وعمل خليه اسمها HeaderNO وحددت خاصيى فيزابل لها بالقيمة False حتي لا تظهر للمستخدم وسنستخدمها للربط مع الجدول Header ومن الملاحظ هنا أنني سأكتب بيانات كل منتج وعند كتابة الكمية المباعة والضغط علي مفتاح انتر سيتم اضافة العناصر الي الداتا جريد فيو ومسح الخلايا استعدادا لادخال منتج جديد الان انتهينا من التصميم ننتقل الي مرحلة الأكواد في البداية كان أكثر ما يشغل بالي أن جدول هيدر هو ترقيم تلقائي لرقم الفاتورة وهنا سأقوم بحفظ جدولين آخرين لابد من أن أكون اعرف رقم الفاتورة من قبل الحفظ لذلك سنقوم بكتابة كود يذهب لجدول الهيدر ويجلب آخر رقم فاتورة مسجلة ويضيف عليها رقم 1 وسنضع هذا الكود في تحميل الفورم وبذلك نضمن وجود رقم الفاتورة من بداية تحميل الفورم نستخدم الكود التالي PHP كود : Try نضع الكود السابق في تحميل الفورم بديهيا أن اسم العميل وتاريخ الفاتورة سيقوم المستخدم بتحديدهم يدويا فلن نتطرق إليهم توفيرا للوقت والمجهود ولعدم تشعب الموضوع حتى لا نخرج عن سياق موضوعنا الأساسي الان نحن نملك تكست بوكس سنكتب فيه اسم الصنف ونحدد سعرة والكمية المباعه مع العلم بأنه قمت بتحديد الخلية الاخيرة المجموع ReadOnly لاننا سنقوم بجلب المجموع اوتوماتيكيا وعندما يكون التركيز في مربع نص الكمية المباعه عند الضغط علي مفتاح انتر سيتم ادراج الخلايا في الداتا جريد فيو ومسح الخلايا ووضع التركيز علي مربع اسم الصنف استعدادا لكتابة صنف جديد ولعمل هذا نحدد مربع نص الكمية المباعه وفي حدث KeyDown سنكتب الكود التالي PHP كود : Private Sub txtCount_KeyDown(sender As Object, e As KeyEventArgs) Handles txtCount.KeyDown ليصبح شكل الفاتورة النهائي كالاتي وهنا سينتقل المستخدم الي خانة الخصم اذا اراد ان يكتب خصم علي الفاتورة أو يترك القيمة الافتراضية صفر ويذهب الي خانة المبلغ المدفوع لكتابة المبلغ المدفوع طبعا سنضع شرط ان المستخدم لن يستطيع حفظ الفاتورة اذا كان المبلغ المدفوع = صفر ولكن هذا في حدث مفتاح الحفظ لن نشرحة الان لكن يهمنا هنا أن نضع كود في حالة تغير النص في مربع المبلغ المدفوع يقوم بحساب الخصم ويقوم بطرحة من المبلغ الاجمالي للفاتورة ثم يخصم المبلغ المدفوع من الناتج ويكتب المتبقي في مربع المبلغ المتبقي وسنقوم بعمل ذلك في حدث TextChanged لمربع النص المبلغ المدفوع ويكون الكود كالتالي PHP كود : Private Sub txtPay_TextChanged(sender As Object, e As EventArgs) Handles txtPay.TextChanged حتى هذه المرحلة الكلام جميل وكلنا نعرفه ولا مشكلة من الدرس القادم بإذن الله سنبدأ بوضع أكواد الحفظ في قاعدة البيانات استعدادا لعمل تقرير الطباعة وطباعة الفاتورة وإن شاء الله سأضع ملف المشروع وملف PDF للشرح والصور في نهاية الدرس نستكمل لاحقا إن شاء الله دمتم بخير RE: الشرح المتكامل لطريقة عمل فاتورة مبيعات وطباعتها - الفيومي116 - 24-03-15 بسم الله وعلى بركة الله نبدأ مرحلة حفظ الفاتورة الآن وبعد تطبيق كل الخطوات السابقة أصبحت كل خلايا جداول قاعدة البيانات يقابلها بيانات موجودة علي الفورم بقى فقط تخزينها من البرنامج لقاعدة البيانات وهنا سأعتمد على أنني سأقوم بعمل SUB حفظ خاص لكل جدول وترتيبهم داخل اجراء مفتاح الحفظ نبدأ بالجدول الأول جدول رأس الفاتورة نقوم بإنشاء Sub جديد ونسميه SUB saveHeader ويكون الكود كالتالي PHP كود : Try حفظ جدول TblPay كود : PHP كود : Sub Save_TblPay() الآن حفظ الأصناف المباعة نقوم بعمل حلقة تكرار من صفر وحتي نهاية صفوف الداتا جريد فيو وهنا يمكننا حفظ رقم الفاتورة اما بمربع رقم الفاتورة أو بالصف المخفي من الداتا جريد فيو يكون الكود بالشكل التالي PHP كود : Sub Save_TblProducts() والآن بعد كتابة جميع الأكواد لمفتاح الحفظ نضعها في حدث Button1_Click ونراعي الترتيب حيث ((( لابد ))) من وضع SUB حفظ رأس الجدول اولاً لأن باقي الجداول مرتبطة به برقم الفاتورة ويكون الكود كالتالي : PHP كود : Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click وهكذا نكون انتهينا من 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 والآن مع الصور التقرير في وضع المعاينة صورة مقربة للتقرير وهكذا نكون انتهينا من عمل فاتورة مبيعات وربطها بداتا ست وحفظها في قاعدة البيانات وطباعتها لاتنسونا بصالح الدعاء دمتم بخير RE: الشرح المتكامل لطريقة عمل فاتورة مبيعات وطباعتها - atefkhalf2004 - 24-03-15 شكرا علي الشرح وقبله التصميم الرائع برجاء رفع هذا الفورم كلنا نحتاجه RE: الشرح المتكامل لطريقة عمل فاتورة مبيعات وطباعتها - الفيومي116 - 24-03-15 أخي الحبيب atefkhalf2004 ألا ترى معي أن الفورم بهذا الشكل بدائي جدا تكتب فيه كل المعلومات يدويا ووارد إحتمال الأخطاء ؟ سأقوم برفع الفورم لا مشكلة في ذلك ولكن ردك أوحى إلي بفكرة واحده من ضمن مشاكل اي برنامج هي تصميم الفاتورة وطباعتها والحمد لله تغلبنا عليها مارأيك في ان نجعل هذا الموضوع تفاعلي لانهاء برنامج متكامل انطلاقا من هذا الفورم ؟ تم اضافة ملف المشروع اخي الحبيب RE: الشرح المتكامل لطريقة عمل فاتورة مبيعات وطباعتها - atefkhalf2004 - 27-03-15 السيد الفاضل شكرا علي اهتمامك لكن المشروع تم عمله ب 2012 هل فيه طريقة لتحويله الي 2008 وانا اري الكريستال افضل بكثير في التقارير لكن مجهود تشكر عليه وانا استفدت منه كثير RE: الشرح المتكامل لطريقة عمل فاتورة مبيعات وطباعتها - الفيومي116 - 30-03-15 انا اسف جدا اخي والله لا أعرف طريقة تحويله لـ 2008 ولا امتلك حتى 2008 كنت عملت بيه المشروع وبالنسبة للكريستال اا مش بعرف استخدمه لو عندك شرح ليه يكون لشكل عملي ياريت ترسله RE: الشرح المتكامل لطريقة عمل فاتورة مبيعات وطباعتها - sameermohameed1681989 - 18-06-15 (30-03-15, 06:18 AM)الفيومي116 كتب : انا اسف جدا اخي والله لا أعرف طريقة تحويله لـ 2008 ولا امتلك حتى 2008 كنت عملت بيه المشروع اخى ممكن باسورد acsses ادا امكن وبارك الله فيك |