الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال فى المجاميع

بدأه mr_astra في 4 مارس 2014 · 18 رد · 375 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرفق قاعدة بيانات للمحلات (ايجار لمدة عشر سنوات )

تم عمل الاتى :-

حساب قيمة القسط

حساب تاريخ القسط

حساب اجمالى القيمة الايجارية للمحل

المطلوب:-

حساب اجمالى مبلغ الاقساط المسددة

المديونية حتى تاريخة (على سبيل المثال لو عميل سدد القسط الشهرى لغاية شهر يناير عام 2014 - يبقى المديونية حتى تاريخة هو قيمة قسط شهر فبراير عام 2014 )

مديونية مستحقة مستقبلا (على سبيل المثال لو عميل مسدد لغاية تاريخه يبقى المديونية المستحقة مستقبلا هى اجمالى لاقيمة الايجارية - اجمالى المسدد حتى تاريخة )بشرط لا يوجد اقساط متاخرة على العميل

شكرا

ehab - Copy.rar

تم تعديل هذه المشاركة بواسطة mr_astra في 4 مارس 2014 في 11:57

#2

عفوا حطيت الملف مرتين

ehab - Copy.rar

تم تعديل هذه المشاركة بواسطة mr_astra في 4 مارس 2014 في 11:57

#3

للرفع

==============

#4

تفضل :)

 

post-273849-0-50682500-1394004227_thumb.

 

جعفر

165.ehab - Copy.mdb.zip

1
#5

استاذي / جعفر

السلام عليكم

ملف رائع تسلم ايدك رغم اني  بحثت بالملف ولم اجد سوى الكودين التاليين ولم افهم كثير من المتغيرات

 ...

لكن مجهود رائع ومشكور عليه  ....

:)

اقتباس

 

Option Compare Database

 
Private Sub paid_AfterUpdate()
 
    'save the Record
    DoCmd.RunCommand acCmdSaveRecord
    
    'Call Calculate_Kest Function
    Call Form_Form1.Calculate_Kest
End Sub
وبعض المتغيرات في الكود التالي 
Option Compare Database
 
Private Sub Combo26_AfterUpdate()
Me.Combo28.Requery
End Sub
 
Private Sub Command7_Click()
'ãÊÛíÑÇÊ áÍÓÇÈ äÓÈÉ Çá 5 Ýì ÇáãíÉ
Dim a, b, c, d, e, f, g, x, y, z As Double
x = Me.kest_value
y = x + (x * 0.05)
z = y + (y * 0.05)
a = z + (z * 0.05)
b = a + (a * 0.05)
c = b + (b * 0.05)
d = c + (c * 0.05)
e = d + (d * 0.05)
f = e + (e * 0.05)
g = f + (f * 0.05)
Dim i As Integer
Dim n, m, o, p, q, r, s, t, u As Date
'ãÊÛíÑÇÊ áÍÓÇÈ ÇáÊÇÑíÎ
n = DateAdd("yyyy", 1, Me.f_date)
m = DateAdd("yyyy", 2, Me.f_date)
o = DateAdd("yyyy", 3, Me.f_date)
p = DateAdd("yyyy", 4, Me.f_date)
q = DateAdd("yyyy", 5, Me.f_date)
r = DateAdd("yyyy", 6, Me.f_date)
s = DateAdd("yyyy", 7, Me.f_date)
t = DateAdd("yyyy", 8, Me.f_date)
u = DateAdd("yyyy", 9, Me.f_date)
DoCmd.SetWarnings False
DoCmd.RunSQL "delete * from tb_kest where cus_id = " & Me.cus_id
For i = 1 To 12
DoCmd.RunSQL " insert into tb_kest (kest_date,cus_id,amount)values (#" & DateAdd("m", i * 1, Me.f_date) & "#," & Me.cus_id & "," & x & ")"
Next i
For i = 1 To 12
DoCmd.RunSQL " insert into tb_kest (kest_date,cus_id,amount)values (#" & DateAdd("m", i * 1, n) & "# ," & Me.cus_id & "," & y & ")"
Next i
For i = 1 To 12
DoCmd.RunSQL " insert into tb_kest (kest_date,cus_id,amount)values (#" & DateAdd("m", i * 1, m) & "# ," & Me.cus_id & "," & z & ")"
Next i
For i = 1 To 12
DoCmd.RunSQL " insert into tb_kest (kest_date,cus_id,amount)values (#" & DateAdd("m", i * 1, o) & "# ," & Me.cus_id & "," & a & ")"
Next i
For i = 1 To 12
DoCmd.RunSQL " insert into tb_kest (kest_date,cus_id,amount)values (#" & DateAdd("m", i * 1, p) & "# ," & Me.cus_id & "," & b & ")"
Next i
For i = 1 To 12
DoCmd.RunSQL " insert into tb_kest (kest_date,cus_id,amount)values (#" & DateAdd("m", i * 1, q) & "# ," & Me.cus_id & "," & c & ")"
Next i
For i = 1 To 12
DoCmd.RunSQL " insert into tb_kest (kest_date,cus_id,amount)values (#" & DateAdd("m", i * 1, r) & "# ," & Me.cus_id & "," & d & ")"
Next i
For i = 1 To 12
DoCmd.RunSQL " insert into tb_kest (kest_date,cus_id,amount)values (#" & DateAdd("m", i * 1, s) & "# ," & Me.cus_id & "," & e & ")"
Next i
For i = 1 To 12
DoCmd.RunSQL " insert into tb_kest (kest_date,cus_id,amount)values (#" & DateAdd("m", i * 1, t) & "# ," & Me.cus_id & "," & f & ")"
Next i
For i = 1 To 12
DoCmd.RunSQL " insert into tb_kest (kest_date,cus_id,amount)values (#" & DateAdd("m", i * 1, u) & "# ," & Me.cus_id & "," & g & ")"
Next i
'áÍÓÇÈ ÇÌãÇáì ÇáÞíãÉ ÇáÇíÌÇÑíÉ
Me.price = (x * 12) + (y * 12) + (z * 12) + (a * 12) + (b * 12) + (c * 12) + (d * 12) + (e * 12) + (f * 12) + (g * 12)
Me.frm_kest.Requery
End Sub
 
 
Private Sub kest_num_LostFocus()
If Me.kest_value = 0 Then
MsgBox ("íÌÈ ÇÏÎÇá ÞíãÉ ÈÏÇíÉ ÇáÞÓØ")
Me.kest_value.SetFocus
End If
End Sub
 
 
Private Sub Form_Current()
 
    Call Calculate_Kest
