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

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


التقارير اليومية .


في هذا الدرس سوف نتعرف على كيفية عمل نموذج مبسط للتقارير اليومية .


ما نحتاج إليه في هذه الشاشة هو أداة
MaskEdBox1 للتاريخ ، والذي سيكون افتراضياً تاريخ اليوم .
نحتاج أيضاً إلى زر للتنفيذ ، وإلى جدولين لعرض المبيعات والمشتريات ، وزر لاغلاق الفورم .
أيضاً نحتاج إلى خمسة


Labels على النحو التالي :
اليوم من الأسبوع : عدد عمليات المبيعات - عدد عمليات المشتريات - اجمالي سعر المبيعات - اجمالي سعر المشتريات .


وأخيراً نضبط خصائص الفورم ، فنجعل 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]

وكذلك الثاني تماماً .

يتبع ..
}}}
تم الشكر بواسطة:
#2
كاتب المشاركة : أحمد جمال

التقارير بين تاريخين .


خلال هذا الدرس سوف نقوم بتطبيق التقرير بين تاريخين ، ولأنه لا يختلف كثيراً عن التقرير اليومي لذلك سنضعهم معاً في نفس الشاشة ، وسوف نسر التغييرات التي سنقوم بها من جراء هذه العملية .


أولاً : تغييرات في التصميم :
سنضيف اداة MaskEdBox2 لعرض التاريخ الثاني ، اضافة إلى Label2 يحتوي على كلمة ( إلى ) توضع بين التاريخين ، ونضبط Visible=False لهما ، فيما عدا ذلك لن نغير شيئاً حتى في أماكن الازار والخانات وغيرها .


ثانياً : تغييرات أوامر اظهار الشاشات :
سوف نخفي أولاً الشاشة Frm_Report4 لكي تعود إلى وضعها الطبيعي من حيث أماكن الأزرار وغيرها ( وضع التقرير اليومي ) .
بعد ذلك فيما لو كان النوع الثاني فإننا نظهر الاداتين السابقتين ، ونضبط احداثيات Command2 وهو زر التنفيذ من جديد ، وذلك بالشكل التالي :



كود :
[align=right]Case 0
Unload Frm_Report4
Frm_Report4.Show
Case 1
Unload Frm_Report4
Frm_Report4.Show
Frm_Report4.MaskEdBox2.Visible = True
Frm_Report4.Label2.Visible = True
Frm_Report4.Command2.Left = 120
Frm_Report4.Command2.Value = True[/align]

ثالثاً : تغييرات حدث

Form_Load :
لن نضيف سوى أمر وضع التاريخ الحالي حتى في الخانة الثانية :


كود :
[align=right]MaskEdBox2.Text = MaskEdBox1.Text[/align]
رابعاً : التغييرات في زر ( نفذ ) :
* لن نضع اليوم من الأسبوع في حالة التاريخين ، بل سنضع : مدة مفتوحة ، فيصبح الكود كالتالي :


كود :
[align=right]If Label2.Visible = False Then
x = dayname(MaskEdBox1.Text)
Lbl_day.Caption = "اليوم من الأسبوع : " & x
Else
Lbl_day.Caption = "اليوم من الأسبوع : " & " فترة مفتوحة"
End If[/align]
* لن نستعلم مباشرة بواسطة علامة المساواة ، بل سنستخدم المعامل


Between إذا تحقق الشرط :



كود :
[align=right]If Label2.Visible = False Then
SQL = "select sum(price) as prc,count(*) as cnt from tb_sel_bay where kind=0 and date=#" & Format(MaskEdBox1.Text, "MM/DD/YYYY") & "#"
Else
SQL = "select sum(price) as prc,count(*) as cnt 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[/align]
وكذلك مع جمل استعلام الشراء .

* في جملة الاستعلام الخاصة بوضع البيانات أيضاً سنتأكد من استخدام عامل المساواة أو


Between :


كود :
[align=right]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[/align]
وكذلك مع الجملة الثانية .


خامساً : التغييرات على مستوى كود


Flex1 و Flex2 .
لن نغير شيئاً سوى أنه في حالة بين تاريخين سنضيف خانة لعرض التاريخ ، ولذلك نضيف الكود التالي قبل نهاية أمر Flex1 :


كود :
[align=right]If Label2.Visible = True Then
MSFlexGrid1.Cols = 6
MSFlexGrid1.Col = 5
MSFlexGrid1.Text = "التاريخ"
MSFlexGrid1.ColWidth(5) = 1200
MSFlexGrid1.ColAlignment(5) = 5
End If[/align]
وكذلك مع Flex2 .


سادساً: التغيرات على مستوى كود


Put_Data1 و Put_Data2 :



كود :
[align=right]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
If Label2.Visible = True Then
.Col = 5
.Text = T4!Date
End If
T4.MoveNext
Next i[/align]
وأيضاً مع Put_Data2 .


لن ننسى ايضاً الأوامر الموجودة في القائمة في الشاشة الرئيسية ، والتي ستصبح بالشكل التالي :



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

Select Case Index
Case 0
Unload Frm_Report4
Frm_Report4.Show
Case 1
Unload Frm_Report4
Frm_Report4.Show
Frm_Report4.MaskEdBox2.Visible = True
Frm_Report4.Label2.Visible = True
Frm_Report4.Command2.Left = 120
Frm_Report4.Command2.Value = True
Case 3

End Select[/align]


هكذا فقط ، والملف مرفق مع التغييرات ...


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



الملفات المرفقة
.rar   prog22.rar (الحجم : 189.29 ك ب / التحميلات : 213)
}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الدرس الرابع والثلاثون والأخير - نبذة عن العملية العكسية + تجهيز البرنامج على Cd RaggiTech 0 11,188 15-10-12, 09:10 AM
آخر رد: RaggiTech
  الدرس الثالث والثلاثون - كيفية عمل اعداد Setup للبرنامج RaggiTech 0 3,981 15-10-12, 09:08 AM
آخر رد: RaggiTech
  الدرس الثاني والثلاثون - التحويل إلى exe RaggiTech 0 4,072 15-10-12, 09:07 AM
آخر رد: RaggiTech
  الدرس الحادي والثلاثون - تعددية المستخدمين - البحث وطباعة الفواتير - التعليمات ... RaggiTech 2 4,958 15-10-12, 09:05 AM
آخر رد: RaggiTech
  الدرس الثلاثون - التعامل مع شريط الأدوات ToolBar RaggiTech 0 3,826 15-10-12, 08:59 AM
آخر رد: RaggiTech
  الدرس التاسع والعشرون - التعامل مع أشرطة الحالة Statues Bar RaggiTech 0 3,606 15-10-12, 08:57 AM
آخر رد: RaggiTech
  الدرس الثامن والعشرون -الطباعة في البرنامج . RaggiTech 4 5,299 15-10-12, 08:56 AM
آخر رد: RaggiTech
  الدرس السابع والعشرون - مقدمة إلى التعامل مع التقارير من خلال DataReport RaggiTech 2 6,116 15-10-12, 08:45 AM
آخر رد: RaggiTech
  الدرس الخامس والعشرون - الإحصائيات والرسوم البيانية RaggiTech 0 3,768 15-10-12, 08:37 AM
آخر رد: RaggiTech
  الدرس الرابع والعشرون - تقارير المصانع والأنواع RaggiTech 0 3,475 15-10-12, 08:36 AM
آخر رد: RaggiTech

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


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