بداية اود ان اشكر اسرة المنتدى على مجهودهم الرائع فى المنتدى و خصوصا المشرفة المميزة زهرة
بداية ارجو من القارئ لهذا الموضوع ان يسامحنى على ضعف معلوماتى و سوء اسلوبى فى شرح الفكرة
و الشرح التالى لفكرة المتوسط المرجح اساسا لان عندما نفهم الفكرة نفهم ما هو المطلوب برمجيا
المهم ان قانون المتوسط المرجح حسب المعلومات التى لدى من موضوع سابق فى المنتدى هو
السعر المتوسط المرجح= قيمة تكلفة الرصيد السابق + قيمة تكلفة الاضافة الجديدة /
كمية الرصيد السابق + كمية الاضافة الجديدة
و التسأول ما هى قيمة تكلفة الرصيد السابق ؟
و للأجابة على ذلك يجب ان نفكر كيف يجرى العمل فى نظام المخازن
بداية عند ورود صنف جديد تصبح تكلفتة هى رصيد اول المدة بالنسبة لهذا الصنف مثال : صنف وارد جديد كميتة 10 قطع و سعر القطعة 5 جنية فبالتالى تصبح تكلفتة هى 10×5 = 50 جنية
ثم تاتى كمية جديدة من هذا الصنف فتصبح اضافة جديدة للرصيد و ليكن 20 قطعة بسعر 2 جنية
فتصبح قيمة الاضافة هى 20×2=40
و بالتالى يصبح السعر المتوسط حسب القانون السابق
50+40 / 10+20=3
و الناتج السابق هو الذى يستخدم فى تسعير الكميات المنصرفة من المخزن بعد ذلك حتى تاتى اضافة جديدة
و فى هذة الحالة يصبح هناك تغيير بسيط فى تطبيق قانون السعر المتوسط و هو
السعر المتوسط المرجح = قيمة الرصيد السابق للأضافة الجديدة مسعر بالسعر المتوسط السابق + قيمة الاضافة الجديدة / كمية الرصيد السابق للأضافة الجديدة + كمية الاضافة الجديدة
و بالتطبيق على المثال السابق سوف نفترض اننا صرفنا من المخزن 5 قطع بسعر متوسط 3ج فيصبح قيمة الصرف 15 جنية و يقل رصيد المخزن 25 قطعة و قيمة المخزن هى 25×3= 75 جنية
و عند قدوم وارد جديد و عمل اضافة لة على الرصيد السابق يصبح الامر كالاتى :
اضافة 5 قطع سعر 1 جنية للقطعة فتصبح قيمة الاضافة الجديدة 5 جنية
و السعر المتوسط الجديد = 75+5 / 25+5=2.66666 جنية
و هكذا كلما تاتى اضافة جديدة نحسب السعر المتوسط من جديد و يمكنكم رؤية كارت الصنف المناسب لهذة الحالة من خلال تقرير كارت الصنف ملحوظة كود الصنف هو 2
الكود التالى موجود فى النموذج اضافة داخل الزر حفظ عند الحدث click
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
Dim rec1 As New ADODB.Recordset
Dim Result3 As Long ' متغير نتيجة الحساب والخصم
Set rec1 = New ADODB.Recordset
الرصيد السابق // Me.txtCont2
اذا كان يساوى الصفر فتعتبر هذة اول اضافة و بالتالى يتم قسمة اجمالى قيمة الاضافة على كمية الاضافة
If (Me.txtCont2 = 0) Then
Me.avg1 = (Me.tprice) / (Me.F1_currency2)
Else
فى حالة اذا كانت هناك اضافة سابقة يتم استرجاع اخر قيمة مسجلة للسعر المتوسط المرجح من الجدول //
rec1.Open "select Last (table2.avg1) AS avg1 from table2 where [table2].[codepro]='" & Me.codepro & "' and [table2].[F1_Noa_AlAmaleya]='" & Me.F1_Noa_AlAmaleya & "'", CurrentProject.Connection, _
adOpenDynamic, adCmdText
اجمالى قيمة الرصيد = السعر المتوسط الاخير × الرصيد السابق لهذا الصنف //
Me.tprice1 = rec1!avg1 * Me.txtCont2
اجمالى قيمة الرصيد السابق +اجمالى قيمة الاضافة / كمية الرصيد السابق +كمية الاضافة
Me.avg1 = (Me.tprice1 + Me.tprice) / (Me.txtCont2 + Me.F1_currency2)
rec1.Close
End If
rst.Open "[table2]", CurrentProject.Connection, _
adOpenDynamic, adCmdTable
اضافة كافة المعطيات الجديدة و تخزينها فى الجدول //
rst.AddNew
rst!codepro = Me!codepro
rst!F1_DATE = Me!F1_DATE
rst![F1_currency2] = Me!F1_currency2
rst!F1_Noa_AlAmaleya = Me!F1_Noa_AlAmaleya
rst![almostand] = Me!almostand
rst!sup = Me!sup
rst!price = Me!price
rst!tprice = Me!tprice
rst!tprice1 = Me!tprice1
rst!oldstock = Me!txtCont2
rst!avg1 = Me!avg1
rst.Update
Me.codepro.Requery
MsgBox ("لقد تم ادخال الصنف")
استخراج الرصيد بعد الاضافة //
rec1.Open "SELECT Sum(table2.F1_currency2) AS SumOfF1_currency2,Sum(table2.F1_currency1) AS SumOfF1_currency1,nz(SumOfF1_currency2,0)-nz(SumOfF1_currency1,0) AS stock from table2 where codepro='" & Me.codepro & "'", CurrentProject.Connection, _
adOpenDynamic, adCmdText
Result3 = CLng(rec1!stock)
Me.txtCont3 = Result3
حفظ الرصيد بعد الاضافة فى الجدول //
rst!stock = Me!txtCont3
rst.Update
rst.Closeاما بالنسبة للكود البرمجى فاعتقد اننى لم اجد الكود الصحيح تماما الذى ارضى عنة و لكن الكود المرفق يعمل بصورة جيدة حتى الان لكن يقابلنى مشكلة و هى فى حالة تغير سعر اضافة بعد ان تم التعامل معها و تحديد السعر المتوسط و ادخالة فى الجدول فان فى هذة الحالة يجب تعديل السعر المتوسط لكل الاضافات التالية لهذة الاضافة لكى يتحدث السعر المتوسط اى نقوم بكافة هذة الحسابات من جديدة و ليس هذا فقط بل من الممكن ان يتم تعديل كمية اضافة او كمية صرف و بالتالى سوف يتاثر الرصيد الذى نحسب علية كافة المعادلات و قد حاولت حل هذة المشكلة مبدئيا فى نموذج تعديل السعر لكن لم اوفق بسب عدم معرفتى لطريقة التنقل بين السجلات حتى الان لقلة خبرتى فى التعامل مع الكود لكن عندما اصل للحل سوف ارسلة فى المنتدى
اتمنى ان يكون هناك متابعة و تعليق على هذا الموضوع مع مراعاة قلة خبرتى بالنسبة لباقى الاعضاء و تقبلى للنقد البناء و التعلم من خبرات الاخرين و شكرا جزيلا
مرفق قاعدة بيانات ارفقها فى موضوع سابق احد الاعضاء و طلب حل هذة المشكلة و تعديل كارت الصنف