السلام عليكم فى مشكله عندى وهى المخزن موجود فيه كميات بتواريخ مختلفه بيتم اظهارها اثناء البيع مينفعش يبيع اكتر من الاجمالى
بس مع التخزين كنت بستخدم كود بيخصم من جدول فيه الاجمالى بس
مع تغيير الجدول لجدول المخزن ظهرت المشكله
كود :
For Each r As DataGridViewRow In dgvprodac.Rows
Dim ad As Integer = Val(r.Cells(0).Value)
Dim txP As String = Val(r.Cells(1).Value)
Dim xt As Single = Val(r.Cells(2).Value)
Dim txC As Integer = Val(r.Cells(3).Value)
cmd.CommandText = String.Format(" UPDATE [store] SET [sanf_kem] = sanf_kem -{0} WHERE [ID_sanf] = {1} ", xt, ad)
cmd.ExecuteNonQuery()
Next
ده الكود مع تعديل الجدول الى فيه date_ex كخلية تاريخ الانتهاء طبعا سلب معايا
المشكله الصنف 1 مثلا موجود منه 4 بتاريخ و6 بتاريخ تانى فى حالة انه باع العشره مثلا الكود بقى يبقى اذاى انه يقلل ويحذف كمان فى حالة ان الكميه بقت صفر ويدخل على الكميه الى موجوده فى التاريخ التانى ولو بقى صفر يحذفه
يا جدعان انا فى مشكله ذقوا معانا الكود شويه
أخى نبيل
الفروض و المنطقى أن الجدول يكون به صنف كود 1 و كمية 10 ... لما يتم التعامل على الصنف :
فى حالة الخصم منه :
1- تظهر الكمية المنصرفة بجدول صادر مخزن
2- تظهر كمية المخزن فى جدول رصيد المخزن بالكمية المتبقية
3- فى جدول وارد المخزن الكمية كما هى لا تتأثر سوى بالوارد أى بالزيادة فقط
...........................................
بخلاف ما سبق لا أعلم ما هى المشكلة لديك .. تواصل معنا ووضح المشكلة أكثر
السلام عليكم ورحمة الله وبركاته
اخي الكريم بالنسبة لصلاحيات المنتجات
من المفروض عند البيع عرض كمية المنتجات المتوفرة في المخزن فقط بدون تاريخ صلاحياتها اذ ليس من المعقول ان ابيع كمية 20 قطعة من منتج له صلاحية بقي منه 7 قطع ثم اخذ 13 قطعة من نفس المنتج من صلاحية اخرى لتتم عملية استكمال المطلوب للبيع (شاهدت احد الفيديوهات يظهر الصلاحيات اثناء البيع لكن لم يخطر في بالي وفتها هذه المشكلة) فمن غير المعقول البحث في الصلاحيات اثناء البيع
اما صلاحيات المنتجات فيجب ان يكون لها فورم خاصة مهمتها تصفية المنتجات المنتهية الصلاحية او التي تم بيعها بالكامل او التي تتلف
(البعض يجعل للاتلاف فورم خاصة)
وفي العادة يتم تسليم المنتجات الاقدم الى العملاء تفاديا لتراكمها وانتهاء صلاحياتها
كل ماسبق عبارة عن الافكار الرئيسة في حل هذا المشكل والحلول كثيرة ومختلفة حسب مايبرمجه كل على طريقته
قمت بعمل مثال فيه فورم واحدة تعرض كل المنتجات النشطة والغير منتهية الصلاحية وفيها مربع نص يستقبل عدد مبيعات منتج ما وعند جلب المنتج باسمه ( المفروض ان يكون له استعلام خاص بجلب كمية المباع)
تتم عملية الخصم من مجمل الكميات ويتم اغلاق الكميات التي بيعت من من هذا المنتج بحيث لن تظهر مرة اخرى وذلك عن طريق جعل حالة هذا المنتج (false)
كما يمكننا عرض المنتجات التي ستنتهي صلاحياتها خلال اسبوع ابتداء من اليوم الحالي
وايضا جعل حالة اي منتج غير نشط وكذلك عمليات البحث حسب التاريخ وغيرها
طبعا المثال عملته قبل ساعة من الان بالرغم من عدم وجود فكرة سابقة عن الموضوع(ربما يطوره احد ما للافضل)
قد برى البعض فيه افكار جيدة واخرون افكار غير عملية
اتنمى ابداء الرأي من الجميع فأراؤكم مهمة تساعدني على التطور نحو الافضل
ان اصبت فمن توفيق الله لي وان اخطأت فهو مني
ملاحظة تعديل بسيط على هذا الكود :
كود :
' الحساب والحفظ الاتوماتيكي
Private Sub Btn_CalcAndSave_Click(sender As Object, e As EventArgs) Handles Btn_CalcAndSave.Click
Dim Total As Integer = Val(Txt_Total_Buy.Text)
For k As Integer = 0 To dgv_table.Rows.Count - 1
Dim MyArr(dgv_table.Rows.Count - 1) As Integer
For i As Integer = 0 To dgv_table.Rows.Count - 1
MyArr(i) = dgv_table.Rows(i).Cells("item_Qty").Value
Next
If Total >= MyArr(0) Then
Total = Total - MyArr(0)
' حفظ التعدبلات على اول سجل يظهر
Update_ItemExp(dgv_table.Rows(0).Cells("Item_Code").Value,
dgv_table.Rows(0).Cells("Item_Name").Value,
dgv_table.Rows(0).Cells("Item_Experiance").Value,
0,
False,
dgv_table.Rows(0).Cells("Exp_ID").Value)
' اعادة التحميل
selectItem()
Else
Exit Sub
End If
Next
MessageBox.Show("تم حساب المنتجات المباعة بالكامل والحفظ بنجاح", "حساب", MessageBoxButtons.OK, MessageBoxIcon.Information)
Btn_CalcAndSave.Enabled = False
Txt_Searsh.Text = Nothing
End Sub
شكرا اخى ياسر و اخى ابراهيم
نقطة اننا نبحث عن اقرب تاريخ لوحدها نصف الحل
نستعلم عن اقرب تاريخ وعدد الكميه الموجوده اذا كانت الكميه اكبر من كمية البيع يعمل ابديت ويقلل الكميه على طول لو تساوى كمية البيع يحذها لو اقل نحط الكميه فى متغير ونقللها من كمية البيع ومن ثم اعادة العمليه مع العلم ان عمر ميكون كمية البيع اكبر من الاجمالى
مطلوب كود البحث عن اقرب تاريخ الصيغه بتكون اذاى بس
السلام عليكم اخي نبيل
كما ذكرت لك البائع ليس بحاجة الى معرفة صلاحيات المنتج اثناء عملية البيع
هو فقط يتأكد من الكمية المتاحة ويسلم البضاعة للعميل حسب التاريخ الاقدم
فقط في نهاية اليوم يقوم بفتح شاشة انتهاء الاصناف او شاشة صلاحيات المنتج سمها ماشئت
ويقارن الكميات التي تم بيعها ويتم ترصيد الصنف الاقدم في حال كانت الكمية اكير منه
ويمكنه معرفة الصلاحيات من خلال البحث بالتاريخ ويحتاط للمنتج بهذه الطريقة
اتمنى ان تكون الامور واضحة لك
(19-07-20, 09:18 PM)ابراهيم ايبو كتب : [ -> ]السلام عليكم اخي نبيل
كما ذكرت لك البائع ليس بحاجة الى معرفة صلاحيات المنتج اثناء عملية البيع
هو فقط يتأكد من الكمية المتاحة ويسلم البضاعة للعميل حسب التاريخ الاقدم
فقط في نهاية اليوم يقوم بفتح شاشة انتهاء الاصناف او شاشة صلاحيات المنتج سمها ماشئت
ويقارن الكميات التي تم بيعها ويتم ترصيد الصنف الاقدم في حال كانت الكمية اكير منه
ويمكنه معرفة الصلاحيات من خلال البحث بالتاريخ ويحتاط للمنتج بهذه الطريقة
اتمنى ان تكون الامور واضحة لك
فعلا أخى ابراهيم .. هذا هو بيت القصيد .. أما بالنسبة للصلاحية و البيع للأقدم توريدا للمخزن أو الأقرب انتهاء صلاحية أ, المفاضلة بين البيع للمورد بسعر أعلى أم أقل فلها ثلاث طرق : فيفو و ليفو و المتوسط المرجح
الكود ده ممكن يساعدنى مع احترامى الكامل لارائكم
بس غلط ممكن تعديله
كود :
sqlstr = "Select min(date_ex),sanf_kem from store where ID_sanf =@pass"
cmd = New OleDbCommand(sqlstr, con)
cmd.Parameters.Add(New OleDbParameter("@pass", ad))
con.Open()
Dim dr As OleDb.OleDbDataReader = cmd.ExecuteScalar()
If dr.Read() Then
DateTimePicker1.Value = dr.Item(0)
TextBox5.Text = dr.Item(1)
End If
السلام عليكم اخي الكريم
هذا فنكشن لجلب اصغر قيمة من عمود معين لجدول
كود :
'----------Public Function Min VB.Net With Access ----------
Public Function Min_Table() As String
Dim Query As String = "Select Min(اسم الحقل) From الجدول"
Dim a As String = Nothing
Dim Cmd As OleDbCommand
Cmd = New OleDbCommand(Query, Con)
If Con.State = ConnectionState.Open Then Con.Close()
Con.Open()
a = Cmd.ExecuteScalar()
Con.Close()
Return a
End Function
ثم ننادي عليه هكذا
كود :
TextBox5.Text.Text = Min_Table()
سيجلب اقل قيمة لكل السجلات وحتى تحصره في منتج معين ستضع شرط اسم المنتج
ولكن انت تريد اقل تاريخ بصراحة لم اجرب بعد
(19-07-20, 09:37 PM)NABILWARSAW كتب : [ -> ]الكود ده ممكن يساعدنى مع احترامى الكامل لارائكم
بس غلط ممكن تعديله
كود :
sqlstr = "Select min(date_ex),sanf_kem from store where ID_sanf =@pass"
cmd = New OleDbCommand(sqlstr, con)
cmd.Parameters.Add(New OleDbParameter("@pass", ad))
con.Open()
Dim dr As OleDb.OleDbDataReader = cmd.ExecuteScalar()
If dr.Read() Then
DateTimePicker1.Value = dr.Item(0)
TextBox5.Text = dr.Item(1)
End If
السلام عليكم و رحمة الله و بركاته
تحياتي لكل الاساتذة الذين شاركوا في هذا الموضوع
أخي الحبيب NABILWARSAW اعتقد ان هذا الكود ينفذ ما تريد في تحديد اقدم تاريخ للصنف
كود :
Dim cmd As OleDbCommand = New OleDbCommand("SELECT date_ex, sanf_kem from store WHERE ID_sanf =@pass ORDER BY ID date_ex", con)
If con.State = ConnectionState.Open Then
con.Close()
End If
con.Open()
Dim dr As OleDbDataReader = cmd.ExecuteReader
While dr.Read()
DateTimePicker1.Value = dr2(0)
TextBox1.Text = dr2(1)
Exit While
End While