سلمان الشهراني قام بنشر الأحد at 11:19 قام بنشر الأحد at 11:19 (معدل) السلام عليكم ورحمة الله وبركاته لدي قاعدتين ( Zakat1 و Zakat2 ) تحتوي على نفس الجداول والحقول مع اضافة رقم 2 فقط في اسماء جداول القاعدة Zakat2 ويوجد في القاعده Zakat1 نموذجين FormZakat1 و FormZakat2 المطلوب 1- عند فتح نموذج FormZakat1 يقوم بالبحث عن الفواتير الموجوده بالقاعده Zakat1 وليست موجوده بالقاعده Zakat2 ومن ثم يقوم بترحيلها كامله سوى الجدول الرئيسي او الفرعي ثم تحذف هذه الفواتير من الجداول بعد فترة زمنيه محدده مثلاً (30) يوم 2- عند فتح نموذج FormZakat2 يقوم بإسترجاع الفاتورة المحدده في المربع Text1 من القاعده Zakat2 الى القاعده Zakat1 شرط ان تكون بنفس رقم الفاتورة ولا يتم حذفها من القاعده Zakat2 ملاحظة ارغب ان لايكون هناك علاقة بين القاعدتين عن طريق الجداول المرتبطه ان امكن Zakat.rar تم تعديل الأحد at 11:48 بواسطه سلمان الشهراني
ابوخليل قام بنشر الأحد at 11:55 قام بنشر الأحد at 11:55 23 دقائق مضت, سلمان الشهراني said: 1- عند فتح نموذج FormZakat1 يقوم بالبحث عن الفواتير الموجوده بالقاعده Zakat1 وليست موجوده بالقاعده Zakat2 عليكم السلام .. اهلا ابا حاتم رأيي ان تستغني عن عملية البحث هذه .. لتجنب بعض المحاذير التي قد تحدث والطريقة الآمنة ان تعمل استعلام في البرنامج الأول يظهر السجلات التي مضى عليها اكثر من شهر .. لكي تلحقها بالقاعدة الثانية . ثم تحذفها اما عملية الحذف فهي ايضا خطيرة لأننا نضع في اعتبارنا جميع الاحتمالات ( قد لا تصل السجلات الى القاعدة الثانية لأسباب عدة يعرفها غالب المبرمجين ) فأرى ان تكون عملية الحذف وهمية لفترة محددة ( من اجل زيادة الأمان) وتتم لاحقا على فترات الحذف الوهمي هي اضافة حقل نعم/لا للتحكم في ظهور السجلات من عدمه 1
سلمان الشهراني قام بنشر الأحد at 12:05 الكاتب قام بنشر الأحد at 12:05 (معدل) تسلم استاذي واخي العزيز ابو خليل اقتراحك جميل جداً لكن انا اضطريت ان اعمل كل هذا لان الزكاة والدخل تمنع حذف الفواتير ومع مرور الوقت الاكسس لايتحمل ويصبح البرنامج ثقيل وكثير التعليق لذا امل ان نصل الى حل مناسب لهذه المشكله لان الحذف الوهمي يعني بقاء السجلات بنفس البرنامج وهذا قد يسبب تعليق مستقبلاً اتمنى نجد حل مثالي لهذا المشكله الي لابد من حصولها مستقبلا لكثرة البيانات تم تعديل الأحد at 12:29 بواسطه سلمان الشهراني
ابوخليل قام بنشر الأحد at 13:46 قام بنشر الأحد at 13:46 قصدي انها لا يتم حذفها مباشرة .. وهذا الذي ذكرته انت ان يتم حذفها بعد شهر الحذف الآلي لا انصح به ما المانع ان يكون هناك زر للحذف وحقل يبين عدد السجلات وتاريخ ترحيلها .. بل حقول .. لنفترض ان الترحيل يتم كل 10 ايام .. يتم عرض نموذج مستمر كل سجل امامه زر للحذف وفي السجل حقلين واحد بعدد السجلات والآخر تاريخ الترحيل .
سلمان الشهراني قام بنشر الأحد at 15:31 الكاتب قام بنشر الأحد at 15:31 كلامك جميل اخي ابو خليل ولكن السؤال هل يتم الحذف كل سجل على حده اذا كان هذا القصد فالامر متعب على المستخدم اتمنى اجد حل سهل وعملي وفيه امان عالي على البيانات وخاصه انها خاصه بالزكاة والدخل
ابوخليل قام بنشر الأحد at 16:05 قام بنشر الأحد at 16:05 27 دقائق مضت, سلمان الشهراني said: كلامك جميل اخي ابو خليل ولكن السؤال هل يتم الحذف كل سجل على حده اذا كان هذا القصد فالامر متعب على المستخدم كل ترحيل عبارة عن مجموعة من السجلات .. يتم لاحقا حذفها جملة بزر بامر واحد .. راجع مشاركتي السابقة جيدا 30 دقائق مضت, سلمان الشهراني said: اتمنى اجد حل سهل وعملي وفيه امان عالي على البيانات وخاصه انها خاصه بالزكاة والدخل من اجل هذا كتبت رؤيتي حول العملية .. حول نقطتين او اجرائين في فكرتك الأصلية : 1- المقارنة بين السجلات في قاعدتين متباعدتين 1- الحذف الآلي 1
سلمان الشهراني قام بنشر الأحد at 16:13 الكاتب قام بنشر الأحد at 16:13 (معدل) طيب ممكن يتم تطبقها على المثال اخي الغالي ابو خليل واتمنى نشوف افكار من الاخوان والاساتذه الكرام تم تعديل الأحد at 16:33 بواسطه سلمان الشهراني
kkhalifa1960 قام بنشر الأحد at 22:45 قام بنشر الأحد at 22:45 استاذ @سلمان الشهراني ممكن استخدام هذه الفكرة كما بالمرفق لكن ماينفع معها علاقات . جرب زياد ادخالات .ووافني بالرد . Zakat-1.rar 1
Foksh قام بنشر بالامس في 00:52 قام بنشر بالامس في 00:52 (معدل) وعليكم السلام ورحمة الله وبركاته أستاذ @سلمان الشهراني ، لي مداخلة بسيطة :- في مثالك لاحظت ان رقم الفاتورة مكرر في سجلات القاعدة الأولى ، هل هذا منطقي أم هو مجرد مثال ؟؟ في حال كان هو فعلاً كذلك ، فعلى أي أساس نريد استرجاع فاتورة محددة قد يكون لها سجلات مكررة بنفس رقم الفاتورة ؟؟؟؟؟ على العموم إليك اقتراحي :- في زر الترحيل الى القاعدة الأولى استخدم الكود التالي :- Private Sub COM1_Click() On Error GoTo ErrorHandler Dim db1 As DAO.Database Dim db2 As DAO.Database Dim rst1 As DAO.Recordset Dim rstCheck As DAO.Recordset Dim strSQL As String Dim strCheck As String Dim strPath2 As String Dim intCount As Integer strPath2 = CurrentProject.Path & "\Zakat2.accdb" Set db1 = CurrentDb Set db2 = DBEngine.OpenDatabase(strPath2) strCheck = "SELECT COUNT(*) AS NewCount " & _ "FROM TBInvoiceMain " & _ "WHERE ID NOT IN " & _ "(SELECT ID FROM [;DATABASE=" & strPath2 & "].TBInvoiceMain2)" Set rstCheck = db1.OpenRecordset(strCheck) If Not rstCheck.EOF Then If rstCheck!NewCount = 0 Then MsgBox "لا توجد فواتير جديدة للترحيل", vbInformation + vbMsgBoxRight, "" GoTo CleanUp End If If MsgBox("سيتم نقل " & rstCheck!NewCount & " فاتورة . هل تريد المتابعة؟", _ vbQuestion + vbMsgBoxRight + vbYesNo, "") = vbNo Then GoTo CleanUp End If End If strSQL = "SELECT DISTINCT TBInvoiceMain.* " & _ "FROM TBInvoiceMain " & _ "WHERE InvoiceNumber NOT IN " & _ "(SELECT InvoiceNumber FROM [;DATABASE=" & strPath2 & "].TBInvoiceMain2)" Set rst1 = db1.OpenRecordset(strSQL) intCount = 0 If Not rst1.EOF Then Do While Not rst1.EOF On Error Resume Next strSQL = "INSERT INTO [;DATABASE=" & strPath2 & "].TBInvoiceMain2 " & _ "SELECT ID, ID2, InvoiceNumber, FormNumber, InvoiceType, UUID, " & _ "InvoiceSerial, InvoiceDate, InvoiceTime, InvoiceTypeCodeID, " & _ "InvoiceTypeCodeName, InvoiceHash, DateSupply, EndDateSupply, " & _ "PaymentMethod, InstructionNote, TotalDiscount, DiscountReason, " & _ "TaxCode, TaxCodeName, TaxPercentage, InvoiceQR, InvoiceXmlName, " & _ "InvoiceXmlFullPath, EncodedInvoice, XMLCreated, SendingStatus, " & _ "ZatcaStatusCode, ZatcaXMLSent, ZatcaWarningMessage, ZatcaErrorMessage, " & _ "ClearedInvoice, BuyerStreetName, BuyerAdditionalStreetName, " & _ "BuyerBuildingNumber, BuyerPlotIdEntification, BuyerCityName, " & _ "BuyerPostalCode, BuyerCountrySubEntity, BuyerCitySubDivisionName, " & _ "BuyerCompanyName, BuyerTaxNumber, clearedXmlFullPath, BuyerCommercialRegistrationNo " & _ "FROM TBInvoiceMain WHERE InvoiceNumber = " & rst1!InvoiceNumber db1.Execute strSQL If Err.Number = 0 Then strSQL = "INSERT INTO [;DATABASE=" & strPath2 & "].TBInvoiceSub2 " & _ "SELECT ID, InvoiceNumber, ItemName, Quantity, ItemPriceBeforeTax, " & _ "TaxPercentage, TaxCode, Discount " & _ "FROM TBInvoiceSub WHERE InvoiceNumber = " & rst1!InvoiceNumber db1.Execute strSQL If Err.Number = 0 Then intCount = intCount + 1 End If End If On Error GoTo ErrorHandler rst1.MoveNext Loop strSQL = "DELETE TBInvoiceSub.* " & _ "FROM TBInvoiceSub INNER JOIN TBInvoiceMain ON TBInvoiceMain.ID = TBInvoiceSub.ID " & _ "WHERE DateDiff('d', TBInvoiceMain.InvoiceDate, Date()) > 30" db1.Execute strSQL strSQL = "DELETE TBInvoiceMain.* " & _ "FROM TBInvoiceMain " & _ "WHERE DateDiff('d', InvoiceDate, Date()) > 30" db1.Execute strSQL If intCount > 0 Then MsgBox "تم ترحيل " & intCount & " فاتورة بنجاح" & vbCrLf & _ "وتم حذف الفواتير الأقدم من 30 يوم", vbInformation + vbMsgBoxRight, "" Else MsgBox "لم يتم ترحيل أي فواتير", vbInformation + vbMsgBoxRight, "" End If End If CleanUp: If Not rst1 Is Nothing Then rst1.Close If Not rstCheck Is Nothing Then rstCheck.Close Set rst1 = Nothing Set rstCheck = Nothing If Not db2 Is Nothing Then db2.Close Set db2 = Nothing Exit Sub ErrorHandler: MsgBox "حدث خطأ أثناء عملية الترحيل", vbCritical + vbMsgBoxRight, "" Resume CleanUp End Sub أما في نموذج استرجاع رقم فاتورة محدد ، استخدم الكود التالي :- Private Sub COM1_Click() On Error GoTo ErrorHandler If IsNull(Me.Text1) Or Trim(Me.Text1) = "" Then MsgBox "الرجاء إدخال رقم الفاتورة المطلوب استرجاعها", vbExclamation + vbMsgBoxRight, "" Me.Text1.SetFocus Exit Sub End If If Not IsNumeric(Me.Text1) Then MsgBox "الرجاء إدخال رقم فاتورة صحيح", vbExclamation + vbMsgBoxRight, "" Me.Text1.SetFocus Exit Sub End If Dim db1 As DAO.Database Dim db2 As DAO.Database Dim rst1 As DAO.Recordset Dim strSQL As String Dim strPath2 As String Dim lngInvoiceNumber As Long strPath2 = CurrentProject.Path & "\Zakat2.accdb" lngInvoiceNumber = CLng(Trim(Me.Text1)) Set db1 = CurrentDb Set db2 = DBEngine.OpenDatabase(strPath2) strSQL = "SELECT COUNT(*) AS InvCount " & _ "FROM [;DATABASE=" & strPath2 & "].TBInvoiceMain2 " & _ "WHERE InvoiceNumber = " & lngInvoiceNumber Set rst1 = db1.OpenRecordset(strSQL) If rst1!InvCount = 0 Then MsgBox "الفاتورة رقم " & lngInvoiceNumber & " غير موجودة في قاعدة البيانات الثانية", vbExclamation + vbMsgBoxRight, "" GoTo CleanUp End If strSQL = "SELECT COUNT(*) AS InvCount FROM TBInvoiceMain " & _ "WHERE InvoiceNumber = " & lngInvoiceNumber Set rst1 = db1.OpenRecordset(strSQL) If rst1!InvCount > 0 Then If MsgBox("الفاتورة موجودة بالفعل في القاعدة الحالية . هل تريد استرجاعها مرة أخرى؟", _ vbQuestion + vbYesNo + vbMsgBoxRight, "") = vbNo Then GoTo CleanUp End If End If strSQL = "INSERT INTO TBInvoiceMain " & _ "SELECT * FROM [;DATABASE=" & strPath2 & "].TBInvoiceMain2 " & _ "WHERE InvoiceNumber = " & lngInvoiceNumber db1.Execute strSQL strSQL = "INSERT INTO TBInvoiceSub " & _ "SELECT * FROM [;DATABASE=" & strPath2 & "].TBInvoiceSub2 " & _ "WHERE InvoiceNumber = " & lngInvoiceNumber db1.Execute strSQL MsgBox "تم استرجاع الفاتورة رقم " & lngInvoiceNumber & " بنجاح", vbInformation + vbMsgBoxRight, "" Me.Text1 = "" Me.Text1.SetFocus CleanUp: If Not rst1 Is Nothing Then rst1.Close Set rst1 = Nothing If Not db2 Is Nothing Then db2.Close Set db2 = Nothing Exit Sub ErrorHandler: MsgBox "حدث خطأ أثناء عملية الاسترجاع", vbCritical + vbMsgBoxRight, "" Resume CleanUp End Sub تم الإعتماد هنا على رقم الفاتورة من الحقل InvoiceNumber ، وأخبرني بالنتيجة . المرفق بعد التعديل .. Zakat.zip . تم تعديل بالامس في 00:54 بواسطه Foksh تعديل خطأ إملائي 2
سلمان الشهراني قام بنشر منذ 20 ساعات الكاتب قام بنشر منذ 20 ساعات 8 ساعات مضت, kkhalifa1960 said: استاذ @سلمان الشهراني ممكن استخدام هذه الفكرة كما بالمرفق لكن ماينفع معها علاقات . جرب زياد ادخالات .ووافني بالرد . عمل جميل وفكرة جميله تسلم وفقك الله والف شكر
سلمان الشهراني قام بنشر منذ 20 ساعات الكاتب قام بنشر منذ 20 ساعات (معدل) 7 ساعات مضت, Foksh said: في مثالك لاحظت ان رقم الفاتورة مكرر في سجلات القاعدة الأولى ، هل هذا منطقي أم هو مجرد مثال ؟؟ في حال كان هو فعلاً كذلك ، فعلى أي أساس نريد استرجاع فاتورة محددة قد يكون لها سجلات مكررة بنفس رقم الفاتورة ؟؟؟؟؟ المرفق والعمل ممتااااز جدا وقمة الابداع ولكن يحتاج بعض الاضافات والتعديل اولا طال عمرك رقم الفاتورة هو حقل ID وهو الحقل الذي يتم التعامل معه في المقارنه او عمليات الاسترجاع وهو رقم الفاتورة الخاص بالزكاة والدخل اما بنسبه لحقل ID2 وحقل InvoiceNumber فهي ارقام خاصه بالنظام غير مهمه في عملية الترحيل او الاسترجاع المطلوب اضافته 1- امكانية تحديد مسار القاعده Zakat2 ليتم عملية الترحيل والاسترجاع لها ومنها حسب المسار المحدد 2- اعتماد حقل ID هل حقل الفاتورة ويتم التعامل معه فقط 3- عند عملية استرجاع الفاتورة برقم الفاتورة (ID) للقاعده Zakat1 يتم حذفه مره اخرى من القاعده Zakat1 مع اول عملية حذق بناء على المده 30 مع العلم انه لابد ان يبقى في القاعده Zakat2 بعد الاسترجاع 3- لوحظ حاليا انه في الجدول الفرعي عند الترحيل لايتم نقلها بالشكل الصحيح كماهي في القاعده الاساسيه وكما ذكرت ان هذه الفواتير خاصه بالزكاة والدخل ولاتحتمل الخطاء شاكر لكم جهدكم وفقكم الله تم تعديل منذ 20 ساعات بواسطه سلمان الشهراني
Foksh قام بنشر منذ 15 ساعات قام بنشر منذ 15 ساعات 3 ساعات مضت, سلمان الشهراني said: 1- امكانية تحديد مسار القاعده Zakat2 ليتم عملية الترحيل والاسترجاع لها ومنها حسب المسار المحدد 3 ساعات مضت, سلمان الشهراني said: 2- اعتماد حقل ID هل حقل الفاتورة ويتم التعامل معه فقط تم التعديل بإذن الله .. 4 ساعات مضت, سلمان الشهراني said: 3- عند عملية استرجاع الفاتورة برقم الفاتورة (ID) للقاعده Zakat1 يتم حذفه مره اخرى من القاعده Zakat1 مع اول عملية حذق بناء على المده 30 مع العلم انه لابد ان يبقى في القاعده Zakat2 بعد الاسترجاع تم التعديل بحيث عند استرجاع فاتورة ( جرب على الفاتورة رقم 4 حيث تم التعديل للتاريخ = 2024-11-16 للتجربة) ، سيتم سؤال المستخدم انه هذه الفاتورة مضى عليها أكثر من 30 يوم ، هل تريد الحذف ( الأمر متروك للمستخدم بالحذف أو لا ..) 4 ساعات مضت, سلمان الشهراني said: 4- لوحظ حاليا انه في الجدول الفرعي عند الترحيل لايتم نقلها بالشكل الصحيح كماهي في القاعده الاساسيه في اي جزء لاحظت انه لا يتم الترحيل بشكل صحيح ...؟ فبناءً على الملف المرفق تمت التجربة على السجلات بشكل منفصل والتدقيق قبل وبعد الترحيل أو الإستيراد . اذا تمكنت من ارفاق صورة أو توضيح لتلافي المشكلة ، وأكيد في الأمور المالية والحسابية الخطأ يكون قاتلاً Zakat.zip
ابوخليل قام بنشر منذ 10 ساعات قام بنشر منذ 10 ساعات ما شاء الله لا قوة الا بالله .. اخي فادي ولا اجمل .. سلمت أناملك سبحان الذي منحك الصبر والتمكن.. على هذا العمل الرائع والدقيق الحقيقة هذه الجمل البرمجية الجميلة تدرس وتحفظ كمرجع مهم للغاية لذا تم السطو على كم سطر منها .. فأعتذر .. زادك الله علما انا كنت اعمل على طلب الأخ سلمان وقت طلب مني ذلك ولكني توقفت لمشكلات ظهرت امامي وقد تمت معالجتها بفضل الله الفكرة التي يجب ان يكون تصميم الجداول قائم عليه كالتالي : 1- وجود حقل غير قابل للتكرار في جميع الجداول خاصة الجدول الفرعي الخارجي 2- خصائص العلاقة بين الجدول الرئيس والفرعي ( في القاعدة الحالية لاباس من توالي التحديث والحذف وهو جيد لاختصار عملية الحذف .. اما في القاعدة الخارجية فممنوع ويكفي التكامل فقط) 3- اضافة حقل نعم لا من اجل تأكيد التصدير وايضا الحذف 4- عمل تصفية بين تاريخين لحصر السجلات المراد اجراء العمليات عليها 5- لا يلزم الانتظار لشهر او غيره في عملية الحذف وانما تتم مباشرة بعد الترحيل تم العمل على النحو التالي وهي وجهة نظر تخصني وتحقيقا لما تفضل السائل بتأكيده : ((( وكما ذكرت ان هذه الفواتير خاصه بالزكاة والدخل ولاتحتمل الخطاء ))) لذا : لا يسمح باختيار قاعدة الببانات الخارجية من قبل المستخدم وانما توضع بجانب قاعدة البيانات الاساسية تم الضبط ولا خوف من اي خطأ مقصود او غير مقصود هذا للترحيل والحذف : Dim strPath As String strPath = CurrentProject.Path & "\Zakat2.accdb" DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO [;DATABASE=" & strPath & "].TBInvoiceMain2 " & _ "SELECT TBInvoiceMain.* FROM TBInvoiceMain " & _ "WHERE TBInvoiceMain.chekForDel=True" DoCmd.RunSQL "INSERT INTO [;DATABASE=" & strPath & "].TBInvoiceSub2 " & _ "SELECT TBInvoiceSub.* FROM TBInvoiceMain " & _ "INNER JOIN TBInvoiceSub ON TBInvoiceMain.ID = TBInvoiceSub.ID " & _ "WHERE TBInvoiceMain.chekForDel=True" DoCmd.RunSQL "DELETE TBInvoiceMain.*, TBInvoiceMain.chekForDel FROM TBInvoiceMain " & _ "WHERE TBInvoiceMain.chekForDel=True" DoCmd.SetWarnings True وهذا للاسترجاع : lngInvoiceNumber = CLng(Trim(Me.Text1)) DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO TBInvoiceMain " & _ "SELECT * FROM [;DATABASE=" & strPath & "].TBInvoiceMain2 " & _ "WHERE InvoiceNumber = " & lngInvoiceNumber DoCmd.RunSQL "INSERT INTO TBInvoiceSub " & _ "SELECT * FROM [;DATABASE=" & strPath & "].TBInvoiceSub2 " & _ "WHERE InvoiceNumber = " & lngInvoiceNumber DoCmd.SetWarnings True MsgBox "تم الاسترجاع", , "" Zakat.rar 2
Foksh قام بنشر منذ 9 ساعات قام بنشر منذ 9 ساعات 16 دقائق مضت, ابوخليل said: لذا تم السطو على كم سطر منها .. فأعتذر .. زادك الله علما وإياكم أستاذنا الكبير @ابوخليل ، بعض ما عندكم أثابنا وأثابكم الله استولي على ما شئت ، فهذا تعليمكم أما بالنسبة لتعديلاتي الأخيرة ، فقد كانت حسب رغبة أخونا الكريم @سلمان الشهراني ، وطبعاً لا شك فيما تفضلتم به من اقتراحات خاصة ببناء الجداول . 1
سلمان الشهراني قام بنشر منذ 9 ساعات الكاتب قام بنشر منذ 9 ساعات (معدل) 56 دقائق مضت, ابوخليل said: نا كنت اعمل على طلب الأخ سلمان وقت طلب مني بيض الله وجهك اخي واستاذي ومعلمي ابو خليل افكارك ابداع وجميله والعمل اجمل وسامحنا على تعبك ولكن تم البداء والعمل على فكرة الاستاذ Foksh عاجز عن الشكر لك استاذي الغالي واتمنى المواصله على عمل الاخ Foksh لكونها اقرب للمطلوب وسوف اقوم بطرح الملاحظات الخاصه بالبرنامج الذي تم عمله الاستاذ Foksh حتى يكتمل باذن الله وفقكم الله جميعا تم تعديل منذ 9 ساعات بواسطه سلمان الشهراني 2
ابوخليل قام بنشر منذ 9 ساعات قام بنشر منذ 9 ساعات هذا الموضوع اعتبره فريد من نوعه وخاصة بتفاصيله لو بحث احد عن مثله لن يجد بغيته الا هنا في هذا المنتدى وهذا الموضوع بالذات تنوع الأفكار وتنوع الحلول مطلب برمجي بارك الله في الجميع 1
Foksh قام بنشر منذ 9 ساعات قام بنشر منذ 9 ساعات (معدل) 30 دقائق مضت, سلمان الشهراني said: بيض الله وجهك اخي واستاذي ومعلمي ابو خليل افكارك ابداع وجميله والعمل اجمل وسامحنا على تعبك ولكن تم البداء والعمل على فكرة الاستاذ Foksh عاجز عن الشكر لك استاذي الغالي واتمنى المواصله على عمل الاخ Foksh لكونها اقرب للمطلوب وسوف اقوم بطرح الملاحظات الخاصه بالبرنامج الذي تم عمله الاستاذ Foksh حتى يكتمل باذن الله وفقكم الله جميعا أعانكم الله على ما بدأتم ،، ونسأل الله التوفيق لنا ولكم ، ومتابع معك إن شاء الله بتكاتف الجهود طبعاً تم تعديل منذ 9 ساعات بواسطه Foksh
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.