تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مبيعات الاصناف بناء على الحجم
#1
السلام عليكم
لدي برنامج مبيعاات فيجوال بيسك 

عندي صنف ( عصير برتقال )
تصنيفه
( صغير - وسط - كبير - جالون - 1.5 جالون )
ونوع العرض بيكون داخل FlowLayoutPanel عند الضغط على الصنف ينتقل الى datagridview
( اسم المنتج - السعر - الكمية )
اريد ان اضيف اكثر من سعر تحت نفس المسمى
( صغير - وسط - كبير - جالون - 1.5 جالون )
ماهي افضل طريقة لعرض المنتج بأكثر من سعر
ويكون التصنيف حسب طلب العميل
وليس تصنيف اجباري
الرد }}}
تم الشكر بواسطة:
#2
بامكانك عمل جدول للاحجام مثل الوحدات تماما
عند ادخال المنتج تختار حجمه وكل حجم له سعر
وهنا يمكن ان يتكرر اسم المنتج لكن يكون له رقم وباركود مختلف
وهند العرض في البانل تعرض كل منتج بتعدد احجامه
لنفرض مثلا لدينا منتج اسمه بيتزا
البيتزا لها 3 احجام (صغير , وسط , كبير )
وكل حجم له سعر ويتم ادخال كل منتج بشكل منفرد بالجدول
يمكنك استدعاء المنتجات وسيتم عرضها حسب المدخل
الرد }}}
تم الشكر بواسطة: OLED
#3
(03-01-23, 05:26 PM)aljzazy كتب : بامكانك عمل جدول للاحجام مثل الوحدات تماما
عند ادخال المنتج تختار حجمه وكل حجم له سعر
وهنا يمكن ان يتكرر اسم المنتج لكن يكون له رقم وباركود مختلف
وهند العرض في البانل تعرض كل منتج بتعدد احجامه
لنفرض مثلا لدينا منتج اسمه بيتزا
البيتزا لها 3 احجام (صغير , وسط , كبير )
وكل حجم له سعر ويتم ادخال كل منتج بشكل منفرد بالجدول
يمكنك استدعاء المنتجات وسيتم عرضها حسب المدخل

الطريقة موجودة اخي وهي من تصميمك 
لكن انا اريد في حالة اكثر من سعر بيع لنفس الصنف
عند الضغط على الصنف تظهر قائمة اخرى 
بالاحجام وسعرها
الرد }}}
تم الشكر بواسطة:
#4
وعليكم السلام ورحمة الله وبركاته

اصنع جدول جديد للأصناف الفرعية (SubItems)
عند اضافة مادة جديدة تضع في مربع الاضافة - خيار : هل يوجد لها أصناف فرعية أم لا ..
إذا كان نعم تضيف الأصناف ضمن التبويب الفرعي في الجدول الجديد مع السعر والحجم وخلافه، وتأخذ الصفات الرئيسية من المسمى الأم,

عند عرض المنتجات وتختار منتج لاضافته للمبيعات : يذهب للبحث في جدول(SubItems)  إن وجد نتائج عرضها قبل الاضافة، وإلا فيقوم بإضافة 
المادة - لنافذة المبيعات .. أو .. أي نافذة لها -  من جدول وصف المواد الرئيسي.
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة: OLED , OLED , محمد خيري
#5
(03-01-23, 09:21 PM)Taha Okla كتب : وعليكم السلام ورحمة الله وبركاته

اصنع جدول جديد للأصناف الفرعية (SubItems)
عند اضافة مادة جديدة تضع في مربع الاضافة - خيار : هل يوجد لها أصناف فرعية أم لا ..
إذا كان نعم تضيف الأصناف ضمن التبويب الفرعي في الجدول الجديد مع السعر والحجم وخلافه، وتأخذ الصفات الرئيسية من المسمى الأم,

عند عرض المنتجات وتختار منتج لاضافته للمبيعات : يذهب للبحث في جدول(SubItems)  إن وجد نتائج عرضها قبل الاضافة، وإلا فيقوم بإضافة 
المادة - لنافذة المبيعات .. أو .. أي نافذة لها -  من جدول وصف المواد الرئيسي.

