Accessna قام بنشر ديسمبر 20, 2007 قام بنشر ديسمبر 20, 2007 (معدل) مثال على التحكم في قسم التفاصيل . - التحكم بعدد الأسطر في الصفحة لـ Dream_Works . - التحكم في الصفحة الأخير من التقرير لـ Accessna . - تصميم المثال ابتداء وبياناته لـ ابوابراهيم . أفكار جميلة وأكواد قوية ، احرصوا على الإطلاع عليها . ReportDetailSectionControl.rar تم تعديل ديسمبر 20, 2007 بواسطه Accessna 1
عمار زيد قام بنشر ديسمبر 20, 2007 قام بنشر ديسمبر 20, 2007 جزاك الله خيراً وإلى الأمام وياريت تقوم بالشرح عن الخطوات المتبعة للوصول هذا التقرير
محب العلم قام بنشر ديسمبر 21, 2007 قام بنشر ديسمبر 21, 2007 جميل جدا ، شرح الخطوات المتبعة لتحديد عدد السطور في الصفحة 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 الخاصة بالتقارير وإن احببتم شرحتها لكم. تحياتي
محب العلم قام بنشر ديسمبر 21, 2007 قام بنشر ديسمبر 21, 2007 (معدل) نكمل الشرح، شرح الخطوات المتبعة في برمجة الصفحة الأخيرة من التقرير المقدمة ابتداءً قد تتسألون ما الذي فعله 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 تحياتي تم تعديل ديسمبر 21, 2007 بواسطه محب العلم
Dream_Works قام بنشر ديسمبر 21, 2007 قام بنشر ديسمبر 21, 2007 الله يعطيك العافية أخوي .... شرح رائع ...
Accessna قام بنشر ديسمبر 22, 2007 الكاتب قام بنشر ديسمبر 22, 2007 شكرا عمار زيد على المرور . شكرا محب العلم على الشرح . شكرا لتفاعلكم وبارك الله فيكم جميعا .
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.