اذهب الي المحتوي
أوفيسنا

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


الردود الموصى بها

22 دقائق مضت, صالح حمادي said:

السلام عليكم أخي محمد أليس الملف الذي أرفقته لك هو المطلوب

 

وعليكم السلام اخي الكريم  صالح حمادي

نعم لقد قمت بدراسة الملف وكان رائعا  فعلا وهو ما اردته بالضبط .... حقاُ أشكرك لماقمت به من مجهود .....

وشكري موصول الى الاخوة الكرام جعفر ورمهان ....رعاكم الله

 

تم تعديل بواسطه محمدنجار
رابط هذا التعليق
شارك

8 ساعات مضت, رمهان said:

اخي محمد

ارفق المثال الذي به خمس سجلات كما بالصورة الاخيرة !

معليش حنمشي معاك بالملي :blink:

اخي رمهان أسعد الله أوقاتك

هل تود حل السوال بسحرك الخاص لارفق لك المثال ..... ام تكتفي بالسحر الجزائري  وحل الاخ صالح حمادي .

                                                                

23 ساعات مضت, jjafferr said:

أخوي محمد :rol:

انت تعرف ان اسالتك غريبة :wink2: فياريت تعطينا مثال واضح نقتدي به :rol:

جعفر

شكرا لك اخي الكريم جعفر ... ولمجهودك .... جزاك الله عني خيراً.

رابط هذا التعليق
شارك

السلام عليكم :rol:

 

عملي كله معتمد على:

20 ساعات مضت, محمدنجار said:

ما احتاجه بالضبط ..هذا المثال .

1. هذه السجلات الخمسة دائما تاتي مع بعض وبنفس الترتيب .

2. لن يكون اكثر من خمس سجلات ، فقط هناك ايظاً حاله ثانية من ثلاث سجلات حيث [ الثالث = (الاول - الثاني) ]

3. قيمة الرابع والخامس تعتمد على قيم الاول والثاني والثالث .

4. تخيل ... وصفة سحر عماني !!

112.jpg.aeb7482706ea6e1540d4f66307b2ca94.jpg

 

 

لتسهيل الامر ، اضفت الى النموذج زر:

407.Clipboard03.jpg

 

أ. اذا النموذج الفرعي فارغ ، فعند النقر على الزر فانه يضيف 5 سجلات فيه حسب ما وضحت انت ، ولا يعمل الزر اذا كان فيه سجلات ،

ب. سواء استخدمت الزر او ادخلت البيانات يدويا بنفس الترتيب (نفس الوجبات ونفس الترتيب) ، فهنا يبدأ الكود في العمل ، مثلا:

  1. لا يسمح لك بإدخال سجل سادس ،
  2. لا يسمح لك تغيير قيمة حقل الكميات في السجل الرابع والخامس ،
  3. عند تغيير قيمة حقل الكميات في اي سجل ، فانه يقوم بعملية الحساب من جديد.

هذا كود زر الاضافة:


Private Sub cmd_add_5_Click()
On Error GoTo err_cmd_add_5_Click

    Dim rst As DAO.Recordset
    Dim food_list
    
    'save the Record of the Main Form, if not saved
    If Me.Dirty Then Me.Dirty = False
    
    Set rst = Me.main.Form.RecordsetClone
    rst.MoveLast: rst.MoveFirst
    RC = rst.RecordCount

    'this should be a new set, make sure we don't have Records
    If RC <> 0 Then
        MsgBox "لا يمكن الاضافة ، توجد سجلات مسبقا" & vbCrLf & _
               "Can't add on existing Records"
        GoTo Exit_cmd_add_5_Click
    End If
        
        
    food_list = Array("hamor", "zbedy", "nweby", "sheep", "tona")
    
    For i = 1 To 5
        
        rst.AddNew
            rst!cid = Me.ID
            rst!food = food_list(i - 1)
        rst.Update
        
    Next i
    
    
Exit_cmd_add_5_Click:
    rst.Close: Set rst = Nothing
    