End Sub
 
Public Function Calculate_Kest()
 
 
    Dim rst As DAO.Recordset
    Set rst = Me.frm_kest.Form.RecordsetClone
    rst.MoveFirst
    
    Me.tP1 = 0  'paid
    Me.tP2 = 0  'pending til this month
    Me.tP3 = 0  'remaining
 
    For i = 1 To rst.RecordCount
              
        'paid
        If rst!paid = -1 Then
            
            Me.tP1 = Me.tP1 + rst!amount
            i1 = i1 + 1
        End If
        
        'Not paid
        If rst!paid = 0 And Now() > rst!kest_date Then
            
            'don't consider this month
            If Month(Now()) <> Month(rst!kest_date) Then
            
                'pending til this month
                Me.tP2 = Me.tP2 + rst!amount
            Else
                'remaining
                Me.tP3 = Me.tP3 + rst!amount
            End If
            
            
        ElseIf rst!paid = 0 Then
            'remaining
            Me.tP3 = Me.tP3 + rst!amount
            
        End If
        
 
        rst.MoveNext
    Next i
    
End Function
 

تم تعديل هذه المشاركة بواسطة alaaaboulela في 5 مارس 2014 في 12:39

"اللهم إني أسألك عملاً خالصاً لوجهك الكريم وأعوذ بك من النفاق والرياء "


 


http://fmalaa.wordpress.com/


 


قسم البرامج والتدريب ونظم المعلومات المحاسبية والكورسات المجانية 


 

#6

ربنا يبارك فيك 

ويجعلة فى ميزان حسناتك

جارى التجربة 

#7

اخى الكريم  

jjafferr

يوجد خطا ما 

المديونية حتى تاريخة (5/3/2014) خطا 

اجمالى المديونية المستقبلية خطا 

تم تعديل هذه المشاركة بواسطة mr_astra في 5 مارس 2014 في 13:38

#8

هلا اخوتي :)

 

الكود الذي يقوم بالعمل هو:

