• Gạch chéo report!
  • Gạch chéo report!

    trieule9786 > 14-03-14, 03:53 PM

    Mình xin hỏi mọi người cách gạch chéo phần còn thừa trong subreport bằng code VBA.
    Cụ thể là mình đang làm chương trình in hóa đơn theo mẫu in sẵn.
    Nhưng theo luật mới bên cục thuế thì họ bắt mình fai gạch phần còn thừa lại trên hóa đơn GTGT. MOng mọi người giúp.
    Mẫu như thế này:
    [Hình: hoa+don_4.JPG]

    Thanks all!!
  • RE: Gạch chéo report!

    trunghieu > 14-03-14, 05:21 PM

    Bạn vẻ 2 line (1 line ngang và 1line chéo) như trong hóa đơn
    Giờ bạn viết code theo dạng
    line.width=
    line.hight=
    line.top=
    Tùy theo điều kiện (nhiều hay ích sản phẩm) trong sự kiện form_load bạn tùy chỉnh các thông số width,hight,top cho phù hợp
    - Đối vói line ngang do không thay đổi về độ dài, nên bạn chỉ cần chỉnh thông số top cho phù hợp
    - Đối với line chéo có điểm cuối cố định, thay đổi về chiều dài và vị trí điểm đầu nên bạn thay đổi thông số hight và top cho phù hợp.
    Mẹo:
    Bạn vẽ line ra từng trường hợp cho đúng với mẫu hóa đơn, sau đó vào code bạn dùng lệnh Msgbox để hiện thị các thông số của các line theo vị trí cần thiết từ đó bạn đặt câu lệnh dễ dàng hơn.
  • RE: Gạch chéo report!

    trieule9786 > 14-03-14, 06:02 PM

    À hay lắm, mình cám ơn TRUNGHIEU nhiều, nhưng nói thêm ở đây tý:
    _ Line ngang: mình cứ vẽ ở phần report footer là OK (nó se co giãn theo số record có trên subreport)
    _Line chéo: line này là hơi khó cho chúng ta. Chúng ta phải tìm cho rõ cái thông số width, hight, và top của nó( chưa bít tìm sao ??)
  • RE: Gạch chéo report!

    trieule9786 > 15-03-14, 11:52 AM

    Có ai có ý kiến nào khác không nhỉ ? potay.com r !
  • RE: Gạch chéo report!

    nhannt4 > 17-03-14, 12:27 PM

    Bạn Up chương trình lên đi. Lười ngồi tạo dữ liệu nháp quá!
  • RE: Gạch chéo report!

    MTNQ > 20-03-14, 10:47 PM

    Chào bạn trieule9786 !

    Thấy chủ đề này cũng hay, mình thử tìm kiếm thấy câu hỏi tương tự trên một số diễn đàn nhưng cho đến nay vẫn chưa có câu trả lời thỏa đáng

    Ý tưởng là:

    Để vẽ được đoạn thẳng ta cần xác định tọa độ điểm khởi đầu và tọa độ điểm kết thúc

    -Điểm khởi đầu (y1) của đường chéo sẽ = Chiều cao H (của trang in) - H (của ReportHeader) - H (PageHeader) - H(Detail) * (Số Record trang cuối)

    Cái khó là làm sao đếm số dòng (record) trên trang cuối cùng để tính ra khoảng cách từ đầu trang đến điểm khởi đầu?

    Sau khi tiêu tốn khá nhiều Calories (Thiếu chút nữa là đốt cháy bộ não014) mình cũng tìm ra phương án khả thi :
    1-Trước tiên bạn phải chắc chắn trên PageFooter có một text box có control source ="Page " & [Page] & " of " & [Pages]

    2-Khai báo một biến nội bộ ở dầu trang code:
    Mã:
    Option Compare Database
    Dim intRecCount As Integer

    3-Bấm chọn PageHeader và nhập intRecCount = 0 cho sự kiện On format
    Mã:
    Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer)
        intRecCount = 0
    End Sub

    4-Chọn Detail và code cho sự kiện On Print như sau:
    Mã:
    Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
        intRecCount = intRecCount + 1
    End Sub

    5-Tại sự kiện On Page của report bạn viết thủ tục như sau:

    Mã:
    Private Sub Report_Page()
        Dim lngColor As Long
        Dim sngTop As Single, sngLeft As Single
        Dim sngWidth As Single, sngHeight As Single
        
        Me.ScaleMode = 0
        
        If Me.Page = Me.Pages Then
        
            sngLeft = Me.mavt.Width  'Thay mavt bằng tên  cột mà bạn muốn vẽ đường ngang bên dưới
            
            If Me.Pages = 1 Then
                sngTop = (intRecCount) * (Me.Detail.Height) + _
                 Me.PageHeaderSection.Height + Me.ReportHeader.Height +  (Me.Detail.Height/2)
            Else
                sngTop = intRecCount * (Me.Detail.Height) + Me.PageHeaderSection.Height + (Me.Detail.Height/2)
            End If
            
            sngWidth = Me.Width
            sngHeight = Me.ScaleHeight - Me.PageFooterSection.Height - Me.ReportFooter.Height
        
            lngColor = RGB(255, 0, 0)
        
            Me.Line (Me.mavt.Left, sngTop)-(sngLeft, sngTop), lngColor
            Me.Line (sngLeft, sngTop)-(sngWidth, sngHeight), lngColor
        
        End If
        
    End Sub

    -Bạn có thể tham khảo Report.line method tại địa chỉ sau:
    http://msdn.microsoft.com/en-us/library/...e.15).aspx

    -Tham khảo thuộc tính Report.ScaleMode tại địa chỉ:
    http://msdn.microsoft.com/en-us/library/...e.15).aspx

    Cuối cùng là ví dụ minh họa:

    Download Demo

    Hình:
    [Hình: 1058634709_504904455_574_574.jpg]

    P/s: Nếu có thêm các nhóm (như GroupHeader...) thì bạn phải tùy biến cộng trừ thêm nhé 015

    Chúc bạn thành công!
  • RE: Gạch chéo report!

    ngochuong279 > 07-11-15, 11:13 PM

    Mình cũng muốn thiết kê như vậy nhưng hơi khó