تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس الثالث والعشرون - تقارير البضائع
#1
كاتب الموضوع : أحمد جمال

بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .

تقارير البضائع .

سنبدأ بإذن الله في هذا الدرس في عمل قائمة التقارير ، وسنقوم تحديداً بعمل تقارير البضائع ، وسنحاول جاهدين من خلال هذا الدرس تطبيق مفهوم المصفوفات ( مصفوفات الأدوات ) والتي نتعامل معها من خلال خاصية Index وسننوه كلما سنحت الفرصة عن كمية الأكواد التي تم اختصارها اعتماداً على المصفوفات .


وسنبدأ في البداية بتصميم الفورم .
فعن محتويات الفورم فنحتاج إلى قائمة نعرض فيها البضائع ، وأداتي اختيار لتحديد نوع التقرير ( شامل أو بين تاريخين ) ، وبناء عليه سنضع اثنين من أداة MaskedEditBox .
سنضع أيضاً زر ( تنفيذ ) لتنفيذ التقرير ، وزر اغلاق للفورم ، كما سنضع أداتي MsFlexGeid ولكن لهما نفس الاسم ، ولها Index يساوي 0 أو 1 . وتختص بعرض عمليات البيع والشراء لهذه البضاعة .
ونضع أيضاً خمس مربعات عناوين Labels لنضع فيها معلومات حول البضاعة المختارة في التقرير ( الاسم - المصنع - النوع - الكمية - السعر ) .

فيما سؤجل عمليات الاحصائيات إلى درس لاحق إن شاء الله .

والآن انتهى التصميم ، ولنبدء في كتابة الكود .


في الفورم الرئيسي لن يكون هناك سوى أمر التاكد من وجود بضائع ، ومن ثم معرفة Index القائمة وبناء عليه نظهر الفورم وذلك بالشكل التالي :



كود :
[align=right]If T1.RecordCount = 0 Then
MsgBox "لا توجد أي بضائع للبحث عنها ، لاضافة بضاعة جديدة اختر اضافة - اضافة بضاعة", vbExclamation + arabic, "عرض البضائع"
Exit Sub
End If

Select Case Index
Case 0
Frm_Report1.Show
End Select[/align]

أما في حدث
Form_Load للفورم الخاص بالتقرير فسنضبط أولاً خصائص الارتفاع :


كود :
[align=right]Me.Width = 4800
Me.Height = 6615
Me.Left = ((MDIForm1.Width - Me.Width) / 2)
Me.Top = ((MDIForm1.Height - Me.Height) / 2) - 40
Me.Show[/align]

ثم نحدد تاريخ اليوم لنضعه في مربعي


MaskEditBox :


كود :
[align=right]Dim Myday, Mymonth, Myyear
Myday = Day(Now)
If Len(Myday) = 1 Then Myday = 0 & Myday
Mymonth = Month(Now)
If Len(Mymonth) = 1 Then Mymonth = 0 & Mymonth
Myyear = Year(Now)
MaskEdBox1.Text = Myday & "/" & Mymonth & "/" & Myyear
MaskEdBox2.Text = MaskEdBox1.Text[/align]
ومن ثم نملئ القائمة بالبضائع الحالية :


كود :
[align=right]Combo1.Clear
T1.MoveFirst
For i = 0 To T1.RecordCount - 1
Combo1.AddItem T1!Name
T1.MoveNext
Next i[/align]
وأخيراً نجعل


Option1 محدداً - لم نضبطه وقت التصميم لغرض ما سنشرحه لاحقاً - ، ومن ثم نحدد العنصر الأول في القائمة ، ونطلق زر التنفيذ ، حيث أن تقريراً عن البضاعة الأولى سيكون هو الموجود بصورة افتراضية :


