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

jjafferr

أوفيسنا
  • Posts

    10020
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    408

كل منشورات العضو jjafferr

  1. حياك الله 🙂 وتماشيا مع قوانين المنتدى: رجاء فتح موضوع جديد ، وتضع فيه المطلوب ، وبوضوح ، وبأمثلة ، جتى يستطيع الاعضاء ان يعطوك الاجابة المطلوبة ان شاء الله 🙂 جعفر
  2. السلام عليكم 🙂 تفضل 🙂 . واستعمل الاستعلام qry_Group_Shifts_by_Dates كمصدر بيانات ، وتقدر تعمل به التقرير او النموذج الذي تشاء. جعفر 1281.4.FRm_Refresh.accdb.zip
  3. وكذلك استطعت ان اجعله بسرعة عادية 🙂 استعمل الاستعلام qry_Group_Shifts_by_Dates كمصدر بيانات ، وتقدر تعمل التقرير او النموذج الذي تشاء. اريد اعرف طريقة توزيع الموظفين شهريا : هل توزع يوم بعد يوم ، وبدون ان ترجع الى احد الايام السابقة ، او تحتاج ان تنقر على اليوم/الشفت في النموذج الفرعي ، ويُظهر لك هذا اليوم في النموذج الرئيسي ، واللي منه تقدر تبدل البيانات ؟ او تنقر على الاسم نقر مزدوج ، وتريده يجعل النموذج الرئيسي واقف على اختيار هذا الاسم ، حتى يتم تعديله مباشرة وبدون البحث عنه وهل هذا التعديل هو من اساسيات البرنامج ، حتى اقدر اتعامل معاه بطريقة تختلف كليا ، فأعمل له جدول مؤقت ، ويكون التحميل جدا سريع (ليس وقت فتح النموذج ، وانما بعد فتحه) !! جعفر
  4. هلا ومرحبا بأخوي حلبي ، وشكرا على جميل كلماتك 🙂 اخي امين ، خليني اشرح لك ليش تحصل على النتائج اللي في مرفقك ، واخبرك كيف الطريقة الصحيحة : في الحقل 1 ، انت طلبت يجمع لك جميع حقول الاستعلام Q_1 ، بشرط حقل اختباري ، وما في اي شرط ، فحسب لك كل السجلات = 8 ، 2.3.4. نفس رقم 1 ، ولكن الان وضعت شرط ، يا اختباري = العميل ، ويا العميل = اختباري ، ومن نتائج الصورة المرفقة نرى ان اختباري ≠ العميل ، لذا فالنتيجة = صفر. . الشيء الآخر ، في معيار الدالة DCount يجب عليك وضع قيم ثابته وغير متغيرة حتى يكون نتائجك صحيحة ، ولكن لما يكون معيارك في السجل في الاستعلام ، فيكون متغير بتغير قيمته في السجل ، وهذا يعطي نتائج خطأ ايضا ، اذا رأيت استعلاماتي اعلاه ، بتشوف اني عملت كل مجموعة في استعلام خاص ، وهذه لا تتغير لما استعملها في استعلام آخر . وكذلك العلاقة بين المجموعات اعلاه والاستعلام العام ، فهذي العلاقة عبارة عن ربط معيار الحقول : . يعتبر الاستعلام العمود الفقري لجميع انواع قواعد البيانات ، وكلما تعلمت منه اكثر ، كلما اصبحت قاعدة بياناتك افضل واسرع ، وقلت حاجتك الى الكود 🙂 جعفر
  5. السلام عليكم 🙂 لوسمحت تعطيني الخطوات حتى اوصل لمكان الخطأ ، ثم تخبرني شو الخطأ !! انزلت المرفق وفتحت الاستعلام الذي ذكرته انت ، ولكن طلب مني بيانات ما اعرفها !! جعفر
  6. تفضل 🙂 زر لليوم اللي انت فيه ، و زر للأيام اللي تدخلها بين "التاريخ من" الى "التاريخ الى" . . على فكرة ، عدد الموظفين لكل سطر في النموذج الفرعي ، مثل تاريخ 19 اكتوبر ، الشفت الاول ، عندنا : السطر الاول: احالحمد, السعد, السطر الثاني: كاظم, مح الحمد نقدر نتحكم في العدد لكل سطر (طبعا اذا كان السطر طويل ، فطبعا بقية السطر تلقائيا ينتقل للسطر التالي) ، مما يجعل سجلات النموذج الفرعي تطول وتقصر على حسب الاسطر اللي بها 🙂 التحكم من الاستعلام qry_Group_Shifts_by_Dates ، من الرقم اللي يؤشر عليه السهم ، والبرمجة هكذا : الرقم 1 : يعطيك اسم واحد لكل سطر ، الرقم 2 : يعطيك اسمين لكل سطر ، الرقم 3 او اكثر : يعطيك الاسماء بالعدد المكتوب لكل سطر ، الرقم 0 : يعطيك كل الاسماء في سطر واحد (وحتى تقدر ان تحذف الرقم والفاصلة اللي قبله) ، هكذا : S2: Group_Shifts(2,[tbl_Shifts].[nDate]) . والحمدلله قدرت اخلي تحميل النموذج الفرعي اسرع بنسبة 30% (عد لا تسألني كيف حسبتها 🙂 ) جعفر 1281.2.FRm_Refresh.accdb.zip
  7. اذن في هذه الحالة نكون خلصنا من العمل بالمرفق السابق ، صح؟ جعفر
  8. هو بالفعل معقد 🙂 النسخة الماضية كانت فكرة ، والآن التطبيق : 1281.1.FRm_Refresh.accdb.zip . وتم تطبيق رقم 2 🙂 الياقي الآن تاريخ ام القرى 🙂 جعفر
  9. خليني اشوف اللي عملته ، علشان اقدر اعلق عليه 🙂 ومن الخطأ وضع دوال DCount و اخواتها في استعلام ، لأنها تجعل الاستعلام جدا بطيء ، إلا طبعا في حالات جدا خاصة 🙂 جعفر
  10. السلام عليكم 🙂 اولا خليني ادافع عن نفسي واخبرك سبب التأخير 🙂 الجدول الاول مستحيل تكون نتائجة مثل ما هو موضح في الجدول الثاني ، لأن الفرع ليس نفسه في كل السجلات ، بينما الجمع في الجدول الثاني كان على اعتبار ان جميع الفروع هي نفسها (شوف اسم الفروع اللي عليها السهم ، فهي مختلفة) 🙂 وهذا اخذ مني بقية الشعر اللي على راسي ، من كثر ما حكيت رأسي بالمعادلات والنتائج الخطأ 😁 . والان الى الحل: 1. عملت استعلام مجاميع لكل مجموعة ،المجموعة الاولى للتاريخ ، والثانية للشهر ، بينما الاستعلام الثالث هو لحقول الجدول : . والنتيجة . وعملنا استعلام اخير لجمع هذه الاستعلامات الثلاث: . والنتيجة . جعفر 1285.DCOUNT.mdb.zip
  11. السلام عليكم 🙂 . ايش رايك في هذا النموذج ، بس النموذج الفرعي يأخذ وقت عند فتج النموذج !! . جعفر 1281.1.FRm_Refresh.accdb.zip
  12. السلام عليكم 🙂 قمت بدمج دالة اخوي ابوخليل الى برنامجك 🙂 Private Sub Command44_Click() Dim reportName As String Dim fileName As String Dim criteria As String reportName = "r_buy" fileName = GetDesktop & "\" & "r_buy" & ".pdf" criteria = "masterid='" & masterid & "'" DoCmd.OpenReport reportName, acViewPreview, , criteria, acHidden DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, fileName DoCmd.Close acReport, reportName, acSaveNo End Sub Function GetDesktop() As String Dim oWSHShell As Object Set oWSHShell = CreateObject("WScript.Shell") GetDesktop = oWSHShell.SpecialFolders("Desktop") Set oWSHShell = Nothing End Function . جعفر
  13. وعليكم السلام 🙂 ما فهمت 😒 ممكن مثال ببيانات من برنامجك 🙂 جعفر
  14. وعليكم السلام 🙂 الافضل لك ان تترك الاصفار في الجدول ، لأن قيمة الحقل في الجدول اذا كانت Null فيتطلب عمل بعض الخطوات للتعامل مع هذه القيمة ، واما اذا اردت في التقرير ان تُدرج "فراغ"/Null بدل الصفر ، فيمكنك استعمال هذا الكود ، سواء في الاستعلام مصدر بيانات التقرير ، او في التقرير نفسه : A = iif([M02]= 0 , "" , [M02]) جعفر
  15. التجربة اللي عملتها هي: ضبطت برنامج واحد واستخدمت 0.25 ثانيه للإنتظار ، ثم عملت منه 4 نسخ j1 و j2 و j3 و j4 ، ونضعهم مع البرنامج الاصل 1282.1.InvoiceSale_6_FE.accdb في نفس المجلد: . عملت دالتين في هذه الوحدة النمطية في البرنامج الاصل 1282.1.InvoiceSale_6_FE.accdb ، وجعلت اسماء المتغيرات في رأس الوحدة النمطية ، حتى تكون متوفرة للبرنامج كاملا ، حتى اغلاقه : Option Compare Database Option Explicit Dim oAccess1 As Access.Application Dim oAccess2 As Access.Application Dim oAccess3 As Access.Application Dim oAccess4 As Access.Application Dim db1 As String: Dim db2 As String Dim db3 As String: Dim db4 As String ' Public Function Open_Other_DBs() db1 = Application.CurrentProject.Path & "\j1.accdb" db2 = Application.CurrentProject.Path & "\j1.accdb" db3 = Application.CurrentProject.Path & "\j3.accdb" db4 = Application.CurrentProject.Path & "\j4.accdb" ' Dim oAccess As Object Set oAccess1 = CreateObject("Access.Application") 'Create a new Access instance With oAccess1 .OpenCurrentDatabase db1 'Open the specified db .Visible = True 'Ensure it is visible to the end-user .UserControl = True .DoCmd.OpenForm "InvoiceHT_F" 'Open a form? End With Set oAccess2 = CreateObject("Access.Application") 'Create a new Access instance With oAccess2 .OpenCurrentDatabase db1 'Open the specified db .Visible = True 'Ensure it is visible to the end-user .UserControl = True .DoCmd.OpenForm "InvoiceHT_F" 'Open a form? End With Set oAccess3 = CreateObject("Access.Application") 'Create a new Access instance With oAccess3 .OpenCurrentDatabase db1 'Open the specified db .Visible = True 'Ensure it is visible to the end-user .UserControl = True .DoCmd.OpenForm "InvoiceHT_F" 'Open a form? End With Set oAccess4 = CreateObject("Access.Application") 'Create a new Access instance With oAccess4 .OpenCurrentDatabase db1 'Open the specified db .Visible = True 'Ensure it is visible to the end-user .UserControl = True .DoCmd.OpenForm "InvoiceHT_F" 'Open a form? End With End Function Public Function Click_Other_DBs() oAccess1.Forms![InvoiceHT_F].New_Click oAccess2.Forms![InvoiceHT_F].New_Click oAccess3.Forms![InvoiceHT_F].New_Click oAccess4.Forms![InvoiceHT_F].New_Click End Function . وناديتهم كالتالي: . الدالة Open_Other_DBs مرة واحدة تفتح البرامج الاربعة ، هكذا : . . وبما ان المتغيرات موجودة في رأس الوحدة النمطية ، فيمكننا التحكم بالبرامج الاربعة مفتوحة ، يعني عندنا 4 مستخدمين ، الآن نستخدم الدالة Click_Other_DBs ، والتي تنقر على زر "جديد" للبرامج الاربعه في نفس الجزء من الثانية ، يعني المستخدمين الاربعة يدخلون سجل جديد في نفس الجزء من الثانية ، يعني مافي مزاح في الموضوع 😁 ولما اشوف الايقونه ترمش ، اعطي الامر مرة اخرى للدالة Click_Other_DBs ، وهكذا ، والحمدلله النتائج صحيحة 🙂 واكون فاتح الجداول ، واشوف ان الارقام الحمدلله مافيها تكرار ، ولا تعطي البرامج الاربعة اي خطأ عن وجود تكرار 🙂 جعفر 1281.1.zip
  16. السلام عليكم 🙂 اعتقد بأني توصلت لحل ، وبعد عدة محاولات على الشبكة ، على كمبيوترين 🙂 1. النموذج ، تم حذف الجدول CustomersT من استعلام النموذج : . 2. الكومبوبوكس يقوم بإعطاء قيمة اسم الزبون CustomerName ، 3. تم حذف امر حفظ السجلات من الوحدة النمطية ، لأنها لم تكن على سجل النموذج ، فإنها لا تحفظ السجل المطلوب ، 4. تم استعمال هذا الكود لحفظ الترقيم : Private Sub New_Invoice() On Error GoTo err_New_Invoice Try_Again: If Me.NewRecord Then Me.InvoiceNum = Next_Seq("A") DoCmd.RunCommand acCmdSaveRecord End If Exit_New_Invoice: Exit Sub err_New_Invoice: If Err.Number = 3022 Then Dim PauseTime, Start PauseTime = 0.5 ' Set duration. Start = Timer ' Set start time. Do While Timer < Start + PauseTime DoEvents ' Yield to other processes. Loop Resume Try_Again Else MsgBox Err.Number & vbCrLf & Err.Description End If Resume Exit_New_Invoice End Sub . ولما البرنامج يلاحظ وجود تكرار في الرقم ، فإنه يذهب الى رقم الخطأ (3022 كما ذكره اخونا حسام) ، وهنا ينتظر 0.5 (نصف ثانية ، ويمكنك تقليلها ، وبالتجربة ستعرف الرقم الاصح ، والافضل ان تتركه كما هو) ، ثم يعاود المحاوله في الحصول على ترقيم جديد غير مكرر (وهذا الكود وضعته في حدثين) ، وتم تجربته عدة مرات واثبت جدارته 🙂 البرنامج بعده طازه وطالع من الشبكة ، فلازم تعمل له ربط للجداول قبل تشغيله ، فهو بدون جداول 🙂 جعفر 1282.1.InvoiceSale_6_FE.accdb.zip
  17. على حسب ما تراه في التقرير لما يكون في وضع "معاينة الطباعة" ، بعدد صفحاته 🙂 جعفر
  18. وعليكم السلام اختي الفاضلة 🙂 هناك العديد من الطرق للبحث ، وموضوعك كان البحث عن طريق "نافذة البحث" ، والتي لها حدودها ، مثل ما شرحت سابقا ، ولا يمكن دمجها مع طريقتك 🙂 نعم ممكن ان نعمل نموذج مخفي ، نبحث فيه ، ونُظهر النتيجة في النموذج الظاهر امامنا ، ولكن الموضوع ما يستاهل كل هذا التعقيد 🙂 والكود الذي يقوم بعمل البحث في المرفق ، هو طريقة اخرى للبحث ، ولكنه يحتاج الى تعديل ، لأنه سيكون جدا بطيء اذا كان عندك آلاف السجلات !! دائما علشان يكون عملك صحيح ، احسبي حساب اسوء الاحتمالات ، واحسبي حساب انك تتعاملين مع 50 الف سجل على الاقل ، وبهذه الطريقة يكون عملك مُتقن 🙂 جعفر
  19. وعليكم السلام 🙂 رجاء وضع عنوان يدل على الموضوع ، شكرا 🙂 فكرة اخوي حسام هي الافضل ، ولكن ولإثراء الموضوع ، يمكننا استخدام كائن صورة واحد في النموذج الرئيسي (المكان المكتوب عليه "اختر نوع الرقبة") ، ولنسميه img_main والموجود في النموذج الرئيسي "نموذج1" ، . وعند النقر في النموذج الفرعي على الصورة المطلوبة ، على حدث "النقر" يمكننا كتابة الكود التالي : Forms![نموذج1]!img_Main.PictureData = me.t4.PictureData او عمل وحدة نمطية ، وارسال اسم الكائن اليها في المتغير prev_img Forms![نموذج1]!img_Main.PictureData = Forms![نموذج1]![قائمة الياقات](prev_img).PictureData . الفكرة هنا ، انه اذا عندنا شعار المؤسسة في النموذج الرئيسي ، واردنا في كل تقرير نطبعه ، ان نضع هذا الشعار ، فلا يوجد داعي الى الرجوع الى المجلد/الجدول الذي به هذه الصورة وجلبها من هناك ، وانما يمكننا استخدام الامر PictureData (اي نسخ الصورة) لإظهار هذا الشعار في التقارير/النماذج التي نريدها 🙂 جعفر تجربةالصور.zip
  20. السلام عليكم اخي احمد 🙂 رجاء الالتزام بقوانين المنتدى ، وعمل موضوع منفصل لكل سؤال 🙂 تمت الاجابة على السؤال اصل الموضوع ، لذلك ، رجاء فتح موضوع جديد لبقية اسئلتك ، ولا مانع من ان يرد الاخ حسام على آخر حيثية من سؤالك 🙂 جعفر
  21. هاي سهلة ، برنامجي يدخل تاريخ اليوم عن طريق الدالة Date في الاستعلام الالحاقي ، فبدلا عنه يمكننا استعمال طريقتك ، وشفت ان الحقل TxtUm يعطي اليوم كاملا ، فممكن نستعمل هذا اليوم الهجري من تقويم ام القرى ، ولكن ، شفت ان عندك تواريخ ام القرى وتواريخ ميلادية ، فهل سيكون عندك خلط بينهم ، وكيف؟ ممكن اضافة حقل في الجدول Emp يدل على وجود ان الموظف مداوم لذلك اليوم ، حقل نعم/لا مثلا ، وفي جميع الاستعلامات مثل qry_1 ، نصفي الموظفين المداومين في ذلك اليوم. اشرح لي هذه النقطة وبالتفصيل ، فعسى ان نتوصل الى طريقة سهلة ومرضية ان شاء الله 🙂 جعفر
  22. طريقة العمل : عند عمل يوم جديد ، نقوم بإدراج جميع الموظفين من الجدول Emp الى الجدول tbl_Shifts ، ويكون رقم الشفت امام كل سجل = 0 ، في النموذج : كل نموذج فرعي يأخذ بياناته من الجدول tbl_Shifts ، ومن نفس الحقل (لا توجد جقول مختلفة لكل شفت) ، ويعتمد على رقم النموذج الفرعي (رقم الشفت) ، فيُظهر رقم الشفت الخاص به ، او صفر (ومعناه السجلات التي لم يتم اختيارها بعد) ، ولما نختار اسم الموظف في النموذج الفرعي ،فهو يغير رقم الشفت من صفر الى رقم الشفت ، بإستخدام الدالة De_Select(1) مثلا ، والتي تدل على اننا في الشفت 1. هناك الكثير من الاختصارات في الكود ، فمثلا ، بدل ان نعمل كود خاص لكل نموذج فرعي ، عند اختيار الاسم : نغير الشفت من صفر الى رقم الشفت ، نحفظ السجل ، نطلب البيانات من اول وجديد لجميع هذه النماذج الفرعية ، حيت ان الاختيار سيغير مكان الموظف الى شفت الذي ينتمي (وهذه كانت المعضلة في برنامجك السابق) ، ثم نجمع الحقول التي تم اختيارها في كل نموذج فرعي ، ونضع القيمة في الاسفل ، هنا الدالة De_Select تقوم بجميع هذه الخطوات ، ولكل النماذج 🙂 وتلاحظ ان النماذج الفرعيه لا يوجد بها كود اصلا ، وذلك لأننا ننادي الكود من اعدادات الحقل nSelected (بدل ان نعمل حدث بعد التحديث 🙂 ) . جعفر
×
×
  • اضف...

Important Information