Thực hành lập trình CSDL với VB.net - 28

Hình 111 Cửa sổ Select Resource Nhấn vào nút Import để lựa chọn hình ành phù 1


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!

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 2

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 3

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 4

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 5

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)

.....

⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 16/07/2022