كود :
[align=right]Option1.Value = True
Combo1.ListIndex = 0
Command2.Value = True[/align]
والآن لنر لماذا ضبطنا Option1 وقت التصميم ، ذلك أننا نريد في حالة اراد المستخدم تقريراً شاملاً أن لا نعطيه التحكم في مربعي التاريخ ، ونقوم بذلك عبر خاصية Click لأزرار الاختيار بالشكل التالي :


كود :
[align=right]Private Sub Option1_Click()
MaskEdBox1.Enabled = False
MaskEdBox2.Enabled = False
End Sub[/align]
و



كود :
[align=right]Private Sub Option2_Click()
MaskEdBox1.Enabled = True
MaskEdBox2.Enabled = True
End Sub[/align]
*** ويمكن ايضاً الاستعاضة عن OptionButton باستخدام CheckBox .

والآن سنضيف متغيران لمعرفة عدد سجلات البيع والشراء ، ولأننا نتعامل مع مصفوفة فسنكتب الأمر التالي في قسم التصاريح Genral :

Dim MyCnt(1


)


مما يعني أن لدينا متغيرات MyCnt(0) و MyCnt(1)

والآن سنبرمج أوامر Command2 وهو زر تنفيذ التقرير .
في البداية سنقوم بعمل استعلام عن اسم هذه البضاعة لمعرفة المعلومات المطلوبة عنها ووضعها في أماكنها :


كود :
[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_product.name='" & Combo1.Text & "'"
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)

Lbl_name = "اسم البضاعة : " & T4.Fields("tb_product.name")
lbl_cate = "النوع : " & T4.Fields("tb_category.name")
lbl_fact = "المصنع : " & T4.Fields("tb_factory.name")
lbl_prc = "السعر : " & T4.Fields("price")
lbl_cnt = "الكمية الموجودة : " & T4.Fields("count")

Dim num, i
num = T4.Fields("tb_product.Number")
T4.Close[/align]

وقد سبق شرح جملة الاستعلام أكثر من مرة .


يتبع ...
}}}
تم الشكر بواسطة:
#2
الجزء الثاني : سنقوم بالاستعلام حسب قيمة Option1 ( بين تاريخين أو عام ) وباستخدام رقم البضاعة المخزن في المتغير Num وذلك عن الـ Kind مرة عندما يساوي الصفر ومرة عند الواحد ... مما يمكننا من جعلها في حلقة تكرار ... لاحظ الكود التالي :



كود :
[align=right]For i = 0 To 1
If Option1.Value = True Then
SQL = "select * from tb_sel_bay where product=" & num & " and kind=" & i
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") & "#"
End If
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)[/align]
حيث يأخذ i قيما ما بين 0 و 1 .

لن نغلق حلقة التكرار فما زلنا في حاجة إليها ، وعلينا أولاً معرفة عدد السجلات الموجودة في الاستعلام وتخزينها في MyCnt رقم 0 أو 1 حسب قيمة i وذلك بالشكل التالي :


كود :
[align=right]If T4.RecordCount <> 0 Then
T4.MoveLast
T4.MoveFirst
End If
MyCnt(i) = T4.RecordCount[/align]

والآن علينا عمل اجراءين ، اجراء خاص بتكوين الجدول ، واجراء خاص بوضع البيانات فيها ، وبدلاً من عمل اجراءات منفصلة لكل جدول فسنعتمد مجدداً على قيمة i إما 0 أو 1 ، وسنعد اجراء اسمه FlexGrid لتكوين الجدول ويستقبل قيمة المتغير i ليضبط الجدول المحدد ... لاحظ كود الاجراء :



كود :
[align=right]Private Sub FlexGrid(r As Integer)
MSFlexGrid(r).Clear
MSFlexGrid(r).Cols = 5
MSFlexGrid(r).Rows = MyCnt(r) + 1

