Hình 111. Cửa sổ Select Resource.
Nhấn vào nút Import để lựa chọn hình ành phù hợp cho nút lệnh. Nhấn OK để thêm ảnh vào nút lệnh.
+ Các giá trị khác để mặc định.
Thao tác tương tự với các nút lệnh “In ấn”, “Kết thúc”. Tiến hành viết mã lệnh cho các nút như sau:
Mã lệnh khi nhấn vào nút “<<”:
Private Sub ButtonDauTien_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonDauTien.Click 'Chuyển đến trang đầu tiên của hóa đơn.
Có thể bạn quan tâm!
- Danh Sách Các Trường Đặc Biệt Trong Crystal Report.
- Thực hành lập trình CSDL với VB.net - 26
- Thực hành lập trình CSDL với VB.net - 27
- 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 - 30
- Thực hành lập trình CSDL với VB.net - 31
Xem toàn bộ 318 trang tài liệu này.
CrystalReportViewer1.ShowFirstPage() End Sub
Mã lệnh khi nhấn vào nút “<”:
Private Sub ButtonTruoc_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonTruoc.Click 'Chuyển về phía trước 1 trang.
CrystalReportViewer1.ShowPreviousPage() End Sub
Mã lệnh khi nhấn vào nút “>”:
Private Sub ButtonSau_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonSau.Click 'Chuyển về sau một trang.
CrystalReportViewer1.ShowNextPage() End Sub
Mã lệnh khi nhấn vào nút “>>”:
Private Sub ButtonCuoiCung_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCuoiCung.Click
'Chuyển đến trang cuối cùng của hóa đơn CrystalReportViewer1.ShowLastPage()
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
If MessageBox.Show("Bạn có chắc chắn muốn đóng form hiện tại.", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
Me.Close() End If
End Sub
Mã lệnh khi nhấn vào nút “Tìm kiếm”:
Private Sub ButtonTimKiem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonTimKiem.Click
If String.IsNullOrEmpty(TextBoxSoHoaDon.Text) Then MessageBox.Show("Số hóa đơn không được để trống và
phải là số", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.TextBoxSoHoaDon.Focus()
Else
'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.SoHieuHD = " & TextBoxSoHoaDon.Text
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 số hiệu hóa đơn
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 ButtonTimKiem.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() & "HoaDonBanHang.rpt")
'Thiết lập nguồn dữ liêu mới cho giấy mời
myReport.SetDataSource(ds.Tables(0).DefaultView) 'Hiển thị báo cáo
CrystalReportViewer1.ReportSource = myReport '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 ButtonTimKiem.Enabled = True
Else
'Thông báo
MessageBox.Show("Số hiệu hóa đơn không đúng", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
TextBoxSoHoaDon.Focus()
End If cn.Close()
End Using
End Using End If
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 String.IsNullOrEmpty(TextBoxSoHoaDon.Text) Then MessageBox.Show("Số hóa đơn không được để trống và
phải là số", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.TextBoxSoHoaDon.Focus()
Else
'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.SoHieuHD = " & TextBoxSoHoaDon.Text
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 số hiệu hóa đơn
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()
& "HoaDonBanHang.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("Số hiệu hóa đơn không đúng", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
TextBoxSoHoaDon.Focus()
End If cn.Close()
End Using End Using
End If End Sub
3. Kết quả thiết kế
Hình 112. Kết quả thiết kế form xem trước hóa đơn
4. Kết quả thực thi:
Hình 113. Kết quả thực thi form xem trước hóa đơn
Công việc 3. Thiết kế báo cáo thống kê bán hàng theo người bán.
a) Sử dụng Crystal Report thiết kế báo cáo thống kê các hóa đơn bán phân nhóm theo từng người bán theo mẫu sau
1. Phân tích yêu cầu
Theo yêu cầu trên ta thấy rằng phần thông tin hiển thị trên báo cáo được chia thành các nhóm có đánh số thứ tự và tiêu đề mỗi nhóm chính là tên của người bán hàng.
Phần danh sách các đơn hàng của mỗi người bán hàng hiển thị các thông tin về hóa đơn mỗi lượt bán hàng trong đó có một cột hiển thị thành tiền không có trong bảng cơ sở dữ liệu. Số thứ tự của các dòng được đánh lần lượt từ 1 đến hết. Khi bắt đầu một nhóm mới sẽ được đặt lại là 1.
Cuối trang hiển thị phần thông tin về trang hiện tại trên tổng số trang báo cáo. Các thông tin về ngày tháng năm được lấy từ đồng hồ hệ thống.
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ư trong phần hướng dẫn thao tác ở công việc 2 để tạo mới một báo cáo có tên BaoCaoBanHangTheoNguoiBanHang.rpt
Nhấn phải chuột vào phần Report Header chọn Insert / Text Object và nhập giá trị “CỬA HÀNG THƯƠNG MẠI ABC” cho điều khiển này. Thao tác tương tự để tạo đối tượng Text Object có nội dung “BÁO CÁO THỐNG KÊ BÁN HÀNG”. Điều chỉnh vị trí và font chữ của đối tượng Text Object này cho phù hợp.
Nhấn phải chuột vào phần Report Footer chọn Insert / Text Object và nhập nội dung “Ngày tháng năm” để tạo phần hiển thị ngày in báo cáo. Mặc dù trong Crystal Report có sẵn một đối tượng đặc biệt để hiển thị ngày hiện tại của hệ thống, tuy nhiên đối tượng này hiển thị cả chuỗi ngày tháng năm không đúng yêu cầu của chủ cửa hàng. Để chèn thêm các giá trị ngày tháng năm được lấy từ đồng hồ hệ thống phải tạo ra các biến lưu các giá trị này và chèn vào vị trí thích hợp trên báo cáo.
Để tạo ra các biến chứa ngày, tháng, năm thực hiện các thao tác sau:
Nhấn phải chuột vào Formula Fields ở cửa sổ Field Explorer chọn New. Xuất hiện cửa sổ Formula Name. Nhập “ngay” vào ô Name và nhấn OK.
Hình 114. Cửa sổ Formula Name
Xuất hiện cửa sổ Formula Workshop.
Hình 115. Cửa sổ Formula Workshop
Nhập công thức tính ngày hiện tại vào khung soạn thảo công thức:
Day (CurrentDate)
Nhấn “Save and close” để lưu biến hiển thị ngày hiện tại.
Thực hiện thao tác tương tự để tạo các biến “thang” chứa giá trị tháng hiện tại, “năm” chứa giá trị năm hiện tại.
Công thức tính tháng hiện tại
Month (CurrentDate)