اذهب الي المحتوي
أوفيسنا

حذف فاتورة وارجاع كمية المخزون للمخزن المخصص لها


إذهب إلى أفضل إجابة Solved by mahmoud nasr alhasany,

الردود الموصى بها

السلام عليكم ورحمة الله وبركاتة رجاء مساعدتى فى هذا الموضوع
انه حذف فاتورة ,وايضا التعديل على الفاتورة
سنبتدى على طريقة الحذف اولا
 * حذف فاتورة: تحديد رقم فاتورة في TextBox2 وحذفها من ورقة المبيعات.
 * إرجاع الكميات: إرجاع الكميات الخاصة بالأصناف الموجودة في الفاتورة إلى ورقة المخزون المقابلة.
 * تعريف المخزن: تحديد ورقة المخزون الصحيحة بناءً على مخزن الفاتورة.
1. تصميم نموذج المستخدم (UserForm):
 * TextBox2: لإدخال رقم الفاتورة.
 * Combobox1: لعرض تفاصيل اسم المخزن المحول منه الفاتورة
* Combobox2: لعرض تفاصيل اسم المخزن المحول منه الفاتورة
 * ListBox1: لعرض تفاصيل الأصناف في الفاتورة المحددة
 * الأعمدة التالية
: تفاصيل الأصناف فى listbox 1
      (كود الصنف، اسم الصنف ،الكمية).
 * زر حذف: لتنفيذ عملية الحذف وإرجاع الكميات.
2. تفاصيل بيانات ورقة المبيعات:
 * العمود A: رقم الفاتورة.
 * العمود B: تاريخ الفاتورة.
 * العمود C  :  اسم المخزن.
 * العمود d: اسم المخزن.المحول منه
* العمود E: اسم المخزن.المحول اليه
* العمود F: كود الصنف
* العمود G: اسم الصنف
* العمود H: الكميه
 * الأعمدة التالية: تفاصيل الأصناف فى ورقة المخزون (اسم للمخزن ،كود الصنف، اسم الصنف،الرصيد المخزون).
3. تفاصيل بيانات ورقة المخزون:
 * العمود A: اسم المخزن.
 * العمود B:  كود الصنف
 * العمود C  :  اسم الصنف
* العمود d: الرصيد.
4. كود VBA:
المطلوب عند الحذف الكمية من مخزن محدد من ورقة المبيعات ارجاع الكمية الى المخزون من المخزن المحول منه وخصم الكمية من المحول الية
مالخطاء فى الكود المدرج
 
