|
طباعة تقرير يطالب بمعلمة |
المشكلة : يوجد لدي تقرير يحتوي معلمة وهي عبارة إسناد لقيمة على النموذج ولا يوجد في ذلك مشكلة ، ولكن المشكلة أنني أرغب في فتح التقرير وهذا النموذج مغلق فتظهر لي مثل هذه الرسالة :

فما الحل لمنع ظهورها ؟
الجواب : أولا سبب المشكلة أنه يبحث عن النموذج الموجود اسمه في العبارة فإذا لم يجده تظهر هذه الرسالة .
ولحل المشكلة اختر أحد الحلول التالية :
الحل
الأول : باستخدام تصفية للتقرير :
نقوم بعمل تصفية عند كون النموذج مفتوح لذلك يلزمنا التأكد أولا من كون النموذج مفتوح أم لا بواسطة استخدام الدالة IsLoaded والتي تحتاج فقط إلى تمرير اسم النموذج إليها فتعيد True إذا كان مفتوحاً و False إذا كان مغلقاً :
|
Public Function IsLoaded(ByVal
strformname As String) As Integer |
1- أنسخ الدالة السابقة وضعها في وحدة نمطية عامة .
2- أفتح التقرير في عرض التصميم .
3- والآن نريد أن نزيل عبارة الإسناد (إذا كان التقرير جديداً فانتقل للخطوة
الخامسة) ثم أظهر الخصائص ثم انقر على المربع ذو الثلاث نقط
المجاور لخاصية مصدر السجل :

سيظهر مصمم الاستعلام -في حال كون التقرير مبني على استعلام أو عبارة SQL- قص العبارة (أنتبه قص العبارة وليس حذف لأننا سنحتاجها فيما بعد وإلا ستضطر لكتابتها مرة أخرى) من المعيار تحت الحقل الموجودة أسفل منه مثل الشكل التالي :


4- أغلق مصمم الاستعلام .
5- في صفحة التبويب حدث في حدث عند الفتح اختر من القائمة [إجراء حدث] ثم اضغط
الزر ذو الثلاث نقط
ستظهر
الوحدة النمطية الخاصة بالتقرير .

6- أنسخ الأسطر التالية وضعها بين السطرين الذين ينشأهما لك الأكسس :
|
If IsLoaded("نموذج1") Then |
غير ما يلزم بالنسبة لاسم النموذج واسم مربع النص الذي على النموذج واسم الحقل في التقرير الذي ترغب في تطبيق التصفية عليه .
وهذا شرح مبسط للأسطر السابقة :
1- إذا كان نموذج1 مفتوحاً . لاحظ هنا أننا لم نضع قيمة شرطية لأنها افتراضيا =True بمعنى آخر عبارة السطر الأول تساوي هذه العبارة :
If IsLoaded("نموذج1") = True Then
2- فلتر التقرير يساوي ويليه اسم الحقل ثم القيمة طبعا هنا القيمة إذا كان النموذج مفتوحاً هي القيمة الموجودة في "نص0" .
3- طبق التصفية .
4- وإلا .
5- أمسح فلتر التقرير .
6- أزل التصفية .
7- إغلاق If الشرطية .
انتهى .
الحل
الثاني : تغيير مصدر السجل للتقرير :
وذلك بجعل المصدر مرة يحتوي عبارة الإسناد -إذا كان النموذج مفتوحاً- ومرة بدونها -إذا كان النموذج مغلقاً- .
أنسخ دالة IsLoaded الموجودة في الحل السابق لأننا نحتاجها هنا أيضا .
1- افتح التقرير في عرض التصميم .
2- أظهر مربع حوار الخصائص ثم في خاصية مصدر السجل قص عبارة SQL كاملة . اضغط Home ثم اضغط Shift+End ثم Ctrl+X .
3- في حدث عند الفتح للتقرير في الوحدة النمطية اكتب ما يلي :
|
If IsLoaded("نموذج1") Then |
وكما ترى الفرق هو إزالة العبارة بعد WHERE
كما هو واضح في الأسطر السابقة .
الحل
الثالث : باستخدام دالة عامة :
وهي طريقة تتكون من دالة IsLoaded السابقة ودالة أخرى عامة .
1- أفتح التقرير في عرض التصميم .
2- افتح مصدر السجل للتقرير وعند ظهور شاشة مصمم الاستعلام أنشئ حقل جديد بأي اسم كالتالي :
|
Expr1: IIf([النص] Is Null;"";[النص]) |
غير اسم مربع النص المسمى هنا النص باسم مربع النص الذي لديك والذي تحته المعيار (عبارة الإسناد) .
3- تحت الحقل السابق اكتب ما يلي :
|
IIf(az([النص]) Is Null;"";az([النص])) |
أنظر الصورة في مصمم الاستعلام في المثال المرفق :

4- في الوحدة النمطية العامة اكتب :
|
Public Function az(ad As Variant) As
Variant |
انتهى .
|
مثال بالأكسس 97 |
الأمثلة مضغوطة تحتاج إلى برنامج فك الضغط انقر هنا لتحميل البرنامج |
مثال بالأكسس 2000 |
![]()