Exit Sub
err_cmd_add_5_Click:

    If Err.Number = 3021 Then
        'No Records
        Resume Next
        
    ElseIf Err.Number = 3201 Then
        'No Record in main Form
        MsgBox "رجاء تعبئة بيانات النموذج الرئيسي اولا" & vbCrLf & _
               "Please fill Main Form first"
        Resume Exit_cmd_add_5_Click
        
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
    End If
    
End Sub

 

وهذا كود النموذج الفرعي:


Private Sub food_AfterUpdate()

    'do the calculations for Records 4 and 5
    Call Check_Record
    
End Sub

Function Check_Record()
On Error GoTo err_Check_Record

'    If Me.NewRecord = True Then Exit Function

    If Me.Dirty Then Me.Dirty = False
    'DoCmd.RunCommand acCmdSaveRecord
    
    Dim food_list
    Dim rst As DAO.Recordset
    
    'if we have the same list, then DON'T ALLOW CHANGES TO QTY
    Set rst = Me.RecordsetClone
    rst.MoveLast: rst.MoveFirst
    RC = rst.RecordCount
    
    food_list = Array("hamor", "zbedy", "nweby", "sheep", "tona")
    
    Counter = 0
    For i = 1 To 5
        
        If rst!food = food_list(i - 1) Then
            Counter = Counter + 1
        End If
        rst.MoveNext
        
    Next i
    
    
    If Counter = 5 Then
                
        'get the 4th and 5th Records values
        rst.MoveFirst
            Q1 = rst!qty
        rst.MoveNext
            Q2 = rst!qty
            RQ5 = Q2 / 5
        rst.MoveNext
            Q3 = rst!qty
            RQ4 = Q1 - (Q3 + RQ5)
        rst.MoveNext
        rst.Edit
            rst!qty = RQ4
        rst.Update
        rst.MoveNext
        rst.Edit
            rst!qty = RQ5
        rst.Update
             
    End If
    
Exit_Check_Record:
    rst.Close: Set rst = Nothing
    
Exit Function
err_Check_Record:

    If Err.Number = 3021 Then
        Resume Exit_Check_Record
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
    End If
    
End Function

Private Sub Form_Current()
On Error GoTo err_Form_Current

    If Me.NewRecord = False Then Exit Sub

    Dim food_list
    Dim rst As DAO.Recordset
    
    'if we have the same list, then DON'T ALLOW CHANGES TO QTY
    Set rst = Me.RecordsetClone
    rst.MoveLast: rst.MoveFirst
    RC = rst.RecordCount
    
    food_list = Array("hamor", "zbedy", "nweby", "sheep", "tona")
    
    Counter = 0
    For i = 1 To 5
        
        If rst!food = food_list(i - 1) Then
            Counter = Counter + 1
        End If
        rst.MoveNext
        
    Next i
    
    
    If Counter = 5 Then
        Cancel = True
        Me.Undo
        DoCmd.GoToRecord , , acPrevious
        MsgBox "لا يمكنك اضافة سجل جديد" & vbCrLf & _
               "Can't add a new Record"
        Exit Sub
    End If
    
Exit_Form_Current:
    rst.Close: Set rst = Nothing
    
Exit Sub
err_Form_Current:

    If Err.Number = 3021 Then
        Resume Exit_Form_Current
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
    End If
      
End Sub

Private Sub qty_AfterUpdate()
    
    'do the calculations for Records 4 and 5
    Call Check_Record
End Sub

Private Sub qty_BeforeUpdate(Cancel As Integer)
On Error GoTo err_qty_BeforeUpdate

    Dim food_list
    Dim rst As DAO.Recordset
    
    'if we have the same list, then DON'T ALLOW CHANGES TO QTY
    Set rst = Me.RecordsetClone
    rst.MoveLast: rst.MoveFirst
    RC = rst.RecordCount
    
    food_list = Array("hamor", "zbedy", "nweby", "sheep", "tona")
    
    Counter = 0
    For i = 1 To 5
        
        If rst!food = food_list(i - 1) Then
            Counter = Counter + 1
        End If
        rst.MoveNext
        
    Next i
    
    
    If Counter = 5 Then
    If Me.food = "sheep" Or Me.food = "tona" Then
        Cancel = True
        Me.Undo
        MsgBox "لا يمكنك تغيير قيمة الكمية اذا كانت الوجبة " & vbCrLf & Me.food & vbCrLf & _
               "Can't change Qty if food is " & Me.food
        Exit Sub
    End If
    End If

    
