في المثال المرفق بعد اختيار المحصل والعميل تظهر بيانات العميل والمبلغ المستحق عليه وتظهر على اليسار قائمة الأقساط مرتبة شهريا المطلوب بعد كتابة المبلغ المدفوع ( القسط ) والضغط على حفظ يتم حفظ المبلغ في جدول a2 في حقل TotalPaid بناء على ترتيب الأقساط وان يتم توزيع المبلغ على حقل الربح RebhPaid والقسط QestPaid على أساس القيمة الموجودة مسبقا في rebh و Qest إذا تم حفظ ذلك يتم بعد ذلك توزيع الربح على المساهمين العملاء في a1 بناء على حصة كل عميل من Capital وكذلك للمحصلين في جدول mo بناء على النسبة المقررة لهم في Rebh% .
حفظ تسديدات العملاء
تم عمل الكود التالي لحفظ المطلب الأول وهو القسط كامل :
If MsgBox("هل تريد بالتأكيد حفظ البيانات", vbInformation + vbYesNo, "حفظ") = vbYes Then
CurrentDb.Execute "UPDATE a2 SET a2.qpaid = " & Me.a2 & ", AqsadQard.cheqno = " & Me.a3 & ",AqsadQard.qplace = '" & Me.a4 & "', a2.pdate = '" & Me.a1 & "' WHERE (((AqsadQard.AqsNo)=" & DLookup("AqsNo", "a2", "a1=" & 0 & " and NoFile=" & Me.NoFile) & "));"
Me.a22.Requery
DoCmd.SetWarnings False
Dim mysql, frm As String
frm = "[Forms]![QardPaid]"
mysql = "UPDATE qard SET qard.qpaid = " & frm & "![pp]WHERE (((qard.nocard)=" & frm & "![Nocard]));"
DoCmd.RunSQL mysql
MsgBox "تم حفظ البيانات "
Else
MsgBox "تم الإلغاء"
End Ifولكن باقي المطلوب لم أجد له حلاً حتى الآن . :happy:
تفضل اخى
جرب هذا الكود
If MsgBox("åá ÊÑíÏ ÈÇáÊÃßíÏ ÍÝÙ ÇáÈíÇäÇÊ", vbInformation + vbYesNo, "ÍÝÙ") = vbYes Then
Dim x1, x2 As Long
x1 = Me.a2 * DLookup("rebh", "a2", "TotalPaid=" & 0 & " and n=" & Me.NoFile) / DLookup("Amount", "a2", "TotalPaid=" & 0 & " and n=" & Me.NoFile)
x2 = Me.a2 * DLookup("Qest", "a2", "TotalPaid=" & 0 & " and n=" & Me.NoFile) / DLookup("Amount", "a2", "TotalPaid=" & 0 & " and n=" & Me.NoFile)
CurrentDb.Execute "UPDATE a2 SET a2.TotalPaid = " & Me.a2 & ", a2.chn = " & Me.a3 & ", a2.bank = '" & Me.a4 & "', a2.RebhPaid = " & x1 & ", a2.QestPaid = " & x2 & ", a2.dpaid = #" & Me.a1 & "# WHERE (((a2.Ns)=" & DLookup("ns", "a2", "TotalPaid=" & 0 & " and n=" & Me.NoFile) & "));"
Me.aa2.Requery
MsgBox "Êã ÍÝÙ ÇáÈíÇäÇÊ "
Else
MsgBox "Êã ÇáÅáÛÇÁ"
End Ifأحسنت أستاذي
وماذا عن توزيع الأرباح على المساهمين والمحصلين ؟
كما قلت سابقاً بالنسبة للعملاء يكون التوزيع على أساس رأسمال Capital في جدول a1 ويوجد بالمثال السابق عميلين الأول رأسماله 500 والثاني 400 ريال .
وكذلك بالنسبة للمحصلين على أساس النسبة المعطاة لهم وهي 5% لكل محصل كماهي موجودة في Rebh% في الجدول mo .
أي لو افترضنا أنه تم سداد 800 ريال منها 100 ريال أرباح فيتم توزيعها بالشكل الآتي :
المحصلين = 10% ، محصل 1 = 5 ريال ، محصل 2 = 5 ريال
العملاء = 90% ، عميل 1 = 50 ريال ، عميل 2 = 40 ريال
أينك يا أستاذ ؟!!
اليك التعديل المطلوب
If MsgBox("åá ÊÑíÏ ÈÇáÊÃßíÏ ÍÝÙ ÇáÈíÇäÇÊ", vbInformation + vbYesNo, "ÍÝÙ") = vbYes Then
Dim x1, x2 As Long
x1 = Me.a2 * DLookup("rebh", "a2", "TotalPaid=" & 0 & " and n=" & Me.NoFile) / DLookup("Amount", "a2", "TotalPaid=" & 0 & " and n=" & Me.NoFile)
x2 = Me.a2 * DLookup("Qest", "a2", "TotalPaid=" & 0 & " and n=" & Me.NoFile) / DLookup("Amount", "a2", "TotalPaid=" & 0 & " and n=" & Me.NoFile)
CurrentDb.Execute "UPDATE a2 SET a2.TotalPaid = " & Me.a2 & ", a2.chn = " & Me.a3 & ", a2.bank = '" & Me.a4 & "', a2.RebhPaid = " & x1 & ", a2.QestPaid = " & x2 & ", a2.dpaid = #" & Me.a1 & "# WHERE (((a2.Ns)=" & DLookup("ns", "a2", "TotalPaid=" & 0 & " and n=" & Me.NoFile) & "));"
Me.aa2.Requery
CurrentDb.Execute "UPDATE a1 SET a1.Rebh = " & x1 * 0.9 & "* a1.Capital /" & DSum("Capital", "a1") & ";"
CurrentDb.Execute "UPDATE mo SET mo.Rebh = " & x1 * 0.1 & "* mo.Rebhp/" & DSum("Rebhp", "mo") & ";"
MsgBox "Êã ÍÝÙ ÇáÈíÇäÇÊ "
Else
MsgBox "Êã ÇáÅáÛÇÁ"
End Ifتم تعديل هذه المشاركة بواسطة mrnooo2000 في 8 أكتوبر 2010 في 00:47
رائع .. مشكووور جزيلاً .
إذا أردت أن يكون الربح تراكميا ، أي أنه في كل مرة يكون فيه ربح يتم إضافته على القديم لا أن يحل محله كما هو الآن فكيف يتم ذلك ؟
تقوم باضافة القيمة الموجودة
CurrentDb.Execute "UPDATE a1 SET a1.Rebh = a1.Rebh +" & x1 * 0.9 & "* a1.Capital /" & DSum("Capital", "a1") & ";"
CurrentDb.Execute "UPDATE mo SET mo.Rebh = mo.Rebh+" & x1 * 0.1 & "* mo.Rebhp/" & DSum("Rebhp", "mo") & ";"لقد لاحظت على كود الحفظ ما يلي :
1- إذا تم ترك خانة رقم الشيك أو البنك فارغة أو تم نقل التركيز إلى خانات أخرى كالمحصل مثلا تظهر الرسالة التالية :
مشكلاً على الكود :
x2 = Me.a2 * DLookup("Qest", "a2", "TotalPaid=" & 0 & " and n=" & Me.NoFile) / DLookup("Amount", "a2", "TotalPaid=" & 0 & " and n=" & Me.NoFile)2- إذا أردت أن يكون نسبة الربح في الكود التالي وهي ( 10% ) يتم قراءتها من المصدر الجدول mo لا أن تكتب في الكود مباشرة لأنها تتغير من منستخدم إلى آخر فكيف يتم ذلك ؟
CurrentDb.Execute "UPDATE mo SET mo.Rebh = mo.Rebh +" & x1 * 0.1 & "* mo.Rebhp/" & DSum("Rebhp", "mo") & ";"تم تعديل هذه المشاركة بواسطة jafar089 في 8 أكتوبر 2010 في 15:17
اقتباس1- إذا تم ترك خانة رقم الشيك أو البنك فارغة أو تم نقل التركيز إلى خانات أخرى كالمحصل مثلا تظهر الرسالة التالية :
استخدم هذا الكود فى البداية
If Len(Nz(Me.a4, "")) = 0 Then MsgBox "no bank " Exit Sub End If
اقتباس2- إذا أردت أن يكون نسبة الربح في الكود التالي وهي ( 10% ) يتم قراءتها من المصدر الجدول mo لا أن تكتب في الكود مباشرة فكيف يتم ذلك ؟
CurrentDb.Execute "UPDATE mo SET mo.Rebh = mo.Rebh +" & x1 * DSum("Rebhp", "mo") & "* mo.Rebhp/" & DSum("Rebhp", "mo") & ";"جزيت خيرا ..
ولكن في الملاحظة الأولى المطلوب ليس إظهار رسالة بالفراغات وإنما المطلوب أن يسمح بالحفظ حتى من دون رقم الشيك أو البنك أي ممكن أن يكونا فارغين ( لأنه ممكن يكون الدفع نقدا ) .
أيضا كما قلت سابقاً بعد كتابة المبلغ ومن ثم الضغط على انتر حتى الوصول إلى المحصل مرة أخرى ( أي نقل التركيز إليه ) وإذا تم الضغط على حفظ فلا يستجيب وتظهر الرسالة السابقة أعلاه .
بالنسبة للجزء الاول
CurrentDb.Execute "UPDATE a2 SET a2.TotalPaid = " & Me.a2 & ", a2.chn = " & Nz(Me.a3,0) & ", a2.bank = '" & Nz(Me.a4,0) & "', a2.RebhPaid = " & x1 & ", a2.QestPaid = " & x2 & ", a2.dpaid = #" & Me.a1 & "# WHERE (((a2.Ns)=" & DLookup("ns", "a2", "TotalPaid=" & 0 & " and n=" & Me.NoFile) & "));"اما بالنسبة للجزء الثانى
فانا لا افهم ما قصدك
تم تعديل هذه المشاركة بواسطة mrnooo2000 في 8 أكتوبر 2010 في 18:53
المقصود هو :
عند اختيار محصل ثم عميل ثم من القائمة نضغط على البيانات ثم يذهب المؤشر إلى خانة التاريخ ثم إلى خانة المبلغ ثم خانة رقم الشيك فخانة البنك ثم إذا ضغطت انتر فسينتقل المؤشر ( التركيز ) إلى المحصل بعدها جرب اضغط على زر حفظ فستظهر الرسالة التالية :
تم تعديل هذه المشاركة بواسطة jafar089 في 8 أكتوبر 2010 في 21:33
يحدث ذلك لانك تنتقل الى سجل جديد
ستجد ان رقم الملف 0
للتغلب على ذلك اضف هذا الكود لحدث بعد التحديث لكومبو العميل
Me.AllowAdditions = False
لقد وضعت الكود في حدث عند الخروج في مربع النص ( اسم البنك ) ومشى معاي
أشكرك كثيرا يا أستاذ