4. Kết quả thực thi
Hình 121. Kết quả thực thi báo cáo bán hàng
b) Thiết kế form điều khiển việc xem in báo cáo thống kê bán hàng theo mẫu sau:
Hình 122. Form điều khiển in báo cáo bán hàng
1. Phân tích yêu cầu
Có thể bạn quan tâm!
- Thực hành lập trình CSDL với VB.net - 27
- Thực hành lập trình CSDL với VB.net - 28
- Các Hàm Để Tính Toán Với Nhóm Của Crystal Report
- Thực hành lập trình CSDL với VB.net - 31
- Thực hành lập trình CSDL với VB.net - 32
- Thực hành lập trình CSDL với VB.net - 33
Xem toàn bộ 318 trang tài liệu này.
Theo yêu cầu trên thì cần một form chứa các điều khiển:
Điều khiển có nội dung “In báo cáo bán hàng”, “In theo”, “Người bán hàng” là các Label
Điều khiển chọn lựa “Tất cả người bán hàng”, “Từng người bán hàng” là các Radio Button.
Các nút lệnh “Xem trước, In ấn, Kết thúc” là các điều khiển Button.
Ngoài ra cần phải thiết kế một form cho phép xem thử báo cáo trước khi in.
2. Hướng dẫn thao tác
Để thực hiện yêu cầu trên, thực hiện các thao tác tương tự như ở phần công việc 2 để tạo form frmInBaoCaoBanHang với các điều khiển và nội dung như yêu cầu.
Viết mã lệnh cho các điều khiển này như sau:
Lưu ý: Để thao tác với Crystal Report người lập trình phải đưa vào các thư viện bằng đoạn mã sau:
Imports CrystalDecisions.CrystalReports.Engine
Mã lệnh khi lựa chọn vào RadioButtonTatCa
Private Sub RadioButtonTatCa_CheckedChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs) Handles RadioButtonTatCa.CheckedChanged
ComboBoxNguoiBanHang.DataSource = Nothing ComboBoxNguoiBanHang.Enabled = False
End Sub
Mã lệnh khi lựa chọn vào RadioButtonTungHD
Private Sub RadioButtonTungHD_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButtonTungHD.CheckedChanged
'Khai báo đối tượng và biến cần sử dụng Dim sqlTimKiem As String
'Tìm kiếm tất cả các người bán hàng có trong bảng bán hàng.
sqlTimKiem = "SELECT DISTINCT NguoiBanHang FROM tblBanHang GROUP BY NguoiBanHang"
'Thực hiện tìm kiếm và đưa kết quả ra lưới Using cn As New SqlConnection("Data
Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User
ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn) cmd.CommandType = CommandType.Text cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd) da.Fill(ds) ComboBoxNguoiBanHang.DataSource =
ds.Tables(0).DefaultView
ComboBoxNguoiBanHang.DisplayMember =
"NguoiBanHang"
ComboBoxNguoiBanHang.ValueMember = "NguoiBanHang"
cn.Close() End Using
End Using ComboBoxNguoiBanHang.Enabled = True
End Sub
Mã lệnh khi nhấn vào nút Kết thúc
Private Sub ButtonKetThuc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonKetThuc.Click
'Đóng form Me.Close()
End Sub
Mã lệnh khi nhấn vào nút Xem trước
Private Sub ButtonXemTruoc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonXemTruoc.Click
'Khai báo một form kiểu frmXemTruocBaoCaoBanHang
Dim frm As New frmXemTruocBaoCaoBanHang() 'Hiển thị form ở trên cùng
frm.ShowDialog() End Sub
Mã lệnh khi nhấn vào nút In ấn
Private Sub ButtonInAn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonInAn.Click
If RadioButtonTatCa.Checked Then 'Chuyển trạng thái con trỏ Me.Cursor = Cursors.WaitCursor 'Tạm khóa nút In ấn ButtonInAn.Enabled = False
'In tất cả các khách hàng
'Khai báo một đối tượng Crystal Report Dim myReport As New ReportDocument() 'Tải báo cáo từ đường dẫn chỉ định
myReport.Load(Application.StartupPath.ToString() & "BaoCaoBanHangTheoNguoiBanHang.rpt")
'Thiết lập tên máy in cần in (nếu cần) myReport.PrintOptions.PrinterName = "Foxit
Reader PDF Printer"
'In giấy mời ra máy in chỉ định myReport.PrintToPrinter(1, True, 0, 0) 'Trả trạng thái con trỏ về mặc định Me.Cursor = Cursors.Default
'Tạm khóa nút In ấn ButtonInAn.Enabled = True
Else
If RadioButtonTungHD.Checked Then 'Kiểm tra mã khách hàng có tồn tại không 'Khai báo đối tượng và biến cần sử dụng Dim sqlTimKiem As String
'Thiết lập câu lệnh tìm kiếm theo mã khác hàng sqlTimKiem = "SELECT tblBanHang.*,
tblKhachHang.HoTen, tblKhachHang.DienThoai,
tblKhachHang.DiaChi, tblMatHang.TenMatHang, tblMatHang.DVT, tblChiTietHoaDon.SoLuong, tblChiTietHoaDon.DonGia, tblChiTietHoaDon.SoLuong * tblChiTietHoaDon.DonGia AS ThanhTien FROM tblBanHang, tblKhachHang, tblMatHang, tblChiTietHoaDon WHERE tblBanHang.MaKH = tblKhachHang.MaKH AND tblBanHang.SoHieuHD = tblChiTietHoaDon.SoHieuHD AND tblMatHang.MaMH = tblChiTietHoaDon.MaMH AND tblBanHang.NguoiBanHang LIKE '%" & ComboBoxNguoiBanHang.SelectedValue.ToString() & "%'"
Using cn As New SqlConnection("Data Source=PHANDUCTHIEN;Initial Catalog=QLYBH;User ID=sa;Password=admin123@")
Using cmd As New SqlCommand(sqlTimKiem, cn)
cmd.CommandType = CommandType.Text cn.Open()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter(cmd) da.Fill(ds)
'Nếu tồn tại đơn hàng phù hợp
If ds.Tables(0).Rows.Count > 0 Then 'Chuyển trạng thái con trỏ Me.Cursor = Cursors.WaitCursor 'Tạm khóa nút In ấn ButtonInAn.Enabled = False
'In giấy mời ra máy in
'Khai báo một đối tượng Crystal Report Dim myReport As New
ReportDocument()
'Tải báo cáo từ đường dẫn chỉ định
myReport.Load(Application.StartupPath.ToString() & "BaoCaoBanHangTheoNguoiBanHang.rpt")
'Thiết lập nguồn dữ liêu mới cho giấy
mời
myReport.SetDataSource(ds.Tables(0).DefaultView)
'Thiết lập tên máy in cần in (nếu cần) myReport.PrintOptions.PrinterName =
"Foxit Reader PDF Printer"
'In giấy mời ra máy in chỉ định myReport.PrintToPrinter(1, True, 0, 0) 'Trả trạng thái con trỏ về mặc định Me.Cursor = Cursors.Default
'Tạm khóa nút In ấn ButtonInAn.Enabled = True
Else
'Thông báo MessageBox.Show("Không tìm thấy",
"Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If cn.Close()
End Using End Using
End If End If
End Sub
Để thiết kế form xem thử báo cáo thực hiện như sau:
Tạo mới một form giống các phần trên. Thiết lập các thuộc tính về tiêu đề, nút phóng to, thu nhỏ, chế độ hiển thị, vị trí khi hiển thị của form ở cửa sổ Properties.
Từ cửa sổ Toolbox kéo điều khiển Crystal Report Viewer vào form vừa tạo.
Thiết lập thuộc tính các thuộc tính cho điều khiển này như sau:
Name: CrystalReportViewer1.
BorderStyle: FixedSingle.
Dock: Fill.
Các thuộc tính khác đặt mặc định.
Tiếp theo, tiến hành thiết lập nguồn cho điều khiển Crystal Report Viewer như sau: Nhấn vào mũi tên quay xuống ở thuộc tính ReportSource và chọn báo cáo vừa xây dựng để thiết lập nó hiển thị ở trong Crystal Report Viewer.
Hình 123. Cửa sổ thiết kế form xem trước báo cáo.
Có thể chọn nhiều Report cho thuộc tính ReportSource. Tuy nhiên, tại một thời điểm Crystal Report Viewer chỉ có thể hiển thị được duy nhất nội dung của một Report. Để lựa chọn báo cáo nào sẽ hiển thị người lập trình sẽ viết mã lệnh trong sự kiện tải form hoặc trong sự kiện nhấp vào một nút lệnh nào đó trên form.
Lưu ý: Cần phải thêm các thư viện bên dưới để thao tác với báo cáo xây dựng bằng Crystal Report.
Imports CrystalDecisions.CrystalReports.Engine Imports CrystalDecisions.Shared