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


كود :
[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 وذلك بالشكل التالي :





كود :
[align=right]If T5!kind = 0 Then
BUY
Else
SEL
End If[/align]
حيث أن Sel و Buy هما العمليتان اللذان قمنا ببرمجتهما خلال الاضافة مع بعض التعديلات البسيطة :





كود :
[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]
حيث أن QBColor(15) تعني الأبيض لمزيد من المعلومات حول الألوان في فيجوال بيسك ، راجع الدرس التالي :الموجود في القسم العام .


ويتم اطلاق هذه الدالة بداية في حدث النقر على الجدول . ولكن بعد أن نحتفظ برقم الصف الحالي في متغير ما .
ماذا سيحدث أيضاً في أمر النقر على الجدول 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]
أخيراً لا تنس أن تستدعي أمر Refresh_Me ثانية .




كود :
[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]
وذلك كما تعلمنا سابقاً في Frm_Show .


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


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



الملفات المرفقة
.zip   prog12.zip (الحجم : 185.69 ك ب / التحميلات : 83)
}}}
تم الشكر بواسطة: أبو البراء الجزائري


الردود في هذا الموضوع
الدرس السادس عشر - التحكم في عمليات البيع والشراء - بواسطة Raggi Tech - 15-10-12, 08:11 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الدرس الرابع والثلاثون والأخير - نبذة عن العملية العكسية + تجهيز البرنامج على Cd RaggiTech 0 13,819 15-10-12, 09:10 AM
آخر رد: RaggiTech
  الدرس الثالث والثلاثون - كيفية عمل اعداد Setup للبرنامج RaggiTech 0 4,308 15-10-12, 09:08 AM
آخر رد: RaggiTech
  الدرس الثاني والثلاثون - التحويل إلى exe RaggiTech 0 4,341 15-10-12, 09:07 AM
آخر رد: RaggiTech
  الدرس الحادي والثلاثون - تعددية المستخدمين - البحث وطباعة الفواتير - التعليمات ... RaggiTech 2 5,308 15-10-12, 09:05 AM
آخر رد: RaggiTech
  الدرس الثلاثون - التعامل مع شريط الأدوات ToolBar RaggiTech 0 4,192 15-10-12, 08:59 AM
آخر رد: RaggiTech
  الدرس التاسع والعشرون - التعامل مع أشرطة الحالة Statues Bar RaggiTech 0 3,883 15-10-12, 08:57 AM
آخر رد: RaggiTech
  الدرس الثامن والعشرون -الطباعة في البرنامج . RaggiTech 4 5,769 15-10-12, 08:56 AM
آخر رد: RaggiTech
  الدرس السابع والعشرون - مقدمة إلى التعامل مع التقارير من خلال DataReport RaggiTech 2 6,607 15-10-12, 08:45 AM
آخر رد: RaggiTech
  الدرس السادس والعشرون - التقارير اليومية ، والتقارير بين تاريخين RaggiTech 1 4,735 15-10-12, 08:39 AM
آخر رد: RaggiTech
  الدرس الخامس والعشرون - الإحصائيات والرسوم البيانية RaggiTech 0 4,040 15-10-12, 08:37 AM
آخر رد: RaggiTech

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


يقوم بقرائة الموضوع: