• Xử lý report có độ cao các cột không đồng điều
  • 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:
    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
  • 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.