15-10-12, 08:36 AM
كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .
تقارير المصانع والأنواع :
هناك الكثير مما يمكن أن تقدمه كتقرير لنوع أو مصنع ، لكننا لن نتوسع كثيراً بل كل ما سوف نعرضه هو منتجات المصنع والنوع .
كل ما نحتاج إليه لتصميم هذا الفورم هو :
السلام عليكم ورحمة الله وبركاته .
تقارير المصانع والأنواع :
هناك الكثير مما يمكن أن تقدمه كتقرير لنوع أو مصنع ، لكننا لن نتوسع كثيراً بل كل ما سوف نعرضه هو منتجات المصنع والنوع .
كل ما نحتاج إليه لتصميم هذا الفورم هو :
أداة مربع تحرير وسرد Combo ، وثلاث مربعات عناوين Label لعرض اسم النوع أو المصنع ، عدد البضائع تحته ، وحالته ( محذوف - غير محذوف ) .
نحتاج أيضاً في كلا الفورمين إلى جدول MSFlexGrid لنعرض فيه البضائع تحت هذا المصنع أو ذاك النوع ، وأخيراً زر أمر نكتب فيها Unload Me وذلك للاغلاق .
ولنضبط خاصية MDIChild لكلا الفورمين بحيث تصبح True ، ونسميهما Frm_Report2 و Frm_Report3 على التوالي .
والآن سنبدا في كتابة الأكواد ، ونبدأ بحدث Form_Load لكلا الفورمين .
في هذا الحدث سوف نضبط احداثيات الموقع كما تعودنا مع كل فورم ، ومن ثم نعبئ القائمة بالموردين أو بالمصانع :
ولنضبط خاصية MDIChild لكلا الفورمين بحيث تصبح True ، ونسميهما Frm_Report2 و Frm_Report3 على التوالي .
والآن سنبدا في كتابة الأكواد ، ونبدأ بحدث Form_Load لكلا الفورمين .
في هذا الحدث سوف نضبط احداثيات الموقع كما تعودنا مع كل فورم ، ومن ثم نعبئ القائمة بالموردين أو بالمصانع :
كود :
[align=right]Me.Width = 4800
Me.Height = 3600
Me.Left = ((MDIForm1.Width - Me.Width) / 2)
Me.Top = ((MDIForm1.Height - Me.Height) / 2) - 40
Me.Show
Combo1.Clear
T2.MoveFirst
For i = 0 To T2.RecordCount - 1
Combo1.AddItem T2!Name
T2.MoveNext
Next i
Combo1.ListIndex = 0[/align]
مع ملاحظة أنه في الفورم الثالث الخاص بالمصانع سوف نستخدم T3 بدلاً من T2 .
والآن سنقوم بعمل حدث Flex خاص بتكوين الجدول ، والفرق بين الفورمين في هذا التكوين أننا في الأول نضع معلومة ( مصنع البضاعة ) دون النوع ، والعكس في الفورم الثاني :
والآن سنقوم بعمل حدث Flex خاص بتكوين الجدول ، والفرق بين الفورمين في هذا التكوين أننا في الأول نضع معلومة ( مصنع البضاعة ) دون النوع ، والعكس في الفورم الثاني :
كود :
[align=right]Private Sub Flex()
MSFlexGrid1.Clear
MSFlexGrid1.Cols = 6
MSFlexGrid1.Rows = T4.RecordCount + 1
MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = "ت"
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = "رقم"
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = " اسم البضاعة"
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = "المصنع"
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = "السعر"
MSFlexGrid1.Col = 5
MSFlexGrid1.Text = "العدد"
MSFlexGrid1.ColAlignment(0) = 5
MSFlexGrid1.ColAlignment(1) = 5
MSFlexGrid1.ColAlignment(2) = 3
MSFlexGrid1.ColAlignment(3) = 5
MSFlexGrid1.ColAlignment(4) = 5
MSFlexGrid1.ColAlignment(5) = 5
MSFlexGrid1.ColWidth(0) = 500
MSFlexGrid1.ColWidth(1) = 500
MSFlexGrid1.ColWidth(2) = 1500
MSFlexGrid1.ColWidth(3) = 1500
End Sub[/align]
وأخيراً نقوم بعمل الحدث Combo1_Click والذي يطلق عند اختيار المستخدم لنوع أو مصنع ما .
في البداية نقوم بعمل جملة الاستعلام والتي ستكون في حالة المصانع :
في البداية نقوم بعمل جملة الاستعلام والتي ستكون في حالة المصانع :
كود :
[align=right]SQL = "select tb_product.*,tb_category.*,tb_factory.* from tb_product,tb_factory,tb_category where tb_product.category=tb_category.number and tb_product.factory=tb_factory.number and tb_factory.name='" & Combo1.Text & "'"
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset[/align]
)
وسنغير شرط البحث من Tb_Factory.name إلى Tb_Category في حالة الأنواع .
والآن سنختبر شرط وجود سجلات ، فإن لم يكن هناك أي بضائع تحت هذا النوع-المصنع :
وسنغير شرط البحث من Tb_Factory.name إلى Tb_Category في حالة الأنواع .
والآن سنختبر شرط وجود سجلات ، فإن لم يكن هناك أي بضائع تحت هذا النوع-المصنع :
كود :
[align=right]If T4.RecordCount = 0 Then
Lbl_name = "اسم المصنع : " & Combo1.Text
lbl_cnt = "عدد بضائع المصنع : " & T4.RecordCount
lbl_sta = "الحالة : عادي"
Flex
Exit Sub
End If[/align]
بالرغم من عدم وجود سجلات سنضبط بعض الخصائص ، كما سنستدعي الحدث Flex والذي يكون الجدول دون أي صفوف .
لاحقاً لن يكتمل التنفيذ إلا في حالة وجود سجلات ، حيث نقوم بالانتقال للسجل الأخير ثم إلى الأول وذلك للتحديث :
لاحقاً لن يكتمل التنفيذ إلا في حالة وجود سجلات ، حيث نقوم بالانتقال للسجل الأخير ثم إلى الأول وذلك للتحديث :
كود :
[align=right]T4.MoveLast
T4.MoveFirst[/align]
ثم نضبط مجموعة من المعلومات المتعلقة بهذا النوع ... لاحظ الأمر التالي :
كود :
[align=right]Lbl_name = "اسم المصنع : " & Combo1.Text
lbl_cnt = "عدد بضائع المصنع : " & T4.RecordCount
If T4.Fields("tb_category.view") = False Then
lbl_sta = "الحالة : محذوف"
Else
lbl_sta = "الحالة : عادي"
End If
Flex[/align]
والآن ... لماذا في حالة وجود بضائع تحت النوع أو المصنع تأكدنا من الحالة ( محذوف أم غير ذلك ) ، أما في حالة عدم وجود بضائع فإننا نضع مباشرة ( عادي ) ؟؟؟ ذلك انه لو كان محذوف ولا توجد تحته بضائع لكان قد تم حذفه سابقاً .
بعد ذلك نقوم باظهار فورم الانتظار ونضبط خصائصة كما أسلفنا شرحه :
بعد ذلك نقوم باظهار فورم الانتظار ونضبط خصائصة كما أسلفنا شرحه :
كود :
[align=right]Frm_Wait.Show
Frm_Wait.ProgressBar1.Max = T4.RecordCount
Frm_Wait.ProgressBar1.Min = 0
Frm_Wait.ProgressBar1.Value = 0[/align]
ومن ثم نبدأ في وضع البيانات في أماكنها الصحيحة :
كود :
[align=right]For i = 0 To T4.RecordCount - 1
Frm_Wait.ProgressBar1.Value = Frm_Wait.ProgressBar1.Value + 1
DoEvents
MSFlexGrid1.Row = i + 1
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = T4.Fields("tb_product.Number")
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = T4.Fields("tb_product.name")
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = T4.Fields("tb_category.name")
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = T4!price
MSFlexGrid1.Col = 5
MSFlexGrid1.Text = T4.Fields("Count")
T4.MoveNext
Next i[/align]
لاحقاً نقوم بعمل Sort ترتيب للجدول مع اعادة الترتيب كما سبق :
كود :
[align=right]MSFlexGrid1.Col = 2
MSFlexGrid1.Sort = 7
MSFlexGrid1.Col = 0
For i = 0 To T4.RecordCount - 1
MSFlexGrid1.Row = i + 1
MSFlexGrid1.Text = i + 1
Next i[/align]
أخيراً نغلق قاعدة البيانات ، ونخفي فورم الانتظار :
كود :
[align=right]T4.Close
Unload Frm_Wait[/align]
والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
والسلام عليكم ورحمة الله وبركاته .