Exit_qty_BeforeUpdate:
    rst.Close: Set rst = Nothing
    
Exit Sub
err_qty_BeforeUpdate:

    If Err.Number = 3021 Then
        Resume Exit_qty_BeforeUpdate
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
    End If
    
End Sub

 

 

جعفر

407.قيمة محسوبة.mdb.zip

  • Like 2
رابط هذا التعليق
شارك

في 2016-07-18 at 11:43, jjafferr said:

أخوي محمد :rol:

انت تعرف ان اسالتك غريبة :wink2: فياريت تعطينا مثال واضح نقتدي به :rol:

جعفر

اخي الكريم جعفر اسعد الله ايامك ولياليك .....

يا جعفر سيبني أعيَط ... سيبني أعيَط ..... هذا هو الجنون العماني .... حيث من صفات الساحر ..قراءة افكار الاخرين وها انت تجسد ذلك ... لاني كنت افكر بكيفية ادراج

هذه السجلات ( بصفقة واحدة) اقصد بكبسة زر ....وما اسرع الاستجابة وهذا الكود الذي طالما حلمت به وطلبته في مواضيع سابقة .احسنت ..أحسنت .. أحسنت

رابط هذا التعليق
شارك

وعليكم السلام :rol:

 

هاي احنا ما طلّعنا الزار ولا عزمنا ولا عملنا بخور ولبان وحرمل ولا استعنّا بالشيخ :wink2:

 

الحل كان بسبب شرحك ومثالك الواضح (مب شرحك الاول :blink:) ،

المشكلة تصير لما السائل يسأل بكلمتين ويرفق برنامجه ، وبدون مثال ، وبدون ما يقول اي نموذج / جدول يتكلم عنه ، ولا حتى اي حقل ، بل بعض الاوقات يطلب الجواب بصيغة معينة (يعني هو يكون الـ Navigator وانت السائق ، هو يوجّهك في الاتجاه الذي يريد) ، وبهذه الطريقة ياتوصل الى طريق مسدود او الى طريق وعر :rol:

 

حياك الله:rol:

 

جعفر

رابط هذا التعليق
شارك

3 دقائق مضت, jjafferr said:

وعليكم السلام :rol:

هاي احنا ما طلّعنا الزار ولا عزمنا ولا عملنا بخور ولبان وحرمل ولا استعنّا بالشيخ :wink2:

مرحبا اخي الكريم .... انا قتلت حالي من العيَاط وانت لم تعمل شيئ مما سبق ..... شو ممكن يصير لو ؟؟ هههههه

رابط هذا التعليق
شارك

26 دقائق مضت, jjafferr said:

الحل كان بسبب شرحك ومثالك الواضح (من شرحك الاول :blink:) ،

المشكلة تصير لما السائل يسأل بكلمتين ويرفق برنامجه ، وبدون مثال ، وبدون ما يقول اي نموذج / جدول يتكلم عنه ، ولا حتى اي حقل ، بل بعض الاوقات يطلب الجواب بصيغة معينة (يعني هو يكون الـ Navigator وانت السائق ، هو يوجهك فالاتجاه الذي يريد) ، وبهذه الطريقة ياتوصل الى طريق مسدود او الى طريق وعر :rol:

هذا صحيح اخي .... نحن , اقصد انا وبعض الاخوة المبتدئين في المنتدى لا نفرق بين الفكرة التي تدور بعقولنا وحقيقة تطبيقها على الواقع كذلك ليس لدينا ما يكفي من خبرة

لنستطيع ايصال السؤال بكل تفاصيله البرمجية واحتمالاته اليكم ... وهذا طبعا مضيعة لوقتكم والجهد ايظاً , مع اننا نتعلم منكم كثيرا في كل سؤال ورد جزاكم  الله خيرا .

(( لكنكم قومُ إبتلاكم الله بنا )) .. فَصبرُ حميل .. والله المستعان ... تحياتي لك ولكل الاخوه اعمدة واركان المنتدى ...:fff::fff::fff: .

 

تم تعديل بواسطه محمدنجار
رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information