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

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


alsihran
إذهب إلى أفضل إجابة Solved by jjafferr,

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

السلام عليكم 

المطلوب :

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

لتكون القيمة من تاريخ إلى تاريخ addDateHideRport.accdb

image.png.730152d3f11f077ba3f5182641b0e538.png

 

 

addDateHideRport.accdb

تم تعديل بواسطه alsihran
رابط هذا التعليق
شارك

11 دقائق مضت, mmam93 said:

التقرير الي انت مسوية بناء على عملية بحث من تاريخ حتى تاريخ

لا هذا تقرير عام بدون معايير 

وحتى لو افترضنا انه حسب معيار من تاريخ الى تاريخ 

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

ارجو ان تكون الفكرة قد وصلت 

رابط هذا التعليق
شارك

9 دقائق مضت, mmam93 said:

لو كانت حسب معيار بامكانك تضع مصدر بيانات الحقل

أخي الكريم هذا لن يؤدي المطلوب 

عدد صفحات التقرير تقريبا ٨ صفحات 

المطلوب كل صفحه تبدأ بتاريخ وتنتهي بتاريخ 

ثم الصفحه التي تليها وهكذا الى نهاية صفحات التقرير 

شكرا لك 

رابط هذا التعليق
شارك

8 ساعات مضت, ابو عارف said:

انظر التعديل ان شاء الله يكون حسب المطلوب

طلبي في رأس الصفحة والطريقة التي وضعتها في أسفل الصفحه 

وعند محاولة تطبيق طريقتك على رأس الصفحه  لاتظهر النتيجة المطلوبة 

شكرا لك 

رابط هذا التعليق
شارك

1 ساعه مضت, عبدالقدوس48 said:

تفضل أخي

أخ الكرم حسب فهمي لشرحك ليس هذا المطلوب 

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

تم تعديل بواسطه alsihran
رابط هذا التعليق
شارك

تفضل هذه المحاولة ارجو ان تنفعك

ملاحظة: جزء من الكود وهو الترقيم التلقائي هذا الكود للاستاذة زهرة وهو ضروري لتجنب حدوث تغيير بالبيانات عند الحذف والاضافة

مراعاة عدد السجلات في التقرير لان الكود يعتمد على عدد السجلات المعروضة لذا يجب تعديل الكود بتغير عدد السجلات المعروضة 

 

addDateHideRport-1.rar

  • Like 1
رابط هذا التعليق
شارك

الحل وصل للمطلوب ولكنه صعب نوعا ما وخصوصا اذا علمنا أن هناك احد الحقول قابل للنمو 

فسيتغير عدد السجلات المعروضة ويختل الامر 

أتمنى لو تستطيع ايجاد حل اسهل 

شكرا لك 

رابط هذا التعليق
شارك

  • أفضل إجابة

السلام عليكم 🙂

 

في الواقع ، هذا السؤال من الاسئلة التي تُثار بين الحينه والاخرى ،

واليك السبب في عدم امكانية الحصول على قيمة ذيل الصفحة ، في رأس الصفحة :

التقرير عندك فيه 3 اقسام :

image.png.8c45d785b03ffb045c459aa0ae1db870.png

.

خلينا نشوف قيم التاريخ لصفحة:

 image.png.54c16d694e24f419780a5627ad5ca5bd.png

.

والآن خلينا نشوف التاريخ ، بالطريقة اللي اقسام التقرير تشوفه ، بإستخدام حدث التنسيق لكل قسم:


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. عمل نموذج لحصر البيانات بين قيمتين (مع اننا لسنا بحاجة الى هذه الخطوة ، ولكن لأن جدولك في سجلات بدون قيم تواريخ ، فهذا يعمل خلل في الكود) ،

ونعمل استعلام يصفي بيانات الجدول حسب تواريخ النموذج ، ويكون هذا الاستعلام مصدر بيانات التقرير:

image.png.65086722d45bccc36400a9b5f58fae7c.png

.

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 ، فيقوم التقرير بإظهار قيم المصفوفة في التقرير الغير مخفي ،

وعند اغلاق التقرير ، نقوم بحذف بيانات المصفوفة 🙂

 

لذلك ، وللحصول على النتائج الصحيحة ، يجب تشغيل التقرير من النموذج ، حتى يقوم الكود بما يجب 🙂 

 

image.png.7574003308899ddec11191f57e3fe6ff.png

.

image.png.c2602638e978fda7f1ca32cf841d5cd2.png

.

جعفر

1277.addDateHideRport.accdb.zip

  • Like 1
  • Thanks 2
رابط هذا التعليق
شارك

 

نعم هو المطلوب   :    100 %

شكرا لك استاذ @jjafferr

 

أرجو منك شرح هذه الجزئية لم افهمها 

38 دقائق مضت, jjafferr said:

ولكن لأن جدولك في سجلات بدون قيم تواريخ

رابط هذا التعليق
شارك

1 دقيقه مضت, jjafferr said:

هذه السجلات بدون تواريخ

صحيح هذا بسبب أنه مثال للتعديل عليه وإلا فإن الجدول الأساس لن تكون هناك سجلات بدون ادخال التاريخ 

اتضحت الصورة الان 

شكرا لك مرة أخرى 

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information