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

تقرير بأكثر من عمود ، وتسلسل من اليمين الى اسفل ، ثم عمود جديد


jjafferr

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

السلام عليكم:smile:

 

كان المفروض ان يكون هذا الموضوع كجواب للموضوع

 

والمشكلة هي ان ارقام التسلسل بالعربي ، في كل من التقارير الفرعية ليست بالتسلسل المطلوب ، ولا السنه بالتسلسل الصحيح

680.3.Clipboard01.jpg

.

نعرف اذا اردنا ان نعمل اكثر من عمود في التقرير ، فاننا نستعمل اعدادات الصفحة في التقرير

680.4.Clipboard02.jpg.585ccbcd9fd3a7dc90d528e54e5860dc.jpg

.

اذا التقرير بالانجليزي ، فكل شيء تمام وبالترتيب/التسلسل المطلوب ،

ولكن للأسف لما نريد الاعمدة بالتسلسل العربي ، من اليمين الى اسفل ، ثم يُكمّل العمود الثاني من حيث انتهى الاول ، هكذا

680.4.Clipboard03.jpg.8570e4facdde75c8c1e07b844b146045.jpg

.

فهنا يجب ان نقوم بمعالجة الموضوع بطريقتنا الخاصة:smile:

 

استعنت بالبرنامج من الروابط اعلاه ، وعملت تجارب على عدة اعمدة: 2 الى 6 اعمدة ، وكتبت نتائجها في الاكسل ، لأرى النتائج بصورة مباشرة ،

الحالي معناه ما يعطينا الاكسس ، والمفروض هو التسلسل الذي نسعى لعمله

680.4.Clipboard01.jpg.498e601629b0c9cc55c0fe639aea881a.jpg

.

وبعد التمعن في الارقام لعدة ايام ، توصلت الى ان هناك لوغاريثم معين يتماشى مع ارقام الاعمدة وتسلسلها ،

وبعد تجربة عدة طرق توصلت لطريقة تعرض هذه الاعمدة بالطريقة التي نريدها:smile:

 

1. سنحتاج الى حقلين اضافيين في الجدول (لكل تقرير فرعي) ، حقل تسلسل الاعمدة (وسيكون مخفي ، باللون البرتقالي في الصورة ادناه) والذي سيعتمد عليه التقرير في فرز البيانات ، rpt2_Seq مثلا، وحقل للتسلسل الذي سنراه في التقرير ، Seq2 مثلا (الحقل الآخر في التقرير) ،

2. في التقرير ، هكذا نجعل فرز البيانات ، على اساس الحقل rpt2_Seq

680.4.Clipboard04.jpg.e14c3f5bb334ad5cb873623853ae3cb9.jpg

.

وبما ان التقرير الرئيسي يحتوي على 3 تقارير فرعية (في برنامج الرابط اعلاه) ، 

680.4.Clipboard05.jpg.1e55aa04eb35764d84842f8610e16c95.jpg

.

فوضعت الكود على حدث "التنسيق" لرأس التقرير Page Header ،

وهذا هو الكود ، والذي نراه انه ينادي الدالة ("Call Seq_Records(2, "rpt2_Seq", "Seq2") ، 

لكل تقرير فرعي ، ويرسل عدد الاعمدة المطلوبة ، واسم حقلي التسلسل في الجدول للتقرير الفرعي:

Option Compare Database
Dim rst As DAO.Recordset

Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer)

    'Seq the subform Records
    
    'rpt2
    Set rst = CurrentDb.OpenRecordset("Select * From qry_2 Where nationalty=" & Me.nationalty)
    Call Seq_Records(2, "rpt2_Seq", "Seq2")
    
    'rpt3
    Set rst = CurrentDb.OpenRecordset("Select * From qry_3 Where nationalty=" & Me.nationalty)
    Call Seq_Records(2, "rpt3_Seq", "Seq3")
    
    'rpt4
    Set rst = CurrentDb.OpenRecordset("Select * From qry_4 Where nationalty=" & Me.nationalty)
    Call Seq_Records(2, "rpt4_Seq", "Seq4")
    
End Sub

.

وهذا كود الدالة ، والتي يمكن إخراجها من التقرير وجعلها وحدة نمطية مستقلة) :

Function Seq_Records(N As Integer, Seq_fName As String, Seq_n As String)
On Error GoTo err_Seq_Records

    'N         = Number of columns
    'Seq_fName = Seq Field Name
    'Seq_n     = Seq
    
    rst.MoveLast: rst.MoveFirst
    RC = rst.RecordCount
    
    c_Columns = N       'Number of columns in the report
    r_Records = RC      'Number of Records in the report
    j_First = c_Columns 'Start rtp_Seq with this number
    Counter = 0         'each time reduce c_Columns by this Counter
    
    For i = 1 To RC

        rst.Edit
            rst(Seq_fName) = j_First
            rst(Seq_n) = i
            'Debug.Print "rtp_Seq=" & j_First & vbTab & "Seq=" & i
        rst.Update
        
        'rtp_Seq
        j_First = j_First + c_Columns
        
        'rpt_Seq cannot be > RC
        If j_First > RC Then
            'start Counter
            Counter = Counter + 1
            'rpt_Seq re-calculate
            j_First = c_Columns - Counter
        End If
        
        rst.MoveNext
    Next i