MSFlexGrid(r).Row = 0
MSFlexGrid(r).Col = 0
MSFlexGrid(r).Text = "ت"
MSFlexGrid(r).Col = 1
MSFlexGrid(r).Text = "رقم"
MSFlexGrid(r).Col = 2
MSFlexGrid(r).Text = "التاريخ"
MSFlexGrid(r).Col = 3
MSFlexGrid(r).Text = "الكمية"
MSFlexGrid(r).Col = 4
MSFlexGrid(r).Text = "السعر"

MSFlexGrid(r).ColAlignment(0) = 5
MSFlexGrid(r).ColAlignment(1) = 5
MSFlexGrid(r).ColAlignment(2) = 5
MSFlexGrid(r).ColAlignment(3) = 5
MSFlexGrid(r).ColAlignment(4) = 5

MSFlexGrid(r).ColWidth(0) = 500
MSFlexGrid(r).ColWidth(1) = 500
MSFlexGrid(r).ColWidth(3) = 1200
End Sub[/align]

وسنستدعيه بالشكل التالي :


كود :
[align=right]FlexGrid (i)[/align]
وبنفس الطريقة كود Put_Data لوضع البيانات :


كود :
[align=right]Private Sub Put_Data(r As Integer)
n = 0
With MSFlexGrid(r)

For i = 0 To T4.RecordCount - 1
n = n + 1
.Row = n
.Col = 0
.Text = n
.Col = 1
.Text = T4!Number
.Col = 2
.Text = T4!Date
.Col = 3
.Text = T4!Count
.Col = 4
.Text = T4!price
T4.MoveNext
Next i
End With
End Sub[/align]
ونستدعيه ، ثم نغلق القاعدة ، ونغلق حلقة التكرار :


كود :
[align=right]Put_Data (i)
T4.Close
Next i[/align]



أخيراً لا تنس كود اغلاق الفورم :


كود :
[align=right]Private Sub Command1_Click()
Unload Me
End Sub[/align]


والله الموفق .
والسلام عليكم ورحمة الله وبركاته .


الملفات المرفقة
.zip   prog19.zip (الحجم : 190.24 ك ب / التحميلات : 146)
}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الدرس الرابع والثلاثون والأخير - نبذة عن العملية العكسية + تجهيز البرنامج على Cd RaggiTech 0 11,112 15-10-12, 09:10 AM
آخر رد: RaggiTech
  الدرس الثالث والثلاثون - كيفية عمل اعداد Setup للبرنامج RaggiTech 0 3,979 15-10-12, 09:08 AM
آخر رد: RaggiTech
  الدرس الثاني والثلاثون - التحويل إلى exe RaggiTech 0 4,065 15-10-12, 09:07 AM
آخر رد: RaggiTech
  الدرس الحادي والثلاثون - تعددية المستخدمين - البحث وطباعة الفواتير - التعليمات ... RaggiTech 2 4,952 15-10-12, 09:05 AM
آخر رد: RaggiTech
  الدرس الثلاثون - التعامل مع شريط الأدوات ToolBar RaggiTech 0 3,822 15-10-12, 08:59 AM
آخر رد: RaggiTech
  الدرس التاسع والعشرون - التعامل مع أشرطة الحالة Statues Bar RaggiTech 0 3,602 15-10-12, 08:57 AM
آخر رد: RaggiTech
  الدرس الثامن والعشرون -الطباعة في البرنامج . RaggiTech 4 5,294 15-10-12, 08:56 AM
آخر رد: RaggiTech
  الدرس السابع والعشرون - مقدمة إلى التعامل مع التقارير من خلال DataReport RaggiTech 2 6,107 15-10-12, 08:45 AM
آخر رد: RaggiTech
  الدرس السادس والعشرون - التقارير اليومية ، والتقارير بين تاريخين RaggiTech 1 4,347 15-10-12, 08:39 AM
آخر رد: RaggiTech
  الدرس الخامس والعشرون - الإحصائيات والرسوم البيانية RaggiTech 0 3,766 15-10-12, 08:37 AM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم