Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Xử lý report có độ cao các cột không đồng điều
#1
Design Report là một nghệ thuật. Tạo report trên access giúp chúng ta thuận lợi hơn rất nhiều so với tạo report trên excel. Chúng ta có thể xử lý tạo tổng nhóm, tự động đánh số thứ tự, lọc record… dễ dàng hơn so với excel nhiều. Ngược lại chúng ta rất khó xử lý trong các trường hợp report có số lượng cột quá lớn vượt độ rộng tối đa chiều ngang trong trang design report (Báo cáo hàng ngang) nhưng nếu báo cáo có các nội dung cột nhiều ít không đồng điều (hiển thị dữ liệu theo hàng ngang) mà ta tăng số lượng trang thì lại không hợp lý – vì chiều ngang cột rộng mà đôi khi nôi dung chỉ có hay ba từ, vừa tốn giấy lại vừa không đẹp. Nhưng nếu chúng ta co hẹp chiều ngang lại để cho nội dung dãn ra theo chiều cao, lúc này, chúng ta cân chỉnh độ cao chúng bằng chiểu cao nội dung có dữ liệu lớn nhất để khi in repor không bị mất dữ liệu. Lại xảy ra chuyện có những cột thừa chiều cao.
Điều này là do dùng công cụ Text Box, Label hoặc Line chúng ta luôn tạo các đối tượng này có cùng chiều cao cố định.
Để xử lý đều này, chúng ta dùng phương thức Me.Line để vẽ đường thẳng đứng ngay trong Event On Print
Phương thức này có cú pháp:
Mã PHP:
Me.Line (LeftTop)-Step(WidthHeight), , BF 
Left, Top là vị trí góc trên bên trái của đường muốn vẽ, Width là độ dầy và Height là chiều cao
Ngoài ra để hỗ trợ cho phương thức vẽ này chúng ta còn có các giá trị hằng số Me.ScaleMode (thuộc tính đơn vị đo), Me.DrawStyle (xác lập định dạng)
Giả sử chúng ta có các Text Box của report là Text1, Text2, Text3,…, Textn.
Trước tiên chúng ta thiết kế các Text Box Border Color = transparent, Can Grow và Can Shrink = Yes.
Để xác định côt nào có chiểu dài lớn nhất trong record chúng ta phải xử dụng 1 function để tìm Text Box cao nhất trong mảng các Text Box: Text1, Text2, Text3,…, Textn

Mã PHP:
Function MaxCol(ParamArray varValues()) As Variant
    Dim i 
As Integer
    Dim varMax 
As Variant
    varMax 
Null

    
For LBound(varValuesTo UBound(varValues)
        If 
IsNumeric(varValues(i)) Or IsDate(varValues(i)) Then
            
If varMax >= varValues(iThen
                
            
Else
                
varMax varValues(i)
            
End If
        
End If
    
Next

    MaxCol 
varMax
End 
Function 

Sau đó chỉ cần xác định giá trị cao nhất của Text Box trong record trong Event On Print rồi Me.Line theo giá trị chiều cao của Text Box đó.

Mã PHP:
Private Sub Detail_Print(Cancel As IntegerPrintCount As Integer)
    
    
Me.ScaleMode 0
    Me
.DrawStyle 0

Dim OCAONHAT 
As Double
OCAONHAT 
MaxCol(Text1.HeightText2.Height…Textn.Height)
  
 
Me.Line (Me![Text1].LeftMe![Text1].Top)-Step(50OCAONHAT), , BF
 Me
.Line (Me![Text2].LeftMe![Text2].Top)-Step(10OCAONHAT), , BF

Me
.Line (Me![Textn].LeftMe![Text2].Top)-Step(10OCAONHAT), , BF
End Sub 
Vậy là chúng ta sẽ có một báo cáo tương đối đẹp, dễ nhìn và không tốn giấy

Các xác lập ScaleMode
0 -> Mặc định (Twip)
1 -> Twip
2 -> Point
3 -> Pixcel
4 -> Ký tự
5 -> Inch
6 -> Milimet
7 -> Centimet

Các xác lập DrawStyle
0 -> Vạch liền
1 -> Gạch – gạch
2 -> Chấm – chấm
3 -> Chấm – gạch
4 -> Chấm – chấm – gạch
5 -> Transparent
6 -> Vạch liền đậm nét vào trong
Demo
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan , thanhthienhg , Noname , thiennamlong
#2
Xin hỏi thêm về màu của đường kể dọc phải thiết lập code thế nào ạ
Thanks!
Chữ ký của thiennamlong Xin chào, mình là thiennamlong, Tham gia http://thuthuataccess.com/forum từ ngày 22-06 -14.
Reply
Những người đã cảm ơn
#3
(28-05-15, 10:10 AM)thiennamlong Đã viết: Xin hỏi thêm về màu của đường kể dọc phải thiết lập code thế nào ạ
Thanks!

Thông thường in report bằng máy laser nên mình quên phần này. Để rõ hơn mình trình bày lại cho đủ.
Line(Step(x1, y1) – Step(x2, y2), color, BF)
Step Từ khoá chỉ ra tọa độ điểm
x1, y1 giá trị chỉ tọa độ của điểm khởi đầu.
x2, y2 giá trị chỉ tọa độ của điểm kết thúc.
color Hằng số màu có thể sử dụng ForeColor hoặc sử dụng mã RGB, để trống là màu đen.
B Tạo ra một hình chữ nhật bằng cách sử dụng các tọa độ như góc đối diện của hình chữ nhật.
F F không thể được sử dụng mà không có B. Nếu tùy chọn B được sử dụng, tùy chọn F xác định rằng nền hình chữ nhật cùng màu với viền được sử dụng để vẽ hình chữ nhật. Nếu B được sử dụng mà không có F , hình chữ nhật được tô nền với màu sắc quy định bởi các thiết lập hiện tại của FillColor và BackStyle của report.
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn thiennamlong


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Tạo Menu dạng TreeView bằng Query (không dùng ActiveX) ongke0711 3 238 2 Giờ trước
Bài mới nhất: toanle
  Tự động hiện Form khi loading hết thời gian ChiMai 1 44 02-12-16, 08:59 PM
Bài mới nhất: ongke0711
  Lọc có điều kiện ở listbox phiacuoiconduong 2 93 18-11-16, 06:40 PM
Bài mới nhất: ongke0711
  [Hỏi] Sử dụng chuột giữa trong subform là report. toancvp 10 358 12-10-16, 01:01 AM
Bài mới nhất: toancvp
  Lọc theo điều kiện trong listbox Ranju 3 178 06-10-16, 05:26 PM
Bài mới nhất: Ranju

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