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

اظهار رصيد المادة

بدأه عبير الزهور في 28 أكتوبر 2014 · 12 رد · 811 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم اخواني و استاذتي الافاضل

 

في محاولتي لاظهار رصيد المادة الموجود في المخزن بتقرير صغير اسفل شاشة فاتورة المبيعات تظهر عندي رسالة الخطأ كما في الصورة

 

و الصور المدرجة ادناه تبين تفاصيل الكود المضاف

 

post-254477-0-07773100-1414445270_thumb.

post-254477-0-81065100-1414446080_thumb.

post-254477-0-26298000-1414446145_thumb.

post-254477-0-00502700-1414446187_thumb.

post-254477-0-15478500-1414446335_thumb.

y.rar

#2

وعليكم السلام اختي :)

 

انا ما دخلت في تفاصيل النموذج/النماذج/الجداول ، وانما رحت لمكان المشكلة وحاولت احلها :)

 

غيري بدل هذا الكود:

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  هو اسم حقل رصيد المادة (رجاء تغييره قبل استعمال الكود) :)

 

 

جعفر

1
#3

و عليكم السلام اخي الكريم

خير ما فعلت انك ذهبت مباشرة الى اصل  المشكلة هذا هو المهم

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

post-254477-0-88614200-1414511701_thumb.

y2.rar

#4

عفوا ، لم اجرب النتيجة :(

 

اضفت سطر الى الكود:

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

جعفر

1
#5

الظاهر ان النتيجة صحيحة ، لأن Qt_In للمادة MaterialSymbol ، هي صفر ، لذلك النتيجة سالبة :)

 

 

جعفر

1
#6

وهنا صححت الكود اكثر ، حتى لا يعطي خطأ عندما لا يكون هنا اي سجل:

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

جعفر

1
#7

استاذي الفاضل قمت بتجربة الكود بعد اضافة هذا السطر

rst.MoveLast: rst.MoveFirst

اختفت رسالة الخطأ للكنه لا يحدث القيمة حيث انه لا يعطي اي نتيجة غير -22125

 

و حتى بعد ما قمت باضافة السطور الاخرى

err_MaterialSymbol_Exit:

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

فيبقى يعطيني نفس النتيجة

#8

نعم اختي ، النتيجة صحيحة :)

فانت لازلتي على سجلات نفس الفاتورة!!

 

اختاري فاتورة ثانية وشوفي النتيجة :)

 

 

جعفر

1
#9

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

يعني اذا اعطاني -38000 مثلا لمادة f فعندما اختار مادة اخرى لتكن o او غيرها في نفس الفاتورة تبقى القيمه نفسها و لا تتغير

#10

الظاهر اني فهمت المطلوب بالخطأ !!

 

ما هو المجموع المطلوب ؟ وهل هو لفاتورة واحدة فقط ام جميع الفواتير؟

 

 

جعفر

1
#11

شوفي اذا هذا الكود يعطي النتائج الصحيحة:

 

هذا تعديل على الكود الاصل اللي كان عندك:

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

1
#12

ما  شاءالله تمام التمام 

الف شكرا لك وجزاك الله الف خير

#13

الحمدلله :)

1

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