Exit_Seq_Records:

    rst.Close: Set rst = Nothing
    
Exit Function
err_Seq_Records:

    If Err.Number = 3021 Then
        Resume Exit_Seq_Records
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
    End If
    
End Function

.

والنتيجة:

680.4.Clipboard06.jpg.5f66d4626c2b855a94ac96ddd12932b9.jpg

.

كما عملت تقرير للتجربة وبه 4 اعمدة ،

والذي ينادي الدالة هكذا ("Call Seq_Records(4, "rpt2_Seq", "Seq2") ، 

والنتيجة

680.4.Clipboard07.jpg.c74c23e41536e532692ed553c89647c1.jpg

.

جعفر

680.4.الاجازات.accdb.zip

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

قبل انزل المرفق 
هل نقدر ان نعدل على التقرير كالاتي

القي نظرتا الى صورة قبل الاخير ... والتقرير الفرعي الثاني اللي عنده 3 ريكوردات

هل نقدر ان يكون التسلسل كالاتي 

1                                       3

2

وليس كما في الصورة هكذا

1                                       2

                                        3

وايضا في صورة الاخيرة نغير التسلسل كالاتي

1                6                11                16

2                7                12                17

3                8                13

4                9                14

5                10              15

اي يعني النقصان بيكون في العمودالاخير وليس في العمود الاولى

 

 

 

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

وعليكم السلام اخي شفان

 

مبدئيا أقول لك لا اعرف، فالطريقة التي استعملتها من نافذة إعدادات الصفحة لا تعطينا هذا الخيار!!

 

ولكن رجاء ان تجرب ان تعمل إعدادات التقرير الرئيسي والفرعي من اليمين إلى اليسار، ثم أخبرنا عن النتيجة ، لأني سأكون بعيدا عن الكمبيوتر لعدة أيام:smile:

 

جعفر

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

الحمد لله أن مشاركتى جعلت العمالقة يتحاورون للوصول الى الغاية المنشودة 

واشكر الجميع على هذا الاهتمام الرائع 

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

ومرسل المرفق المستخدم

وقد تم تعبئته من جديد ولم يظهر اى شئ فى التقرير

680.5.الاجازات.accdb.zip

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

السلام عليكم

هذه طريقة أخرى ربما تفي بالغرض

سوف يكون شكل التقرير في وضع التصميم هكذا:

1.jpg.e85c5469f6bdb5bd3a7789d21d70f50b.jpg

و شكل التقرير في وضع المعاينة هكذا:

2.jpg.dd5d34bcd50072b264c1fe8edd832ae6.jpg

- و قد استعملت هذا الكود لتحديد إرتفاع و مكان ظهور التقارير الفرعية في التقرير الرئيسي.

   Dim RC2 As Integer, RC3 As Integer, RC4 As Integer
    Dim i As Double
    Dim heig_r2 As Double, heig_r3 As Double, heig_r4 As Double
    i = 566.9291338583 
    RC2 = [rpt_2].Report![nrow2]
    heig_r2 = (1.085 + (0.503 * (RC2 + 2) / 2) + 0.45) * i 
    Me.rpt_2.Height = heig_r2
'-----------------------
    Me.rpt_3.Top = heig_r2 + 5.5 * i
    RC3 = [rpt_3].Report![nrow3]
    heig_r3 = (1.085 + (0.503 * (RC3 + 1) / 2) + 0.45) * i 
    Me.rpt_3.Height = heig_r3
'-----------------------
    Me.rpt_4.Top = Me.rpt_3.Top + heig_r3 + 0.5 * i
    RC4 = [rpt_4].Report![nrow4]
    heig_r4 = (1.085 + (0.503 * (RC4 + 1) / 2) + 0.45) * i 
    Me.rpt_4.Height = heig_r4
'-----------------------
    Me.Label119.Top = Me.rpt_4.Top + heig_r4 + 0.5 * i
    Me.Sum_raseedafter.Top = Me.rpt_4.Top + heig_r4 + 0.5 * i

و غيرت خصائص التقارير الفرعية على النحو التالي:

أضفت حقل Expr1 فارغ لمصدر السجلات (الإستعلامات) من أجل إضافة تجميع لتقرير الفرعي

1- و غيرت خاصية تكرار المقطع إلى نعم للعنصر رأس_expr1 كما في الصورة:

3.jpg.60e9c73a4227cb6d4577887d59de5855.jpg

2- تغيير خاصية التقرير "اتجاه" إلى من اليمين إلى اليسار

4.jpg.261361e33ecd8b3f0c618b2cda6e0654.jpg

و هذا هو المرفق:

 

680.3.الاجازات - Copy.rar

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

  • 3 months 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.

×
×
  • اضف...

Important Information