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

jjafferr

أوفيسنا
  • Posts

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

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

  • Days Won

    406

Community Answers

  1. jjafferr's post in مناداة المتغير في الاستعلام عن طريق موديول آخر was marked as the answer   
    وعليكم السلام 🙂
     
    نعم ، جوابك ، هو قصدي مما قلته انا ،
    اما TempVars فهو موجود في الاكسس 2007 فما فوق ، وهو جدا مفيد واستعماله جدا سهل ، ولا يحتاج الى موديول لمناداته .
     
    جعفر
  2. jjafferr's post in طلب كود تحديد موقع النموذ الفرعي وارتفاعه وعرضه was marked as the answer   
    الحمدلله 🙂
     
     
    1. اذا الارقام في اعدادات الكائن فيه cm (ما اعرف بالاكسس العربي شو يكتب!! ) فانت بالسنتيمتر ، واذا فيه " فانتبنظام البوصة ، او انظر الى اعدادات النظام :

    .
    2. مالك شغل في الجهاز الآخر ، اشتغل على نظام جهازك ، والاكسس تلقائيا يغيره لأي نظام آخر 🙂
    هذا نظامي:

    .
     
    مثال ، اريد ان اضع التقرير الفرعي هنا :

    .
    فاستعملت حدث الزر امر3 :

    .
    والنتيجة :

    .
    تفضل انت ، افتح المرفق وانقر على الزر واخبرنا النتيجة 🙂
     
    جعفر
    1295.mov.accdb.zip
  3. jjafferr's post in السلام عليكم ..كيف يمكن فصل الارقام التي بعد / من اليمين في المثال المرفق was marked as the answer   
    وعليكم السلام 🙂
     
    تفضلي 🙂

    .

    .
    والاستعلام:
    SELECT numbers.textnumbers, Mid([textnumbers],1,InStr([textnumbers],"/")-1) AS L, Mid([textnumbers],InStr([textnumbers],"/")+1) AS R FROM numbers;  
    جعفر
  4. jjafferr's post in سؤال يخص التقرير was marked as the answer   
    وعليكم السلام بشمهندس 🙂
     
    عملت لك برنامج خاص 🙂
     
     
    جعفر
  5. jjafferr's post in عمل عدة تقارير فى صفحة واحدة was marked as the answer   
    تفضل 🙂
     
    التقرير مبني على اساس الاستعلام qry_Group ، والذي يمكنك وضع المعايير فيه ،
     
    هكذا التقرير قي وضع التصميم :

    .
    وعلى حسب العرض المتوفر ، نعمل عدد الاعمدة :

    .
    والنتيجة :

    .
    جعفر
    1290.السجل.accdb.zip
  6. jjafferr's post in استعلام تاريخ متتالي was marked as the answer   
    السلام عليكم 🙂
     
    ومثل ما قال الاخ Kanory ، وببعض التعديل على الكود ليتناسب مع اسماء الحقول 🙂
     
    جعفر
    1274.t_fdate.mdb.zip
  7. jjafferr's post in استعلام تاريخ متتالي was marked as the answer   
    السلام عليكم 🙂
     
    ومثل ما قال الاخ Kanory ، وببعض التعديل على الكود ليتناسب مع اسماء الحقول 🙂
     
    جعفر
    1274.t_fdate.mdb.zip
  8. jjafferr's post in استعلام تاريخ متتالي was marked as the answer   
    السلام عليكم 🙂
     
    ومثل ما قال الاخ Kanory ، وببعض التعديل على الكود ليتناسب مع اسماء الحقول 🙂
     
    جعفر
    1274.t_fdate.mdb.zip
  9. jjafferr's post in تكبير النموذج بدون تغطية شريط قائمة إبدأ was marked as the answer   
    استعمل نماذج عادية بدون لمس هذه الاعدادات ، لأن الازرار التي تظهر في البرنامج هي ازرار البرنامج وليس النماذج ،
  10. jjafferr's post in ماهو بديل الأمر Refresh was marked as the answer   
    السلام عليكم 🙂
     
    تفضل 🙂

    .
    واستعمل الاستعلام qry_Group_Shifts_by_Dates كمصدر بيانات ، وتقدر تعمل به التقرير او النموذج الذي تشاء.
     
    جعفر
    1281.4.FRm_Refresh.accdb.zip
  11. jjafferr's post in مساعدة فى تطبيق DCOUNT داخل استعلام was marked as the answer   
    السلام عليكم 🙂
     
    اولا خليني ادافع عن نفسي واخبرك سبب التأخير 🙂
     
    الجدول الاول مستحيل تكون نتائجة مثل ما هو موضح في الجدول الثاني ، لأن الفرع ليس نفسه في كل السجلات ، بينما الجمع في الجدول الثاني كان على اعتبار ان جميع الفروع هي نفسها (شوف اسم الفروع اللي عليها السهم ، فهي مختلفة) 🙂
    وهذا اخذ مني بقية الشعر اللي على راسي ، من كثر ما حكيت رأسي بالمعادلات والنتائج الخطأ 😁

    .
     
    والان الى الحل:
    1. عملت استعلام مجاميع لكل مجموعة ،المجموعة الاولى للتاريخ ، والثانية للشهر ، بينما الاستعلام الثالث هو لحقول الجدول :

    .
    والنتيجة

    .
    وعملنا استعلام اخير لجمع هذه الاستعلامات الثلاث:
    .
    والنتيجة

    .
    جعفر
    1285.DCOUNT.mdb.zip
  12. jjafferr's post in مساعدة فى تطبيق DCOUNT داخل استعلام was marked as the answer   
    السلام عليكم 🙂
     
    اولا خليني ادافع عن نفسي واخبرك سبب التأخير 🙂
     
    الجدول الاول مستحيل تكون نتائجة مثل ما هو موضح في الجدول الثاني ، لأن الفرع ليس نفسه في كل السجلات ، بينما الجمع في الجدول الثاني كان على اعتبار ان جميع الفروع هي نفسها (شوف اسم الفروع اللي عليها السهم ، فهي مختلفة) 🙂
    وهذا اخذ مني بقية الشعر اللي على راسي ، من كثر ما حكيت رأسي بالمعادلات والنتائج الخطأ 😁

    .
     
    والان الى الحل:
    1. عملت استعلام مجاميع لكل مجموعة ،المجموعة الاولى للتاريخ ، والثانية للشهر ، بينما الاستعلام الثالث هو لحقول الجدول :

    .
    والنتيجة

    .
    وعملنا استعلام اخير لجمع هذه الاستعلامات الثلاث:
    .
    والنتيجة

    .
    جعفر
    1285.DCOUNT.mdb.zip
  13. jjafferr's post in مساعدة فى تطبيق DCOUNT داخل استعلام was marked as the answer   
    السلام عليكم 🙂
     
    اولا خليني ادافع عن نفسي واخبرك سبب التأخير 🙂
     
    الجدول الاول مستحيل تكون نتائجة مثل ما هو موضح في الجدول الثاني ، لأن الفرع ليس نفسه في كل السجلات ، بينما الجمع في الجدول الثاني كان على اعتبار ان جميع الفروع هي نفسها (شوف اسم الفروع اللي عليها السهم ، فهي مختلفة) 🙂
    وهذا اخذ مني بقية الشعر اللي على راسي ، من كثر ما حكيت رأسي بالمعادلات والنتائج الخطأ 😁

    .
     
    والان الى الحل:
    1. عملت استعلام مجاميع لكل مجموعة ،المجموعة الاولى للتاريخ ، والثانية للشهر ، بينما الاستعلام الثالث هو لحقول الجدول :

    .
    والنتيجة

    .
    وعملنا استعلام اخير لجمع هذه الاستعلامات الثلاث:
    .
    والنتيجة

    .
    جعفر
    1285.DCOUNT.mdb.zip
  14. jjafferr's post in التعديل على كود مسار حفظ ملف بصيغة PDF الى سطح المكتب was marked as the answer   
    السلام عليكم 🙂
     
    قمت بدمج دالة اخوي ابوخليل الى برنامجك 🙂
     
    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 .
    جعفر
  15. jjafferr's post in طلب طباعة على صفحة A4 was marked as the answer   
    وعليكم السلام 🙂
     
    نعم ممكن ، ولكن ليس الطباعة من الاكسس ، ولكن بتصدير البيانات الى ملف pdf او اكسل ، 
    وهناك تستطيع ان تطبع على صفحة واحدة 🙂
     
    جعفر
  16. jjafferr's post in حل مشكلة خطا في مربع النص was marked as the answer   
    وعليكم السلام 🙂
     
     
     
    جعفر
  17. jjafferr's post in مطلوب كود فى قاعدة IF was marked as the answer   
    تفضل 🙂
     
    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
  18. jjafferr's post in لما وضعت كود لالغاء رسالة ادخل قيمه معلمه ... اصبح البحث مش شغال (معدل) was marked as the answer   
    وعليكم السلام 🙂
     
    هذا لأن الاستعلام مصدر بيانات النموذج الفرعي ، لا يوجد فيه معيار التصفية ، فالظاهر انك حذفته بالخطأ 🙂

    .
    جعفر
  19. jjafferr's post in كيف نأخذ التاريخ من أول سجل وأخر سجل ونضعهم في رأس الصفحة للتقرير was marked as the answer   
    السلام عليكم 🙂
     
    في الواقع ، هذا السؤال من الاسئلة التي تُثار بين الحينه والاخرى ،
    واليك السبب في عدم امكانية الحصول على قيمة ذيل الصفحة ، في رأس الصفحة :
    التقرير عندك فيه 3 اقسام :

    .
    خلينا نشوف قيم التاريخ لصفحة:
     
    .
    والآن خلينا نشوف التاريخ ، بالطريقة اللي اقسام التقرير تشوفه ، بإستخدام حدث التنسيق لكل قسم:
    Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) Debug.Print "Header= " & Me.Edate End Sub Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer) Debug.Print " Detail= " & Me.Edate End Sub Private Sub PageFooterSection_Format(Cancel As Integer, FormatCount As Integer) Debug.Print "Footer= " & Me.Edate Debug.Print End Sub .
    والنتيجة لصفحتين :
     
    Header= 18-Oct-20
      Detail= 18-Oct-20
      Detail= 19-Oct-20
      Detail= 20-Oct-20
      Detail= 21-Oct-20
      Detail= 22-Oct-20
      Detail= 23-Oct-20
      Detail= 24-Oct-20
      Detail= 25-Oct-20
      Detail= 26-Oct-20
      Detail= 27-Oct-20
      Detail= 28-Oct-20
      Detail= 29-Oct-20
      Detail= 30-Oct-20
      Detail= 31-Oct-20
      Detail= 01-Nov-20
      Detail= 02-Nov-20
      Detail= 03-Nov-20
      Detail= 04-Nov-20
      Detail= 05-Nov-20
      Detail= 06-Nov-20
      Detail= 07-Nov-20
      Detail= 08-Nov-20
    Footer= 07-Nov-20
    Header= 08-Nov-20
      Detail= 08-Nov-20
      Detail= 09-Nov-20
      Detail= 10-Nov-20
      Detail= 11-Nov-20
      Detail= 12-Nov-20
      Detail= 13-Nov-20
      Detail= 14-Nov-20
      Detail= 15-Nov-20
      Detail= 14-Jan-21
      Detail= 15-Jan-21
      Detail= 16-Jan-21
      Detail= 17-Jan-21
      Detail= 18-Jan-21
      Detail= 19-Jan-21
      Detail= 20-Jan-21
      Detail= 21-Jan-21
      Detail= 22-Jan-21
      Detail= 23-Jan-21
      Detail= 24-Jan-21
      Detail= 25-Jan-21
      Detail= 26-Jan-21
      Detail= 27-Jan-21
    Footer= 26-Jan-21
    .
    من هنا نلاحظ ان رأس الصفحة يرى اول سجل ، بينما ذيل الصفحة يرى آخر سجل ، والتقرير يطبع / يُظهر رأس الصفحة قبل ان تكون البيانات وصلت الى ذيل الصفحة (يعني ذيل الصفحة لا يحتوي على اي قيمة حينها ، لما رأس الصفحة يحصل على القيمة) ، لهذا سبب ما نحصل على التاريخين معا في رأس الصفحة !!
     
    -------------------------------------------------------------------------------------------------------
    الآن وبعد ان عرفنا طريقة عمل التقرير ، خلينا نستفيد منه في عمل المطلوب :
    خلينا نفتح التقرير بطريقة مخفية ، نأخذ قيمة سجل رأس صفحة التقرير وذيل صفحة التقرير لكل صفحة ، نحفظهم في مصفوفة Array ، ثم نفتح التقرير بالطريقة العادية ونأخذ بيانات رأس وذيل التقرير من المصفوفة ، ونضعهم في التقرير ، في رأس الصفحة 🙂
     
    1. عمل نموذج لحصر البيانات بين قيمتين (مع اننا لسنا بحاجة الى هذه الخطوة ، ولكن لأن جدولك في سجلات بدون قيم تواريخ ، فهذا يعمل خلل في الكود) ،
    ونعمل استعلام يصفي بيانات الجدول حسب تواريخ النموذج ، ويكون هذا الاستعلام مصدر بيانات التقرير:

    .
    2. النقر على زر فتح التقرير في النموذج ، يحتوي على هذا الكود :
    والذي يعمل مصفوفة لـ 100 صفحة في التقرير (اذا تقريرك يحتوي على صفحات اكثر ، فقط اجعل هذا الرقم اكبر ، ما يضر اذا تركته = 200 او اكثر)
    'accept adding dates Add_Dates = True 'initilize the arrays with a larg number of pages ReDim Fd(100) 'first E_date ReDim Ld(100) 'last E_date 'open the Report in Hidden mode, to put the E_dates in an array DoCmd.OpenReport "rpt_chfit", acViewPreview, , , acHidden 'close the Hidden Report DoCmd.Close acReport, "rpt_chfit" 'stop adding dates Add_Dates = False 'now open the Report in the normal way DoCmd.OpenReport "rpt_chfit", acViewPreview .
    وهناك وحدة نمطية تحتفظ بقيم المصفوفة ، حتى تكون متوفرة لجميع كائنات البرنامج:
    Option Compare Database Option Explicit Public Add_Dates As Boolean Public Fd() As Date 'first E_date Public Ld() As Date 'last E_date .
    والتقرير فيه هذا الكود:
    Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) If Add_Dates = True Then 'add the array items, based on the Report page number Fd(Me.Page) = Me.F_Edate Else 'show the results Me.myF_Edate = Fd(Me.Page) Me.myL_Edate = Ld(Me.Page) End If End Sub Private Sub PageFooterSection_Format(Cancel As Integer, FormatCount As Integer) If Add_Dates = True Then 'add the array items Ld(Me.Page) = Me.L_Edate End If End Sub Private Sub Report_Close() If Add_Dates = False Then 'Empty the array ReDim Fd(0) 'first E_date ReDim Ld(0) 'last E_date End If End Sub .
    فإذا قيمة Add_Dates = True في النموذج ، فيعمل التقرير المخفي لعمل المصفوفة ،
    بينما عندما تتغير قيمة Add_Dates ، فيقوم التقرير بإظهار قيم المصفوفة في التقرير الغير مخفي ،
    وعند اغلاق التقرير ، نقوم بحذف بيانات المصفوفة 🙂
     
    لذلك ، وللحصول على النتائج الصحيحة ، يجب تشغيل التقرير من النموذج ، حتى يقوم الكود بما يجب 🙂 
     

    .

    .
    جعفر
    1277.addDateHideRport.accdb.zip
  20. jjafferr's post in كيف نأخذ التاريخ من أول سجل وأخر سجل ونضعهم في رأس الصفحة للتقرير was marked as the answer   
    السلام عليكم 🙂
     
    في الواقع ، هذا السؤال من الاسئلة التي تُثار بين الحينه والاخرى ،
    واليك السبب في عدم امكانية الحصول على قيمة ذيل الصفحة ، في رأس الصفحة :
    التقرير عندك فيه 3 اقسام :

    .
    خلينا نشوف قيم التاريخ لصفحة:
     
    .
    والآن خلينا نشوف التاريخ ، بالطريقة اللي اقسام التقرير تشوفه ، بإستخدام حدث التنسيق لكل قسم:
    Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) Debug.Print "Header= " & Me.Edate End Sub Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer) Debug.Print " Detail= " & Me.Edate End Sub Private Sub PageFooterSection_Format(Cancel As Integer, FormatCount As Integer) Debug.Print "Footer= " & Me.Edate Debug.Print End Sub .
    والنتيجة لصفحتين :
     
    Header= 18-Oct-20
      Detail= 18-Oct-20
      Detail= 19-Oct-20
      Detail= 20-Oct-20
      Detail= 21-Oct-20
      Detail= 22-Oct-20
      Detail= 23-Oct-20
      Detail= 24-Oct-20
      Detail= 25-Oct-20
      Detail= 26-Oct-20
      Detail= 27-Oct-20
      Detail= 28-Oct-20
      Detail= 29-Oct-20
      Detail= 30-Oct-20
      Detail= 31-Oct-20
      Detail= 01-Nov-20
      Detail= 02-Nov-20
      Detail= 03-Nov-20
      Detail= 04-Nov-20
      Detail= 05-Nov-20
      Detail= 06-Nov-20
      Detail= 07-Nov-20
      Detail= 08-Nov-20
    Footer= 07-Nov-20
    Header= 08-Nov-20
      Detail= 08-Nov-20
      Detail= 09-Nov-20
      Detail= 10-Nov-20
      Detail= 11-Nov-20
      Detail= 12-Nov-20
      Detail= 13-Nov-20
      Detail= 14-Nov-20
      Detail= 15-Nov-20
      Detail= 14-Jan-21
      Detail= 15-Jan-21
      Detail= 16-Jan-21
      Detail= 17-Jan-21
      Detail= 18-Jan-21
      Detail= 19-Jan-21
      Detail= 20-Jan-21
      Detail= 21-Jan-21
      Detail= 22-Jan-21
      Detail= 23-Jan-21
      Detail= 24-Jan-21
      Detail= 25-Jan-21
      Detail= 26-Jan-21
      Detail= 27-Jan-21
    Footer= 26-Jan-21
    .
    من هنا نلاحظ ان رأس الصفحة يرى اول سجل ، بينما ذيل الصفحة يرى آخر سجل ، والتقرير يطبع / يُظهر رأس الصفحة قبل ان تكون البيانات وصلت الى ذيل الصفحة (يعني ذيل الصفحة لا يحتوي على اي قيمة حينها ، لما رأس الصفحة يحصل على القيمة) ، لهذا سبب ما نحصل على التاريخين معا في رأس الصفحة !!
     
    -------------------------------------------------------------------------------------------------------
    الآن وبعد ان عرفنا طريقة عمل التقرير ، خلينا نستفيد منه في عمل المطلوب :
    خلينا نفتح التقرير بطريقة مخفية ، نأخذ قيمة سجل رأس صفحة التقرير وذيل صفحة التقرير لكل صفحة ، نحفظهم في مصفوفة Array ، ثم نفتح التقرير بالطريقة العادية ونأخذ بيانات رأس وذيل التقرير من المصفوفة ، ونضعهم في التقرير ، في رأس الصفحة 🙂
     
    1. عمل نموذج لحصر البيانات بين قيمتين (مع اننا لسنا بحاجة الى هذه الخطوة ، ولكن لأن جدولك في سجلات بدون قيم تواريخ ، فهذا يعمل خلل في الكود) ،
    ونعمل استعلام يصفي بيانات الجدول حسب تواريخ النموذج ، ويكون هذا الاستعلام مصدر بيانات التقرير:

    .
    2. النقر على زر فتح التقرير في النموذج ، يحتوي على هذا الكود :
    والذي يعمل مصفوفة لـ 100 صفحة في التقرير (اذا تقريرك يحتوي على صفحات اكثر ، فقط اجعل هذا الرقم اكبر ، ما يضر اذا تركته = 200 او اكثر)
    'accept adding dates Add_Dates = True 'initilize the arrays with a larg number of pages ReDim Fd(100) 'first E_date ReDim Ld(100) 'last E_date 'open the Report in Hidden mode, to put the E_dates in an array DoCmd.OpenReport "rpt_chfit", acViewPreview, , , acHidden 'close the Hidden Report DoCmd.Close acReport, "rpt_chfit" 'stop adding dates Add_Dates = False 'now open the Report in the normal way DoCmd.OpenReport "rpt_chfit", acViewPreview .
    وهناك وحدة نمطية تحتفظ بقيم المصفوفة ، حتى تكون متوفرة لجميع كائنات البرنامج:
    Option Compare Database Option Explicit Public Add_Dates As Boolean Public Fd() As Date 'first E_date Public Ld() As Date 'last E_date .
    والتقرير فيه هذا الكود:
    Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) If Add_Dates = True Then 'add the array items, based on the Report page number Fd(Me.Page) = Me.F_Edate Else 'show the results Me.myF_Edate = Fd(Me.Page) Me.myL_Edate = Ld(Me.Page) End If End Sub Private Sub PageFooterSection_Format(Cancel As Integer, FormatCount As Integer) If Add_Dates = True Then 'add the array items Ld(Me.Page) = Me.L_Edate End If End Sub Private Sub Report_Close() If Add_Dates = False Then 'Empty the array ReDim Fd(0) 'first E_date ReDim Ld(0) 'last E_date End If End Sub .
    فإذا قيمة Add_Dates = True في النموذج ، فيعمل التقرير المخفي لعمل المصفوفة ،
    بينما عندما تتغير قيمة Add_Dates ، فيقوم التقرير بإظهار قيم المصفوفة في التقرير الغير مخفي ،
    وعند اغلاق التقرير ، نقوم بحذف بيانات المصفوفة 🙂
     
    لذلك ، وللحصول على النتائج الصحيحة ، يجب تشغيل التقرير من النموذج ، حتى يقوم الكود بما يجب 🙂 
     

    .

    .
    جعفر
    1277.addDateHideRport.accdb.zip
  21. jjafferr's post in كيف نأخذ التاريخ من أول سجل وأخر سجل ونضعهم في رأس الصفحة للتقرير was marked as the answer   
    السلام عليكم 🙂
     
    في الواقع ، هذا السؤال من الاسئلة التي تُثار بين الحينه والاخرى ،
    واليك السبب في عدم امكانية الحصول على قيمة ذيل الصفحة ، في رأس الصفحة :
    التقرير عندك فيه 3 اقسام :

    .
    خلينا نشوف قيم التاريخ لصفحة:
     
    .
    والآن خلينا نشوف التاريخ ، بالطريقة اللي اقسام التقرير تشوفه ، بإستخدام حدث التنسيق لكل قسم:
    Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) Debug.Print "Header= " & Me.Edate End Sub Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer) Debug.Print " Detail= " & Me.Edate End Sub Private Sub PageFooterSection_Format(Cancel As Integer, FormatCount As Integer) Debug.Print "Footer= " & Me.Edate Debug.Print End Sub .
    والنتيجة لصفحتين :
     
    Header= 18-Oct-20
      Detail= 18-Oct-20
      Detail= 19-Oct-20
      Detail= 20-Oct-20
      Detail= 21-Oct-20
      Detail= 22-Oct-20
      Detail= 23-Oct-20
      Detail= 24-Oct-20
      Detail= 25-Oct-20
      Detail= 26-Oct-20
      Detail= 27-Oct-20
      Detail= 28-Oct-20
      Detail= 29-Oct-20
      Detail= 30-Oct-20
      Detail= 31-Oct-20
      Detail= 01-Nov-20
      Detail= 02-Nov-20
      Detail= 03-Nov-20
      Detail= 04-Nov-20
      Detail= 05-Nov-20
      Detail= 06-Nov-20
      Detail= 07-Nov-20
      Detail= 08-Nov-20
    Footer= 07-Nov-20
    Header= 08-Nov-20
      Detail= 08-Nov-20
      Detail= 09-Nov-20
      Detail= 10-Nov-20
      Detail= 11-Nov-20
      Detail= 12-Nov-20
      Detail= 13-Nov-20
      Detail= 14-Nov-20
      Detail= 15-Nov-20
      Detail= 14-Jan-21
      Detail= 15-Jan-21
      Detail= 16-Jan-21
      Detail= 17-Jan-21
      Detail= 18-Jan-21
      Detail= 19-Jan-21
      Detail= 20-Jan-21
      Detail= 21-Jan-21
      Detail= 22-Jan-21
      Detail= 23-Jan-21
      Detail= 24-Jan-21
      Detail= 25-Jan-21
      Detail= 26-Jan-21
      Detail= 27-Jan-21
    Footer= 26-Jan-21
    .
    من هنا نلاحظ ان رأس الصفحة يرى اول سجل ، بينما ذيل الصفحة يرى آخر سجل ، والتقرير يطبع / يُظهر رأس الصفحة قبل ان تكون البيانات وصلت الى ذيل الصفحة (يعني ذيل الصفحة لا يحتوي على اي قيمة حينها ، لما رأس الصفحة يحصل على القيمة) ، لهذا سبب ما نحصل على التاريخين معا في رأس الصفحة !!
     
    -------------------------------------------------------------------------------------------------------
    الآن وبعد ان عرفنا طريقة عمل التقرير ، خلينا نستفيد منه في عمل المطلوب :
    خلينا نفتح التقرير بطريقة مخفية ، نأخذ قيمة سجل رأس صفحة التقرير وذيل صفحة التقرير لكل صفحة ، نحفظهم في مصفوفة Array ، ثم نفتح التقرير بالطريقة العادية ونأخذ بيانات رأس وذيل التقرير من المصفوفة ، ونضعهم في التقرير ، في رأس الصفحة 🙂
     
    1. عمل نموذج لحصر البيانات بين قيمتين (مع اننا لسنا بحاجة الى هذه الخطوة ، ولكن لأن جدولك في سجلات بدون قيم تواريخ ، فهذا يعمل خلل في الكود) ،
    ونعمل استعلام يصفي بيانات الجدول حسب تواريخ النموذج ، ويكون هذا الاستعلام مصدر بيانات التقرير:

    .
    2. النقر على زر فتح التقرير في النموذج ، يحتوي على هذا الكود :
    والذي يعمل مصفوفة لـ 100 صفحة في التقرير (اذا تقريرك يحتوي على صفحات اكثر ، فقط اجعل هذا الرقم اكبر ، ما يضر اذا تركته = 200 او اكثر)
    'accept adding dates Add_Dates = True 'initilize the arrays with a larg number of pages ReDim Fd(100) 'first E_date ReDim Ld(100) 'last E_date 'open the Report in Hidden mode, to put the E_dates in an array DoCmd.OpenReport "rpt_chfit", acViewPreview, , , acHidden 'close the Hidden Report DoCmd.Close acReport, "rpt_chfit" 'stop adding dates Add_Dates = False 'now open the Report in the normal way DoCmd.OpenReport "rpt_chfit", acViewPreview .
    وهناك وحدة نمطية تحتفظ بقيم المصفوفة ، حتى تكون متوفرة لجميع كائنات البرنامج:
    Option Compare Database Option Explicit Public Add_Dates As Boolean Public Fd() As Date 'first E_date Public Ld() As Date 'last E_date .
    والتقرير فيه هذا الكود:
    Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) If Add_Dates = True Then 'add the array items, based on the Report page number Fd(Me.Page) = Me.F_Edate Else 'show the results Me.myF_Edate = Fd(Me.Page) Me.myL_Edate = Ld(Me.Page) End If End Sub Private Sub PageFooterSection_Format(Cancel As Integer, FormatCount As Integer) If Add_Dates = True Then 'add the array items Ld(Me.Page) = Me.L_Edate End If End Sub Private Sub Report_Close() If Add_Dates = False Then 'Empty the array ReDim Fd(0) 'first E_date ReDim Ld(0) 'last E_date End If End Sub .
    فإذا قيمة Add_Dates = True في النموذج ، فيعمل التقرير المخفي لعمل المصفوفة ،
    بينما عندما تتغير قيمة Add_Dates ، فيقوم التقرير بإظهار قيم المصفوفة في التقرير الغير مخفي ،
    وعند اغلاق التقرير ، نقوم بحذف بيانات المصفوفة 🙂
     
    لذلك ، وللحصول على النتائج الصحيحة ، يجب تشغيل التقرير من النموذج ، حتى يقوم الكود بما يجب 🙂 
     

    .

    .
    جعفر
    1277.addDateHideRport.accdb.zip
  22. jjafferr's post in مساعدة في انشاء كود was marked as the answer   
    وعليكم السلام 🙂
     
    وبدون ان انزل المرفق :
    if me.parent.name="F1" then me.parent!z=me!x * me!y else me.parent!z=me!x + me!y endif .
    الامر Parent معناه الوالدين ، اي ان والدي النموذج الفرعي C.
     
    جعفر
  23. jjafferr's post in ظهر رأس العمود فى اعلي العمودين was marked as the answer   
    وعليكم السلام 🙂
     
    نريد نعمل تجميع وهمي :
     

    .

    .

    .
    ونعطيه اي اسم خرافي ، مثلا نقطة (.) 

    .

    .

    .

    .
    والنتيجة

    .
    جعفر
    1266.قائمة.accdb.zip
  24. jjafferr's post in كود حذف اكثر من حقل was marked as the answer   
    تفضل يا سيدي 🙂
     
    عملت لك جدول tbl_Student_info ،
    بينما استعلام qry_Student_info يجمع الجدول السابق مع جدول الجدول الجديد :

    .
    ولما تريد تستعمل النماذج او التقارير ، استعمل الاستعلام qry_Student_info كمصدر بيانات لها ،
    بس رجاء الانتباه ، تأكد ان اسماء الطلبة موجودة ف الجدول tbl_Student_info ، والا فإنها لن تظهر في الاستعلام 🙂
     
    جعفر
    ‏‏StuData.zip
  25. jjafferr's post in مساعدة في تحويل كود من نصي الى رقمي was marked as the answer   
    السلام عليكم 🙂
     
    لو تتبع هذه الطريقة ، ما تتعب 🙂
     
     
    جعفر
×
×
  • اضف...

Important Information