هذا كود عند الضغط على اسم الصنف يظهر الصنف وسعره داخل الجرد فيو
ممكن تعدل عليه بحيث 
اذا موجود اكثر من سعر يظهر نافذة اخرى او باي طريقة كانت الاسعار والاحجام المختلفة
كود :
Public Sub Select_click(sender As Object, e As EventArgs)


       Try
           _ID = sender.Tag.ToString()
           con = New SqlConnection(cs)
           If con.State = 1 Then con.Close()
           con.Open()
           Dim cmd As New SqlCommand(" select * from Product_Tbl Where Product_ID Like '" & _ID & "%'", con)
           Dim dr As SqlDataReader
           dr = cmd.ExecuteReader
           dr.Read()
           If dr.HasRows Then
               _Name = dr("ProductName").ToString
               _BuyPrice = dr("ProductBuy").ToString
               _SalePrice = dr("ProductSale").ToString
               _Barcode = dr("ProductCode").ToString
           End If
           dr.Close()
           con.Close()

           For i As Integer = 0 To Dgv.Rows.Count - 1
               If Dgv.Rows(i).Cells(0).Value = _ID Then
                   Dgv.Rows(i).Cells(4).Value = Dgv.Rows(i).Cells(4).Value + 1
                   Dgv.Rows(i).Cells(5).Value = Dgv.Rows(i).Cells(5).Value + _SalePrice
                   InvoiceTotal()
                   Exit Sub
               End If
           Next
           Dim x As Integer
           Dgv.Rows.Add()
           x = Dgv.Rows.Count - 1
           Dgv(0, x).Value = _ID
           Dgv(1, x).Value = _Barcode
           Dgv(2, x).Value = _Name
           Dgv(3, x).Value = _SalePrice
           Dgv(4, x).Value = 1
           Dgv(5, x).Value = Dgv(3, x).Value * 1
           Dgv(6, x).Value = _SalePrice - _BuyPrice
           InvoiceTotal()
       Catch ex As Exception
       End Try
   End Sub
لاني عجزت اضيف الكود بناء على امر اخر
الرد }}}
تم الشكر بواسطة:
#6
لو كان الجدول (Product_Tbl) يعرض كل الأصناف الفرعية للمادة  نفسها بحسب (الحجم أو اللون أو السعر أو .. إلخ)..
فإن الكود المذكور حتى السطر التالي :
كود :
Dim cmd As New SqlCommand(" select * from Product_Tbl Where Product_ID Like '" & _ID & "%'", con)

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

نعرف ثم نعبئ النتيجة بالجدول الافتراضي :
كود :
Dim dt As New DataTable

       dt.Load(cmd.ExecuteReader)

بعدها نحاول أن نعرف كم عدد السجلات المشابهة :
1- اذا كانت سجل واحد ، نطبق الكود الذي ذكرته أنت.
2- إذا كان أكثر من سجل، نعرض نافذة جديدة في (DataGridView1) يعرض كل النتائج .
   واختيار أي مادة منها يتم تعبئته كما فعلت أنت بكودك ولكن من خلال النافذة الجديدة والنقر أو الاختيار من(DataGridView1) 
وذلك من خلال الكود التالي :

كود :
If dt.Rows.Count = 1 Then

   Dim dr As SqlDataReader
   dr = cmd.ExecuteReader
   dr.Read()
   If dr.HasRows Then
       _Name = dr("ProductName").ToString
       _BuyPrice = dr("ProductBuy").ToString
       _SalePrice = dr("ProductSale").ToString
       _Barcode = dr("ProductCode").ToString
   End If
   dr.Close()
   con.Close()

   For i As Integer = 0 To Dgv.Rows.Count - 1
       If Dgv.Rows(i).Cells(0).Value = _ID Then
           Dgv.Rows(i).Cells(4).Value = Dgv.Rows(i).Cells(4).Value + 1
           Dgv.Rows(i).Cells(5).Value = Dgv.Rows(i).Cells(5).Value + _SalePrice
           InvoiceTotal()
           Exit Sub
       End If
   Next
   Dim x As Integer
   Dgv.Rows.Add()
   x = Dgv.Rows.Count - 1
   Dgv(0, x).Value = _ID
   Dgv(1, x).Value = _Barcode
   Dgv(2, x).Value = _Name
   Dgv(3, x).Value = _SalePrice
   Dgv(4, x).Value = 1
   Dgv(5, x).Value = Dgv(3, x).Value * 1
   Dgv(6, x).Value = _SalePrice - _BuyPrice
   InvoiceTotal()
ElseIf dt.Rows.Count > 1 Then
   '  هنا تضع كود فتح النافذة الجديدة التي عليها الداتاجريد وتعرض فيها كل المواد
End If

أما الكود الذي تضعه في حال أكثر من سجل :
هو عرض النافذة الجديدة وتعبئة البيانات في الداتا جريد من خلال الكود التالي بعد فتح النافذة الجديدة(FormX)  :