Private Sub CommandButton3_Click()
If ListBox1.ListIndex = -1 Then: Exit Sub
If ListBox1.ListIndex = -1 Then
'''''حدف البيانات من الليست بوكس'''''
    MsgBox "!المرجوا تحديد الصف المراد حدفه !", vbCritical, ""
   Exit Sub
   End If
    If ListBox1.ListIndex >= 0 Then
     cevap = MsgBox("?هل أنت متأكد أنك تريد حذف العنصر المحدد", vbYesNo)
       If cevap = vbYes Then
       ListBox1.RemoveItem ListBox1.ListIndex
        REMOVE
       End If
    End If
    On Error Resume Next
  Dim wsSales As Worksheet, wsInventory As Worksheet
    Dim lastRowSales As Long, lastRowInventory As Long
    Dim deleteRow As Long
    Dim itemRow As Long
    Dim invoiceNumber As Long, itemCode As String, warehouseName As String, quantity As Integer, warehouseFrom As String, warehouseTo As String

    ' تحديد ورقة المبيعات والمخزون
    Set wsSales = ThisWorkbook.Sheets("Transferts")
    Set wsInventory = ThisWorkbook.Sheets("Inventaire")

    ' الحصول على رقم الفاتورة من TextBox2
    invoiceNumber = Val(TextBox2.Value)

    ' البحث عن الصف الذي يحتوي على الفاتورة المحددة
    lastRowSales = wsSales.Cells(wsSales.Rows.Count, "A").End(xlUp).Row
    For i = 2 To lastRowSales
        If wsSales.Cells(i, "A").Value = invoiceNumber Then
            deleteRow = i
            Exit For
        End If
    Next i

    ' إذا تم العثور على الفاتورة، قم بحذفها وإرجاع الكميات
    If deleteRow > 0 Then
        ' الحصول على اسم المخزن من الصف الذي سيتم حذفه
       ' warehouseName = wsSales.Cells(deleteRow, "C").Value
        warehouseFrom = wsSales.Cells(deleteRow, "D").Value
        warehouseTo = wsSales.Cells(deleteRow, "E").Value

        ' ملء ListBox1 ببيانات الأصناف
        ListBox1.Clear
        For itemRow = 6 To wsSales.Cells(deleteRow - 1, wsSales.Columns.Count).End(xlToLeft).Column Step 3
            itemCode = wsSales.Cells(deleteRow - 1, itemRow).Value
            itemName = wsSales.Cells(deleteRow - 1, itemRow + 1).Value
            quantity = wsSales.Cells(deleteRow - 1, itemRow + 2).Value
            ListBox1.AddItem itemCode & " - " & itemName & " - " & quantity
        Next itemRow

        ' حذف الصف من ورقة المبيعات
        wsSales.Rows(deleteRow).EntireRow.Delete

        ' البحث عن الأصناف في الفاتورة وإرجاع الكميات إلى المخزن المصدر
        
        For Each Item In ListBox1.List 'ListItems
            ItemData = Split(Item.Value, " - ")
            itemCode = ItemData(0)
            quantity = CInt(ItemData(2))

            ' البحث عن الصنف في ورقة المخزون وإضافة الكمية إلى المخزن المصدر
            lastRowInventory = wsInventory.Cells(wsInventory.Rows.Count, "A").End(xlUp).Row
            For i = 2 To lastRowInventory
                If wsInventory.Cells(i, "B").Value = itemCode And wsInventory.Cells(i, "A").Value = warehouseFrom Then
                    wsInventory.Cells(i, "D").Value = wsInventory.Cells(i, "D").Value + quantity
                    ' التأكد من عدم وجود كميات سالبة
                    If wsInventory.Cells(i, "D").Value < 0 Then
                        MsgBox "الكمية في المخزن أصبحت سالبة للصنف " & itemCode
                        Exit Sub
                    End If
                    Exit For
                End If
            Next i
        Next itemRow
    Else
        MsgBox "لم يتم العثور على الفاتورة"
    End If
            Next i
        Next Item
    Else
        MsgBox "لم يتم العثور على الفاتورة"
    End If
End Sub

مالخطاء فى تنفيذ الكود فى الفورم

Copy of Copy of امين مخزن.xlsm

تم تعديل بواسطه mahmoud nasr alhasany
رابط هذا التعليق
شارك

 

وهذا الكود خاص بتعديل الفاتورة وارجاع الكمية الصحية لمخزون المخزن

ان كمية المخزون المستردة يجب ان تكون ناقصة فى

If wsStock.Cells(j, "A").Value =TOStore Then

 

Private Sub CommandButton2_Click()
 Dim wsSales As Worksheet, wsStock As Worksheet
    Dim lastRowSales As Long, lastRowStock As Long
    Dim i As Long, j As Long
    Dim invoiceNo As Long, fromStore As String, toStore As String, itemCode As String, quantity As Long, newQuantity As Long
    invoiceNo = Val(TextBox2.Value)
    fromStore = ComboBox1.Value
    toStore = ComboBox2.Value
' ComboBox1 رصيد المخزون الاول
    fromStore1 = stocktr.Value
