الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

في التقرير معد التقرير يأتي في صفحه منفصله لوحده ما الحل

مغلق
بدأه ابوعبدالملك في 11 نوفمبر 2001 · 29 رد · 1,702 مشاهدة · في مراجعة المواضيع
مشاركة: واتساب X فيسبوك تيليجرام
#26

شكرا أبو حمود وآسف على إزعاجك

وهذه ملاحظه:

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

طلب صغير :

أبو حمود أو أبو لمي ياليت تشرح الكود المتغيرات التي فيه والثوابت لأني ما فهمت بعض الأشياء ويمكن غيري ما فهم

-من أين يستقي الثابت الذي يحمل عدد السجلات بياناته

- كيف يربط سجلين مع التذييل

- ما فائدة blnForceNewPage

- كيف يعمل الكود

-غير ذلك

#27

الأخ ابوعبدالملك

تلخبطت علي القواعد ، سأرسل لك الملف الذي فيه طريقتي على البريد ، وانظر :

1- التقرير المسمى افراد_جميع_الجهات الكود الذي فيه هذا عملي .

2- التقرير المسمى التقرير المعدل هذا كود ابولمى .

3- التقرير المسمى الجديد هو ماحاولت أن أطبق كود ابولمى على نفس مقاطع التقرير الأول فلم أنجح .

بالنسبة للكود :

هذا السطر إعلان عن متغير من النوع عدد صحيح

Dim PrintCount2 As Integer

الكود التالي :

PrintCount2 = PrintCount2 + PrintCount
If PrintCount2 >= 25 Then
If Me.Page <> 1 Then تفصيل.ForceNewPage = 1
PrintCount2 = 0
Else
تفصيل.ForceNewPage = 0
End If
If Me![نص78] = 1 Then
تفصيل.ForceNewPage = 0
PrintCount2 = 0
End If

سأشرحه على شكل نقاط مع ملاحظة أن الكود موضوع في حدث عند التنسيق لمقطع تفصيل :

1- السطر الأول معناه إن قيمة PrintCount2 تساوي قيمته نفسها مضافاً إليها قيمة المتغير PrintCount والتي تساوي 1 دائما عند كل تنسيق لسجل .

فقيمة PrintCount2 تتزايد بمعدل واحد عند تنسيق كل سجل ، كل سجل وليس كل صفحة .

2- السطر الثاني عبارة شرطية وهي إذا كان قيمة PrintCount2 أكبر أو تساوي 25 (يكتفى بتساوي لأنه ليس فيه تجاوز للأرقام) فاعمل التالي :

3- إذا لم يكن رقم الصفحة الحالية هو الصفحة الأولى فاجعل خاصية فرض صفحة جديدة قبل المقطع لمقطع التفصيل ، وهذا لغرض جعل السجل لايظهر في الصفحة الحالية وإنما يظهر في التالية وقد جعلته يتجاوز الصفحة الأولى مع أنه قد ترد فيه هذه المشكلة التي وضع الكود من أجلها لأنه عند الطباعة يظهر مقطع رأس الصفحة لوحده .

للفائدة فرض صفحة جديدة لها الخصائص التالية :

0 = بدون

1 = قبل المقطع

2 = بعد المقطع

3 = قبل وبعد

4- بعد وصول قيمة PrintCount2 ونقل السجلات للصفحة التالية إذا لم تكن هذه الصفحة هي الأولى ، عندها نبدأ مرة أخرى فنجعل قيمته تساوي صفر تمهيدا لتكرار العملية مرة أخرى .

5- Else ومعناها إذا لم تكن قيمة ‏المتغير PrintCount2 تساوي 25 فاعمل التالي :

6- فاجعل فرض صفحة جديدة بدون لجعل السجلات تظهر في نفس الصفحة جرب تعليق هذا السطر لمعرفة فائدته .

7- العبارة الشرطية الأخيرة فائدتها أنه إذا كانت عدد السجلات واحد لايظهر السجل لوحدة ومعد البيانات في صفحة لوحده ، وجرب تعليقه وانظر التغير .

وللجميع التحية

#28

أشكرك أبو حمود على الشرح الوافي.

وياليت أبو لمى يشرح طريقته كذلك علشان على الأقل نفهم ولا

نشغلكم بعدين بمثل ها الأسئله .(أو تتبرع بذلك يا أبو حمود )

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

وشكرأ للجميع

#29

لكل قسم في التقرير ثلاث احداث مهمه :

  • Format
  • Print
  • Retreat

مايهمنا هو الحدث Format . وهو يقع بعد أن يختار اكسيس البيانات التي سيضعها في التقرير . سنستغل هذه النقطه لمعرفة عدد السجلات الكلي والموجود في مربع النص Enum .

لإجبار أكسيس على قراءة آخر قيمة في Enum نحسب عدد الصفحات بوضع مربع نص في تذييل الصفحة ونكتب فيه :

=[Page] & " of " & [Pages]

وبذلك سيذهب الى تذييل التقرير ويعود بعدد الصفحات .

هناك نقطه مهمه قبل أن اكمل ، عندما ينفذ أكسيس الحدث Format لتذييل التقرير ينفذه كما ينفذ الكود من أعلى الى أسفل أي البيانات والعناصر التي في الأعلى أولا فإذا انتهت الصفحة قبل أن ينتهي التذييل يلغي كل ماسبق ويفرض صفحه جديده ثم يعيد تنفيذ الحدث وهذه نقطه مهمه ، لأننا سنختبر عدد مرات تنفيذ الحدث فإذا كانت مرتين سنعين القيمه True للمتغير blnForceNewPage وسنحسب Enum كما ذكرنا .. واذا كانت مره فقط فهذا يعني أنه لا مشكله لدينا فالتذييل ليس يتيما ، ولن يتم تنفيذ أي كود ..

'متغير لحفظ رقم آخر سجل
Dim lngLastRow As Long

'متغير للإشارة الى أنه من الضروري فرض صفحة جديده .
Dim blnForceNewPage As Integer 

'عدد السجلات المربوطه بالتذييل تستطيع تغييره .
Const LINKROWS = 2

.
.
.

Sub ReportFooter_Format (Cancel As Integer, FormatCount As Integer)
'أكسيس لا يستطيع وضع التذييل في نفس آخر صفحة.. إذن
' FormatCount  يساوي 2 
If FormatCount > 1 And (Not blnForceNewPage) Then 

' تذكر رقم آخر صف
        lngLastRow = Val(Me![Enum])
' افرض صفحة جديده
        blnForceNewPage = True 
    End If
End Sub

.
.
.

Sub Detail_Format (Cancel As Integer, FormatCount As Integer)
'اذا كان الصف الحالي لابد من وضعه في صفحة جديده ..
If blnForceNewPage And (Val(Me![Enum]) + LINKROWS - 1 = lngLastRow) Then
' أظهر الكائن pb1 لفرض صفحة جديده
         Me![pb1].Visible = True 
         blnForceNewPage = False
    Else
' أو أخف الكائن لمنع فرض صفحة جديده
         Me![pb1].Visible = False 
    End If
End Sub

#30

أبو لمي

شكراً على الشرح الوافي

سأخبرك عن أي ملاحظات أو عن أي ناط لم أفهمها لاحقاً

ياليت يكون هناك حل لتذييل المجموعه (ليس الصفحه ولا التقرير)

وشكراً لك

------------------وما توفيقي إلا بالله--------------------

إذا كنت بالله مستعصما---------فماذا يضيرك كيد العبيد

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…