-
Xử lý report có độ cao các cột không đồng điều
tranthanhan1962 > 30-04-15, 08:48 AM
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:
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 caoMã PHP:Me.Line (Left, Top)-Step(Width, Height), , BF
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 i = LBound(varValues) To UBound(varValues)
If IsNumeric(varValues(i)) Or IsDate(varValues(i)) Then
If varMax >= varValues(i) Then
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 đó.
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ấyMã PHP:Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
Me.ScaleMode = 0
Me.DrawStyle = 0
Dim OCAONHAT As Double
OCAONHAT = MaxCol(Text1.Height, Text2.Height, …Textn.Height)
Me.Line (Me![Text1].Left, Me![Text1].Top)-Step(50, OCAONHAT), , BF
Me.Line (Me![Text2].Left, Me![Text2].Top)-Step(10, OCAONHAT), , BF
…
Me.Line (Me![Textn].Left, Me![Text2].Top)-Step(10, OCAONHAT), , BF
End Sub
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 -
RE: Xử lý report có độ cao các cột không đồng điều
thiennamlong > 28-05-15, 10:10 AM
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! -
RE: Xử lý report có độ cao các cột không đồng điều
tranthanhan1962 > 28-05-15, 08:52 PM
(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.