ولنعد الآن إلى الفورم الجديد ولنر كيف ستتم عملية التعديل .
في البداية نتأكد من ادخال عدد للبضاعة :
في البداية نتأكد من ادخال عدد للبضاعة :
كود :
[align=right]If Val(Text2.Text) <= 0 Then
MsgBox "لا بد من ادخال الكمية", vbExclamation + arabic, "اضافة عملية"
Exit Sub
End If[/align]ثم ننتقل إلى السجل صاحب العملية الحالية :
كود :
[align=right]If T5.RecordCount = 0 Then Exit Sub
T5.MoveFirst
For i = 0 To T5.RecordCount - 1
If T5!Number = lbl_num.Caption Then Exit For
T5.MoveNext
Next i[/align]والآن تعني عملية التعديل هذه أن نقوم باعادة الأوضاع كما كانت عليه قبل هذه العملية ، ومن ثم تنفيذ عملية البيع ( حذف العملية القديمة ، اضافة العملية الجديدة ) تقريباً .
لذا سننتقل أولاً إلى البضاعة المطلوبة :
لذا سننتقل أولاً إلى البضاعة المطلوبة :
كود :
[align=right]If T1.RecordCount <> 0 Then T1.MoveFirst
For i = 0 To T1.RecordCount - 1
If T1!Number = T5!product Then Exit For
T1.MoveNext
Next i[/align]ثم نقوم تحديث معلومات
T5 وذلك بالشكل التالي :
حيث أن Sel و Buy هما العمليتان اللذان قمنا ببرمجتهما خلال الاضافة مع بعض التعديلات البسيطة :
و
تغيير لون الصف المحدد :
لنحقق عملية تغير لون الصف الذي حددناه نحتاج بادئ ذي بدئ إلى عمل دالة تقوم بميح جميع الالوان الموجودة في MSFlexGrid ، وسيسير التغيير بعدد الصفوف وهو العدد المخزن في المتغير Mycnt ، وبالعرض بعدد الأعمدة وهو 5 مع تجاهل العمود الرئيسي والصف الرئيسي ... ولنر الآن هذه الدالة :
حيث أن QBColor(15) تعني الأبيض لمزيد من المعلومات حول الألوان في فيجوال بيسك ، راجع الدرس التالي :الموجود في القسم العام .
ويتم اطلاق هذه الدالة بداية في حدث النقر على الجدول . ولكن بعد أن نحتفظ برقم الصف الحالي في متغير ما .
ماذا سيحدث أيضاً في أمر النقر على الجدول Click ، كل ما لدينا أننا سنبدا من العمود الثاني وحتى السادس مع ثبات الصف ونجعل اللون أحمراً .
لاحظ الكود التالي :
*** ويمكن بدلاً من مسح كل الجدول باللون الأبيض مع كل ضغطة عليه ، يمكننا مسح فقط آخر سجل تم تحديده ، وذلك بتخزين قيمة آخر سجل بعد عملية التحديد .
سنبدأ الآن في برمجة زر الحذف :
في بداية عملية الحذف نقوم باظهار الرسالة التقليدية ، هل ما زلت تريد الاستمرار ؟ وذلك بعد التأكد من أننا لسنا في Row=0 .
والآن سنظهر خياراً جديداً ، هل تريد حذف هذه العملية وكافة النتائج التي ترتبت عليها ( زيادة أو انقاص البضاعة ) أم الحذف المجرد فقط ، أم الغاء الأمر بالكلية ؟
والآن نتنقل كما هي العادة إلى السجل المطلوب :
والآن إذا كان يريد ازالتها مع كافة النتائج المترتبة عليها فسنقوم بعمل ذلك ، وذلك بالشكل التالي :
ثم يأتي دور أمر الحذف .
أخيراً لا تنس أن تستدعي أمر Refresh_Me ثانية .
تعديلات بسيطة في أمر Refresh_Me الخاص بشاشة التحكم في المبيعات .
التعديل الأول بسيط جداً ، كل ما عليك هو اضافة الامر التالي لنهاية الإجراء :
وذلك لكي يقف المؤشر على ( لاشيء ) بعد هذه العملية .
التعديل الثاني هو استخدام Frm_Wait في العملية ، لذلك سنضع الأمر التالي قبل حلقة التكرار :
وبداخل حلقة التكرار نكتب الأمر التالي :
وفي نهاية الكود :
وذلك كما تعلمنا سابقاً في Frm_Show .
والملف في المرفقات ...
والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
كود :
[align=right]If T5!kind = 0 Then
BUY
Else
SEL
End If[/align]كود :
[align=right]Sub BUY()
If Val(Text2.Text) > T1!Count + T5!Count Then
MsgBox "الكمية التي تطلبها غير متوفرة وهي : " & Val(Text2.Text) & " الموجود - إذا تم التعديل - حالياً : " & T1!Count + T5!Count, vbExclamation + arabic, "كمية غير متوفرة"
Exit Sub
End If
T1.Edit
T1!Count = T1!Count + T5!Count
T1!Count = T1!Count - Val(Text2.Text)
T1.Update
With T5
.Edit
!product = T1!Number
!Date = MaskEdBox1.Text
!Count = Val(Text2.Text)
!price = Val(Text1.Text)
!kind = 0
.Update
End With
MsgBox "تمت العملية بنجاح ، يوجد من البضاعة حالياً : " & T1!Count & " وحدة", vbInformation + arabic, "اتمام العملية"
Unload Me
End Sub[/align]كود :
[align=right]Sub SEL()
T1.Edit
T1!Count = T1!Count - T5!Count
T1!Count = T1!Count + Val(Text2.Text)
T1.Update
With T5
.Edit
!product = T1!Number
!Date = MaskEdBox1.Text
!Count = Val(Text2.Text)
!price = Val(Text1.Text)
!kind = 1
.Update
End With
MsgBox "تمت العملية بنجاح ، يوجد من البضاعة حالياً : " & T1!Count & " وحدة", vbInformation + arabic, "اتمام العملية"
Unload Me
End Sub[/align]تغيير لون الصف المحدد :
لنحقق عملية تغير لون الصف الذي حددناه نحتاج بادئ ذي بدئ إلى عمل دالة تقوم بميح جميع الالوان الموجودة في MSFlexGrid ، وسيسير التغيير بعدد الصفوف وهو العدد المخزن في المتغير Mycnt ، وبالعرض بعدد الأعمدة وهو 5 مع تجاهل العمود الرئيسي والصف الرئيسي ... ولنر الآن هذه الدالة :
كود :
[align=right]Sub Clear_Color()
For i = 1 To MyCnt
For j = 1 To 5
MSFlexGrid1.Row = i
MSFlexGrid1.Col = j
MSFlexGrid1.CellBackColor = QBColor(15)
Next j
Next i[/align]ويتم اطلاق هذه الدالة بداية في حدث النقر على الجدول . ولكن بعد أن نحتفظ برقم الصف الحالي في متغير ما .
ماذا سيحدث أيضاً في أمر النقر على الجدول Click ، كل ما لدينا أننا سنبدا من العمود الثاني وحتى السادس مع ثبات الصف ونجعل اللون أحمراً .
لاحظ الكود التالي :
كود :
[align=right]If MSFlexGrid1.Row = 0 Then Exit Sub
Now_Row = MSFlexGrid1.Row
Clear_Color
MSFlexGrid1.Row = Now_Row
For i = 1 To 5
MSFlexGrid1.Col = i
MSFlexGrid1.CellBackColor = QBColor(12)
Next i[/align]سنبدأ الآن في برمجة زر الحذف :
في بداية عملية الحذف نقوم باظهار الرسالة التقليدية ، هل ما زلت تريد الاستمرار ؟ وذلك بعد التأكد من أننا لسنا في Row=0 .
كود :
[align=right]If MSFlexGrid1.Row = 0 Then Exit Sub
Dim sure
sure = MsgBox("هل تريد بالتأكيد حذف هذه العملية ؟", vbQuestion + vbYesNo + arabic, "")
If sure = vbNo Then Exit Sub[/align]كود :
[align=right]sure = MsgBox("هل تريد حذف العملية وكافة النتائج المترتبة عليها ( زيادة أو نقص للبضاعة ) أم الحذف فقط ؟", vbQuestion + vbYesNoCancel + arabic, "تأكيد الحذف")
If sure = vbCancel Then Exit Sub[/align]كود :
[align=right]MSFlexGrid1.Col = 1
If T5.RecordCount <> 0 Then T5.MoveFirst
MsgBox MSFlexGrid1.Text
For i = 0 To T5.RecordCount - 1
If T5!Number = MSFlexGrid1.Text Then Exit For
T5.MoveNext
Next i[/align]كود :
[align=right]If sure = vbYes Then
If T1.RecordCount <> 0 Then T1.MoveFirst
For i = 0 To T1.RecordCount - 1
If T1!Number = T5!product Then Exit For
T1.MoveNext
Next i
T1.Edit
Select Case T5!kind
Case 0
T1!Count = T1!Count + T5!Count
Case 1
T1!Count = T1!Count - T5!Count
End Select
T1.Update
End If[/align]كود :
[align=right]T5.Delete[/align]كود :
[align=right]Refresh_Me[/align]تعديلات بسيطة في أمر Refresh_Me الخاص بشاشة التحكم في المبيعات .
التعديل الأول بسيط جداً ، كل ما عليك هو اضافة الامر التالي لنهاية الإجراء :
كود :
[align=right]MSFlexGrid1.Row = 0[/align]التعديل الثاني هو استخدام Frm_Wait في العملية ، لذلك سنضع الأمر التالي قبل حلقة التكرار :
كود :
[align=right]Frm_Wait.Show
Frm_Wait.ProgressBar1.Max = T5.RecordCount
Frm_Wait.ProgressBar1.Min = 0
Frm_Wait.ProgressBar1.Value = 0[/align]كود :
[align=right]Frm_Wait.ProgressBar1.Value = Frm_Wait.ProgressBar1.Value + 1
DoEvents[/align]وفي نهاية الكود :
كود :
[align=right]Unload Frm_Wait[/align]والملف في المرفقات ...
والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
