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

التحكم في قسم التفاصيل للتقرير


Accessna

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

مثال على التحكم في قسم التفاصيل .

- التحكم بعدد الأسطر في الصفحة لـ Dream_Works .

- التحكم في الصفحة الأخير من التقرير لـ Accessna .

- تصميم المثال ابتداء وبياناته لـ ابوابراهيم .

أفكار جميلة وأكواد قوية ، احرصوا على الإطلاع عليها .

ReportDetailSectionControl.rar

تم تعديل بواسطه Accessna
  • Like 1
رابط هذا التعليق
شارك

جميل جدا ،

شرح الخطوات المتبعة لتحديد عدد السطور في الصفحة

1. في قسم التعريفات في التقرير يعرف متغير خاص بعدد الأسطر في الصفحة ويطلق عليه OnePageRecords هكذا

Dim OnePageRecords As Byte

2. في حدث الفتح للتقرير Report_Open يتم تحديد قيمة هذا المتغير هكذا

Private Sub Report_Open(Cancel As Integer)

...
...
...

OnePageRecords = 19
...
...
...

End Sub
3. في حدث التنسيق لجزء التفاصيل Detials.Format يتم الاعتماد على قيمة متغير count في معرفة عدد السطور المطبوعة فكلما طبع سطر زادت فيمة count وعندما تصل قيمة count إلى العدد المرغوب به وهو OnePageRecords فإننا نفرض صفحة جديدة ونفرغ count (يعني نجعله صفر) هكذا
 

Private Sub تفصيل_Format(Cancel As Integer, FormatCount As Integer)
  Static Count As Byte

  'Number Of Lines Per Page = OnePageRecords(19)
  
  Count = Count + 1
  If Count = OnePageRecords Then
    Count = 0
    Me.Section(acDetail).ForceNewPage = 1
  End If
End Sub

وهكذا يتم التحكم في عدد السطور وهذا العمل جميل جدا ويمكن أن يصبح أكثر جمالا إذا ما تم بعث قيمة عدد السطور في الصفحة إلى المتغير OnePageRecords من خلال openargs الخاصة بالتقارير وإن احببتم شرحتها لكم.

تحياتي

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

نكمل الشرح،

شرح الخطوات المتبعة في برمجة الصفحة الأخيرة من التقرير

المقدمة

ابتداءً قد تتسألون ما الذي فعله Accessna في الصفحة الأخيرة، والجواب هو أنه جعل الصفحة تكمل طباعة الاسطر الفارغة رغم عدم وجود بيانات كافية لإملاء الصفحة.

حيث أنه تم التحديد سابقا بأن عدد السطور في الصفحة سيكون ثابتا وتم تعريفه بواسطة المتغير OnePageRecords وقيمته في المثال 19 لذلك يجب الأخذ بعين الاعتبار في الصفحة الأخيرة أن العدد سيكون أيضا 19 لأن عدد السجلات والتي هي مصدر التقرير (عدد الطلاب) يمكن أن لا يكونوا دائما من مضاعفات العدد 19 وبالتالي سيظهر نقص في عدد سطور الصفحة الأخيرة لذلك برزت الحاجة للمعالجة.

طريقة المعالجة

1. العمل يتم في حدث عند الفتح للتقرير ، حيث يقوم بإنشاء جدول جديد يضع فيه الارقام من 1 .. OnePageRecords = 19 كالأتي :

'------------
QryName = Me.Name & "_1234567890"

  'عملية إنشاء الجدول الجديد
  Set dbs = CurrentDb
  Set rTbl = dbs.CreateTableDef(QryName & "_0")
  With rTbl
   .Fields.Append .CreateField("RowID", dbByte)
   .Fields("RowID").ValidationRule = ">0"
  End With
  dbs.TableDefs.Append rTbl
 'عملية تعبئة الجدول بالأرقام من 1 إلى 19 =  OnePageRecords  
  Set sRst = dbs.OpenRecordset(QryName & "_0", dbOpenDynaset)
  With sRst
    For ExtraRecords = 1 To OnePageRecords
      .AddNew
        !RowID = ExtraRecords
      .Update
    Next ExtraRecords
  End With 
sRst.Close
'------------
لاحظوا هنا اصطلاح التسمية للجدول هو myReport_1234567890_0 وسوف يحتوي على حقل واحد هو RowID وحتى هذه اللحظة هذا الجدوم تم إنشاءه وتعبئته بالأرقام من 1 .. 19 بالطبع حتى هذه اللحظة لم يتم فعل أي شيء له علاقة بنتائج التقرير. 2. إنشاء استعلام جديد sQry و تحديد مصدر سجلات sRst ليتم عليهم العمل من أجل تحقيق المطلوب
'------------
' تحويل مصدر السجلات للتقرير لأن تكون استعلام اختيار بكل الأحوال
  SQL = Me.RecordSource
  SQL = IIf(SQL Like "Select *", SQL, "Select * from " & SQL)
' إنشاء استعلام جديد مبنيا على مصدر السجلات المحدد في سابقا
  Set sRst = dbs.OpenRecordset(SQL)
  Set sQry = dbs.CreateQueryDef(QryName & "_1", SQL)
  '------------
لاحظ تعريف مجموعة السجلات sRst 3. تحديد عدد السجلات الناقصة من الصفحة الأخيرة
'------------
  sRst.MoveLast
  ExtraRecords = sRst.RecordCount Mod OnePageRecords
  If ExtraRecords <> 0 Then ExtraRecords = OnePageRecords - ExtraRecords
 '------------
طريقة باقي القسمة ومقارنته بالصفر ثم الطرح من الأساس وهي طريقة مشهورة في الرياضيات وبهذا يصبح عندنا متغير اسمه ExtraRecords هو عدد السجلات الناقصة عن OnePageRecords في الصفحة الأخيرة. 4. لنركز قليلا ، في هذه اللحظة عندنا جدول myReport_1234567890_0 وفيه الارقام 1.. 19 في الحقل RowID وعندنا sRst مجموعة السجلات الخاصة بالتقرير بدون زيادة و sQry استعلام مبنيا على مجموعة السجلات وعندنا ايضا المتغير ExtraRecords الذي هو عدد السجلات الناقصة في الصفحة الأخيرة. 5. بناء استعلام جديد يضم السطور الناقصة
 '------------
  SQL = "Select "
  For Each fld In sQry.Fields
    SQL = SQL & "Null as [" & fld.Name & "], "
  Next fld
  SQL = Left(SQL, Len(SQL) - 2) & " from [" & QryName & "_0] Where [RowID]<=" & ExtraRecords & ";"
  Debug.Print SQL
  Set rQry = dbs.CreateQueryDef(QryName & "_2", SQL)
  '------------
هنا يتم بناء rQry وهو استعلام يوجد به سجلات بعدد السطور الناقصة مع ضبط قيمة RowID لكل منها 6. أخيرا تحديد مصدر السجلات الجديد للتقرير وهو استعلام توحيد بين مصدر السجلات و rQry هكذا
SQL = "Select * from [" & QryName & "_1] Union all " & _
        "Select * from [" & QryName & "_2];"

أليست البرمجة جميلة ، كل الاحترام لِ Accessna

تحياتي

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

  • 1 year later...

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