' ComboBox2 رصيد المخزون الثانى
    toStore2 = stocktrr.Value
    Set wsSales = Worksheets("Transferts")
    Set wsStock = Worksheets("Inventaire")
    ' Find the invoice in the Sales sheet
    lastRowSales = wsSales.Cells(wsSales.Rows.Count, "A").End(xlUp).Row
    For i = 2 To lastRowSales
        If wsSales.Cells(i, "A").Value = invoiceNo Then
            ' Get the new quantity from the user (مثال: عن طريق TextBox)
            newQuantity = Val(TextBox1.Value)
            ' Calculate the quantity difference
            quantity = wsSales.Cells(i, "H").Value
            Dim quantityDiff As Long
            quantityDiff = newQuantity + quantity
            ' Update the quantity in the Sales sheet
            wsSales.Cells(i, "H").Value = newQuantity
    End If
    Next i
   ' Find the invoice in the Stock sheet
    lastRowStock = wsStock.Cells(wsStock.Rows.Count, "A").End(xlUp).Row
    For j = 2 To lastRowStock
        If wsStock.Cells(j, "A").Value = toStore Then
            ' Get the new quantity from the user (مثال: عن طريق TextBox)
            newQuantity = Val(TextBox1.Value)
 ' Calculate the quantity difference
            quantity = wsStock.Cells(j, "D").Value
            quantityDiff = newQuantity - quantity
            ' Update the quantity in the Sales sheet
            wsStock.Cells(j, "D").Value = newQuantity + toStore2
            ' Update quantities in the inventory
            ' ... (نفس الكود السابق لإرجاع الكميات)
    ' Find the invoice in the Stock sheet
         ElseIf wsStock.Cells(j, "A").Value = fromStore Then
            ' Get the new quantity from the user (مثال: عن طريق TextBox)
            newQuantity = Val(TextBox1.Value)
 ' Calculate the quantity difference
            quantity = wsStock.Cells(j, "D").Value
            quantityDiff = newQuantity + quantity
            ' Update the quantity in the Sales sheet
            wsStock.Cells(j, "D").Value = newQuantity + fromStore1
wsStock.Cells(lastRowStock + 1, "J").Value = Now() ' تاريخ التعديل
wsStock.Cells(lastRowStock + 1, "K").Value = Environ("Username") ' اسم المستخدم
        End If
    Next j
    MsgBox "تم تعديل الفاتورة وإرجاع الكميات بنجاح"
End Sub

 

الرجاء مساعدتى انى عالق

تم تعديل بواسطه mahmoud nasr alhasany
رابط هذا التعليق
شارك

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

مثال

شيت المخزون  Set wsStock = Worksheets("Inventaire")

مخزن1  الكمية المفترض 92

مخزن2   الكمية المفترض 75

والكمية المسترجعة من شيت المبيعات Set wsStock = Worksheets("Transferts")

الكمية هى  5

الى شيت المخزون  Set wsStock = Worksheets("Inventaire")

بعد تحديث المخزون يكون

مخزن1  الكمية المفترض 97

مخزن2   الكمية المفترض 70

ولاكن النتيجة فى شيت المخزون غير كدة

بعد تحديث المخزون يكون

مخزن1  الكمية المفترض 97

مخزن2   الكمية المفترض 80

تجد المشكلة فى الكمية المسترجعة فى مخزن2 تكون 70 بدل ان تزيد الكمية 5 لتكون 80 من اصل الكمية 75

امين مخزن3.xlsm

تم تعديل بواسطه mahmoud nasr alhasany
رابط هذا التعليق
شارك

  • أفضل إجابة

تم ايجاد المشكلة بحمدلله الخاص بتعديل الكمية وارجاعها للمخزنين سواء خصم اوزيادة فى احداهما

يوجد كودين

Private Sub CommandButton2_Click()

    ' ... rest of your code ...
 Dim wsSales As Worksheet, wsStock As Worksheet
    Dim lastRowSales As Long, lastRowStock As Long
    Dim i As Long, j As Long
    Dim invoiceNo As Long, fromStore As String, toStore As String, itemCode As String, quantity As Long, newQuantity As Long
    Dim quantityDiff As Long
    'رقم الفاتورة
    invoiceNo = Val(TextBox2.Value)
   ' ComboBox1  المخزون الاول
    fromStore = ComboBox1.Value
  ' ComboBox2  المخزون الثانى
    toStore = ComboBox2.Value
' ComboBox1 رصيد المخزون الاول
    fromStore1 = stocktr.Value