كود :
FormX.DataGridView1.DataSource = dt

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


وفقك الله ..
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة: OLED , OLED , OLED , ahmed_king2023
#7
(04-01-23, 04:29 AM)Taha Okla كتب : لو كان الجدول (Product_Tbl) يعرض كل الأصناف الفرعية للمادة  نفسها بحسب (الحجم أو اللون أو السعر أو .. إلخ)..
فإن الكود المذكور حتى السطر التالي :
كود :
Dim cmd As New SqlCommand(" select * from Product_Tbl Where Product_ID Like '" & _ID & "%'", con)

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

نعرف ثم نعبئ النتيجة بالجدول الافتراضي :
كود :
Dim dt As New DataTable

       dt.Load(cmd.ExecuteReader)

بعدها نحاول أن نعرف كم عدد السجلات المشابهة :
1- اذا كانت سجل واحد ، نطبق الكود الذي ذكرته أنت.
2- إذا كان أكثر من سجل، نعرض نافذة جديدة في (DataGridView1) يعرض كل النتائج .
   واختيار أي مادة منها يتم تعبئته كما فعلت أنت بكودك ولكن من خلال النافذة الجديدة والنقر أو الاختيار من(DataGridView1) 
وذلك من خلال الكود التالي :

كود :
If dt.Rows.Count = 1 Then

   Dim dr As SqlDataReader
   dr = cmd.ExecuteReader
   dr.Read()
   If dr.HasRows Then
       _Name = dr("ProductName").ToString
       _BuyPrice = dr("ProductBuy").ToString
       _SalePrice = dr("ProductSale").ToString
       _Barcode = dr("ProductCode").ToString
   End If
   dr.Close()
   con.Close()

   For i As Integer = 0 To Dgv.Rows.Count - 1
       If Dgv.Rows(i).Cells(0).Value = _ID Then
           Dgv.Rows(i).Cells(4).Value = Dgv.Rows(i).Cells(4).Value + 1
           Dgv.Rows(i).Cells(5).Value = Dgv.Rows(i).Cells(5).Value + _SalePrice
           InvoiceTotal()
           Exit Sub
       End If
   Next
   Dim x As Integer
   Dgv.Rows.Add()
   x = Dgv.Rows.Count - 1
   Dgv(0, x).Value = _ID
   Dgv(1, x).Value = _Barcode
   Dgv(2, x).Value = _Name
   Dgv(3, x).Value = _SalePrice
   Dgv(4, x).Value = 1
   Dgv(5, x).Value = Dgv(3, x).Value * 1
   Dgv(6, x).Value = _SalePrice - _BuyPrice
   InvoiceTotal()
ElseIf dt.Rows.Count > 1 Then
   '  هنا تضع كود فتح النافذة الجديدة التي عليها الداتاجريد وتعرض فيها كل المواد
End If

أما الكود الذي تضعه في حال أكثر من سجل :
هو عرض النافذة الجديدة وتعبئة البيانات في الداتا جريد من خلال الكود التالي بعد فتح النافذة الجديدة(FormX)  :

كود :
FormX.DataGridView1.DataSource = dt

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


وفقك الله ..

مشكور جدا على اهتمامك 
لكن ممكن لو سمحت تعدل لي هذا الكود 
كود :
  Public Function GetPriceMore1() As Boolean
       con = New SqlConnection(cs)
       If con.State = 1 Then con.Close()
       con.Open()
       cmd = New SqlCommand("Select * from Product_Tbl Where ProductSale1 > 0", con)
       cmd.Parameters.AddWithValue("@ProductSale1", Frm_Add_Product.TxtProductSale1.Text)
       rdr = cmd.ExecuteReader
       rdr.Read()
       If rdr.HasRows Then
           FormX.Show()
       End If
       rdr.Close()
       con.Close()
   End Function
بحيث انه لو  ProductSale1 في قاعدة البيانات اكبر من 0 
يفتح فورم formx
الرد }}}
تم الشكر بواسطة:
#8
كود :
Public Function GetPriceMore1() As Boolean
       con = New SqlConnection(cs)
       If con.State = 1 Then con.Close()
       con.Open()
       cmd = New SqlCommand("Select * from Product_Tbl Where ProductSale1 > 0", con)
       rdr = cmd.ExecuteReader
       rdr.Read()
       If rdr.HasRows Then
           FormX.Show()
       End If
       rdr.Close()
       con.Close()
   End Function
الرد }}}
تم الشكر بواسطة:
#9
بردو نفس المشكلة ( بيفتح الفورم ) سواء في سعر ثاني او لا
الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم