Sự kiện (event) và các thủ tục sự kiện (event procedure) - phần 2

phatnq2002

Tích cực giảm cân...
Hội viên mới
Các sự kiện xảy ra trên report

Ngoài các sự kiện xảy ra tương tự như với form, report cũng có một số sự kiện mà bạn có thể điều khiển nó nhằm làm cho report của bạn có thể "linh hoạt" hơn.

1. Sự kiện NoData:
Sự kiện xảy ra sau khi report đã được định dạng để chuẩn bị in nhưng không có dữ liệu nào được tập hợp (recordsource của nó có record count = 0).

Dựa trên sự kiện này, chúng ta có thể cho hủy in ra một report trắng.

Thuộc tính sự kiện có tên là OnNoData.
Thủ tục sự kiện có tên là Report_NoData. Có một tham số quen thuộc là Cancel.
Khi Cancel = True thì việc in report sẽ được hủy. Tuy nhiên các bạn cần lưu ý. Việc hủy in ở đây sẽ có tác động gây ra một lỗi và sẽ xuất hiện một thông báo lỗi. Để tắt thông báo này, bạn nên gọi report trong code và dùng mẫu sau:
On Error Resume Next
DoCmd.OpenReport "reportname", acViewNormal (hoặc acViewPreview)
On Error Goto 0


Dưới đây là một đoạn code dùng để thông báo cho người sử dụng biết là việc in sẽ bị hủy vì không có dữ liệu để in:

Private Sub Report_NoData(Cancel As Integer)
MsgBox "Bản in không có dữ liệu, việc in sẽ bị hủy. " & _
chr(13) & "Xin vui lòng kiểm tra dữ liệu nguồn của bản in, " & _
"và chắc chắn là điều kiện lọc (nếu có) được nhập đúng." vbOKOnly + vbInformation
Cancel = True
End Sub


2. Sự kiện Page:
Sự kiện xảy ra sau khi trang đã định dạng để chuẩn bị in.
Điều khiển sự kiện này, chúng ta có thể thêm thắt vào một vài chi tiết gì đó cho trang khi in ra.
Thuộc tính sự kiện có tên là OnPage.
Thủ tục sự kiện có tên là Report_Page. Không có tham số.
Sau đây là ví dụ để vẽ một đường viền quanh trang:
Private Sub Report_Page()
Me.Line(0, 0)-(Me.ScaleWidth, Me.ScaleHeight), , B
End Sub


Đối với các vùng của report: Report Header/Footer, Detail, Page Header/Footer, ..., chúng ta còn có một số sự kiện tác động lên chúng.

3. Sự kiện Format:
Sự kiện xảy ra khi Access đang "thu xếp" xem cái gì sẽ được in ra trong khu vực, nhưng trước khi khu vực đó được định dạng để in ra.
Khi điều khiển sự kiện này, bạn có thể thực hiện những tính toán nào đó, định dạng lại những gì sẽ được in ra, ví dụ sẽ in logo công ty ở tất cả các trang, trừ trang đầu, khu vực sẽ có màu gì khi thỏa mãn điều kiện gì, ...
Thuộc tính sự kiện có tên OnFormat.
Thủ tục sự kiện có tên sectionname_Format. Thủ tục này có hai tham số:
Cancel: dễ hiểu quá rồi.
FormatCount: một số xác định xem sự kiện xảy ra mấy lần trên khu vực đó. mặc định là 1, nó chỉ lớn hơn 1 khi giả định nội dung của khu vực in không thể in cùng một trang, ví dụ nếu nội dung khu vực phải in lấn sang trang sau thì nó sẽ có giá trị là 2.

VD sau sẽ cho hiển thị một hình nào đó ví dụ như :biggrin: chẳng hạn (giả sử control chứa hình có tên là hinh) nếu một đại diện bán hàng đạt doanh thu từ 10 triệu/ tháng, ngược lại thì không:

Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
If doanhthu > 10000000 Then
hinh.Visible = True
Else
hinh.Visible = False
End If
End Sub


4. Sự kiện Print:
Sự kiện xảy ra khi Access đã định dạng xong những gì sẽ được in ra trong khu vực, nhưng trước khi khu vực đó được để in ra.
Sự kiện chỉ xảy ra cho những khu vực thực sự sẽ được in ra.
Với khu vực Detail, sự kiện Print xảy ra cho mỗi record trong khu vực ngay trước khi Access in dữ liệu của record.
Với khu vực Group header, sự kiện xảy ra cho mỗi nhóm mới, và thủ tục sự kiện sẽ truy cập đến dữ liệu của group header và dữ liệu trong record đầu tiên của khu vực Detail.
Với group footer, và thủ tục sự kiện sẽ truy cập đến dữ liệu của group footer và dữ liệu trong record cuối cùng của khu vực Detail.
Bạn có thể điều khiển sự kiện Print khi bạn muốn tính toán tổng số trang thật sự được in và cho in lên page header hoặc footer.
Thuộc tính sự kiện có tên là OnPrint.
Thủ tục sự kiện có tên là sectionname_Print. Có hai tham số:
Cancel: thôi khỏi nói nữa.
PrintCount: một số xác định xem sự kiện xảy ra mấy lần trên khu vực đó. mặc định là 1, nó chỉ lớn hơn 1 khi giả định nội dung của khu vực in không thể in cùng một trang, ví dụ nếu nội dung khu vực phải in lấn sang trang sau thì nó sẽ có giá trị là 2.
 
Ðề: Sự kiện (event) và các thủ tục sự kiện (event procedure) - phần 2

Cám ơn Phatnq2002, bạn cho mình hỏi một chút về format border của report nhé

mình có 2 cột Tên và Địa chỉ. Tên thì một dòng, địa chỉ 3 dòng. Làm sao để khung bao của cột tên tự giãn ra bằng cột địa chỉ. Thanks bạn nhé :hurray:
 
Ðề: Sự kiện (event) và các thủ tục sự kiện (event procedure) - phần 2

Cám ơn Phatnq2002, bạn cho mình hỏi một chút về format border của report nhé

mình có 2 cột Tên và Địa chỉ. Tên thì một dòng, địa chỉ 3 dòng. Làm sao để khung bao của cột tên tự giãn ra bằng cột địa chỉ. Thanks bạn nhé :hurray:

Xin lỗi bạn, cái vụ này chưa làm + chưa nghiên cú, cho nên xin khất cho lần sau.
:ack2:
 
Ðề: Sự kiện (event) và các thủ tục sự kiện (event procedure) - phần 2

Cám ơn Phát mình đã làm dc rồi he he
 
Ðề: Sự kiện (event) và các thủ tục sự kiện (event procedure) - phần 2

Cảm ơn bài viết của bạn nhiều. cho mình hỏi làm thế nào để report hiển thị giá trị theo hàng dọc và hàng ngang?. ví dụ :
mã hàng Ngà Trắng Ngọc
A 230 200 100
B 20 10 30
C

Cảm ơn bạn nhiều :hypo:
 

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Cách làm file Excel quản lý lãi vay

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top