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

jjafferr

أوفيسنا
  • Posts

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

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

  • Days Won

    406

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

  1. السلام عليكم 🙂 اعتقد بأني توصلت لحل ، وبعد عدة محاولات على الشبكة ، على كمبيوترين 🙂 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
  2. على حسب ما تراه في التقرير لما يكون في وضع "معاينة الطباعة" ، بعدد صفحاته 🙂 جعفر
  3. وعليكم السلام اختي الفاضلة 🙂 هناك العديد من الطرق للبحث ، وموضوعك كان البحث عن طريق "نافذة البحث" ، والتي لها حدودها ، مثل ما شرحت سابقا ، ولا يمكن دمجها مع طريقتك 🙂 نعم ممكن ان نعمل نموذج مخفي ، نبحث فيه ، ونُظهر النتيجة في النموذج الظاهر امامنا ، ولكن الموضوع ما يستاهل كل هذا التعقيد 🙂 والكود الذي يقوم بعمل البحث في المرفق ، هو طريقة اخرى للبحث ، ولكنه يحتاج الى تعديل ، لأنه سيكون جدا بطيء اذا كان عندك آلاف السجلات !! دائما علشان يكون عملك صحيح ، احسبي حساب اسوء الاحتمالات ، واحسبي حساب انك تتعاملين مع 50 الف سجل على الاقل ، وبهذه الطريقة يكون عملك مُتقن 🙂 جعفر
  4. وعليكم السلام 🙂 رجاء وضع عنوان يدل على الموضوع ، شكرا 🙂 فكرة اخوي حسام هي الافضل ، ولكن ولإثراء الموضوع ، يمكننا استخدام كائن صورة واحد في النموذج الرئيسي (المكان المكتوب عليه "اختر نوع الرقبة") ، ولنسميه 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
  5. السلام عليكم اخي احمد 🙂 رجاء الالتزام بقوانين المنتدى ، وعمل موضوع منفصل لكل سؤال 🙂 تمت الاجابة على السؤال اصل الموضوع ، لذلك ، رجاء فتح موضوع جديد لبقية اسئلتك ، ولا مانع من ان يرد الاخ حسام على آخر حيثية من سؤالك 🙂 جعفر
  6. هاي سهلة ، برنامجي يدخل تاريخ اليوم عن طريق الدالة Date في الاستعلام الالحاقي ، فبدلا عنه يمكننا استعمال طريقتك ، وشفت ان الحقل TxtUm يعطي اليوم كاملا ، فممكن نستعمل هذا اليوم الهجري من تقويم ام القرى ، ولكن ، شفت ان عندك تواريخ ام القرى وتواريخ ميلادية ، فهل سيكون عندك خلط بينهم ، وكيف؟ ممكن اضافة حقل في الجدول Emp يدل على وجود ان الموظف مداوم لذلك اليوم ، حقل نعم/لا مثلا ، وفي جميع الاستعلامات مثل qry_1 ، نصفي الموظفين المداومين في ذلك اليوم. اشرح لي هذه النقطة وبالتفصيل ، فعسى ان نتوصل الى طريقة سهلة ومرضية ان شاء الله 🙂 جعفر
  7. طريقة العمل : عند عمل يوم جديد ، نقوم بإدراج جميع الموظفين من الجدول Emp الى الجدول tbl_Shifts ، ويكون رقم الشفت امام كل سجل = 0 ، في النموذج : كل نموذج فرعي يأخذ بياناته من الجدول tbl_Shifts ، ومن نفس الحقل (لا توجد جقول مختلفة لكل شفت) ، ويعتمد على رقم النموذج الفرعي (رقم الشفت) ، فيُظهر رقم الشفت الخاص به ، او صفر (ومعناه السجلات التي لم يتم اختيارها بعد) ، ولما نختار اسم الموظف في النموذج الفرعي ،فهو يغير رقم الشفت من صفر الى رقم الشفت ، بإستخدام الدالة De_Select(1) مثلا ، والتي تدل على اننا في الشفت 1. هناك الكثير من الاختصارات في الكود ، فمثلا ، بدل ان نعمل كود خاص لكل نموذج فرعي ، عند اختيار الاسم : نغير الشفت من صفر الى رقم الشفت ، نحفظ السجل ، نطلب البيانات من اول وجديد لجميع هذه النماذج الفرعية ، حيت ان الاختيار سيغير مكان الموظف الى شفت الذي ينتمي (وهذه كانت المعضلة في برنامجك السابق) ، ثم نجمع الحقول التي تم اختيارها في كل نموذج فرعي ، ونضع القيمة في الاسفل ، هنا الدالة De_Select تقوم بجميع هذه الخطوات ، ولكل النماذج 🙂 وتلاحظ ان النماذج الفرعيه لا يوجد بها كود اصلا ، وذلك لأننا ننادي الكود من اعدادات الحقل nSelected (بدل ان نعمل حدث بعد التحديث 🙂 ) . جعفر
  8. وعليكم السلام 🙂 اخي الفاضل ، في المرات القادمة ، رجاء مراعاة قوانين المنتدى بوضع عنوان يدل على محتوى السؤال 🙂 اما سؤالك : خطأ Over Flow معناه ان القيمة اكبر من حجم المتغير ، المتغير x و i عندك integer ، فيجب تكبير هم الى Long . جعفر
  9. وعليكم السلام 🙂 طريقة العمل: 1. انا بعمل حقل جديد ، ونوعه لازم يكون رقم . 2. في النموذج ، نختار نعمل "اختيار مجموعة" . نعمل مربع ، ونلغي بقية العملية . وعندك الاختيار في اختيار احد هذه الاشكال . نلاحظ انه لما يجي الماوس على المربع ، تلقائيا لونه يتغير للأسود ، مما يعني ان المربع تعرف على ان هذا الكائن الجديد هو تابع للمربع . ونعمل تغيير في اسم الكائن ، ونجعله مرتبط بالحقل Paid . الشيء الاخير اللي لازم نعمله هو ، نعطي لكل اختيار رقمه ، والاختيار الثاني ممكن يكون 2 ، والثالث 3 ، والرابع 4 ، ولا يكون لإختيارين نفس الرقم ، ولا يهم الاسم Option36 . نلاحظ الآن عند الاختيار ، فتلقائيا يعطينا اختيار واحد فقط : . وبما اننا في النهاية اخترنا الاختيار الثالث ، نرى في الجدول انه تم حفظ الرقم 3 : . هذه الطريقة تُغنينا عن مجموعة من الحقول 🙂 جعفر 1284.officna_q.accdb.zip
  10. السلام عليكم 🙂 في اعتقادي ان هذه اسهل طريقة ، واذا استعملت التنسيق الشرطي لتلوين السجلات اللي تم اختيارها ، سيكون الفت للنظر 🙂 ما بدخل في تفاصيل ، لأنه في الواقع مافي تفاصيل ، جرب ببيانات آخر يوم مثل تاريخ اللي في الصوره ، وبعدها اعمل سجل جديد بواسطة "ادخال سجل جديد لليوم" 🙂 صحيح اني استعملت 5 نماذج فرعيه ، لأنه في الواقع مافي فرق بينها وبين ComboBox و ListBox (في استغلالهم طاقات الاكسس) ، ولكن النموذج فيه امكانيات اكثر ، ونحن متعودين على التعامل معاه اكثر ، فيكون التعامل معاه اسهل ، وكل نموذج فرعي له استعلام 🙂 . هذه احداث النموذج Private Sub cmd_Add_New_Click() 'check if Records exist for this date If DCount("*", "tbl_Shifts", "[nDate]=#" & Date & "#") = 0 Then DoCmd.SetWarnings False DoCmd.OpenQuery "qry_Append_Today" DoCmd.SetWarnings True End If 'go to this Record Me.Requery DoCmd.GoToRecord , , acLast End Sub Private Sub cmd_Requery_Click() 'get the data based on the selected Dates Me.Requery End Sub Private Sub Form_Current() 'Count the Selected Call Count_Selected End Sub . والحدث "بعد التحديث" لزر الاختيار في النموذج الفرعي ، ينادي الوحدة النمطية De_Select ، ويرسل معها رقم الشفت ، اللي يتماشى مع رقم النموذج الفرعي : . وهذه هي الوحدة النمطية : Option Compare Database Option Explicit Dim frm As String Dim sfrm As String Dim ctrl As Control ' Public Function De_Select(sShift As Integer) frm = Screen.ActiveForm.Name 'Main Form name sfrm = Forms(frm).Controls("sfrm_" & sShift).Name 'SubForm name 'change the nShift of the Record, based on the selection of nSelected If Forms(frm)(sfrm)("nSelected") = -1 Then Forms(frm)(sfrm)("nShift") = sShift Else Forms(frm)(sfrm)("nShift") = 0 End If 'save the Record to show the change on other sfrm If Forms(frm)(sfrm).Form.Dirty Then Forms(frm)(sfrm).Form.Dirty = False 'requery all the SubForms to show the correct Selection Call Re_query End Function Public Function Re_query() 'requery all the SubForms on the Main Form For Each ctrl In Forms!frm_Daily_Shift.Form.Controls If ctrl.ControlType = acSubform Then Forms!frm_Daily_Shift(ctrl.ControlName).Form.Requery End If Next 'show the number of Selected Records Call Count_Selected End Function Public Function Count_Selected() As Integer On Error GoTo err_Count_Selected Dim rst As DAO.Recordset Dim i As Integer '5 subForms For i = 1 To 5 Count_Selected = 0 Set rst = Forms!frm_Daily_Shift("sfrm_" & i).Form.RecordsetClone rst.MoveFirst Do Until rst.EOF If rst!nSelected = -1 Then Count_Selected = Count_Selected + 1 End If rst.MoveNext Loop 'show the result of the sfrm Selected Count Forms!frm_Daily_Shift("Sum_" & i) = Count_Selected Next i Exit_Count_Selected: rst.Close: Set rst = Nothing Exit Function err_Count_Selected: If Err.Number = 3021 Then 'no Records Resume Exit_Count_Selected Else MsgBox Err.Number & Err.Description End If Resume Exit_Count_Selected End Function . جعفر 1281.FRm_Refresh.accdb.zip
  11. انا سأحاول ان اطبق على شبكة بأكثر من كمبيوترين ، وان شاء الله خير 🙂 جعفر
  12. وعليكم السلام 🙂 ممكن تشرح لي كيف عملت التجربة ، خليني اقوم بمثلها ، واجرب 🙂 جعفر
  13. وعليكم السلام 🙂 جعفر
  14. وعليكم السلام 🙂 نعم ممكن ، ولكن ليس الطباعة من الاكسس ، ولكن بتصدير البيانات الى ملف pdf او اكسل ، وهناك تستطيع ان تطبع على صفحة واحدة 🙂 جعفر
  15. تفضل 🙂 1. اضفنا الزر ، وحقل آخر ، يأخذ استعلام الالحاقي بأخذ قيمته (اقرأ ملاحظات تفاصيل الكود ) : . 2. هذا كود الحدث على الزر : Private Sub cmd_Append_Click() 'نأخذ اكبر قيمة من الجدول B Me.Which_Invoice_no = DMax("[Invoice_no]", "A") 'نعمل مقارنة بين القيمتين ، ونأخذ الاكبر If Me.Invoice_no > Me.Which_Invoice_no Then Me.Which_Invoice_no = Me.Invoice_no End If DoCmd.SetWarnings False 'نضيف هذه القيمة والتاريخ الى الجدول A DoCmd.OpenQuery "qry_Append_to_tbl_A" 'نحذف هذا السجل من الجدول B DoCmd.OpenQuery "qry_Delete_from_tbl_B" DoCmd.SetWarnings True Me.Requery End Sub . 3. هذا استعلام الالحاقي الى الجدول A . 4. وهذا استعلام الحذف من الجدول B . ولكن اذا تأخذ رأيي ، فلا داعي لوجود جدولين ، واستعلام الحاقي وآخر حذف ، وكود وووو ، فقط استعمل جدول واحد ، مثلا الجدول A ، واضف اليه حقل جديد بإسم "هل تم التدقيق" ، نوع نعم/لا ، بحيث المدقق يعمل اشارة صح على السجل ، بأنه تم تدقيقه ، وبهذه البساطة 🙂 جعفر 1283.New Microsoft Access.accdb.zip
  16. المعضلة في طريقة عملك السابقة ، هي السماح بأكثر من اختيار في حقل الكومبوبوكس ، وهو الامر والميزة اللي انت محتاج له ، وفي الواقع ، هذه احد مساوئ الاكسس ، بأن يعطون المستخدم طريقة عمل ، يكون فيها المشاكل في طريقة التعامل معها برمجيا !! لهذا السبب ، ان شاء الله بكرة انظر في الطريقة الجديدة ، وبقية طلباتك يمكن التعامل معاها عن طريق معايير في الاستعلام 🙂 جعفر
  17. السلام عليكم 🙂 شوف هذا الرابط جعفر
  18. وعليكم السلام اخي خالد 🙂 اهلا وسهلا بك في المنتدى 🙂 رجاء قراءة قوانين المنتدى ، حتى تستفيد الاستفادة الكاملة منه 🙂 ورجاء الرفاق الذي عملته ، حتى يكون الرد على برنامجك مباشرة 🙂 جعفر
  19. الخطوات اللي اتبعتها : 1. إلغاء اخذ القيمة الافتراضية من اعدادات الحقل : . 2. عملنا وحدة نمطية لعمل التسلسل ، ونناديها كلما احتجنا الى اضافة رقم جديد : . 3. والسر في نجاح هذه العملية ، هي حفظ السجل مباشرة بعد اخذ رقم التسلسل الجديد : . جعفر 1282.InvoiceSale_6.accdb.zip
  20. بهذه الطريقة الطبخة تخترب !! انا عملت على الكود اللي ارفقته انت ، ولكن الآن يجب ان ارى الكود بالكامل ، مع المودل ، وبتسلسل الاحداث ، حتى تتضح الصورة بالكامل 🙂 جعفر
  21. وعليكم السلام 🙂 هذا الرابط في التصدير الى الوورد . اما التصدير الى الاكسل . او . جعفر
  22. 1. سبب زحف الكائنات من مكانها ، وتغيير حجمها : اذا عندنا هذا النموذج : . وبعد تشغيله يصبح (لاحظ الزرين ليسوا في اماكنهم ، والزر اللي تحت صار حجمه اكبر) : . نشوف مكان تثبيت الزر العلوي ، ونلاحظ انه في اقصى يمين النموذج ، من الاعلى ، وبحجمه العادي : . بينما الزر الآخر ، نرى ان تثبيته في اسفل النموذج ، وفي منتصف النموذج ، وحجمه مسحوب : . علشان نرجعهم يعملوا مثل المكان اللي في وضع التصميم ، نختار جميع كائنات النموذج ، ونجعل تثبيتهم من اليسار الاعلى ، او اي شيء تراه مناسب : . 2. اما اذا اردت تغيير احجام الكائنات ليتناسب مع حجم الشاشة ، فالرابط التالي فيه مقصدك : جعفر
  23. اعذرني اخوي القاضي ، بس خلينا نشوف ايش بالضبط اللي عملته ، وايش هذه الرسائل 🙂 لأني انا شخصيا صادفت هذه المشكلة في احد برامجي (من ايام زمان 🙂 ) والحل اللي اعطيتك كان الحل 🙂 جعفر
  24. ممكن نعرف ايش كانت المشكلة ، وكيف تم الحل ، حتى يستفيد الجميع 🙂 شكرا جعفر
  25. السلام عليكم 🙂 شوف هذا الموضوع ، ممكن نستفيد منه كهيئة عامة ، ونعمل على تفاصيله ليتناسب مع طلبك : . جعفر
×
×
  • اضف...

Important Information