' ComboBox2 رصيد المخزون الثانى
    toStore2 = stocktrr.Value
    'شيت مبيعات
    Set wsSales = Worksheets("Transferts")
    'شيت المخزون
    Set wsStock = Worksheets("Inventaire")
    'ابحث عن الفاتورة في ورقة المبيعات
    lastRowSales = wsSales.Cells(wsSales.Rows.Count, "A").End(xlUp).Row
    For i = 2 To lastRowSales
        If wsSales.Cells(i, "A").Value = invoiceNo Then
            ' احصل على الكمية الجديدة من المستخدم (مثال: عن طريق TextBox)
            newQuantity = Val(TextBox1.Value)
            ' احسب فرق الكمية
            quantity = wsSales.Cells(i, "H").Value
            quantityDiff = newQuantity + quantity
            ' قم بتحديث الكمية في ورقة المبيعات
            wsSales.Cells(i, "H").Value = newQuantity
            wsSales.Cells(i, "k").Value = Now()  ' تاريخ التعديل
            wsSales.Cells(i, "l").Value = Environ("Username")  ' اسم المستخدم
    End If
    Next i
   ' ابحث عن الفاتورة في ورقة المخزون
    lastRowStock = wsStock.Cells(wsStock.Rows.Count, "A").End(xlUp).Row
    For j = 2 To lastRowStock
        If wsStock.Cells(j, "A").Value = fromStore Then
            ' احصل على الكمية الجديدة من المستخدم (مثال: عن طريق TextBox)
            newQuantity = Val(TextBox1.Value)
            quantity = wsStock.Cells(j, "D").Value
            quantityDiff = newQuantity - quantity
            ' قم بتحديث الكمية في ورقة المبيعات
            wsStock.Cells(j, "D").Value = newQuantity + fromStore1
            ' تحديث الكميات في المخزون
            ' ... (نفس الكود السابق لإرجاع الكميات)
         ElseIf wsStock.Cells(j, "A").Value = toStore Then
            ' احصل على الكمية الجديدة من المستخدم (مثال: عن طريق TextBox)
            newQuantity = Val(TextBox1.Value)
           ' احسب فرق الكمية
            quantity = wsStock.Cells(j, "D").Value
            quantityDiff = newQuantity + quantity
            ' قم بتحديث الكمية في ورقة المبيعات
            wsStock.Cells(j, "D").Value = toStore2 - newQuantity
            wsStock.Cells(j, "J").Value = Now() ' تاريخ التعديل
            wsStock.Cells(j, "K").Value = Environ("Username")  ' اسم المستخدم
        End If
    Next j
    MsgBox "تم تعديل الفاتورة وإرجاع الكميات بنجاح"
End Sub

 

 

Private Sub CommandButton2_Click()
 Dim wsSales As Worksheet, wsStock As Worksheet
    Dim lastRowSales As Long, lastRowStock As Long
    Dim i As Long, j As Long
    Dim invoiceNo As Long, fromStore As String, toStore As String, itemCode As String, quantity As Long, newQuantity As Long
    Dim quantityDiff As Long
    
    invoiceNo = Val(TextBox2.Value)
    ' ComboBox1  المخزون الاول
    fromStore = ComboBox1.Value
    ' ComboBox1  المخزون الاول
    toStore = ComboBox2.Value
' ComboBox1 قيمة المخزون الاول
    fromStore1 = stocktr.Value
' ComboBox2 قيمة المخزون الثانى
    toStore2 = stocktrr.Value
    Set wsSales = Worksheets("Transferts")
    Set wsStock = Worksheets("Inventaire")
    lastRowSales = wsSales.Cells(wsSales.Rows.Count, "A").End(xlUp).Row
    For i = 2 To lastRowSales
        If wsSales.Cells(i, "A").Value = invoiceNo Then
            newQuantity = Val(TextBox1.Value)
            quantity = wsSales.Cells(i, "H").Value
            quantityDiff = newQuantity + quantity
            wsSales.Cells(i, "H").Value = newQuantity
            wsSales.Cells(i, "k").Value = Now()  ' تاريخ التعديل
            wsSales.Cells(i, "l").Value = Environ("Username")  ' اسم المستخدم
    End If
    Next i
    lastRowStock = wsStock.Cells(wsStock.Rows.Count, "A").End(xlUp).Row
     For j = 2 To lastRowStock
        quantity = wsStock.Cells(j, "D").Value
        If wsStock.Cells(j, "A").Value = fromStore Then
            wsStock.Cells(j, "D").Value = newQuantity + fromStore1
        ElseIf wsStock.Cells(j, "A").Value = toStore Then
            wsStock.Cells(j, "D").Value = toStore2 - newQuantity ' تم التعديل هنا
            wsStock.Cells(j, "J").Value = Now() ' تاريخ التعديل
            wsStock.Cells(j, "K").Value = Environ("Username") ' اسم المستخدم
        End If
    Next j
    MsgBox "تم تعديل الفاتورة وإرجاع الكميات بنجاح"
End Sub

 

امين مخزن4.xlsm

  • Like 1
رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information