اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

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

قام بنشر

السلام عليكم 

في نموذج sale قمت بعمل زر copy لنقل البيانات الي نموذج buy

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

Downloads.rar

قام بنشر

وعليكم السلام ورحمة الله وبركاته ..

رغم عدم قناعتي بهيكلة وتصميم الملف ، اعتقد أن ذهابك إلى جدول منفصل لعمليات البيع وجدول آخر منفصل لعميات الشراء ، أو جدول الحركات الموحد العام وهو جدول يعرض تفاصيل لجميع حركات المخزن ( بيع ، شراء ، مرتجع ، تحويل من إلى ... إلخ ) ، ولكن بحقول موحدة ( TransID , DocType , DocID , Item , Qty , Price , Discount ) ؛ حيث DocType كمثال ، سيحدد هل الحركة هي حركة بيع أم شراء ، وبذلك لا تحتاج لتكرار حقول sale_qty و buy_qty ....

 

ولكن !!

في فكرة التنفيذ على الزر ، استعمل الحدث التالي :-

Private Sub Command160_Click()
    On Error GoTo ErrHandler

    If Me.NewRecord Or IsNull(Me.sale_id) Then
        MsgBox "يرجى تحديد فاتورة بيع أولاً", vbExclamation + vbMsgBoxRight, ""
        Exit Sub
    End If
    
    If Me.Dirty Then Me.Dirty = False

    Dim db As DAO.Database
    Dim rsBuy As DAO.Recordset
    Dim rsSaleDet As DAO.Recordset
    Dim rsBuyDet As DAO.Recordset
    Dim newBuyID As Long

    Set db = CurrentDb

    Set rsBuy = db.OpenRecordset("buy", dbOpenDynaset)
    rsBuy.AddNew
        rsBuy!reg_date = Me.reg_date
        rsBuy!code = Me.code
        rsBuy!explain = Me.explain
        rsBuy!discount = Me.discount
        rsBuy!note = Me.note
        rsBuy!saving = Me.saving
        
        newBuyID = rsBuy!buy_id
    rsBuy.Update
    rsBuy.Close
    Set rsBuy = Nothing

    Set rsSaleDet = db.OpenRecordset("SELECT * FROM details WHERE sale_id = " & Me.sale_id, dbOpenSnapshot)
    Set rsBuyDet = db.OpenRecordset("details", dbOpenDynaset)

    Do While Not rsSaleDet.EOF
        rsBuyDet.AddNew
            rsBuyDet!buy_id = newBuyID
            rsBuyDet!item = rsSaleDet!item
            rsBuyDet!buy_qty = rsSaleDet!sale_qty
            rsBuyDet!buy_price = rsSaleDet!sale_price
            rsBuyDet!buy_discount_percent = rsSaleDet!sale_discount_percent
            rsBuyDet!note = rsSaleDet!note
            rsBuyDet!m = rsSaleDet!m
            rsBuyDet!check = rsSaleDet!check
            rsBuyDet!serial = rsSaleDet!serial
        rsBuyDet.Update
        
        rsSaleDet.MoveNext
    Loop

    rsSaleDet.Close: Set rsSaleDet = Nothing
    rsBuyDet.Close: Set rsBuyDet = Nothing

    DoCmd.OpenForm "buy", acNormal, , "buy_id = " & newBuyID
    Exit Sub
ErrHandler:
    MsgBox "حدث خطأ أثناء نسخ الفاتورة الحالية", vbCritical + vbMsgBoxRight, ""
End Sub

 

تفضل الملف المرفق :-

yasser_10.zip

  • Like 1
  • Thanks 1
قام بنشر
5 ساعات مضت, husseinharby said:

هل يمكن تنفيذ ما سبق باستخدام استعلام الحاق ؟

نعم أخي الكريم .. يمكن تنفيذ الجزء الأكبر من هذا الحدث باستخدام استعلامات إلحاق ، وأعتقد أنه سيكون الحل الأسرع والأنظف من المرور على السجلات باستخدام Recordset ..

لكن توجد نقطة مهمة جداً  جداً في حالتك الحالية :-

هنا لديك عمليتان منفصلتان :-

  1. إنشاء سجل جديد في جدول buy وذلك للحصول على buy_id جديد
  2. نسخ تفاصيل الفاتورة من جدول details وربطها بـ buy_id الجديد الذي تم انشاؤه

لذلك يمكن تنفيذ العملية بثلاث خطوات.

إولاً إنشاء سجل فاتورة جديدة ، ثم الحصول على رقم فاتورة الشراء الجديدة (buy_id) ، وأخيراً إلحاق تفاصيل فاتورة البيع إلى تفاصيل فاتورة الشراء الجديدة .

ولكم من خلال الكود ستكون العملية أسهل مرة واحدة .

 

 

  • Thanks 1

انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد

يجب ان تكون عضوا لدينا لتتمكن من التعليق

انشئ حساب جديد

سجل حسابك الجديد لدينا في الموقع بمنتهي السهوله .

سجل حساب جديد

تسجيل دخول

هل تمتلك حساب بالفعل ؟ سجل دخولك من هنا.

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

×
×
  • اضف...

Important Information