السلام عليكم اخواني و استاذتي الافاضل
في محاولتي لاظهار رصيد المادة الموجود في المخزن بتقرير صغير اسفل شاشة فاتورة المبيعات تظهر عندي رسالة الخطأ كما في الصورة
و الصور المدرجة ادناه تبين تفاصيل الكود المضاف
وعليكم السلام اختي :)
انا ما دخلت في تفاصيل النموذج/النماذج/الجداول ، وانما رحت لمكان المشكلة وحاولت احلها :)
غيري بدل هذا الكود:
Private Sub MaterialSymbol_Exit(Cancel As Integer)
Me.item_Balance = DLookup("sum([Qt_in])-sum([Qt_out])", "trans", "[MaterialSymbol]='" & [رمز المادة الجاهزة] & "'")
End Subاستعملي هذا:
Private Sub MaterialSymbol_Exit(Cancel As Integer)
' Me.item_Balance = DLookup("sum([Qt_in])-sum([Qt_out])", "trans", "[MaterialSymbol]='" & [رمز المادة الجاهزة] & "'")
Set rst = Me.RecordsetClone
For I = 1 To rst.RecordCount
Qi = Qi + Nz(rst!Qt_in, 0)
Qo = Qo + Nz(rst!Qt_out, 0)
rst.MoveNext
Next I
Forms!sell!Bal = Qi - Qo
End Subحيث Bal هو اسم حقل رصيد المادة (رجاء تغييره قبل استعمال الكود) :)
جعفر
عفوا ، لم اجرب النتيجة :(
اضفت سطر الى الكود:
rst.MoveLast: rst.MoveFirst
ومعناه: (إذهب الى آخر سجل ، ثم ارجع الى السجل الاول) ، ثم قم ببقية الكود ،
هذا السطر يغصب الكود على ملئ Recordset بجميع السجلات في المتغير rst ،
بينما الخطأ الذي ظهر لك كان معناه:
1. في المرة الاولى قرأ السجلات (واعطى النتيجة ، والتي قد تكون غير صحيحة) ، واستقر على آخر سجل ،
2. لما تشغلين الكود للمرة التاليه ، فانه يكون مستقرا على آخر سجل ، فيعطينا الخطأ بأنه لا توجد سجلات :(
وهذا هو الكود كاملا:
Private Sub MaterialSymbol_Exit(Cancel As Integer)
' Me.item_Balance = DLookup("sum([Qt_in])-sum([Qt_out])", "trans", "[MaterialSymbol]='" & [رمز المادة الجاهزة] & "'")
Set rst = Me.RecordsetClone
rst.MoveLast: rst.MoveFirst
For I = 1 To rst.RecordCount
Qi = Qi + Nz(rst!Qt_in, 0)
Qo = Qo + Nz(rst!Qt_out, 0)
rst.MoveNext
Next I
Forms!sell!Bal = Qi - Qo
End Subجعفر
الظاهر ان النتيجة صحيحة ، لأن Qt_In للمادة MaterialSymbol ، هي صفر ، لذلك النتيجة سالبة :)
جعفر
وهنا صححت الكود اكثر ، حتى لا يعطي خطأ عندما لا يكون هنا اي سجل:
Private Sub MaterialSymbol_Exit(Cancel As Integer)
On Error GoTo err_MaterialSymbol_Exit
' Me.item_Balance = DLookup("sum([Qt_in])-sum([Qt_out])", "trans", "[MaterialSymbol]='" & [رمز المادة الجاهزة] & "'")
Set rst = Me.RecordsetClone
rst.MoveLast: rst.MoveFirst
For I = 1 To rst.RecordCount
Qi = Qi + Nz(rst!Qt_in, 0)
Qo = Qo + Nz(rst!Qt_out, 0)
rst.MoveNext
Next I
Forms!sell!Bal = Qi - Qo
Exit Sub:
err_MaterialSymbol_Exit:
If Err.Number = 3021 Then
Exit Sub
Else
MsgBox Err.Number & vbCrLf & Err.Description
End If
End Subجعفر
استاذي الفاضل قمت بتجربة الكود بعد اضافة هذا السطر
rst.MoveLast: rst.MoveFirst
اختفت رسالة الخطأ للكنه لا يحدث القيمة حيث انه لا يعطي اي نتيجة غير -22125
و حتى بعد ما قمت باضافة السطور الاخرى
err_MaterialSymbol_Exit:
If Err.Number = 3021 Then
Exit Sub
Else
MsgBox Err.Number & vbCrLf & Err.Description
End Ifفيبقى يعطيني نفس النتيجة
نعم اختي ، النتيجة صحيحة :)
فانت لازلتي على سجلات نفس الفاتورة!!
اختاري فاتورة ثانية وشوفي النتيجة :)
جعفر
استاذي الفاضل عند الذهاب الى فاتورة اخرى صحيح انه يعطيني قيمه جديده لكن لمرة واحده فقط
يعني اذا اعطاني -38000 مثلا لمادة f فعندما اختار مادة اخرى لتكن o او غيرها في نفس الفاتورة تبقى القيمه نفسها و لا تتغير
الظاهر اني فهمت المطلوب بالخطأ !!
ما هو المجموع المطلوب ؟ وهل هو لفاتورة واحدة فقط ام جميع الفواتير؟
جعفر
شوفي اذا هذا الكود يعطي النتائج الصحيحة:
هذا تعديل على الكود الاصل اللي كان عندك:
Private Sub MaterialSymbol_Exit(Cancel As Integer)
On Error GoTo err_MaterialSymbol_Exit
'Me.item_Balance = DLookup("sum([Qt_in])-sum([Qt_out])", "trans", "[MaterialSymbol]='" & [ÑãÒ ÇáãÇÏÉ ÇáÌÇåÒÉ] & "'")
Forms!sell!Bal = DSum("nz([Qt_in],0)-nz([Qt_out],0)", "trans", "[MaterialSymbol]='" & Me.MaterialSymbol & "'")
' Set rst = Me.RecordsetClone
' rst.MoveLast: rst.MoveFirst
'
' For I = 1 To rst.RecordCount
' Qi = Qi + Nz(rst!Qt_in, 0)
' Qo = Qo + Nz(rst!Qt_out, 0)
' rst.MoveNext
' Next I
'
' Forms!sell!Bal = Qi - Qo
Exit Sub:
err_MaterialSymbol_Exit:
If Err.Number = 3021 Then
Exit Sub
Else
MsgBox Err.Number & vbCrLf & Err.Description
End If
End Subجعفر
تم تعديل هذه المشاركة بواسطة jjafferr في 28 أكتوبر 2014 في 20:45
ما شاءالله تمام التمام
الف شكرا لك وجزاك الله الف خير
الحمدلله :)