Public Function Calculate_Kest()
 
 
    Dim rst As DAO.Recordset
    Set rst = Me.frm_kest.Form.RecordsetClone
    rst.MoveFirst
    
    Me.tP1 = 0  'paid
    Me.tP2 = 0  'pending til this month
    Me.tP3 = 0  'remaining
 
    For i = 1 To rst.RecordCount
              
        'paid
        If rst!paid = -1 Then
            
            Me.tP1 = Me.tP1 + rst!amount
            i1 = i1 + 1
        End If
        
        'Not paid
        If rst!paid = 0 And Now() > rst!kest_date Then
            
            'don't consider this month
            If Month(Now()) <> Month(rst!kest_date) Then
            
                'pending til this month
                Me.tP2 = Me.tP2 + rst!amount
            Else
                'remaining
                Me.tP3 = Me.tP3 + rst!amount
            End If
            
            
        ElseIf rst!paid = 0 Then
            'remaining
            Me.tP3 = Me.tP3 + rst!amount
            
        End If
        
 
        rst.MoveNext
    Next i
    
End Function

ويتم مناداة هذا الكود من مصدرين:

1. من النموذج الرئيسي ، في حدث الحالي ، حتى يتمكن الكود باعادة الحساب لكل زبون ،

2. من النموذج الفرعي ، في حدث بعد التحديث على زر الدفع ، لإعادة الحساب عند دفع الزبون لأي شهر :)

 

جعفر

#9

طيب ، هذا الكود بالشرح :)

Public Function Calculate_Kest()


    Dim rst As DAO.Recordset
    'نأخذ نسخة من السجلات الموجودة في التموذج الفرعي علشان نحسب منه
    Set rst = Me.frm_kest.Form.RecordsetClone
    'ننتقل الى اول سجل
    rst.MoveFirst
    
    'نجعل قيم خانات المجاميع صفر لكل خانة
    Me.tP1 = 0  'خانة المدفوعة - paid
    Me.tP2 = 0  'خانة المتأخرات عن هذا الشهر - pending til this month
    Me.tP3 = 0  'خانة الباقي - remaining

    'الآن نمر على جميع حقول النموذج ، في تسلسل ، من 1 الى عدد السجلات
    For i = 1 To rst.RecordCount
              
              
      '1- حساب خانة المدفوعة - paid
        'اذا كانت خانة الدفع مختارة
        If rst!paid = -1 Then
            'اجمع المبلغ المدفوع لكل سجل
            Me.tP1 = Me.tP1 + rst!amount
        End If
        
      
      '2- الغير مدفوعة - Not paid
        'اذا كانت خانة الدفع غير مختارة ، واذا كان تاريخ السجل اصغر من تاريخ اليوم - اي المتأخرات
        If rst!paid = 0 And Now() > rst!kest_date Then
            
            'don't consider this month
            'شهر السجل لا يساوي الشهر الذي نحن به الآن
            If Month(Now()) <> Month(rst!kest_date) Then
            
                'pending til this month
                'اجمع سجلات المتأخرات
                Me.tP2 = Me.tP2 + rst!amount
            Else
                'remaining
                'اما اذا كان الشهرين متساويين ، فإجمع السجل مع الباقي
                Me.tP3 = Me.tP3 + rst!amount
            End If
            
            
            
        ElseIf rst!paid = 0 Then
            'remaining
            'هنا نجمع السجلات الغير مدفوعة ، للاشهر الاكبر من الشهر الذي نحن به الان
            Me.tP3 = Me.tP3 + rst!amount
            
        End If
        

        'اذهب الى السجل التالي
        rst.MoveNext
        
    'اذهب الى التسلسل التالي
    Next i
    
End Function

جعفر

تم تعديل هذه المشاركة بواسطة jjafferr في 5 مارس 2014 في 13:45

2
#10

مشكور اخى الكريم

جربت ولكن لى بعض الاسئلة 

لو افترضنا ان اول قسط فى 1/1/2014 وموقفة غير مدفوع  وكان مبلغ القسط 100

وتانى قسط 1/2/2014 وموقفة غير مدفوع وكان مبلغ القسط 100

الا تتفق معى ان المديونية حتى تاريخه هى قيمة قسط شهر 1/2014    مضاف اليها قيمة قسط 2/2014    اى المديونية حتى تاريخه تساوى 200 جنية 

لية بقى فى خانة المديونية حتى تاريخه قيمتها 1100 جنية 

كدة اعتبر ان سنة 2014 كلها متاخرات مع ان المتاخرات هو شهر يناير وفبراير فقط وشهر مارس لسة لم يحل 

#11

انا لا ادري من اين جئت بهذه الارقام!!

ولكن لو شفت المثال والصورة اللي ارفقتهم انا ، بتلاحظ ان الارقام مجاميعها صحيحة :)

 

شوف في اعلى النموذج الفرعي ، يمكن انت بالغلط اخذت علامة الدفع عن مجموعة تواريخ!!

