• Cố định số dòng trong report
  • Cố định số dòng trong report

    DooHoaangPhuuc > 20-06-19, 11:54 PM

    Cháu có khúc mắc trong việc xây dựng biểu mẫu report như sau :

    Trong 1 report cuối cùng lấy nguồn từ Query . Do phải cố định số trang trong báo cáo này khi được in ra, nhưng số record trong query sẽ thay đổi theo từng thời kỳ, do đó report khi in ra sẽ co giãn dòng tuỳ theo số record trong query.
    Mặt khác , trong report cần thêm những dòng trống dữ liệu để khi cần thiết được viết thêm vào bằng tay.
    Khi thiết kế , Access chỉ tạo dòng theo số lượng record chứa trong query nguồn mà không thể tạo thêm các dòng trống.
    Như ví dụ minh hoạ bên dưới 

    [Hình: ciWHo86.png]

    [Hình: ciWHo86.png]

    Cháu muốn tạo report cố định 2 trang gồm "Trang 18/19" và "Trang 19/19"
    Nhưng trong Report do số record tương đối ít nên Report chỉ có được 1 trang thôi . Yêu cầu phải 2 trang. Và số lượng dòng phải đủ nhiều để Report được 2 trang , cụ thể như 20 dòng (mỗi trang 10 dòng như hình kèm) cho dù một số dòng đấy là trống rỗng. (hình có 14 dòng trống).
    Với ý tưởng khi tạo sẽ thêm 14 record có giá trị là "X007" ---> "X020" (đối với khoá chính),
    Và sự kiện load report sẽ so sánh "ID" với các giá trị "X007 --- >X020", nếu giá trị như nhau thì font chữ sẽ là màu trắng (cùng màu nền) khi in ra.

    Private Sub Report_Load()
    if ID.value = "X007" the   
    ID.font = 123                               (Code font chữ như thế nào ? ví dụ 123 là màu font trắng)
    Else if ID.value = "X008" then 
    ID.font = 123
    ...................
    Else if ID.value = "X020" then
    ID.font = 123
    End if
    End Sub

    Không biết như vậy có được không ?
    Và nếu thực hiện được , có thể giúp cháu code màu cho font chữ.
    Cháu xin cảm ơn.
    DooHoaangPhuuc
  • RE: Cố định số dòng trong report

    DooHoaangPhuuc > 20-06-19, 11:59 PM

    Do cháu không sửa bài (Edit) được do trùng hình , cháu xin post lại :

    Cháu có khúc mắc trong việc xây dựng biểu mẫu report như sau :

    Trong 1 report cuối cùng lấy nguồn từ Query . Do phải cố định số trang trong báo cáo này khi được in ra, nhưng số record trong query sẽ thay đổi theo từng thời kỳ, do đó report khi in ra sẽ co giãn dòng tuỳ theo số record trong query.
    Mặt khác , trong report cần thêm những dòng trống dữ liệu để khi cần thiết được viết thêm vào bằng tay.
    Khi thiết kế , Access chỉ tạo dòng theo số lượng record chứa trong query nguồn mà không thể tạo thêm các dòng trống.
    Như ví dụ minh hoạ bên dưới 


    [Hình: ciWHo86.png]

    [Hình: 0Pt8QoO.png]

    Cháu muốn tạo report cố định 2 trang gồm "Trang 18/19" và "Trang 19/19"
    Nhưng trong Report do số record tương đối ít nên Report chỉ có được 1 trang thôi . Yêu cầu phải 2 trang. Và số lượng dòng phải đủ nhiều để Report được 2 trang , cụ thể như 20 dòng (mỗi trang 10 dòng như hình kèm) cho dù một số dòng đấy là trống rỗng. (hình có 14 dòng trống).

    Với ý tưởng khi tạo sẽ thêm 14 record có giá trị là "X007" ---> "X020" (đối với khoá chính),

    Và sự kiện load report sẽ so sánh "MaNV" với các giá trị "X007 --- >X020", nếu giá trị như nhau thì font chữ sẽ là màu trắng (cùng màu nền) khi in ra.



    Private Sub Report_Load()

    if MaNV.value = "X007" the   
    MaNV.font = 123                               (Code font chữ như thế nào ? ví dụ 123 là màu font trắng)
    Else if MaNV.value = "X008" then 
    MaNV.font = 123
    ...................
    Else if MaNV.value = "X020" then
    MaNV.font = 123
    End if
    End Sub

    Không biết như vậy có được không ?

    Và nếu thực hiện được , có thể giúp cháu code màu cho font chữ.

    Cháu xin cảm ơn.
    DooHoaangPhuuc
  • RE: Cố định số dòng trong report

    tranthanhan1962 > 21-06-19, 08:37 AM

    1/Xử lý vấn đề những giá trị giống nhau chỉ hiển thị giá trị đầu tiên rất dễ dàng không cần code gì cả. Tại textbox trường cần xử lý vào properties chọ hide duplicate (Dấu mục giống nhau)= yes
    2/Để thiết kế cố định số dòng cần xử dụng 2 report. Một report chính để xử lý số dòng hiển thị số lượng record thật của table hoặc query và một report mặt nạ để lấp số dòng còn thiếu trên khoảng trắng còn dư.
    -trên report chính (có record source là table hoặc query), thiết kế chỉ có các dòng giá trị của record. Không có report header, report foorter, page header, page foorter, không có cả phần tiêu đề trường, đặt biệt là diện tích phần detail vừa khít các textbox không có phần thịt dư, đều này rất quan trọng để khi áp vào report mặt nạ chính xác
    -Trên report (không có record source) mặt nạ thiết kế đầy đủ report header, report foorter, page header, page foorter theo yêu cầu, phần detail là một vùng trống, tạo các lebel tiêu đề, phía dưới tiêu đề thiết kế các rectangle có kích thước giống như các textbox thể hiện các giá trị trong report chính. Số lượng các dòng tùy thuộc yêu cầu. ví dụ mỗi record có 3 trường và 10 record = 30 rectangle
    Lấy report mặt nạ làm main report, report chính làm sub report. Top và left sub report phải trùng khích với top và left rectangle đầu tiên, chiều ngang thị report = tổng chiều ngang các rectangle cùng hàng, chiều cao sub report =< chiều cao rectangle đặt can grow va can shrink sub report = yes, Border color sub report = transparent
    Khi hiển thị phần sub report có giá trị sẽ đè và chiếm mất vị trí của các rectangle khi không còn giá trị các rectangle sẽ hiện ra lấp vào khoản trống còn thiếu của report.
    Chúc bạn thành công.
  • RE: Cố định số dòng trong report

    ongke0711 > 21-06-19, 12:53 PM

    (20-06-19, 11:59 PM)DooHoaangPhuuc Đã viết: Trong 1 report cuối cùng lấy nguồn từ Query . Do phải cố định số trang trong báo cáo này khi được in ra, nhưng số record trong query sẽ thay đổi theo từng thời kỳ, do đó report khi in ra sẽ co giãn dòng tuỳ theo số record trong query.
    Mặt khác , trong report cần thêm những dòng trống dữ liệu để khi cần thiết được viết thêm vào bằng tay.
    Khi thiết kế , Access chỉ tạo dòng theo số lượng record chứa trong query nguồn mà không thể tạo thêm các dòng trống.
    Như ví dụ minh hoạ bên dưới 
    Cháu muốn tạo report cố định 2 trang gồm "Trang 18/19" và "Trang 19/19"
    Nhưng trong Report do số record tương đối ít nên Report chỉ có được 1 trang thôi . Yêu cầu phải 2 trang. Và số lượng dòng phải đủ nhiều để Report được 2 trang , cụ thể như 20 dòng (mỗi trang 10 dòng như hình kèm) cho dù một số dòng đấy là trống rỗng. (hình có 14 dòng trống).

    Bạn xem bài này cũng gần tương tự và tôi đã chỉnh sửa theo như ý bạn.
    http://thuthuataccess.com/forum/post-305...l#pid30555


    - Tạo table phụ lưu thông tin số dòng cần hiển thị/ trang trong report.
    - Dùng union query join table này và table cần lấy thông tin cho Report.
    - Lưu ý trong thiết kế report: kéo giãn hoặc thu ngắn lại phần Page Footer để vừa đủ hiện số dòng theo yêu cầu. Vd là 10 dòng như y/c của bạn.

    Link file chỉnh sửa theo ý bạn: http://www.mediafire.com/file/sn6ani5elg...ong%29.mdb


    [Hình: 48101284312_d095df9c5f_c.jpg]
  • RE: Cố định số dòng trong report

    DooHoaangPhuuc > 21-06-19, 11:08 PM

    Cháu xin cảm ơn Bác ThanhAn và Chú OngKe0711 đã hướng dẫn.

    + Ban đầu cháu cũng có ý nghĩ theo hướng như Bác ThanhAn, tuy nhiên dữ liệu trong một trong 1 trường sẽ thay đổi tuỳ theo record mà nó được lưu trữ (ví dụ như trường "Nội dung phân công công việc" ) có thể chỉ 1 hàng (1 dòng dữ liệu của trường, và có thể lên đến khoảng 10 hàng dòng dữ liệu trong trường khi in report. Và  như thế, khi thiết kế Sub-report lồng vào main-report , sub-report co giãn không đều đôi khi giãn chiều cao quá lớn, phải điều chỉnh lại các dòng kẻ trong main-report thì hơi mất thời gian .

    + Đối với hướng dẫn của Chú Ongke0711 rất hay giải quyết được số dòng mong muốn, số trang report cần in mong muốn. Tuy vậy, bản report cháu muốn in ra ngoài các dòng record trong nguồn dữ liệu query /table , thì những dòng khác sẽ không có gi cả ngoài các ô trống rỗng. 
     
    Mục đích cuối của cháu nhằm định chính xác số trang report được in, có thể tăng giảm số dòng trong report này truỳ theo co giãn chiều cao record nhưng phải có đủ các record trong nguồn dữ liệu và thêm các dòng trống rỗng để đạt được số trang in mong muốn (ví dụ 2 trang in cho report).
    Cháu xin cảm ơn Các Bác , các Chú Cô hướng dẫn.
    DooHoaangPhuuc
  • RE: Cố định số dòng trong report

    ongke0711 > 22-06-19, 12:40 AM

    (21-06-19, 11:08 PM)DooHoaangPhuuc Đã viết: + Đối với hướng dẫn của Chú Ongke0711 rất hay giải quyết được số dòng mong muốn, số trang report cần in mong muốn. Tuy vậy, bản report cháu muốn in ra ngoài các dòng record trong nguồn dữ liệu query /table , thì những dòng khác sẽ không có gi cả ngoài các ô trống rỗng. 
     
    Mục đích cuối của cháu nhằm định chính xác số trang report được in, có thể tăng giảm số dòng trong report này truỳ theo co giãn chiều cao record nhưng phải có đủ các record trong nguồn dữ liệu và thêm các dòng trống rỗng để đạt được số trang in mong muốn (ví dụ 2 trang in cho report).
    Cháu xin cảm ơn Các Bác , các Chú Cô hướng dẫn.
    DooHoaangPhuuc

    - Muốn không hiển thị mấy cái số thứ tự (ID) thì viết code cho sự kiện On Print kiểm tra có dữ liệu không, nếu không thì = màu trắng.

    Ví dụ:

    Mã PHP:
    Private Sub Detail_Print(Cancel As IntegerPrintCount As Integer)
        If Len(Nz(Me.txtMaSP"")) = 0 Then
            Me
    .txtID.ForeColor vbWhite
        End 
    If
    End Sub 

    - Còn vụ muốn chiều cao từng  dòng thay đổi tuỳ theo dữ liệu mà vẫn đảm bảo có 2 trang có dòng trắng thì phải tìm giải pháp khác rồi. Tôi chưa nghĩ ra.
  • RE: Cố định số dòng trong report

    DooHoaangPhuuc > 26-06-19, 12:06 AM

    Cảm ơn Chú Ongke0711,
    Cháu tạo thêm các ID "ảo" (khoá chính) cho đủ số dòng cần thiết (đáp ứng số trang in mong muốn.
    Khi in ở chế độ Print Preview sẽ biết được số trang in nhiều hơn hay không. Tuỳ từng thời điểm, các record có thể tăng hay giảm. Lúc đấy sẽ gia giảm để tăng hoặc giảm dòng thừa bằng cách thêm hoặc xoá các ID ảo trong query (ví dụ các ID ảo là X1, X2, X3....Xn)
    Viết code để tạo font màu của các ID ảo này trùng với màu nền (màu trắng giấy in) như Chú hướng dẫn

    Private Sub Detail_Print(Cancel As IntegerPrintCount As Integer)

        If ID.Value = "X1" Then
            Me
    .ID.ForeColor vbWhite
        End If

        If ID.Value = "X2" Then
            Me
    .ID.ForeColor vbWhite

        End If


        If ID.Value = "X3" Then
            Me
    .ID.ForeColor vbWhite

        End If
     ..........
        If ID.Value = "Xn" Then
            Me
    .ID.ForeColor vbWhite

        End If
    End Sub 

    Cảm ơn Chú thật nhiều
    Cháu DooHoaangPhuc
  • RE: Cố định số dòng trong report

    ongke0711 > 26-06-19, 07:44 AM

    Sao không dùng vòng lặp để gán ForeColor cho gọn code.

    n=30
    For i= 1 to n
    ...

    Next
  • RE: Cố định số dòng trong report

    DooHoaangPhuuc > 26-06-19, 08:59 PM

    Vâng, cháu thử tạm code vào cơ sở dữ liệu , rồi sẵn copy luôn. (cháu cũng nghĩ dùng if, select case hay for chắc cũng được)
    Cháu xin cảm ơn Chú chỉ dẫn.
    DooHoaangPhuuc