الدرس الثامن والعشرون -الطباعة في البرنامج . - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : الأقسام التعليمية - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=90) +--- قسم : قسم دورات المنتدى (http://vb4arb.com/vb/forumdisplay.php?fid=113) +---- قسم : دورة بناء برنامج لإدارة السوبر ماركت من الألف إلى الياء (http://vb4arb.com/vb/forumdisplay.php?fid=128) +---- الموضوع : الدرس الثامن والعشرون -الطباعة في البرنامج . (/showthread.php?tid=5716) |
الدرس الثامن والعشرون -الطباعة في البرنامج . - RaggiTech - 15-10-12 [b]كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم .السلام عليكم ورحمة الله وبركاته . [/b] في هذا الدرس الأخير من هذا القسم سوف نتطرق لطباعة بعض التقارير ونتائج البحث .
تقرير البضائع .
سوف نصمم هذا التقرير ليعرض العمليات التي جرت على كل بضاعة ، وتنقسم إلى قسمين لا فرق بينهم سوى في خاصية Kind التي تحدد إما مبيعات أو مشتروات .
لذا سوف نضع الزرين في Frm_Report1 ، وسوف نرى الفرق الوحيد بينهم . والآن لنر عناصر التصميم ، فهو مثل التقرير السابق تماماً ، ما عدا أن الحقول سوف تكون : رقم - تاريخ - كمية - سعر . وسوف تكون مصادرها من قاعدة البيانات : Number - Date - Count - Price
سوف نضيف مربعات عناوين RptLabel من l1 وحتى l5 لنعرض فيهم معلومات هذه البضاعة .
هكذا نكون قد انهينا التصميم ، وبعد رسم زري الطباعة للمبيعات والمشتريات تحت اسم Command3(0) للمبيعات و Command3(1) للمشتريات ، فسوف نبدا الكود بالطريقة المعتادة بالشكل التالي : Dim cn As ADODB.Connection
Dim Rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Folder & "db1.mdb;" & "Jet OLEDB atabase Password=" & PassWord Set Rs = New ADODB.Recordset نقطة الاختلاف هي تحديد مصدر البيانات ، وحيث أن Index يمثل لنا 0 أو 1 مثل تلك التي تمثلها الخاصية Kind في قاعدة البيانات للمبيعات والمشتريات ، فإننا نستطيع كتابة الكود التالي :
Set Rs = cn.Execute(sql_now & " and kind=" & Index
)
Set DataReport2.DataSource = Rs
ولكن من هي
sql_now ؟
لأننا لن نستطيع لاحقاً أن نعرف العملية الحالية لأن المستخدم قد يغير التاريخ دون ضغط زر ( تنفيذ ) مما يؤدي لحدوث خطأ ، من أجل ذلك سنعرف هذا المتغير في قسم التصاريخ Genral
Dim sql_now
وفي الجزء الأول من كود التنفيذ سنغير الشكل ليصبح كالتالي :
If Option1.Value = True Then
sql = "select * from tb_sel_bay where product=" & num & " and kind=" & i
sql_now = "select * from tb_sel_bay where product=" & num
Else sql = "select * from tb_sel_bay where product=" & num & " and kind=" & i & " and date between#" & Format(MaskEdBox1.Text, "MM/DD/YYYY") & "# and #" & Format(MaskEdBox2.Text, "MM/DD/YYYY") & "#"
sql_now = "select * from tb_sel_bay where product=" & num & " and date between#" & Format(MaskEdBox1.Text, "MM/DD/YYYY") & "# and #" & Format(MaskEdBox2.Text, "MM/DD/YYYY") & "#" End If
وهذا ما يجعل sql_now يحتوي على الوضع الحالي دون تفريق بين المبيعات والمشتريات ، وهذا ما سنقوم بعمله في كود الطباعة .
نعود لمواصلة الكود ، وسننقل البيانات نقلاً طبيعياً كالتالي ، ثم نقوم باظهار التقرير بصورة طبيعية ، وقد شرحت معظم هذه الطرق في التقرير السابق : DataReport2.Sections("Section2").Controls("l1").Ca ption = Lbl_name
DataReport2.Sections("Section2").Controls("l2").Ca ption = lbl_cate DataReport2.Sections("Section2").Controls("l3").Ca ption = lbl_fact DataReport2.Sections("Section2").Controls("l4").Ca ption = lbl_prc DataReport2.Sections("Section2").Controls("l5").Ca ption = lbl_cnt Select Case Index Case 0 DataReport2.Sections("Section2").Controls("label1" ).Caption = "تقرير باجمالي مبيعات بضاعة"
Case 1
DataReport2.Sections("Section2").Controls("label1" ).Caption = "تقرير باجمالي مشتريات بضاعة"
End Select
DataReport2.Sections("Section2").Controls("label3" ).Caption = Info(2 )
DataReport2.Sections("Section2").Controls("label4" ).Caption
= "هاتف : " & Info(3)
DataReport2.Show
Set cn = Nothing
Set Rs = Nothing الدرس الثامن والعشرون -الطباعة في البرنامج . - RaggiTech - 15-10-12 طباعة التقرير بين تاريخين شاملاً التقرير اليومي .
بمثل طريقة الدرس السابق ، سوف نصمم الشاشة كما تعلمنا بحيث تحتوي على المعلومات التالية :
رقم العملية - اسم البضاعة - التاريخ - الكمية - السعر . ومصادرهم : tb_sel_bay.number - name - date - tb_sel_bay.count -tb_Sel_bay.price
وتكون مربعات العناوين الخمسة التي اضفناها في التقرير السابق مستمرة ولكنها سوف تعرض المعلومات التالية :
* اليوم من الأسبوع .
* عدد عمليات المبيعات . * عدد عمليات المشتريات . * اجمالي سعر المبيعات . * اجمالي سعر المشتريات وهي معلومات معروضة في الفورم .
مجدداً سوف نستخدم طريقة sql_now لمعرفة جملة الاستعلام المنفذة حالياً ، كما سنستخدم أيضاً dt1 و dt2 لمعرفة التاريخ ، وأيضاً typلمعرفة هل الاستعلام بين تاريخين أم ليوم واحد فقط . سوف نغير الأسطر التالية من كود التنفيذ : If Label2.Visible = False Then
SQL = "select * from tb_sel_bay where kind=0 and date=#" & Format(MaskEdBox1.Text, "MM/DD/YYYY") & "#"
Else
SQL = "select * from tb_sel_bay where kind=0 and date between #" & Format(MaskEdBox1.Text, "MM/DD/YYYY") & "# and #" & Format(MaskEdBox2.Text, "MM/DD/YYYY") & "#"
End If
إلى :
If Label2.Visible = False Then
SQL = "select * from tb_sel_bay where kind=0 and date=#" & Format(MaskEdBox1.Text, "MM/DD/YYYY") & "#"
sql_now = "select tb_sel_bay.*,tb_product.* from tb_sel_bay,tb_product where date=#" & Format(MaskEdBox1.Text, "MM/DD/YYYY") & "# and tb_product.number = tb_sel_bay.product" dt1 = MaskEdBox1.Text typ = 0
Else SQL = "select * from tb_sel_bay where kind=0 and date between #" & Format(MaskEdBox1.Text, "MM/DD/YYYY") & "# and #" & Format(MaskEdBox2.Text, "MM/DD/YYYY") & "#"
sql_now = "select tb_sel_bay.*,tb_product.* from tb_sel_bay,tb_product where date between #" & Format(MaskEdBox1.Text, "MM/DD/YYYY") & "# and #" & Format(MaskEdBox2.Text, "MM/DD/YYYY") & "# and tb_product.number = tb_sel_bay.product" dt1 = MaskEdBox1.Text dt2 = MaskEdBox2.Text
typ = 1
End If وأخيراً كود الطباعة تماماً مثل المرة السابقة مع بعض التغييرات الطفيفة فقط :
Private Sub Command3_Click(Index As Integer
)
Dim cn As ADODB.Connection
Dim Rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Folder & "db1.mdb;" & "Jet OLEDB atabase Password=" & PassWord Set Rs = New ADODB.Recordset Set Rs = cn.Execute(sql_now & " and kind=" & Index )
Set DataReport3.DataSource = Rs
DataReport3.Sections("Section2").Controls("l1").Ca ption = Lbl_day
DataReport3.Sections("Section2").Controls("l2").Ca ption = lbl_cnt1 DataReport3.Sections("Section2").Controls("l3").Ca ption = lbl_cnt2 DataReport3.Sections("Section2").Controls("l4").Ca ption = lbl_prc1 DataReport3.Sections("Section2").Controls("l5").Ca ption = lbl_prc2 Select Case Index Case 0 If typ = 0 Then DataReport3.Sections("Section2").Controls("label1" ).Caption = "تقرير المبيعات ليوم " & dt1
Else DataReport3.Sections("Section2").Controls("label1" ).Caption = "تقرير المبيعات للمدة بين " & dt1 & " و " &dt2
End If Case 1 If typ = 0 Then DataReport3.Sections("Section2").Controls("label1" ).Caption = "تقرير المشتريات ليوم " & dt1
Else DataReport3.Sections("Section2").Controls("label1" ).Caption = "تقرير المشتريات للمدة بين " & dt1 & " و " &dt2
End If End Select DataReport3.Sections("Section2").Controls("label3" ).Caption = Info(2) DataReport3.Sections("Section2").Controls("label4" ).Caption
= "هاتف : " & Info(3)
DataReport3.Show
Set cn = Nothing
Set Rs = Nothing End Sub [b] طباعة نتائج البحث .
لطباعة تقرير حول البحث ، فإننا لا نحتاج لأكثر من تصميم الشاشة الأولى تماماً ... كل ما سنغير فيه هو جملة الاستعلام .
نقوم بعمل شاشة شبيهة تماماً بالشاشة الأولى دون أي تغيير ، ونعود لشاشة البحث لكتابة كود الطباعة . قبل كتابة كود الطباعة سوف نقوم باضافة كل من Sql_now لعرض جملة الاستعلام الحالية كما تعلمنا سابقاً ، وكل من a1,a2,a3 لتوضيح متغيرات عملية البحث الثلاثة : البحث بدلالة ، معامل البحث ، كلمة البحث . ونكتب الكود ضمن عملية البحث وذلك في الدالة Search كما ترى : sql_now = SQL
a1 = Combo1.Text a2 = Combo2.Text a3 = Text1.Text والآن ننتقل لكتابة الكود ، وفي البداية الاتصال بقاعدة البيانات :
If sql_now = "" Then Exit Sub
Dim cn As ADODB.Connection Dim Rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Folder & "db1.mdb;" & "Jet OLEDB atabase Password=" & PassWord Set Rs = New ADODB.Recordset Set Rs = cn.Execute(sql_now )
Set DataReport4.DataSource = Rs
ضبط المعلومات المعروضة ، وتغيير العنوان :
DataReport4.Sections("Section2").Controls("label3" ).Caption = Info(2
)
DataReport4.Sections("Section2").Controls("label4" ).Caption
= "هاتف : " & Info(3)
DataReport4.Sections("Section2").Controls("label1" ).Caption
= "نتائج البحث عن بضائع ( " & a1 & a2 & a3 & " )"
استكمال عملية الطباعة : DataReport4.Show
Set cn = Nothing
Set Rs = Nothing هذا هو الدرس الأخير من هذا القسم ، في القسم القادم سوف نقوم بتحسين أداء البرنامج واضافة اشرطة الأدوات بإذن الله .
والله الموفق ...
[/b]
والسلام عليكم ورحمة الله وبركاته . الدرس الثامن والعشرون -الطباعة في البرنامج . - RaggiTech - 15-10-12 الجزء الأول من المرفقات للبرنامج حتى الآن ... الدرس الثامن والعشرون -الطباعة في البرنامج . - RaggiTech - 15-10-12 الجزء الثاني من المرفقات للبرنامج حتى الآن ... الدرس الثامن والعشرون -الطباعة في البرنامج . - RaggiTech - 15-10-12 الجزء الثالث والأخير من المرفقات للبرنامج حتى الآن ... |