15-10-12, 08:38 AM
كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .
التقارير اليومية .
في هذا الدرس سوف نتعرف على كيفية عمل نموذج مبسط للتقارير اليومية .
السلام عليكم ورحمة الله وبركاته .
التقارير اليومية .
في هذا الدرس سوف نتعرف على كيفية عمل نموذج مبسط للتقارير اليومية .
ما نحتاج إليه في هذه الشاشة هو أداة
MaskEdBox1 للتاريخ ، والذي سيكون افتراضياً تاريخ اليوم .
نحتاج أيضاً إلى زر للتنفيذ ، وإلى جدولين لعرض المبيعات والمشتريات ، وزر لاغلاق الفورم .
أيضاً نحتاج إلى خمسة
أيضاً نحتاج إلى خمسة
Labels على النحو التالي :
اليوم من الأسبوع : عدد عمليات المبيعات - عدد عمليات المشتريات - اجمالي سعر المبيعات - اجمالي سعر المشتريات .
وأخيراً نضبط خصائص الفورم ، فنجعل MDIChild=True ونزيل عناصر التحكم من أعلى الفورم .
والآن نبدا في كتابة أكواد هذا الفورم .
فأولاً نضبط احداثيات الفورم كما اعتدنا مع كل فورم من هذا النوع :
وأخيراً نضبط خصائص الفورم ، فنجعل MDIChild=True ونزيل عناصر التحكم من أعلى الفورم .
والآن نبدا في كتابة أكواد هذا الفورم .
فأولاً نضبط احداثيات الفورم كما اعتدنا مع كل فورم من هذا النوع :
كود :
[align=right]Me.Width = 4800
Me.Height = 4905
Me.Left = ((MDIForm1.Width - Me.Width) / 2)
Me.Top = ((MDIForm1.Height - Me.Height) / 2) - 40
Me.Show[/align]
ثم نضبط تاريخ اليوم ونضعه في الأداة :
كود :
[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[/align]
وأخيراً نقوم بالضغط على الزر الخاص بالتنفيذ ليكون افتراضياً تاريخ اليوم :
كود :
[align=right]Command2.Value = True[/align]
والآن سنقوم بعمل دالة Function نقوم بتمرير رقم اليوم لها وتعطينا اسم اليوم ، ونستخدم في ذلك الدالة WeekDay ، ونبدأ أولاً بتكوين الدالة :
كود :
[align=right]Private Function dayname(x As Date) As String
End Function[/align]
والآن أصبح لدينا التاريخ في متغير x وسنستخدم معه الدالة WeekDay والتي نمرر لها بارميترين ( التاريخ ، ويوم بداية الأسبوع ) وتعيد رقم اليوم من الأسبوع :
كود :
[align=right]x = Weekday(x, vbSaturday)[/align]
والآن سنحول هذا الرقم إلى نص بالشكل التالي :
كود :
[align=right]Select Case x
Case 1
dayname = "السبت"
Case 2
dayname = "الأحد"
Case 3
dayname = "الاثنين"
Case 4
dayname = "الثلاثاء"
Case 5
dayname = "الأربعاء"
Case 6
dayname = "الخميس"
Case 7
daynmae = "الجمعة"
End Select[/align]
والآن نبدأ في تكوين زر
Command2 والخاص بـ ( نفذ ) .
نعرف أولاً أربع متغيرات لنخزن فيها معلومات ال Labels وذلك في قسم التصاريح Genral :
كود :
[align=right]Dim a1 As Integer, a2 As Integer, a3 As Integer, a4 As Integer[/align]
وفي بداية أوامر هذا الزر نقوم بتصفيرها كلها :
كود :
[align=right]a1 = 0: a2 = 0: a3 = 0: a4 = 0[/align]
ونستدعي الدالة التي قمنا بعملها ونضعها في مكانها المخصص :
كود :
[align=right]x = dayname(MaskEdBox1.Text)
Lbl_day.Caption = "اليوم من الأسبوع : " & x[/align]
بعد ذلك نقوم بالاستعلام عن عمليات اليوم ، البيع ثم الشراء ، ونضع القيم المستقاه بواسطة دوال الاستعلام في المتغيرات التي قمنا بتعريفها :
كود :
[align=right]SQL = "select sum(price) as prc,count(*) as cnt from tb_sel_bay where kind=0 and date=#" & Format(MaskEdBox1.Text, "MM/DD/YYYY") & "#"
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)
If T4!cnt <> 0 Then
a1 = T4!cnt
a2 = T4!prc
End If
T4.Close
SQL = "select sum(price) as prc,count(*) as cnt from tb_sel_bay where kind=1 and date=#" & Format(MaskEdBox1.Text, "MM/DD/YYYY") & "#"
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)
If T4!cnt <> 0 Then
a3 = T4!cnt
a4 = T4!prc
End If
T4.Close
lbl_cnt1.Caption = "عدد مبيعات اليوم : " & a1
lbl_prc1.Caption = "اجمالي سعر المبيعات : " & a2
lbl_cnt2.Caption = "عدد مشتريات اليوم : " & a3
lbl_prc2.Caption = "اجمالي سعر المشتريات : " & a4[/align]
والآن نقوم ببناء الجدولين ، ولاحظ أنه يمكننا الاستفادة من خاصية
Index كما في الشاشات السابقة :
كود :
[align=right]Flex1
Flex2[/align]
واللذان قمنا بعملهما سابقاً بالشكل التالي :
كود :
[align=right]Private Sub Flex1()
MSFlexGrid1.Clear
MSFlexGrid1.Cols = 5
MSFlexGrid1.Rows = a1 + 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.ColAlignment(0) = 5
MSFlexGrid1.ColAlignment(1) = 5
MSFlexGrid1.ColAlignment(2) = 5
MSFlexGrid1.ColAlignment(3) = 5
MSFlexGrid1.ColAlignment(4) = 5
MSFlexGrid1.ColWidth(0) = 500
MSFlexGrid1.ColWidth(1) = 500
MSFlexGrid1.ColWidth(2) = 1500
MSFlexGrid1.ColWidth(3) = 1200
End Sub
Private Sub Flex2()
MSFlexGrid2.Clear
MSFlexGrid2.Cols = 5
MSFlexGrid2.Rows = a3 + 1
MSFlexGrid2.Row = 0
MSFlexGrid2.Col = 0
MSFlexGrid2.Text = "ت"
MSFlexGrid2.Col = 1
MSFlexGrid2.Text = "رقم"
MSFlexGrid2.Col = 2
MSFlexGrid2.Text = "البضاعة"
MSFlexGrid2.Col = 3
MSFlexGrid2.Text = "الكمية"
MSFlexGrid2.Col = 4
MSFlexGrid2.Text = "السعر"
MSFlexGrid2.ColAlignment(0) = 5
MSFlexGrid2.ColAlignment(1) = 5
MSFlexGrid2.ColAlignment(2) = 5
MSFlexGrid2.ColAlignment(3) = 5
MSFlexGrid2.ColAlignment(4) = 5
MSFlexGrid2.ColWidth(0) = 500
MSFlexGrid2.ColWidth(1) = 500
MSFlexGrid2.ColWidth(2) = 1500
MSFlexGrid2.ColWidth(3) = 1200
End Sub[/align]
ثم نقوم بالاستعلام عن البيانات المطلوبة ، ووضعها في اماكنها المناسبة عبر استدعاء الحدثين
Put_Data1 و Put_Data2 :
يتبع ..
كود :
[align=right]SQL = "select * from tb_sel_bay where kind=0 and date=#" & Format(MaskEdBox1.Text, "MM/DD/YYYY") & "#"
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)
Put_Data1
T4.Close
SQL = "select * from tb_sel_bay where kind=1 and date=#" & Format(MaskEdBox1.Text, "MM/DD/YYYY") & "#"
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)
Put_Data2
T4.Close[/align]
في حدث Put_Data سنقوم بوضع البيانات في الجدول كما هي العادة ، ولكن المخزن لدينا في الجدول هو رقم البضاعة وليس اسمها ، لذا سنقوم بالاستعلام عنه أولاً ، وسنضطر لتعرف T6 في الموديول :
كود :
[align=right]Public T6 As Recordset[/align]
بهذا يكون شكل الأمر
كود :
[align=right]Private Sub Put_Data1()
n = 0
If T4.RecordCount <> 0 Then
T4.MoveLast
T4.MoveFirst
End If
With MSFlexGrid1
For i = 0 To T4.RecordCount - 1
n = n + 1
.Row = n
.Col = 0
.Text = n
.Col = 1
.Text = T4!Number
.Col = 2
SQL = "select name from tb_product where number=" & T4!product
Set T6 = D1.OpenRecordset(SQL, dbOpenDynaset)
.Text = T6!Name
T6.Close
.Col = 3
.Text = T4!Count
.Col = 4
.Text = T4!price
T4.MoveNext
Next i
End With
End Sub[/align]
وكذلك الثاني تماماً .
يتبع ..