Sau quy trình lập trình nhóm đã xây dựng được phần mềm hoàn chỉnh của mình, và chuyển giao cho bộ phận Test. Quá trình Test được thực hiện theo ba tiêu chí: Test hệ thống, test nhiệm thu và test theo tiêu chuẩn của khách hàng.
Kiểm tra những điều kiện khắc nghiệt nhất mà hệ thống có thể dễ chịu lỗi nhất. qua đó có thể xử lý triệt để những lỗi cấu trúc của chương trình. Đảm bảo phần mềm đạt hiệu quả cao nhất đóng góp vào hệ thống thông tin của công ty Fast nhằm cung cấp một giải pháp tối ưu cho hoạt động quản trị quan hệ khách hàng.
Giải pháp kỹ thuật cho cài đặt phần mềm tại công ty Fast: Mô hình hệ thống được phát triển theo kiến trúc Client - Server. Máy chủ cơ sở dữ liệu được cài đặt và cấu hình cơ sở dữ liệu để máy trạm có thể truy cập cơ sở dữ liệu và thực hiện thao tác ứng dụng. Hệ thống dữ liệu trước đây của công ty được cập nhật vào hệ thống mới.
Đối với máy trạm, yêu cầu cấu hình ở mức trung bình và nền tảng hệ điều hành Windows. Mỗi máy trạm được cài gói ứng dụng quản trị quan hệ khách hàng
CRM.V2k8.
Người viết đã nghiên cứu và quyết định sử dụng phương pháp chuyển đổi song song, có nghĩa là hệ thống mới hoạt động song song với hệ thống hiện tại trong thời gian một tháng để kiểm tra tính ổn định và chính xác của hệ thống mới, đồng thời cũng là thời gian để cho ban lãnh đạo công ty có thời gian thẩm định lại chất lượng của phần mềm.
Để chuẩn bị cho công tác triển khai được thành công, người viết đã tiến hành lập kế hoạch triển khai. Song song với công tác chuyển đổi dữ liệu, người viết cũng lên kế hoạch đào tạo người sử dụng. Kế hoạch đào tạo thực hiện trong vòng hai ngày. Đối với mỗi đối tượng khác nhau sẽ được đào tạo sử dụng ở mức độ khác nhau. Với ba đối tượng chính là: Ban lãnh đạo, Nhân viên kinh doanh, Nhân viên hỗ trợ tư vấn.
STT Đối tượng Thời gian Nội dung
1 Ban lãnh đạo ½ ngày Ý nghĩa và vai trò tổng quát của PM
2 Nhân viên kinh doanh
1 ngày Chức năng Quản lý khách hàng và Quản lý bán hàng
3 Nhân viên hỗ trợ tư vấn, bảo hành
½ ngày Chức năng Dịch vụ hỗ trợ sau bán hàng
KẾT LUẬN
Hiện nay, vai trò của tin học đang ngày càng chiếm ưu thế lớn trong cuộc sống hiện đại, việc vận dụng tin học vào đa số các lĩnh vực ngày càng phát triển. Qua thời gian đi thực tập cùng với kiến thức tích luỹ tại nhà trường em đã hiểu biết được thêm nhiều kiến thức thực tế. Từ đó, em đã áp dụng vào việc giải quyết một bài toán cụ thể là phát triển một chương trình quản lý ở một đơn vị cụ thể: “Phát triển phần mềm quản trị quan hệ khách hàng tại
công ty cổ phẩn phần mềm quản lý doanh nghiệp Fast”.
Chương trình được viết bằng ngôn ngữ lập trình Visual Basic 6.0 cùng hệ quản trị cơ sở dữ liệu MS Access 2k3, chạy trong môi trường Windows với nền tảng cấu hình chỉ yêu cầu ở mức cơ bản mang lại những lợi ích và hiệu quả kinh tế trong công tác quản trị quan hệ khách hàng. Chương trình cung cấp những giải pháp hiệu quả theo dõi các công việc được tiến hành với khách hàng, ai là người chịu trách nhiệm và đưa ra báo cáo kịp thời. Chương trình còn giúp cho việc tìm kiếm thông tin nhanh chóng.
Tuy nhiên, đây mới chỉ là bước đầu có tính khái quát, chương trình vẫn còn nhiều khiếm khuyết cần hoàn thiện trong thời gian tới về các mặt sau đây:
- Tối ưu hoá về tốc độ, kích thước và sự tiện dụng cho người dùng - Phát triển và bổ sung một số module sao cho phù hợp với nhu cầu
nâng cao hiệu quả hoạt động quản lý - Theo dõi khách hàng chi tiết hơn…
Trong thời gian thực tập, em đã nỗ lực để hoàn thành đề tài một cách tốt nhất trong phạm vi khả năng của mình. Tuy nhiên, do khả năng còn có hạn nên ứng dụng phần mềm quản trị quan hệ khách hàng còn nhiều hạn chế so với tiềm năng của một phần mềm quản trị quan hệ khách hàng - một trợ thủ đắc lực trong cạnh tranh giữa các doanh nghiệp kinh doanh.
Trong tương lai, để sản phẩm ngày càng hoàn thiện hơn đòi hỏi công ty phải có sự đầu tư công sức và thời gian để phát triển hệ thống ngày càng hoàn thiện với những công nghệ hiện đại như ngôn ngữ lập trình Visual Studio .NET, và hệ quản trị cơ sở dữ liệu MicroSoft Sql Sever. Với những công cụ này lập trình viên có thể phát triển hệ thống với những chức năng chuyên sâu cũng như quản lý hiệu quả khối dữ liệu khổng lồ của hệ thống quản trị quan hệ khách hàng. Đáp ứng yêu cầu quản lý nâng cao chất lượng dịch vụ khách hàng, đáp ứng cao nhất yêu cầu khách hàng đặt ra. Đó là cơ sở để thực hiện mục tiêu cùng khách hàng hướng tới thành công.
Một lần nữa, em xin gửi lời cảm ơn chân thành tới thầy giáo tiến sĩ Trương Văn Tú đã giúp đỡ, hướng dẫn tận tình trong thời gian em nghiên cứu chuyên đề này. Em cũng xin chân thành cảm ơn các anh chị trong công ty cổ phần phần mềm quản lý doanh nghiệp Fast đã giúp đỡ em hoàn thành kỳ thực tập.
TÀI LIỆU THAM KHẢO Tài liệu tiếng việt
[1]. Giáo trình Hệ thống thông tin quản lý, NXB Thống kê, Hà Nội - TS.Trương Văn Tú - TS. Trần Thị Song Minh.
[2]. Phân tích thiết kế và cài đặt hệ thống thông tin quản lý, NXB Thanh niên- TS. Hàn Viết Thuận,
[3]. Giáo trình Cơ Sở Dữ Liệu 1, 2 - NXB Thống Kê 2005 - Trần Công Uẩn - Trường Đại học Kinh Tế Quốc Dân - Khoa Tin học Kinh tế.
[4]. Nguyên lý các hệ cơ sở dữ liệu và cơ sở tri thức (Principles of Database and Knowledge-Base Systems), Jeffrey D. Ullman, NXB Thống Kê 1998.
[5]. Nguyên lý các hệ cơ sở dữ liệu phân tán, Trần Đức Quang biên dịch, NXB Thống Kê 1999.
[6]. Mocrosoft Visual Basic 6.0 và lập trình Cơ sở dữ liệu - Nguyễn Thị Ngọc Mai (Chủ biên), GSTS. Nguyễn Hữu Anh - NXB Lao động xã hội.
[7]. Sổ tay nhân viên FAST năm 2008 - Fast Software co.,Ltd
[8]. Giới thiệu giải pháp Fast Accounting, Fast Business - Fast Software co.,Ltd. [9]. www.fast.com.vn
Tài liệu tiếng anh
[1]. TaTaMcGraw Hill (Edition), Seagate Crystal Report 8, Tài liệu đào tạo của hãng Seagate.
[2]. Tạp chí Harvard Business Review - HBR số tháng 9 và 10 năm 1993 [3]. www.vtiger.com
PHỤ LỤC
Một số đoạn code của chương trình
Đăng nhập:
Private Sub cmdOK_Click() Dim rs As ADODB.Recordset Dim check As Boolean
Dim sql As String
Do While txtUsername.Text = ""
MsgBox "Tên đăng nhập không thể trống!" txtUsername.SetFocus Exit Sub Loop pw = Trim(txtPassword.Text) user = Trim(UCase(txtUsername.Text)) mdlgerneral.getConnection
Set rs = New ADODB.Recordset sql = "Select * from DMNhanVien"
rs.Open sql, Conn, adOpenStatic, adLockOptimistic check = False
rs.MoveFirst
Do While ((Not rs.EOF) And (check = False))
If (UCase(rs![TenTruyNhap]) = user And rs![Password] = pw) Then cq = rs![IDQuyen] check = True Else rs.MoveNext End If Loop
If dem < 3 Then
If check = False Then dem = dem + 1 cq = "0"
MsgBox "Tên đăng nhập hoặc mật khẩu sai!" txtUsername.SetFocus SendKeys "{Home}+{End}" Exit Sub Else dem = 0 mdlAddComBo.phanquyen
MsgBox "Chào mừng bạn " & rs.fields("BietDanh") & " đã đăng nhập thành công!"
LoginSucceeded = True Me.Hide
End If Else
MsgBox "Bạn đã đăng nhập sai ba lần xin vui lòng thử lại sau", ,"Thông báo" End
End If End Sub
Danh mục nhân viên
Option Explicit
Dim mbChangedByCode As Boolean Dim mvBookMark As Variant
Dim mbEditFlag As Boolean Dim mbAddNewFlag As Boolean Dim mbDataChanged As Boolean Dim sql As String
Dim rs As ADODB.Recordset Private Sub cbGioiTinh_Click() If CInt(cbGioiTinh.Text) = 0 Then Label1.Caption = "Nam" Else Label1.Caption = "Nữ" End If End Sub
Private Sub cbIDNhomNV_Click() Set rs = New ADODB.Recordset
sql = "Select * From DMNhomNV Where IDNhomNV Like '%" & cbIDNhomNV.Text & "%'"
rs.Open sql, Conn, adOpenKeyset, adLockOptimistic rs.MoveFirst
Label3.Caption = rs.fields("TenNhom") rs.Close
End Sub
Private Sub cbIDPhongban_Click() Set rs = New ADODB.Recordset
sql = "Select * From DMPhongban Where IDPhongBan Like '%" & cbIDPhongban.Text & "%'"
rs.Open sql, Conn, adOpenKeyset, adLockOptimistic rs.MoveFirst
Label4.Caption = rs.fields("TenPhongban") rs.Close
End Sub
Private Sub cbIDViTri_Click() Set rs = New ADODB.Recordset
rs.Open sql, Conn, adOpenKeyset, adLockOptimistic rs.MoveFirst
Label2.Caption = rs.fields("MoTa") rs.Close
End Sub
Private Sub Check1_Click()
If Check1.Value = 0 Then Check1.Caption = "Còn làm việc"
If Check1.Value = 1 Then Check1.Caption = "Không còn làm việc" End Sub
Private Sub Form_Load() mdlgerneral.KiemTraKN mdlgerneral.getConnection
sql = "Select * From DMNhanVien Order By IDNhanVien"
Adodc1.ConnectionString = "Provider=MSDataShape.1;Persist Security Info=False;Data Source=" & conStr & ";Data Provider=Microsoft.Jet.OLEDB.4.0" Adodc1.CommandType = adCmdUnknown Adodc1.RecordSource = sql Adodc1.Refresh cbGioiTinh.Clear cbGioiTinh.AddItem "0" cbGioiTinh.AddItem "1" Set rs = New ADODB.Recordset sql = "Select * From DMViTri"
rs.Open sql, Conn, adOpenKeyset, adLockOptimistic rs.MoveFirst
cbIDViTri.Clear Do While Not rs.EOF
cbIDViTri.AddItem rs.fields("IDViTri") rs.MoveNext
Loop rs.Close
Set rs = New ADODB.Recordset sql = "Select * From DMNhomNV"
rs.Open sql, Conn, adOpenKeyset, adLockOptimistic rs.MoveFirst
cbIDNhomNV.Clear Do While Not rs.EOF
cbIDNhomNV.AddItem rs.fields("IDNhomNV") rs.MoveNext
Loop rs.Close
Set rs = New ADODB.Recordset sql = "Select * From DMPhongBan"
rs.Open sql, Conn, adOpenKeyset, adLockOptimistic rs.MoveFirst
cbIDPhongban.Clear Do While Not rs.EOF
cbIDPhongban.AddItem rs.fields("IDPhongBan") rs.MoveNext Loop rs.Close cbGioiTinh.Text = Adodc1.Recordset.fields("GioiTinh") cbGioiTinh_Click If Adodc1.Recordset.fields("TrangThai") <> 0 Then Check1.Value = 1 Else Check1.Value = 0 End If
Check1_Click cbIDViTri.Text = Adodc1.Recordset.fields("IDViTri") cbIDViTri_Click cbIDNhomNV.Text = Adodc1.Recordset.fields("IDNhomNV") cbIDNhomNV_Click cbIDPhongban.Text = Adodc1.Recordset.fields("IDPhongBan") cbIDPhongban_Click mbDataChanged = False End Sub
Private Sub Form_Resize() On Error Resume Next
Adodc1.Width = Me.Width - 1500 Me.Width = 9855
Me.Height = 5220 End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If mbEditFlag Or mbAddNewFlag Then Exit Sub
Select Case KeyCode Case vbKeyEscape cmdClose_Click Case vbKeyEnd Adodc1.Recordset.MoveLast Case vbKeyHome Adodc1.Recordset.MoveFirst Case vbKeyUp, vbKeyPageUp If Shift = vbCtrlMask Then Adodc1.Recordset.MoveFirst Else
Adodc1.Recordset.MovePrevious Else:
Adodc1.Recordset.MoveFirst End If
End If
Case vbKeyDown, vbKeyPageDown If Shift = vbCtrlMask Then
Adodc1.Recordset.MoveLast Else
If Adodc1.Recordset.EOF = False Then Adodc1.Recordset.MoveNext Else: Adodc1.Recordset.MoveLast End If End If End Select End Sub
Private Sub Form_Unload(Cancel As Integer) Screen.MousePointer = vbDefault
End Sub
Private Sub Adodc1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'This will display the current record position for this recordset
If Adodc1.Recordset.BOF = True Then Adodc1.Recordset.MoveFirst If Adodc1.Recordset.EOF = True Then Adodc1.Recordset.MoveLast
If Adodc1.Recordset.fields("BietDanh") <> "" Then Adodc1.Caption = "Bản ghi: " & CStr(Adodc1.Recordset.fields("BietDanh"))
End Sub
Private Sub Adodc1_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'This is where you put validation code
'This event gets called when the following actions occur Dim bCancel As Boolean
Select Case adReason Case adRsnAddNew Case adRsnClose Case adRsnDelete Case adRsnFirstChange Case adRsnMove Case adRsnRequery Case adRsnResynch Case adRsnUndoAddNew Case adRsnUndoDelete Case adRsnUndoUpdate Case adRsnUpdate End Select
If bCancel Then adStatus = adStatusCancel End Sub
Private Sub cmdAdd_Click() On Error GoTo AddErr
Set rs = New ADODB.Recordset
rs.Open sql, Conn, adOpenKeyset, adLockOptimistic If rs.RecordCount <> 0 Then txtIDNguoiCapNhat.Text = rs.fields("IDNhanVien") Label5.Caption = rs.fields("BietDanh") End If txtIDNhanVien.SetFocus Adodc1.Recordset.AddNew
Adodc1.Caption = "Thêm bản ghi" mbAddNewFlag = True SetButtons False Exit Sub AddErr: MsgBox Err.Description End Sub
Private Sub cmdDelete_Click() On Error GoTo DeleteErr With Adodc1.Recordset .Delete
.MoveNext
If .EOF Then .MoveLast End With
Exit Sub DeleteErr:
MsgBox Err.Description End Sub
Private Sub cmdRefresh_Click() On Error GoTo RefreshErr Adodc1.Refresh
Exit Sub RefreshErr:
MsgBox Err.Description End Sub
Private Sub cmdEdit_Click() On Error GoTo EditErr
Adodc1.Caption = "Sửa thông tin NV:" mbEditFlag = True SetButtons False Exit Sub EditErr: MsgBox Err.Description End Sub
Private Sub cmdCancel_Click() On Error Resume Next
SetButtons True mbEditFlag = False mbAddNewFlag = False Adodc1.Refresh Adodc1.Recordset.MoveFirst mbDataChanged = False End Sub
Private Sub cmdUpdate_Click() On Error GoTo UpdateErr
Adodc1.Recordset.UpdateBatch adAffectAll If mbAddNewFlag Then
Adodc1.Recordset.Update End If
mbAddNewFlag = False SetButtons True mbDataChanged = False Exit Sub UpdateErr: MsgBox Err.Description End Sub
Private Sub cmdClose_Click() Unload Me
End Sub
Private Sub SetButtons(bVal As Boolean) cmdAdd.Visible = bVal
cmdEdit.Visible = bVal
cmdUpdate.Visible = Not bVal cmdCancel.Visible = Not bVal cmdDelete.Visible = bVal cmdClose.Visible = bVal cmdRefresh.Visible = bVal End Sub Tìm kiếm khách hàng Option Explicit Dim sql As String Dim Sodu As Integer
Dim sql1, sql2, sql3, sql4, sql5, sql6 As String Private Sub cmdAddCondition_Click()
Sodu = Sodu + 1 Makehide Sodu End Sub
Unload Me End Sub
Private Sub Form_Load() mdlgerneral.KiemTraKN
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & conStr & ";Persist Security Info=False"
Adodc1.CommandType = adCmdUnknown Adodc1.RecordSource = "tbKhachHang" Adodc1.Refresh mdlAddComBo.ConditionKH cbCondition1 mdlAddComBo.ConditionKH cbCondition2 mdlAddComBo.ConditionKH cbCondition3 mdlAddComBo.OperatorKH cbOperator1 mdlAddComBo.OperatorKH cbOperator3 mdlAddComBo.OperatorKH cbOperator5 cbOperator2.AddItem " AND " cbOperator2.AddItem " OR " cbOperator4.AddItem " AND " cbOperator4.AddItem " OR " End Sub
Sub Makehide(du As Integer) If du Mod 3 = 0 Then cbOperator2.Visible = False cbOperator3.Visible = False cbOperator4.Visible = False cbOperator5.Visible = False cbCondition2.Visible = False cbCondition3.Visible = False txtKeyword2.Visible = False
txtKeyword2.Visible = False txtKeyword3.Visible = False Else If du Mod 3 = 1 Then cbOperator2.Visible = True cbOperator3.Visible = True cbCondition2.Visible = True txtKeyword2.Visible = True Else cbCondition3.Visible = True cbOperator4.Visible = True cbOperator5.Visible = True txtKeyword3.Visible = True End If End If End Sub
Private Sub Form_Resize() Me.Width = 10710 Me.Height = 5235 End Sub
Private Sub txtKeyword1_Change() txtKeyword2.Text = ""
txtKeyword3.Text = "" If cbCondition1.Text = "" Then
MsgBox "Mời bạn chọn điều kiện tìm kiếm!" cbCondition1.SetFocus
SendKeys "%{Down}" Exit Sub
If cbOperator1.Text = "" Then
MsgBox "Mời bạn chọn toán tử tìm kiếm!" cbOperator1.SetFocus
SendKeys "%{Down}" Exit Sub
End If
sql1 = "Select * From tbKhachHang Where " & cbCondition1.Text & " " & cbOperator1.Text & " '%" & txtKeyword1.Text & "%'"
Adodc1.RecordSource = sql1 Adodc1.Refresh
Label3.Caption = "Tìm thấy " & Adodc1.Recordset.RecordCount & " bản ghi phù hợp điều kiện!"
End Sub
Private Sub txtKeyword2_Change() txtKeyword3.Text = ""
If cbOperator2.Text = "" Then
MsgBox "Mời bạn chọn toán tử tìm kiếm!" cbOperator2.SetFocus
SendKeys "%{Down}" Exit Sub
End If
If cbCondition2.Text = "" Then
MsgBox "Mời bạn chọn điều kiện tìm kiếm!" cbCondition2.SetFocus
SendKeys "%{Down}" Exit Sub
End If
MsgBox "Mời bạn chọn toán tử tìm kiếm!" cbOperator3.SetFocus
SendKeys "%{Down}" Exit Sub
End If
sql2 = sql1 & " " & cbOperator2.Text & " " & cbCondition2.Text & " " & cbOperator3.Text & " '%" & txtKeyword2.Text & "%'"
Adodc1.RecordSource = sql2 Adodc1.Refresh
Label3.Caption = "Tìm thấy " & Adodc1.Recordset.RecordCount & " bản ghi phù hợp điều kiện!"
End Sub
Private Sub txtKeyword3_Change() If cbOperator4.Text = "" Then
MsgBox "Mời bạn chọn toán tử tìm kiếm!" cbOperator4.SetFocus
SendKeys "%{Down}" Exit Sub
End If
If cbCondition3.Text = "" Then
MsgBox "Mời bạn chọn điều kiện tìm kiếm!" cbCondition3.SetFocus
SendKeys "%{Down}" Exit Sub
End If
If cbOperator5.Text = "" Then
MsgBox "Mời bạn chọn toán tử tìm kiếm!" cbOperator5.SetFocus
Exit Sub End If
sql3 = sql2 & " " & cbOperator4.Text & " " & cbCondition3.Text & " " & cbOperator5.Text & " '%" & txtKeyword3.Text & "%'"
Adodc1.RecordSource = sql3 Adodc1.Refresh
Label3.Caption = "Tìm thấy " & Adodc1.Recordset.RecordCount & " bản ghi phù hợp điều kiện!"
End Sub
Hiển thị báo cáo
Private Sub cmdRpt_Click() On Error GoTo Loi
Dim res As ADODB.Recordset Set res = New ADODB.Recordset
sql = "SELECT DMChiTietHD.IDChiTiet, DMChiTietHD.IDBoPhan,
DMChiTietHD.IDNhanVien, DMChiTietHD.NgayBatDau,
DMChiTietHD.NgayKetThuc, DMChiTietHD.VaiTro,
DMChiTietHD.TyLeHoanThanh From DMChiTietHD Where IDHopDong Like '%" & txtIDHopDong.Text & "%'"
res.Open sql, Conn, adOpenKeyset, adLockOptimistic MsgBox res.fields("IDNhanVien")
rpt.SetTablePrivateData 0, 3, res
rpt.ReportFileName = App.Path + "\Reports\rptHopDong.rpt" rpt.Formulas(0) = "IDNhomHD='" & cbIDNhomHD.Text & "'" rpt.Formulas(1) = "IDHopDong='" & txtIDHopDong.Text & "'" rpt.Formulas(2) = "IDKhachHang='" & cbIDKhachHang.Text & "'" rpt.Formulas(3) = "TieuDe='" & txtTieuDe.Text & "'"
rpt.Formulas(4) = "DienGiai='" & txtDienGiai.Text & "'" rpt.Formulas(5) = "TongGiaTri='" & txtTongGiaTri.Text & "'"
rpt.Formulas(6) = "TongChiPhi='" & txtTongChiPhi.Text & "'" rpt.Formulas(7) = "LoiNhuan='" & txtLoiNhuan.Text & "'"
rpt.Formulas(8) = "IDTinhTrangHD='" & cbIDTinhtrangHD.Text & "'" rpt.Formulas(9) = "PhuongThucTT='" & txtPhuongThucTT.Text & "'" rpt.Formulas(10) = "ThoiHanTT='" & txtThoiHanTT.Text & "'" rpt.Formulas(11) = "IDTienTe='" & cbIDTienTe.Text & "'" rpt.Formulas(12) = "IDNhanVien='" & cbIDNhanVien.Text & "'" rpt.Formulas(13) = "NgayKy='" & txtNgayKy.Text & "'"
rpt.Formulas(14) = "tgTrienKhai='" & txtTGTrienKhai.Text & "'" rpt.Formulas(15) = "NgayBD='" & txtNgayBD.Text & "'"
rpt.Formulas(16) = "NgayKT='" & txtNgayKT.Text & "'"
rpt.Formulas(17) = "IDNguoiPhuTrach1='" & cbIDNguoiPhuTrach1.Text & "'" rpt.Formulas(18) = "IDNguoiPhuTrach2='" & cbIDnguoiPhuTrach2.Text & "'" rpt.Formulas(19) = "DieuKienKhac='" & txtDieuKienKhac.Text & "'"
rpt.PrintReport res.Close Exit Sub Loi:
MsgBox "Đã có lỗi khi in hoá đơn. Xin xem lại trợ giúp", vbOKOnly, "Thông báo" Unload Me