وإلا ، رجاء ارفق لي البرنامج اللي يعطيك النتائج اللي تتكلم عنها :)

 

جعفر

#12

مشكور  وبعتزر على تعبك معايا

دى صورة اختها برنت سكرين 

 

 

 

 

 

ودة ملف حضرتك

 

 

165.ehab - Copy.rar

#13

عفوا اخي ، وين الصورة؟

#14

المنتدى بيدى رسالة " عفوا لا يمكنك ادارك هذا النوع من الصور " جربت JPG   و PNG

لكن نفس المشكلة 

عموما انا رفعت لحضرتك الملف وهو على نفس القيم اللى انا ذكرتها فى المشاركة السابقة 

تم تعديل هذه المشاركة بواسطة mr_astra في 6 مارس 2014 في 13:36

#15

اخي :)

 

انت قلت:

لو افترضنا ان اول قسط فى 1/1/2014 وموقفة غير مدفوع  وكان مبلغ القسط 100

وتانى قسط 1/2/2014 وموقفة غير مدفوع وكان مبلغ القسط 100

الا تتفق معى ان المديونية حتى تاريخه هى قيمة قسط شهر 1/2014    مضاف اليها قيمة قسط 2/2014    اى المديونية حتى تاريخه تساوى 200 جنية 

لية بقى فى خانة المديونية حتى تاريخه قيمتها 1100 جنية

 

بينما صورة البيانات:

post-273849-0-96610500-1394105743_thumb.

 

البيانات كلها لشهر يناير 2014 ، ونحن في شهر مارس 2014 ، فهذه كلها متأخرات ، فهذا معناه ان الحسبة صحيحة :)

 

هل فهمت سؤالك خطأً؟؟

 

جعفر

#16

الظاهر ان التواريخ التي تظهر امامك ، تبدي لك ان الاشهر هي ايام ، والايام هي اشهر ، وهذا سبب المشكلة :(

انقر الفأرة على اي من التواريخ في النوذج الفرعي ، فسترى التاريخ الذي يراه الكمبيوتر :)

 

جعفر

#17

عفوا اخى الكريم 

الاقساط هى شهرية وليست يومية وحتى فى الصورة الموضحة من حضرتك هى اقساط شهرية بدليل

بعد الـ 12 قسط الاولى السنة بقت 15 

مدة الايجار هى 120 شهر يعنى عشر سنوات

تاريخ اول قسط يبدا من الشهر التالى لتاريخ الاستلام الموضح فى النموذج الرئيسي 

قيمة القسط بزيادة 5% من قيمة اخر قسط

مثلا 

لو قيمة اول قسط كانت 100 جنية سنة 2014

قيمة القسط سنة 2015 هى 105

قيمة القسط سنة 2016 هى 110.25 بزيادة 5% من الـ 105 

 

التواريخ عندى مظبوطة وكذلك قيمة القسط وكذلك القيمة الايجارية للمحل خلال العشر سنوات

وانما المطلوب هو

فى النموذج الرئيسي خانات محسوبة  

1- عدد الاقساط المدفوعة 

2- قيمة عدد الاقساط المدفوعة

3- المديونية حتى تاريخه (مثال لو العميل لم يسدد قسط شهر فبراير وكانت قيمة القسط 100 جنية ----- يبقى المديونية حتى تاريخة هى 100)

4- مديونية مستقبلية (وهى اجمالى القيمة الايجارية مطروح منها ما تم سداداة )

 

 

جزاكم الله كل خير 

تم تعديل هذه المشاركة بواسطة mr_astra في 6 مارس 2014 في 15:16

#18

اخى الكريم جعفر

جربت اعدل على الكود فى السطر التالى 

  If rst!paid = 0 And now > rst!kest_date Then

 

خلتها

 

  If rst!paid = 0 And Date > rst!kest_date Then

 

وجارى التجربة وموافاة سيادتك بالنتيجة 

#19

اخي لاحظ التاريخ الان بعد ان انا غيرته ، لاحظ ان الاشهر في زيادة من شهر فبراير 2014 الى شهر ديسمبر 2014 ، وبهذا البرنامج يقول بان المتأخرات 100 فقط ، واللي هي لشهر فبراير.

post-273849-0-47259500-1394111090_thumb.

 

رجاء لا تغير الكود :) ، وانما غير طريقة ادخالك للتواريخ ، حتى تشوف التواريخ باسمائها بدل ارقامها :)

 

جعفر

تم تعديل هذه المشاركة بواسطة jjafferr في 6 مارس 2014 في 16:08

مواضيع مشابهة