Phần mềm quản lý bán hàng tại Công ty đầu tư & phát triển phần mềm Kế toán Asia

Lời nói đầu Trong những năm gần, đây ngành công nghệ thông tin đã phát triển như vũ bão, Thế kỷ 21 là thế kỷ công nghệ thông tin .Từ một nguồn tài nguyên tiềm tàng, thông tin đã trở thành một nguồn tài nguyên thực sự và nó đã trở thành một hàng hoá đặc biệt. Việc tận dụng nguồn tài nguyên này đã tạo nên một bước phát triển to lớn trong lực luợng xản suất, cơ sở hạ tầng, kinh tế xã hội, cấu trúc kinh tế ,cấu trúc lao động và cách thức quản lý kinh tế xã hội . Trong lĩnh vực máy tính , nhữn

doc153 trang | Chia sẻ: huyen82 | Lượt xem: 1219 | Lượt tải: 0download
Tóm tắt tài liệu Phần mềm quản lý bán hàng tại Công ty đầu tư & phát triển phần mềm Kế toán Asia, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
g thành tựu về khoa học và công nghệ làm cho các sản phẩm máy tính ngày càng phát triển theo hướng hiện đại, chi phí thấp, khả năng tính toán nâng cao. Sự ra đời và phát triển của máy tính thực sự đã thở thành một cuộc cánh mạng vĩ đại. Chúng ta đã thấy Thông tin ngày càng phong phú đến mức không thể xử lý bằng phương pháp và công cụ cổ điển .Để xử lý được lượng thông tin lớn như vậy nghĩa là khai thác được nguồn tài nguyên quan trọng đó, đòi hỏi phải có những phương pháp và công cụ mới đó chính là các giải về tin học. Xã hội ngày càng phát triển thì nhu cầu ứng dụng tin học ngày càng lớn và ngược lại những thành tựu tin học sẽ tác động trở lại, tạo điều kiện phát triển nhanh chóng cho sản xuất và kinh doanh. Việc ứng dụng tin học là nhằm thực hiện tăng năng suất, hiệu quả trong việc xử lý thông tin phức tạp, trong quá trình nghiên cứu điều tra, điều khiển, các hoạt động quản lý kinh doanh…, tổ chức khai thác các hệ thống tin học ở mọi mức độ . ứng dụng tin học trong công tác quản lý là một trong những hiệu quả của tin học nhằm giảm nhẹ đến mức tối đa sự tham gia của cơ bắp , tiết kiệm thời gian tìm kiếm thông tin, làm hẹp không gian lưu trữ, hệ thống hoá và cụ thể hoá lượng thông tin theo nhu cầu của người xử dụng . Trong thời đại ngày nay tin học đã chứng tỏ được ưu thế của mình trong nền kinh tế quốc dân, nó đã thúc đẩy và hỗ trợ cho các ngành khác phát triển vượt bậc. Cuối cùng tôi xin trân thành cảm ơn thầy giáo Đặng Thế Vinh đã tận tình giúp đỡ tôi trong quá trình thực tập và hoàn thiện đề tài này. Tôi cũng xin trân thành cảm ơn anh Phạm Văn Lộc phó giám đốc và toàn thể các anh lập trình viên đẫ tận tình giúp đỡ tôi và đóng góp những ý kiến quý báu và tạo mọi điều kiện về cơ sở vật chất kỹ thuật, thuận lợi cho tôi trong quá trình thực tập tại phòng phần mềm thuộc Công ty đầu tư và phát triển phần mềm kế toán Asia. Chương I. Hệ thống thông tin quản lý Bán hàng Các giai đoạn xây dựng hệ thống thông tin quản lý: Việc xây dựng hệ thống thông tin quản lý bao gồm 7 giai đoạn. Mỗi giai đoạn bao gồm nhiều công đoạn khác nhau: Giai đoạn 1: Đánh giá yêu câu: Đánh giá yêu cầu có mục đích cung cấp cho lãnh đạo, tổ chức hoặc hội đồng giám đốc những dữ liệu đích thực để ra quyết định về thời cơ, tính hiệu quả và khả thi của một dự án xây dựng hệ thống thông tin quản lý. Giai đoạn này gồm các công đoạn sau: 1 . Lập kế hoạch đánh gia yêu cầu. 2. Làm rõ yêu cầu. 3. Đánh giá khả năng thực thi. 4. Báo cáo đánh giá yêu cầu. Giai đoạn 2: Phân tích chi tiết: Nhằm hiểu rõ vấn đề đang nghiên cứu, xác định những nguyên nhân đích thực của vấn đề đó, xác định đòi hỏi và những giàng buộc áp đặt đối với hệ thống và xác định những mục tiêu mà hệ thống thông tin mới phải đạt được. Trên cơ sở nội dung báo cáo phân tích chi tiết sẽ quyết định tiếp tục tiến hành hay thôi phát triển hệ thống mới. Giai đoạn này gồm các công đoạn sau: 1. Lập kế hoạch phân tích chi tiết. 2. Nghiên cứu môi trường của hệ thống đang tồn tại. 3. Nghiên cứu hệ thống thực tại. 4. Đưa ra chuẩn đoán và xác định các yếu tố giải pháp . 5. Đánh giá lại tính khả thi. 6. Thay đổi đề xuất dự án. 7. Báo cáo phân tích chi tiết. Giai đoạn 3: Thiết kế logic Giai đoạn này xác định tất cả các thành phần logic của một hệ thống thông tin, cho phép loại bỏ các vấn đề của hệ thống thực tế và cho phép đạt được những mục tiêu đã đặt ra ở giai đoạn trước. Mô hình logic của hệ thống mới sẽ bao gồm thông tin mà hệ thống mới sẽ xản sinh ra, nội dung của Cơ sở dữ liệu, các sử lý và hợp thức hoá sẽ phải thực hiện và các dữ liệu sẽ được nhâp vào. Gồm các công đoạn sau: 1. Thiết kế cơ sở dữ liệu 2. Thiết kế sử lý 3 . Thiết kế các luồng dữ liệu vào. 4 . Chỉnh sửa tài liệu cho mức logic. 5 . Hợp thức hoá cho mô hình logic. Giai đoạn 4: Đề xuất các phương án giải pháp. Từ mô hình logic, chúng ta phải đưa ra các giải pháp khác nhau để cụ thể hoá mô hinh logic đó. Mỗi giải pháp là một mô phác hoạ của mô hình vật lý ngoài. ứng với mỗi phương án đều có các khuyến nghị cụ thể, phải có những phân tích về chi phí, lợi ích. Các công đoạn của giai đoạn này gồm: 1. Xác định các dàng buộc tin học và các giang buộc tổ chức. 2. Xây dựng các phương án của giải pháp. 3. Đánh giá các phương án của giải pháp. 4. Báo cáo các giai đoạn đó. Giai đoạn 5: thiết kế vật lý ngoài. Bao gồm tài liệu chứa tất cả các đặc trưng của hệ thống mới cần có và tài liệu dành cho người sử dụng mà nó mô tả cả phần thủ công và cả những giao diện với những phần tin học hoá. Gồm những công đoạn chính sau: 1. Lập kế hoạch thiết kế vật lý ngoài. 2. Thiết kế chi tiết các giao diện. 3. Thiết kế các cách thức tương tác với phần tin học hoá. 4. Thiết kế các thủ tục thủ công. 5. Báo cáo về thiết kế vật lý ngoài. Giai đoạn 6: Triển khai kỹ thuật hệ thống: tin học hoá hệ thống thông tin.Các công đoạn chính của giai đoạn này gồm: 1. Lập kế hoạch thực hiện kỹ thuật 2. Thiết kế vật lý trong 3. Lập trình 4. Thử nghiệm hệ thống. 5. Chuẩn bị tài liệu Giai đoạn 7: Cài đặt và khai thác hệ thống: đây là giai đoạn chuyển từ hệ thống cũ sang hệ thống mới. Giai đoạn này gồm các công đoạn sau: 1. Lập kế hoạch cài đặt. 2. Chuyển đổi. 3. Khai thác và bảo trì. 4. Đánh giá. II.1 phân tích hệ thống thông tin quản lý bán hàng. A . Mục đích: Xây dựng chương trình cho phép quản lý và theo dõi công việc bán hàng của một trung tâm thương mại. Yêu cầu : Hệ thống sẽ được xây dựng để theo dõi quản lý bán hàng. Hiện tại hệ thống sẽ được thiết kế và cài dặt các chức năng sau: + Cho phép quản lý công việc bán hàng tự động. + Cho phép quản lý và tính toán giá trị hoá đơn. + Cung cấp các biểu mẫu tổng hợp và thống kê theo yêu cầu. Hệ thống có thể được mở rộng một cách dễ dàng khi có sự thay đổi về môi trường, công cụ và yêu cầu quản lý mới. C. Phân tích hệ thống thông tin quản lý bán hàng. + Mô tả hoạt động cũ của hệ thống, qua quan điểm xây dựng hệ thống mới + Phân tích hệ thống thành các hệ thống con để thiết kế và cài đặt + Xây dựng sơ đồ luồng giữ liệu diễn tả hoạt động của hệ thống + Xây dựng biểu đồ phân cấp chức năng của chương trình. + Xây dựng mô hình thực thể liên kết cho toàn hệ thống. + Thiết kế chi tiết cho hoạt động của từng chức năng. Sau khi nghiên cứu thực tế tôi thấy hệ thống bao gồm: - Quản lý công việc bán hàng. - Theo dõi nắm bắt các thông tin về khách hàng và nhà cung cấp. Lập các báo cáo. II 2 . Thiết kế logic Sơ đồ luồng giữ liệu Sơ đồ dòng dữ liệu (DFD – Data Flow Diagram ) là một trong các công cụ quan trọng nhất trong việc phân tích hệ thống có cấu trúc. Nó đưa ra một phương pháp thiết lập quan hệ giữ chức năng hoặc quá trình của hệ thống với thông tin mà chúng sử dụng đó là một phần chủ chốt của đặc tả yêu cầu hệ thống, vì nó xác định thông tin nào phải có mặt trước khi quá trình được thực hiện. Sơ đồ luồng giữ liệu ở mức tổng quát: Yêu cầu Mua hàng Phòng bán hàng Khách hàng Kho hàng Nhà cung cấp Phòng kế toán Báo cáo Phòng giám đốc Mô hình trên thể hiện sự trao đổi thông tin giữa hệ thống và các tác nhân bên ngoài. Luồng giữ liệu từ bên ngoài của hệ thống bao qồm các yêu cầu của ban lãnh đạo, các khối phòng liên quan. Luồng dữ liệu tạo ra bao gồm các báo cáo thống kê trả lời. Sau khi đã có sơ đồ mức tổng quát và dựa vào yêu cầu mục đích của hệ thống ta có sơ đồ luồng giữ liệu phân giã chức năng như sau: Khách hàng Nhà cung cấp Ban lãnh đạo, khối phòng liên quan Hệ thống Báo cáo Kho Dữ Liệu Bán hàng Mua hàng Báo Cáo Yêu Cầu báo cáo Thu tiền Bán hàng YêuCầu Trả Lời II3. Mô hình liên kết giữa các thực thể Thực thể và các khoá Qua quá trình khảo sát và chuẩn hoá ta có một số thực thể sau: + Nhóm hàng Tên trường Kiểu trường Độ rộng Mô tả Manhom Number auto Mã nhóm Tên nhóm Text 50 Tên nhóm Mota Mono 100 Mô tả nhóm Hinhnhom Text 150 Đường dẫn đến File hình +Nhà cung cấp: Tên trường Kiểu trường Độ rộng Mô tả Manhacc Number Auto Mã nhà cung cấp Tennhacc Text 60 Tên nhà cung cấp TenDT Text 30 Tên đối tác Chucdanh Text 30 Chức danh đối tác DiachiNcc Mono 100 Địa chỉ Thanhpho Text 15 Thành phố Vung Text 15 Vùng Mavung Text 15 Mã vùng NuocNcc Text 15 Mã vùng DienThoaiNcc Number 10 Điện thoại FaxNcc Number 10 Fax EmailNcc Text 50 E-mail WedsideNcc Text 50 Wed side + Người gửi hàng Tên trường Kiểu trường Độ rộng Mô tả MaNGui Number auto Mã người gửi TenCTYGui Text 50 Tên cty gửi Dienthoai Number 10 Điện thoại Fax Number 10 Fax Email Text 50 E mail Wedside Text 50 wed side + Hàng hoá Tên trường Kiểu trường Độ rộng Mô tả MaSP Number auto Mã sản phẩm TenSP Text 50 Tên sản phẩm NhaCCID Number 50 Mã nhà cung cấp NhomHHID Number 50 Mã nhóm hàng hoá Soluongtrong Number 10 Số lượng trong đơn vị Dongia Currency 10 Đơn giá SoDVtrongkho Number 10 Số lượng trong kho SoDVtrenHD Number 10 Số Đv trên HD MucDMBS Number 10 Mức đặt mua bổ sung Dinhchi Logic 1 Đỉnht chỉ + Chi tiết hoá đơn: Tên trường Kiểu trường Độ rộng Mô tả MaCTHD Number auto Mã chi tiết hoá đơn HoadonID Number auto Mã hoá đơn HanghoaID Number auto Mã hàng hoá Dongia Currency 10 Đơn giá bán Soluong Number 10 Số lượng Trietkhau Number 3 Triết khấu +Hoá đơn Tên trường Kiểu trường Độ rộng Mô tả MaHD Number auto Mã hoá đơn NgayHD Date/time 8 Ngày hoá đơn NgayYC Date/time 8 Ngày yêu cầu Ngaygui Date/time 8 Ngày gửi hàng NguoibanID Number auto Mã người bán NGuiID Number auto Mã người gửi KhachID Number auto Mã khách hàng Cuocphi Currency 10 Cước phí TenCTYNgui Text 50 Tên cty nhận DiachiCTY Text 50 Địa chỉ Thanhpho Text 15 Thành phố Vungnhangui Text 15 Vùng nhận gửi Mavung Text 15 Mã vùng Quocgia Text 15 Nước + Nhân viên bán hàng. Tên trường Kiểu trường Độ rộng Mô tả MaNBan Number auto Mã người bán Ten Text 20 Tên người bán Ho Text 20 Hộ người bán Chucdanh Text 30 Chức danh người bán Bidanh Text 20 Bí danh người bán Ngaysinh Date/time 8 Ngày sinh Ngaynhanviec Date/time 8 Ngày nhận việc Baocaotoi Text 40 Báo cáo tới Diachi Mono 100 Địa chỉ Thanhpho Text 15 Thành phố Vung Text 15 Vùng Mavung Text 15 Mã vùng Nuoc Text 15 Nước DTnha Number 10 Điện thoại riêng Ghichu Memo 100 Ghi chú Email Text 50 E-mail Hinhanh Text 100 Đường dẫn hình +Khách hàng Tên trường Kiểu trường Độ rộng Mô tả KhachhangID Number auto Mã khách hàng TenCty Text 50 Tên công ty TenDT Text 50 Tên đối tác ChucdanhDT Text 50 Chức danh Diachi Memo 100 Địa chỉ Thanhpho Text 15 Thành phố Vung Text 15 Vùng Mavung Text 15 Mã vùng Nuoc Text 15 Nước Dienthoai Number 10 Điện thoại Fax Number 10 Fax Wedside Text 50 Wed side Email Text 50 E-mail 5. Chọn lựa cơ sở dữ liệu và môi trường phát triển Do tính bảo mật của cơ sở dữ liệu lên môi trường đẻ phát triển phù hợp nhất đó là Oracle, SqlServer và môi trường phát triển visual basic. Có thể nói Visual Basic là con đường nhanh nhất, đơn giản nhất và mạnh nhất để tạo những ứng dụng Windows nói chung và những ứng dụng Cơ sở dữ liệu nói riêng. Visual Basic cung cấp cho bạn một tập hợp các công cụ hoàn chỉnh để nhanh chóng phát triển các ứng dụng. 1)Visual Basic là gì? Thành phần VISUAL nói đến các phương thức dùng để tạo giao diện đồ hoạ người dùng (GUI). Thay vì viết những dòng mã để mô tả vị trí và sự xuất hiện của các thành phần giao diện, ta chỉ cần thêm vào những đối tượng đã được định nghĩa từ trước ở vị trí nào đó trên màn hình. Thành phần BASIC: nói đến ngôn ngữ BASIC (Beginners AllPurpose Symbolic Instruction Code) nói đến ngôn ngữ được dùng nhiều bởi các nhà lập trình hơn bất cứ một ngôn ngữ nào khác trong lich sử máy tính.Visual Basic được phát triển dần dần dựa trên ngôn ngữ BASIC, và bây giờ chứa đựng hàng trăm điều lệnh, hàm và từ khoá … có giao diện trực tiếp với giao diện đồ hoạ của Windows. Ngôn ngữ lập trình Visual Basic không chỉ là Visual Basic. Hệ thống lập trình Visual Basic, những ứng dụng bao gồm Microsoft Excel, Misrosoft Access, nhiều ứng dụng Windows khác đều dùng một ngôn ngữ. Visual Basic là một công cụ mạnh có thể đáp ứng mọi nhu cầu lập trình của chúng ta kể từ những ứng dụng nhỏ cho đến những ứng dụng mang tính hệ thống lớn và cả những ứng dụng qua mạng. Những chức năng truy xuất dữ liệu cho phép chúng ta tạo ra những Cơ Sở dữ liệu. Những kỹ thuật ActiveX cho phép ta dùng những chức năng được cung cấp từ các ứng dụng khác. Khả năng Internet làm cho nó dễ dàng cung cấp cho việc thêm vào những tài liệu và ứng dụng qua Internet từ bên trong ứng dụng của bạn. Tạo tập tin File.EXE thật sự. 2) Cấu trúc của một ứng dụng Visual Basic: Một ứng dụng thật ra là một tập hợp các chỉ dẫn trực tiếp đến máy tính để thi hành một hay nhiều tác vụ. Cấu trúc của một ứng dụng là phương pháp trong đó các chỉ dẫn được tổ chức, được lưu trữ và thi hành theo một trình tự nhất định 3) Chúng ta có thể làm gì với Visual Basic 6.0. Tạo giao diện người dùng. Giao diện người dùng có lẽ là thành phần quan trọng nhất của một ứng dụng. Đối với người sử dụng thì giao diện chính là ứng dụng. ỉng dụng của chúng ta có được phổ biến hay không là phụ thuộc vào giao diện. Sử dụng những điều khiển chuẩn của Visual Basic 6.0 Ta dùng những điều khiển để lấy thông tin ra, nhập thông tin vào và kết xuất thông tin. Những ứng dụng mà ta có thể dùng trong ứng dụng bao gồm hộp văn bản,nút lệnh, hộp danh sách,… Những điều khiển khác cho ta truy xuất những ứng dụng khác, xử dụng nó để xử lý dữ liệu theo thiết kế của các nhà thiết kế hệ thống. Lập trình với những đối tượng. Những đối tượng là thành phần chủ yếu để lập trình Visual Basic . những đối tượng có thể là FORM, những điều khiển hay Cơ sở dữ liệu. Lập trình với phần hợp thành. Chúng ta đôi khi xử dụng phần tính toán của Microsoft Excel trong ứng dụng Visual Basic 6.0, hay định dạng một tài liệu xử dụng thanh công cụ của Microsoft Word, hoặc lưu trữ và xử lý dữ liệu xử dụng Microsoft Access… tất cả những điều này có thể thực hiện được bằng cách xây dựng những ứng dụng của chúng ta bằng những thành phần ActiveX. Thêm vào đó, Visual Basic có thể giúp chúng ta tạo những điểu khiển ActiveX riêng. Đáp ứng những sự kiện phím và chuột, sự kiện rê và thả. Những ứng dụng Visual Basic có thể đáp ứng một số lượng lớn sự kiện chuột, bàn phím. Ví dụ FORM, hộp ảnh và những điều khiển ảnh có thể phát hiện vị trí con trỏ chuột có thể quyết định phím trái hay phím phải được nhấn,và có thể đáp ứng được những tổ hợp của phím chuột với phím Shift, Ctrl hay Alt. Sử dụng những điều khiển phím, ta có thể lập trình những điều khiển và FORM để đáp ứng các hành động phím hoặc phiên dịch bộ mã Ascii của ký tự. Làm việc với văn bản và đồ hoạ. Visual Basic cung cấp khả năng đồ hoạ và văn bản phức tạp trong ứng dụng Visual Basic. Những thuộc tính văn bản cỏ thể giúp ta nhấn mạnh các khái niệm quan trọng và các chi tiết cần quan tâm. Thêm vào đó Visual Basic cung cấp những khả năng đồ hoạ cho phép chúng ta linh động trong thiết kế, bao hàm các hình ảnh động băng cách hiển thị hang loạt các hình ảnh liên tiếp nhau. Gỡ rối mã và quản lý lỗi. Đôi khi có những lỗi xảy ra bên trong mã của ứng dụng.những lỗi nghiêm trọng có thể là nguyên nhân một ứng dụng không đáp ứng lệnh, thông thường yêu cầu người sử dụng khởi động lại ứng dụng và không lưu lại những gì mà ta đã làm. quá trình tìm lỗi và sửa lỗi gọi là gỡ rối. Visual Basic cung cấp nhiều công cụ giúp chúng ta có thể phân tích sự làm việc của ứng dụng. Những công cụ gỡ rối đặc biệt hữu ích trong việc tìm ra nguồn gốc lỗi chúng ta có thể dùng công cụ này để kiểm tra chương trình. Sử lý ổ đĩa thư mục và File. Khi lập trình trong Windows,Visual Basic giúp chúng ta lập trình những ứng dụng như: di chuyển, tạo mới, xoá thư mục và File, lấy thông tin và xử lý ổ đĩa. Thiết kế cho việc thi hành và tính tương thích. Visual Basic chia sẻ hầu hết những tính năng ngôn ngữ trong Visual Basic cho những ứng dụng Microsoft như: Microsoft Office.VBScript là tập hợp con của ngôn ngữ lập trình Visual Basic. Phân phối những ứng dụng: Sau khi đã tạo một ứng dụng Visual Basic, ta có thể tự do phân phối bất kỳ ứng dụng nào đã tạo bằng Visual Basic đến bất cứ ai dùng Microsoft Windows. Ta có thể phân phối ứng dụng trên đĩa, trên CD, qua mạng Internet hay Intranet. Chính vì những thế mạnh đó của Visual Basic 6.0 tôi đã chọn ngôn ngữ này để phát triển ứng dụng: ” Hệ thống thông tin quản lý bán hàng. Phần phụ lục Một số giao diện một số module chương trình Option Explicit Private Sub chkCay_Click() With VSFlexGrid1BCBH If chkCay.Value = False Then .OutlineBar = flexOutlineBarNone chkCay.Caption = "Không cây" Else .OutlineBar = flexOutlineBarComplete chkCay.Caption = "Có cây" End If End With End Sub Private Sub chkDongke_Click() If chkDongke.Value = False Then VSFlexGrid1BCBH.GridLines = flexGridNone chkDongke.Caption = "Không dòng" Else VSFlexGrid1BCBH.GridLines = flexGridFlat chkDongke.Caption = "Có dòng" End If End Sub Private Sub chkNenluoi_Click() With VSFlexGrid1BCBH If chkNenluoi.Value = False Then .WallPaper = LoadPicture() chkNenluoi.Caption = "Không nền" Else .WallPaper = imgNen .WallPaperAlignment = flexPicAlignCenterCenter chkNenluoi.Caption = "Có nền" End If End With End Sub Private Sub Form_Load() Dim dong As Integer Dim SQL As String dong = 1 SQL = "Select Ten,Ho,NgayHD,HanghoaID,Soluong,Dongia,tblChitietHD.[Soluong]*tblChitietHD.[Dongia] as Thanhtien" & _ " From tblNhanvienbanhang,tblHoadon,tblChitietHD" & _ " Where tblNhanvienbanhang.[MaNBan]=tblHoadon.[NguoibanID]" & _ " And tblHoadon.[MaHD]=tblChitietHD.[HoadonID]" & _ " Order By Ten,Ho,NgayHD" KhoitaoADODB SQL With VSFlexGrid1BCBH .Cols = 10 .FormatString = "Tính tổng|Tên nhân viên|Họ nhân viên|Ngày hoá đơn|Mã hàng hoá|Số lượng|Đơn giá| |Thành tiền" .ColWidth(0) = 1500 .ColWidth(1) = 1900 .ColWidth(2) = 1900 .ColWidth(3) = 1300 .ColFormat(3) = "dd/mm/yy" .ColWidth(7) = imgMuitentrai.Width .ColWidth(9) = imgMuitentrai.Width .GridLines = flexGridNone '.Cell(flexcpPicture, 0, 0) = LoadPicture("C:\QLKH\GRAPHICS\BITMAPS\BC\Sum.bmp") .Cell(flexcpPicture, 0, 0) = imgSum .Cell(flexcpBackColor, 0, 0) = &HC0E0FF End With Do While rsado.EOF = False With VSFlexGrid1BCBH .Cell(flexcpText, dong, 1) = rsado.Fields("Ten").Value .Cell(flexcpText, dong, 2) = rsado.Fields("Ho").Value .Cell(flexcpText, dong, 3) = CStr(rsado.Fields("NgayHD").Value) .Cell(flexcpText, dong, 4) = CStr(rsado.Fields("HanghoaID").Value) .Cell(flexcpText, dong, 5) = CStr(rsado.Fields("Soluong").Value) .Cell(flexcpText, dong, 6) = CStr(rsado.Fields("Dongia").Value) .Cell(flexcpText, dong, 8) = CStr(rsado.Fields("Thanhtien").Value) dong = dong + 1 rsado.MoveNext End With Loop rsado.Close With VSFlexGrid1BCBH .OutlineCol = 0 .OutlineBar = flexOutlineBarComplete .SubtotalPosition = flexSTAbove .Subtotal flexSTClear .Subtotal flexSTSum, 0, 8, "$", &HFFC0C0, vbBlack, True, "Tổng toàn bộ" .Subtotal flexSTSum, 1, 8, "$", &HFFC0C0, vbBlack, True, "Tổng theo tên NV" .Subtotal flexSTSum, 2, 8, "$", &HFFC0C0, vbBlack, True, "Tổng theo họ NV" .Subtotal flexSTSum, 3, 8, "$", &HFFC0C0, vbBlack, False, "Tổng theo ngày" .MergeCells = flexMergeRestrictColumns .MergeCol(0) = True .MergeCol(1) = True .MergeCol(2) = True .MergeCol(3) = True End With HienForm Me End Sub Private Sub Form_Unload(Cancel As Integer) cnado.Close Set cnado = Nothing End Sub Private Sub optTinhtoan_Click(Index As Integer) Select Case Index Case 0 With VSFlexGrid1BCBH .OutlineCol = 0 .OutlineBar = flexOutlineBarComplete .SubtotalPosition = flexSTAbove .Subtotal flexSTClear .Subtotal flexSTSum, 0, 8, "$", &HFFC0C0, vbBlack, True, "Tổng toàn bộ" .Subtotal flexSTSum, 1, 8, "$", &HFFC0C0, vbBlack, True, "Tổng theo tên NV" .Subtotal flexSTSum, 2, 8, "$", &HFFC0C0, vbBlack, True, "Tổng theo họ NV" .Subtotal flexSTSum, 3, 8, "$", &HFFC0C0, vbBlack, False, "Tổng theo ngày" End With Case 1 With VSFlexGrid1BCBH .OutlineCol = 0 .OutlineBar = flexOutlineBarComplete .SubtotalPosition = flexSTAbove .Subtotal flexSTClear .Subtotal flexSTPercent, 0, 8, "%##.##", &HFFC0C0, vbBlack, True, "Phần trăm toàn bộ" .Subtotal flexSTPercent, 1, 8, "%##.##", &HFFC0C0, vbBlack, True, "Phần trăn theo tên" .Subtotal flexSTPercent, 2, 8, "%##.##", &HFFC0C0, vbBlack, True, "Phần trăm theo họ" .Subtotal flexSTPercent, 3, 8, "%##.##", &HFFC0C0, vbBlack, False, "Phần trăm theo ngày" End With Case 2 With VSFlexGrid1BCBH .OutlineCol = 0 .OutlineBar = flexOutlineBarComplete .SubtotalPosition = flexSTAbove .Subtotal flexSTClear .Subtotal flexSTAverage, 0, 8, "$", &HFFC0C0, vbBlack, True, "TB toàn bộ" .Subtotal flexSTAverage, 1, 8, "$", &HFFC0C0, vbBlack, True, "TB theo tên" .Subtotal flexSTAverage, 2, 8, "$", &HFFC0C0, vbBlack, True, "TB theo họ" .Subtotal flexSTAverage, 3, 8, "$", &HFFC0C0, vbBlack, False, "TB theo ngày" End With End Select End Sub Private Sub VSFlexGrid1BCBH_EnterCell() With VSFlexGrid1BCBH If .RowSel 0 Then .Cell(flexcpPicture, .RowSel, 7) = imgMuitentrai .Cell(flexcpPicture, .RowSel, 9) = imgMuitenphai End If End With End Sub Private Sub VSFlexGrid1BCBH_LeaveCell() With VSFlexGrid1BCBH .Cell(flexcpPicture, .RowSel, 7) = LoadPicture() .Cell(flexcpPicture, .RowSel, 9) = LoadPicture() End With End Sub Option Explicit Private Sub cmdBCHang_Click() rptDSSPham.Show End Sub Private Sub cmdBCHangTheoNhom_Click() rptSphamTheoNhom.Show End Sub Private Sub cmdBCTheoNCC_Click() rptDSSphamTheoNCC.Show End Sub Private Sub Form_Load() Me.Top = frmLienket.Top + frmLienket.tabLienket.Top + frmLienket.imgMuiten1.Top Me.Left = frmLienket.Left + frmLienket.imgMuiten1.Left - Me.Width End Sub Private Sub Form_Unload(Cancel As Integer) frmLienket.imgMuiten1.Visible = False End Sub Option Explicit Private GuiTT As String Private SLTrenHD As Integer Private DGTrenHD As Currency Private TKTrenHD As Double Private Sub cmdLuu_Click() 'Gọi thủ tục KhoitaoControlsLucLuu Me With dataCTHD.Recordset .Fields("MaCTHD").Value = txtChiTietHDMa.Text .Fields("HoadonID").Value = dbcboCTietHDmaHD.Text .Fields("HanghoaID").Value = dbcboCTietHDmasp.Text .Fields("Dongia").Value = meditChitietHDDgia.Text .Fields("Soluong").Value = meditChitietHDSluong.Text .Fields("Trietkhau").Value = meditChitietTrKhau.Text .Update End With dataCTHD.Refresh 'Gọi thủ tục dataCTHD.Recordset.MoveLast Vohieuhoa Me End Sub Private Sub cmdThem_Click() Dim SQLMatudong As String SQLMatudong = "Select Max([MaCTHD]) as Lonnhat From tblChitietHD" 'Gọi thủ tục tạo data kết nối cho txtChitietHDma Ketnoi dataMatudong, SQLMatudong dataCTHD.Recordset.AddNew 'Gọi thủ tục khởi tạo Contrrols lúc thêm KhoitaoControlsLucThem Me If dataCTHD.Recordset.RecordCount = 0 Then txtChiTietHDMa.Text = "1" dataCTHD.Caption = "1" Else With dataMatudong txtChiTietHDMa.Text = "" & .Recordset.Fields("Lonnhat").Value + 1 dataCTHD.Caption = "" & .Recordset.Fields("Lonnhat").Value + 1 End With End If dbcboCTietHDmaHD.SetFocus lblChitietHDTenHD.Caption = "" lblChitietHDTenSP.Caption = "" lblChitietHDTT.Caption = "" lblChitietHDTSauTK.Caption = "" lblCTHDThueVAT.Caption = "" lblCTHDThuclanh.Caption = "" lblChitietTongcong.Caption = "" lblMatudong.Visible = True End Sub Private Sub cmdXoa_Click() If dataCTHD.Recordset.RecordCount > 0 Then 'Gọi thủ tục xoá Xoa dataCTHD dataCTHD.Recordset.MoveLast Else MsgBox "Không có dữ liệu để xoá", vbInformation, "Thông báo" Exit Sub End If End Sub Private Sub dataCTHD_Reposition() On Error GoTo loi Dim SQLHientenSP As String Dim SL As Integer Dim DG As Double Dim TK As Double SQLHientenSP = "Select TenSP" & _ " From tblSanpham" & _ " Where MaSP=" & dataCTHD.Recordset.Fields("HanghoaID").Value & "" 'Gọi thủ tục Ketnoi dataHientenSP, SQLHientenSP With dataHientenSP lblChitietHDTenSP.Caption = "" & .Recordset.Fields("TenSP").Value End With With dataCTHD .Caption = "" & .Recordset.Fields("MaCTHD").Value SL = .Recordset.Fields("Soluong").Value DG = .Recordset.Fields("Dongia").Value TK = .Recordset.Fields("Trietkhau").Value lblChitietHDTT.Caption = "" & ThanhTien(SL, DG) & " $" lblChitietHDTSauTK.Caption = "" & TienSauTrietKhau(SL, DG, TK) & " $" lblCTHDThueVAT.Caption = "" & TienSauTrietKhau(SL, DG, TK) * 0.1 & " $" lblCTHDThuclanh.Caption = "" & ThucLanh(SL, DG, TK) & " $" End With loi: End Sub Private Sub dbcboCTietHDmaHD_KeyPress(KeyAscii As Integer) PheChuanKeyPress dbcboCTietHDmaHD, KeyAscii If KeyAscii = 13 Then dbcboCTietHDmasp.SetFocus End If End Sub Private Sub dbcboCTietHDmaHD_LostFocus() BuocphaidienDL dbcboCTietHDmaHD, True End Sub Private Sub dbcboCTietHDmasp_Change() On Error GoTo loi Dim SQLThaydoiMaSP As String SQLThaydoiMaSP = "Select TenSP" & _ " From tblSanpham" & _ " Where MaSP=" & dbcboCTietHDmasp.Text & "" 'Gọi thủ tục khởi tạo ADODB KhoitaoADODB SQLThaydoiMaSP With rsado lblChitietHDTenSP.Caption = "" & .Fields("TenSP").Value .Close End With loi: End Sub Private Sub dbcboCTietHDmasp_KeyPress(KeyAscii As Integer) PheChuanKeyPress dbcboCTietHDmasp, KeyAscii If KeyAscii = 13 Then meditChitietHDDgia.SetFocus End If End Sub Private Sub dbcboCTietHDmasp_LostFocus() 'Gọi thủ tục BuocphaidienDL dbcboCTietHDmasp, True End Sub Private Sub Form_Load() Dim SQLChitietHD As String SQLChitietHD = "Select * From tblChitietHD Order By HoadonID" 'Gọi thủ tục tạo data kết nối nguồn dữ liệu Ketnoi dataCTHD, SQLChitietHD 'Gọi thủ tục HienForm Me 'Gọi thủ tục vô hiệu hoá những điều khiển không cần thiết Vohieuhoa Me optTron(2).Value = True 'Gọi thủ tục CauhinhLuoiChinh VSFlexGrid1ChitietHD 'With VSFlexGrid1ChitietHD ' .OutlineBar = flexOutlineBarComplete ' .OutlineCol = 1 ' .SubtotalPosition = flexSTAbove 'End With End Sub Private Sub Form_Unload(Cancel As Integer) cnado.Close Set cnado = Nothing End Sub Private Sub meditChitietHDDgia_KeyPress(KeyAscii As Integer) PheChuanKeyPress meditChitietHDDgia, KeyAscii If KeyAscii = 13 Then meditChitietHDSluong.SetFocus End If End Sub Private Sub meditChitietHDDgia_LostFocus() BuocphaidienDL meditChitietHDDgia, True End Sub Private Sub meditChitietHDSluong_Change() On Error GoTo loi DGTrenHD = CCur(meditChitietHDDgia.Text) SLTrenHD = CInt(meditChitietHDSluong.Text) lblChitietHDTT.Caption = "" & ThanhTien(SLTrenHD, DGTrenHD) & " $" loi: End Sub Private Sub meditChitietHDSluong_KeyPress(KeyAscii As Integer) PheChuanKeyPress meditChitietHDSluong, KeyAscii If KeyAscii = 13 Then meditChitietTrKhau.SetFocus End If End Sub Private Sub meditChitietHDSluong_LostFocus() BuocphaidienDL meditChitietHDSluong, True End Sub Private Sub meditChitietTrKhau_Change() On Error GoTo loi 'Sự kiện này xẩy ra sau khi điều khiển lostfocus DGTrenHD = CCur(meditChitietHDDgia.Text) SLTrenHD = CInt(meditChitietHDSluong.Text) TKTrenHD = CDbl(meditChitietTrKhau.Text) lblChitietHDTSauTK.Caption = "" & TienSauTrietKhau(SLTrenHD, DGTrenHD, TKTrenHD) & " $" lblCTHDThueVAT.Caption = "" & TienSauTrietKhau(SLTrenHD, DGTrenHD, TKTrenHD) * 0.1 & " $" lblCTHDThuclanh.Caption = "" & ThucLanh(SLTrenHD, DGTrenHD, TKTrenHD) & " $" loi: End Sub Private Sub meditChitietTrKhau_KeyPress(KeyAscii As Integer) PheChuanKeyPress meditChitietTrKhau, KeyAscii If KeyAscii = 13 Then cmdLuu.SetFocus End If End Sub Private Sub meditChitietTrKhau_LostFocus() BuocphaidienDL meditChitietTrKhau, True End Sub Private Sub optTron_Click(Index As Integer) Select Case Index Case 0 optTron(1).Value = False optTron(2).Value = False With VSFlexGrid1ChitietHD .MergeCells = flexMergeRestrictColumns .MergeCol(1) = True .MergeCol(2) = False End With Case 1 optTron(0).Value = False optTron(2).Value = False With VSFlexGrid1ChitietHD .MergeCells = flexMergeRestrictColumns .MergeCol(2) = True .MergeCol(1) = False End With Case Else optTron(0).Value = False optTron(1).Value = False With VSFlexGrid1ChitietHD .MergeCells = flexMergeNever End With End Select End Sub Private Sub VSFlexGrid1ChitietHD_AfterEdit(ByVal Row As Long, ByVal Col As Long) On Error GoTo loi With VSFlexGrid1ChitietHD If (.Col 0) And (.Cell(flexcpText, .RowSel, .ColSel) GuiTT) Then If MsgBox("Bạn có muốn lưu ô này vào trong CSDL hay không?", vbYesNo, "Thông báo") = vbNo Then .Cell(flexcpText, .RowSel, .ColSel) = GuiTT Exit Sub Else .Cell(flexcpForeColor, .RowSel, .ColSel) = vbRed Exit Sub End If Else Exit Sub End If End With loi: If Col = 0 Then MsgBox "Bạn không thể thay đổi dữ liệu trên cột này.", vbInformation, "Thông báo" With VSFlexGrid1ChitietHD .Cell(flexcpForeColor, .RowSel, .ColSel) = vbBlack End With Exit Sub End If End Sub Private Sub VSFlexGrid1ChitietHD_BeforeEdit(ByVal Row As Long, ByVal Col As Long, Cancel As Boolean) With VSFlexGrid1ChitietHD GuiTT = .Cell(flexcpText, .RowSel, .ColSel) End With End Sub Private Sub VSFlexGrid1ChitietHD_EnterCell() 'Gọi thủ tục VaoO VSFlexGrid1ChitietHD, Label1 End Sub Private Sub VSFlexGrid1ChitietHD_LeaveCell() 'Gọi thủ tục RoikhoiO VSFlexGrid1ChitietHD End Sub Private Sub VSFlexGrid1ChitietHD_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'Gọi thủ tục HienToolTipText VSFlexGrid1ChitietHD End Sub Option Explicit Private Sub Form_Load() Me.Top = frmLienket.Top Me.Left = frmLienket.Left + frmLienket.cmdBCBHTheoQui.Left - Me.Width End Sub Private Sub optKieuDT_Click(Index As Integer) Select Case Index Case 0 optKieuDT(1).Value = False msCharDothi.ChartType = VtChChartTyp._.e2dBar Case 1 optKieuDT(0).Value = False msCharDothi.ChartType = VtChChartType3dBar End Select End Sub Option Explicit Private GuiTT As String Private Sub cboHDNuocnhan_KeyPress(KeyAscii As Integer) PheChuanKeyPress cboHDNuocnhan, KeyAscii If KeyAscii = 13 Then dbcboHDMaNgban.SetFocus End If End Sub Private Sub cboHDNuocnhan_LostFocus() BuocphaidienDL cboHDNuocnhan, True End Sub Private Sub cboHDThPhonhan_KeyPress(KeyAscii As Integer) PheChuanKeyPress cboHDThPhonhan, KeyAscii If KeyAscii = 13 Then cboHDVungnhan.SetFocus End If End Sub Private Sub cboHDThPhonhan_LostFocus() BuocphaidienDL cboHDThPhonhan, True End Sub Private Sub cboHDVungnhan_KeyPress(KeyAscii As Integer) PheChuanKeyPress cboHDVungnhan, KeyAscii If KeyAscii = 13 Then txtHDMaVungnhan.SetFocus End If End Sub Private Sub cboHDVungnhan_LostFocus() BuocphaidienDL cboHDVungnhan, True End Sub Private Sub cmdHDThemCTHD_Click() frmChitietHD.Show Me.Enabled = False End Sub Private Sub cmdLocnhanh_Click() frmHDBanhangLoc.Show End Sub Private Sub cmdLuu_Click() 'Gọi thủ tục KhoitaoControlsLucLuu Me With dataHDBH.Recordset .Fields("MaHD").Value = txtHDonMa.Text If DTPickerHDNgayHD.Value = Now() Then .Fields("NgayHD").Value = DTPickerHDNgayHD.Value Else MsgBox "Ngày hoá đơn phải là ngày:" & Now() & "", vbInformation, "Thông báo" DTPickerHDNgayHD.SetFocus cmdLuu.Enabled = True Exit Sub End If If DTPicker1HDNgayYC >= Now() Then .Fields("NgayYC").Value = DTPicker1HDNgayYC.Value Else MsgBox "Ngày yêu cầu phải sau ngày:" & Now() & "", vbInformation, "Thông báo" DTPicker1HDNgayYC.SetFocus cmdLuu.Enabled = True Exit Sub End If If DTPicker1HDNgGui >= Now() Then .Fields("Ngaygui").Value = DTPicker1HDNgGui.Value Else MsgBox "Ngày gửi phải sau ngày: " & Now() & "", vbInformation, "Thông báo" DTPicker1HDNgGui.SetFocus cmdLuu.Enabled = True Exit Sub End If .Fields("NguoibanID").Value = dbcboHDMaNgban.Text .Fields("NGuiID").Value = dbcboHDMaNgGui.Text .Fields("KhachID").Value = dbcboHDMakhach.Text .Fields("Cuocphi").Value = meditHDBHCuocphi.Text .Fields("TenCtyNGui").Value = txtHDTenNgnhan.Text .Fields("Thanhphonhangui").Value = cboHDThPhonhan.Text .Fields("Vungnhangui").Value = cboHDVungnhan.Text .Fields("Mavungnhangui").Value = txtHDMaVungnhan.Text .Fields("Quocgianhangui").Value = cboHDNuocnhan.Text .Update End With dataHDBH.Refresh 'Gọi thủ tục Vohieuhoa Me dataHDBH.Recordset.MoveLast End Sub Private Sub cmdThem_Click() Dim SQLMatudong As String SQLMatudong = "Select Max([MaHD]) as Lonnhat From tblHoadon" 'Gọi thủ tục tạo data kết nối cho txtHoadonMa Ketnoi dataMatudong, SQLMatudong dataHDBH.Recordset.AddNew 'Khởi tạo thuộc tính các Controls luc thêm DL KhoitaoControlsLucThem Me If dataHDBH.Recordset.RecordCount = 0 Then txtHDonMa.Text = "1" dataHDBH.Caption = "1" Else With dataMatudong txtHDonMa.Text = "" & .Recordset.Fields("Lonnhat").Value + 1 dataHDBH.Caption = "" & .Recordset.Fields("Lonnhat").Value + 1 End With End If dbcboHDMakhach.SetFocus lblHDonTenkhach.Caption = "" rtxtHDDchiKH.Text = "" lblHDTphoKH.Caption = "" lblHDVungKH.Caption = "" lblHDDThoaiKH.Caption = "" lblHDFaxKH.Caption = "" lblHDTenNgban.Caption = "" lblHDTenNggui.Caption = "" lblHDTienTongDT.Caption = "" lblHDTienTongTK.Caption = "" lblHDTienDTThuan.Caption = "" lblHDBHThueVAT.Caption = "" lblHDBHTDTsauthueVAT.Caption = "" lblMatudong.Visible = True End Sub Private Sub cmdXoa_Click() If dataHDBH.Recordset.RecordCount > 0 Then If dataHDBHChitiet.Recordset.RecordCount > 0 Then MsgBox "Bạn không thể xoá bản ghi này vì nó còn xuất hiện trên bảng con.", vbInformation, "Thông báo" Exit Sub Else 'Gọi thủ tục Xoa Xoa dataHDBH dataHDBH.Recordset.MoveLast End If Else MsgBox "Không có dữ liệu để xoá.", vbInformation, "Thông báo" Exit Sub End If End Sub Private Sub dataHDBH_Reposition() On Error GoTo loi '--------------------------------------------------------------------------------- Dim SQLChitietHD As String SQLChitietHD = "Select *" & _ " From tblChitietHD" & _ " Where HoadonID=" & dataHDBH.Recordset.Fields("MaHD").Value & "" 'Khởi tạo data kết nối Ketnoi dataHDBHChitiet, SQLChitietHD '--------------------------------------------------------------------------------- Dim SQLHientenKH As String SQLHientenKH = "Select TenCty,Diachi,Thanhpho,Vung,Dienthoai,Fax" & _ " From tblKhachhang" & _ " Where KhachhangID=" & dataHDBH.Recordset.Fields("KhachID").Value & "" Ketnoi dataHienTenKH, SQLHientenKH With dataHienTenKH lblHDonTenkhach.Caption = "" & .Recordset.Fields("TenCty").Value rtxtHDDchiKH.Text = "" & .Recordset.Fields("Diachi").Value lblHDTphoKH.Caption = "" & .Recordset.Fields("Thanhpho").Value lblHDVungKH.Caption = "" & .Recordset.Fields("Vung").Value lblHDDThoaiKH.Caption = "" & .Recordset.Fields("Dienthoai").Value lblHDFaxKH.Caption = "" & .Recordset.Fields("Fax").Value End With '--------------------------------------------------------------------------------- Dim SQLHientenNVBH As String SQLHientenNVBH = "Select Ho,Ten" & _ " From tblNhanvienbanhang" & _ " Where MaNBan=" & dataHDBH.Recordset.Fields("NguoibanID").Value & "" Ketnoi dataHienTenNVBH, SQLHientenNVBH With dataHienTenNVBH lblHDTenNgban.Caption = "" & .Recordset.Fields("Ho").Value & " " & .Recordset.Fields("Ten").Value End With '--------------------------------------------------------------------------------- Dim SQLHientennguoigui As String SQLHientennguoigui = "Select TenCtyGui" & _ " From tblNguoigui" & _ " Where MaNGui=" & dataHDBH.Recordset.Fields("NGuiID").Value & "" Ketnoi dataHientenNguoigui, SQLHientennguoigui With dataHientenNguoigui lblHDTenNggui.Caption = "" & .Recordset.Fields("TenCtyGui").Value End With With VSFlexGrid1CTHD .MergeCells = flexMergeRestrictColumns .MergeCol(1) = True End With With dataHDBH .Caption = "HD:" & .Recordset.Fields("MaHD").Value End With '--------------------------------------------------------------------------------- 'Tính toán trên hoá đơn,kiểm tra nếu có chi tiết HD hay không If dataHDBHChitiet.Recordset.RecordCount > 0 Then Dim SQLTinhtoan As String Dim DThuThuan As Currency SQLTinhtoan = "Select HoadonID,Sum([Dongia]*[Soluong]) as TongDThu,Sum([Dongia]*[Soluong]*[Trietkhau]) as TongTK,TongDThu-TongTK as TongDTsauTK" & _ " From tblChitietHD" & _ " Group By HoadonID" & _ " Having HoadonID=" & dataHDBH.Recordset.Fields("MaHD").Value & "" 'Gọi thủ tục khởi tạo nguồn kết nối dữ liệu KhoitaoADODB SQLTinhtoan With rsado DThuThuan = CCur(.Fields("TongDTsauTK").Value - dataHDBH.Recordset.Fields("Cuocphi").Value) Frame6.Caption = "Tính toán hoá đơn: " & dataHDBH.Recordset.Fields("MaHD").Value lblHDTienTongDT.Caption = "" & .Fields("TongDThu").Value & " $" lblHDTienTongTK.Caption = "" & .Fields("TongTK").Value & " $" lblHDTienDTThuan.Caption = "" & DThuThuan & " $" lblHDBHThueVAT.Caption = "" & DThuThuan * 0.1 & " $" lblHDBHTDTsauthueVAT.Caption = "" & DThuThuan * 0.9 & " $" .Close End With Else Frame6.Caption = "Chưa có chi tiết hoá đơn. " lblHDTienTongDT.Caption = "" lblHDTienTongTK.Caption = "" lblHDTienDTThuan.Caption = "" lblHDBHThueVAT.Caption = "" lblHDBHTDTsauthueVAT.Caption = "" End If loi: End Sub Private Sub dbcboHDMakhach_Change() 'Cần bẫy lỗi khi trường KhachID trong bang tblHoadon co giá trị mặc định 'nếu trường này không có giá trị mặc định thì không cần bẫy lỗi On Error GoTo loi If dbcboHDMakhach.Text "" Then Dim SQLThaydoimakhach As String SQLThaydoimakhach = "Select TenCty,Diachi,Thanhpho,Vung,Dienthoai,Fax" & _ " From tblKhachhang" & _ " Where KhachhangID=" & dbcboHDMakhach.Text & "" Ketnoi dataThaydoiMakhach, SQLThaydoimakhach With dataThaydoiMakhach lblHDonTenkhach.Caption = "" & .Recordset.Fields("TenCty").Value rtxtHDDchiKH.Text = "" & .Recordset.Fields("Diachi").Value lblHDTphoKH.Caption = "" & .Recordset.Fields("Thanhpho").Value lblHDVungKH.Caption = "" & .Recordset.Fields("Vung").Value lblHDDThoaiKH.Caption = "" & .Recordset.Fields("Dienthoai").Value lblHDFaxKH.Caption = "" & .Recordset.Fields("Fax").Value End With Else Exit Sub End If loi: End Sub Private Sub dbcboHDMakhach_KeyPress(KeyAscii As Integer) PheChuanKeyPress dbcboHDMakhach, KeyAscii If KeyAscii = 13 Then txtHDTenNgnhan.SetFocus End If End Sub Private Sub dbcboHDMakhach_LostFocus() 'Gọi thủ tục BuocphaidienDL dbcboHDMakhach, True End Sub Private Sub dbcboHDMaNgban_Change() On Error GoTo loi If dbcboHDMaNgban.Text "" Then Dim SQLThaydoiManguoiban As String SQLThaydoiManguoiban = "Select Ho,Ten" & _ " From tblNhanvienbanhang" & _ " Where MaNBan=" & dbcboHDMaNgban.Text & "" Ketnoi dataThaydoiManguoiban, SQLThaydoiManguoiban With dataThaydoiManguoiban lblHDTenNgban.Caption = "" & .Recordset.Fields("Ho").Value & " " & .Recordset.Fields("Ten").Value End With Else Exit Sub End If loi: End Sub Private Sub dbcboHDMaNgban_KeyPress(KeyAscii As Integer) PheChuanKeyPress dbcboHDMaNgban, KeyAscii If KeyAscii = 13 Then dbcboHDMaNgGui.SetFocus End If End Sub Private Sub dbcboHDMaNgban_LostFocus() BuocphaidienDL dbcboHDMaNgban, True End Sub Private Sub dbcboHDMaNgGui_Change() On Error GoTo loi If dbcboHDMaNgGui.Text "" Then Dim SQLThaydoiMaNGui As String SQLThaydoiMaNGui = "Select TenCtyGui" & _ " From tblNguoigui" & _ " Where MaNGui=" & dbcboHDMaNgGui.Text & "" Ketnoi dataThaydoiMaNGui, SQLThaydoiMaNGui With dataThaydoiMaNGui lblHDTenNggui.Caption = "" & .Recordset.Fields("TenCtyGui").Value End With Else Exit Sub End If loi: End Sub Private Sub dbcboHDMaNgGui_KeyPress(KeyAscii As Integer) PheChuanKeyPress dbcboHDMaNgGui, KeyAscii If KeyAscii = 13 Then meditHDBHCuocphi.SetFocus End If End Sub Private Sub dbcboHDMaNgGui_LostFocus() BuocphaidienDL dbcboHDMaNgGui, True End Sub Private Sub Form_Load() Dim SQLHoadonBH As String SQLHoadonBH = "Select * From tblHoadon" 'Gọi thủ tục khởi tạo data kết nối Ketnoi dataHDBH, SQLHoadonBH 'Gọi thủ tục HienForm Me 'Gọi thủ tục Vohieuhoa Me 'Gọi thủ tục khởi tạo cấu hình lưới CauhinhLuoiChinh VSFlexGrid1HD CauhinhLuoiPhu VSFlexGrid1CTHD With cboHDThPhonhan .AddItem "Hà Nội" .AddItem "Hải Phòng" .AddItem "Tp HCM" .AddItem "Đà Nẵng" .AddItem "Nam Định" End With With cboHDVungnhan .AddItem "Bắc" .AddItem "Trung" .AddItem "Nam" .AddItem "Hải đảo" .AddItem "Miền Núi" End With With cboHDNuocnhan .AddItem "Việt Nam" .AddItem "Trung Quốc" .AddItem "Thái Lan" .AddItem "Indonesia" .AddItem "Malaysia" End With End Sub Private Sub Form_Unload(Cancel As Integer) 'cnado.Close Set cnado = Nothing End Sub Private Sub meditHDBHCuocphi_KeyPress(KeyAscii As Integer) PheChuanKeyPress meditHDBHCuocphi, KeyAscii If KeyAscii = 13 Then cmdLuu.SetFocus End If End Sub Private Sub meditHDBHCuocphi_LostFocus() BuocphaidienDL meditHDBHCuocphi, True End Sub Private Sub rtxtHDDchiNGNhan_KeyPress(KeyAscii As Integer) PheChuanKeyPress rtxtHDDchiNGNhan, KeyAscii End Sub Private Sub rtxtHDDchiNGNhan_LostFocus() BuocphaidienDL rtxtHDDchiNGNhan, True End Sub Private Sub txtHDMaVungnhan_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtHDMaVungnhan, KeyAscii If KeyAscii = 13 Then cboHDNuocnhan.SetFocus End If End Sub Private Sub txtHDMaVungnhan_LostFocus() BuocphaidienDL txtHDMaVungnhan, True End Sub Private Sub txtHDTenNgnhan_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtHDTenNgnhan, KeyAscii If KeyAscii = 13 Then rtxtHDDchiNGNhan.SetFocus End If End Sub Private Sub txtHDTenNgnhan_LostFocus() BuocphaidienDL txtHDTenNgnhan, True End Sub Private Sub VSFlexGrid1CTHD_EnterCell() VaoO VSFlexGrid1CTHD, Label1 End Sub Private Sub VSFlexGrid1CTHD_LeaveCell() RoikhoiO VSFlexGrid1CTHD End Sub Private Sub VSFlexGrid1CTHD_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) HienToolTipText VSFlexGrid1CTHD End Sub Private Sub VSFlexGrid1HD_AfterEdit(ByVal Row As Long, ByVal Col As Long) On Error GoTo loi With VSFlexGrid1HD If (.Col 0) And (.Cell(flexcpText, .RowSel, .ColSel) GuiTT) Then If MsgBox("Bạn có muốn lưu ô này vào trong CSDL hay không?", vbYesNo, "Thông báo") = vbNo Then .Cell(flexcpText, .RowSel, .ColSel) = GuiTT Exit Sub Else .Cell(flexcpForeColor, .RowSel, .ColSel) = vbRed End If Else Exit Sub End If End With loi: If Col = 0 Then MsgBox "Bạn không thể thay đổi dữ liệu trên cột này.", vbInformation, "Thông báo" With VSFlexGrid1HD .Cell(flexcpForeColor, .RowSel, .ColSel) = vbBlack End With Exit Sub End If End Sub Private Sub VSFlexGrid1HD_BeforeEdit(ByVal Row As Long, ByVal Col As Long, Cancel As Boolean) With VSFlexGrid1HD GuiTT = .Cell(flexcpText, .RowSel, .ColSel) End With End Sub Private Sub VSFlexGrid1HD_EnterCell() 'Gọi thủ tục VaoO VaoO VSFlexGrid1HD, Label1 End Sub Private Sub VSFlexGrid1HD_LeaveCell() 'Gọi thủ tục RoiO RoikhoiO VSFlexGrid1HD End Sub Private Sub VSFlexGrid1HD_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'Gọi thủ tục HienToolTipText HienToolTipText VSFlexGrid1HD End Sub Option Explicit Private Sub cboMangLoc_KeyPress(Index As Integer, KeyAscii As Integer) PheChuanKeyPress cboMangLoc(Index), KeyAscii End Sub Private Sub cboMangLoc_Validate(Index As Integer, Cancel As Boolean) 'Sự kiện này dùng để kiểm tra xem việc nhập liệu 'vào các điều khiển,nếu một điều khiển thoả mãn một điều kiện 'nào đó mà làm cho tham số Cancel=True thì ta sẽ không thể 'di chuyển sang một Control nào khác ngoại trừ Controls có 'thuộc tính CauseValidate là Fasle If cboMangLoc(Index) "" Then Cancel = True MsgBox "Bạn chỉ có thể tìm kiếm theo một tiêu thức.", vbInformation, "Thông báo" End If End Sub Private Sub cmdTimkiem_Click() On Error GoTo loi Dim cot As Integer Dim dong As Integer Dim SQLTKiemTheoCacTT As String If cboMangLoc(0).Text "" Then SQLTKiemTheoCacTT = "Select MaHD,NgayHD,NgayYC,Ngaygui,Cuocphi,HanghoaID,Dongia,Soluong,Trietkhau" & _ " From tblHoadon" & _ " Inner Join tblChitietHD" & _ " On tblHoadon.MaHD=tblChitietHD.HoadonID" & _ " Where MaHD=" & cboMangLoc(0).Text & "" 'Mệnh đề Having chỉ áp dụng cho SQL gộp nhóm Ketnoi dataHDLoc, SQLTKiemTheoCacTT If dataHDLoc.Recordset.RecordCount = 0 Then MsgBox "Không tìm thấy hoá đơn có mã là: " & cboMangLoc(0).Text & "", vbInformation, "Thông tin" cboMangLoc(0).SelStart = 0 cboMangLoc(0).SelLength = Len(cboMangLoc(0).Text) Exit Sub Else lblKQTK.Visible = True With VSFlexGridHDLoc .MergeCells = flexMergeRestrictColumns .MergeCol(0) = True .Cell(flexcpBackColor, 1, 0) = &HFFC0C0 End With End If End If '-------------------------------------------------------------------------------- If cboMangLoc(1).Text "" Then SQLTKiemTheoCacTT = "Select TenCty,Diachi,Thanhpho,Vung,Nuoc,Dienthoai,Fax,Wedside,Email,NgayHD,NgayYC,Ngaygui,Cuocphi" & _ " From tblKhachhang" & _ " Inner Join tblHoadon" & _ " On tblKhachhang.KhachhangID=tblHoadon.KhachID" & _ " Where TenCty='" & cboMangLoc(1).Text & "'" Ketnoi dataHDLoc, SQLTKiemTheoCacTT If dataHDLoc.Recordset.RecordCount = 0 Then MsgBox "Không tìm thấy hoá đơn có khách hàng là: " & cboMangLoc(1).Text & "", vbInformation, "Thông tin" cboMangLoc(1).SelStart = 0 cboMangLoc(1).SelLength = Len(cboMangLoc(1).Text) Exit Sub Else lblKQTK.Visible = True With VSFlexGridHDLoc .MergeCells = flexMergeRestrictColumns For cot = 0 To 8 .MergeCol(cot) = True Next cot '.ColFormat(5) = "(###)###-#####" .Cell(flexcpBackColor, 1, 0) = &HFFC0C0 End With End If End If '-------------------------------------------------------------------------------- If cboMangLoc(2).Text "" Then SQLTKiemTheoCacTT = "Select Ho,Ten,Diachi,DTNha,Email,NgayHD,NgayYC,Ngaygui,Cuocphi" & _ " From tblNhanvienbanhang" & _ " Inner Join tblHoadon" & _ " On tblNhanvienbanhang.[MaNBan]=tblHoadon.[NguoibanID]" & _ " Where Ten='" & cboMangLoc(2).Text & "'" Ketnoi dataHDLoc, SQLTKiemTheoCacTT If dataHDLoc.Recordset.RecordCount = 0 Then MsgBox "Không tìm thấy hoá đơn có người bán là: " & cboMangLoc(2).Text & "", vbInformation, "Thông báo" cboMangLoc(2).SelStart = 0 cboMangLoc(2).SelLength = Len(cboMangLoc(2).Text) Exit Sub Else lblKQTK.Visible = True With VSFlexGridHDLoc .MergeCells = flexMergeRestrictColumns For cot = 0 To 4 .MergeCol(cot) = True Next cot .Cell(flexcpBackColor, 1, 1) = &HFFC0C0 End With End If End If '-------------------------------------------------------------------------------- If cboMangLoc(3).Text "" Then SQLTKiemTheoCacTT = "Select TenCtyGui,Dienthoai,Fax,Email,Wedside,NgayHD,NgayYC,Ngaygui,TenCtyNGui as Noinhan,DiachiCtyNGui as Diachinhan,Cuocphi" & _ " From tblNguoigui" & _ " Inner Join tblHoadon" & _ " On tblNguoigui.[MaNGui]=tblHoadon.[NGuiID]" & _ " Where TenCtyGui='" & cboMangLoc(3).Text & "'" Ketnoi dataHDLoc, SQLTKiemTheoCacTT If dataHDLoc.Recordset.RecordCount = 0 Then MsgBox "Không tìm thấy hoá đơn mà có người gửi là: " & cboMangLoc(3).Text & "", vbInformation, "Thông báo" cboMangLoc(3).SelStart = 0 cboMangLoc(3).SelLength = Len(cboMangLoc(3).Text) Exit Sub Else lblKQTK.Visible = True With VSFlexGridHDLoc .MergeCells = flexMergeRestrictColumns For cot = 0 To 4 .MergeCol(cot) = True Next cot .Cell(flexcpBackColor, 1, 0) = &HFFC0C0 End With End If End If '-------------------------------------------------------------------------------- If cboMangLoc(4).Text "" Then SQLTKiemTheoCacTT = "Select *" & _ " From tblHoadon" & _ " Where Month(tblHoadon.[NgayHD])=" & Right$(cboMangLoc(4).Text, Len(cboMangLoc(4).Text) - Len("Tháng")) & "" Ketnoi dataHDLoc, SQLTKiemTheoCacTT If dataHDLoc.Recordset.RecordCount = 0 Then MsgBox "Không tìm thấy hoá đơn trong " & cboMangLoc(4).Text & "", vbInformation, "Thông báo" cboMangLoc(4).SelStart = 0 cboMangLoc(4).SelLength = Len(cboMangLoc(4).Text) Exit Sub Else lblKQTK.Visible = True With VSFlexGridHDLoc .MergeCells = flexMergeRestrictColumns .MergeCol(1) = True For dong = 1 To .Rows .Cell(flexcpBackColor, dong, 1) = &HFFC0C0 Next dong End With End If End If loi: End Sub Private Sub Form_Load() Dim i As Integer Dim SQLMaHD As String Dim SQLTenKH As String Dim SQLTenNVBH As String Dim SQLTenNGui As String SQLMaHD = "Select MaHD From tblHoadon" SQLTenKH = "Select TenCty From tblKhachhang" SQLTenNVBH = "Select Ten From tblNhanvienbanhang" SQLTenNGui = "Select TenCtyGui From tblNguoigui" '-------------------------------------------------------------------------------- KhoitaoADODB SQLMaHD With rsado Do Until .EOF = True cboMangLoc(0).AddItem .Fields("MaHD").Value .MoveNext Loop .Close End With '-------------------------------------------------------------------------------- KhoitaoADODB SQLTenKH With rsado Do While .EOF = False cboMangLoc(1).AddItem .Fields("TenCty").Value .MoveNext Loop .Close End With '-------------------------------------------------------------------------------- KhoitaoADODB SQLTenNVBH With rsado Do While .EOF = False cboMangLoc(2).AddItem .Fields("Ten").Value .MoveNext Loop .Close End With '-------------------------------------------------------------------------------- KhoitaoADODB SQLTenNGui With rsado Do Until .EOF = True cboMangLoc(3).AddItem .Fields("TenCtyGui").Value .MoveNext Loop .Close End With '-------------------------------------------------------------------------------- With cboMangLoc(4) For i = 1 To 12 .AddItem "Tháng " & i Next i End With 'Gọi thủ tục HienForm Me CauhinhLuoiPhu VSFlexGridHDLoc End Sub Private Sub Form_Unload(Cancel As Integer) cnado.Close Set cnado = Nothing End Sub Option Explicit Private GuiTT As String Private Sub cboKhachhangNuoc_KeyPress(KeyAscii As Integer) PheChuanKeyPress cboKhachhangNuoc, KeyAscii If KeyAscii = 13 Then txtKhachhangDThoai.SetFocus End If End Sub Private Sub cboKhachhangNuoc_LostFocus() BuocphaidienDL cboKhachhangNuoc, True End Sub Private Sub cboKhachhangTpho_KeyPress(KeyAscii As Integer) PheChuanKeyPress cboKhachhangTpho, KeyAscii If KeyAscii = 13 Then txtKhachhangMavung.SetFocus End If End Sub Private Sub cboKhachhangTpho_LostFocus() BuocphaidienDL cboKhachhangTpho, True End Sub Private Sub cboKhachhangVung_KeyPress(KeyAscii As Integer) PheChuanKeyPress cboKhachhangVung, KeyAscii If KeyAscii = 13 Then cboKhachhangTpho.SetFocus End If End Sub Private Sub cboKhachhangVung_LostFocus() BuocphaidienDL cboKhachhangVung, True End Sub Private Sub cmdLocnhanh_Click() frmKhachhangLoc.Show End Sub Private Sub cmdLuu_Click() 'Gọi hàm Khởi tạo lúc Luu KhoitaoControlsLucLuu Me With dataKhachhang.Recordset .Fields("KhachhangID").Value = txtKhachhangMa.Text .Fields("TenCty").Value = txtKhachhanhTenCty.Text .Fields("TenDT").Value = txtKhachhangTenDTac.Text .Fields("ChucdanhDT").Value = txtKhachhangCDDT.Text .Fields("Diachi").Value = rtxtKhachhangDchi.Text .Fields("Thanhpho").Value = cboKhachhangTpho.Text .Fields("Vung").Value = cboKhachhangVung.Text .Fields("Mavung").Value = txtKhachhangMavung.Text .Fields("Nuoc").Value = cboKhachhangNuoc.Text .Fields("Dienthoai").Value = txtKhachhangDThoai.Text .Fields("Fax").Value = txtKhachhangFax.Text .Fields("Wedside").Value = txtKhachhangSide.Text .Fields("Email").Value = txtKhachhangE_mail.Text .Update End With dataKhachhang.Refresh 'Gọi thủ tục Vohieuhoa dataKhachhang.Recordset.MoveLast Vohieuhoa Me End Sub Private Sub cmdThem_Click() Dim SQLMatudong As String SQLMatudong = "Select Max([KhachhangID]) as Lonnhat From tblKhachhang" 'Gọi thủ tục tạo nguồn kết nối cho txtKhachhangMa Ketnoi dataMatudong, SQLMatudong dataKhachhang.Recordset.AddNew 'Gọi hàm khởi tạo lúc Them KhoitaoControlsLucThem Me If dataKhachhang.Recordset.RecordCount = 0 Then txtKhachhangMa.Text = "1" dataKhachhang.Caption = "1" Else With dataMatudong txtKhachhangMa.Text = "" & .Recordset.Fields("Lonnhat").Value + 1 dataKhachhang.Caption = "" & .Recordset.Fields("Lonnhat").Value + 1 End With End If lblMatudong.Visible = True txtKhachhanhTenCty.SetFocus End Sub Private Sub cmdXoa_Click() If dataKhachhang.Recordset.RecordCount > 0 Then If dataKhachhangCtietHD.Recordset.RecordCount > 0 Then MsgBox "Bạn không thể xoá bản ghi này vì nó còn xuất hiện trong bảng con.", vbInformation, "Thông báo" Exit Sub Else 'Gọi thủ tục xoá Xoa dataKhachhang dataKhachhang.Recordset.MoveLast End If Else MsgBox "Không có dữ liệu để xoá", vbInformation, "Thông báo" Exit Sub End If End Sub Private Sub dataKhachhang_Reposition() On Error GoTo loi Dim SQLKhachhangCtietHD As String SQLKhachhangCtietHD = "Select *" & _ " From tblHoadon" & _ " Where KhachID=" & dataKhachhang.Recordset.Fields("KhachhangID").Value & "" 'Goi thủ tục khởi tạo nguồn dữ liệu cho lưới phụ Ketnoi dataKhachhangCtietHD, SQLKhachhangCtietHD With dataKhachhang .Caption = "" & .Recordset.Fields("KhachhangID").Value End With With VSFlexGridKhachhangCTiet .MergeCells = flexMergeRestrictColumns .MergeCol(6) = True End With loi: End Sub Private Sub Form_Load() Dim SQLKhachhang As String SQLKhachhang = "Select * From tblKhachhang Order By Nuoc,Thanhpho" 'Gọi thủ tục tạo data kết nối với nguồn dữ liệu Ketnoi dataKhachhang, SQLKhachhang 'Gọi thủ tục hiện Form HienForm Me 'Gọi thủ tục khởi tạo các điều khiển không cần thiết Vohieuhoa Me optTronDL(1).Value = True 'Gọi thủ tục cấu hình cho lưới CauhinhLuoiChinh VSFlexGridKhachhang CauhinhLuoiPhu VSFlexGridKhachhangCTiet With cboKhachhangTpho .AddItem "Hà Nội" .AddItem "Hải Phòng" .AddItem "Tp HCM" .AddItem "Đà Nẵng" .AddItem "Nam Định" End With With cboKhachhangVung .AddItem "Bắc" .AddItem "Trung" .AddItem "Nam" .AddItem "Hải đảo" .AddItem "Miền Núi" End With With cboKhachhangNuoc .AddItem "Việt Nam" .AddItem "Trung Quốc" .AddItem "Thái Lan" .AddItem "Indonesia" .AddItem "Malaysia" End With End Sub Private Sub optTronDL_Click(Index As Integer) Select Case Index Case 0 optTronDL(1).Value = False With VSFlexGridKhachhang .MergeCells = flexMergeRestrictColumns .MergeCol(8) = True End With Case 1 optTronDL(0).Value = False With VSFlexGridKhachhang .MergeCells = flexMergeNever End With Case Else End Select End Sub Private Sub rtxtKhachhangDchi_KeyPress(KeyAscii As Integer) PheChuanKeyPress rtxtKhachhangDchi, KeyAscii End Sub Private Sub rtxtKhachhangDchi_LostFocus() BuocphaidienDL rtxtKhachhangDchi, True End Sub Private Sub txtKhachhangCDDT_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtKhachhangCDDT, KeyAscii If KeyAscii = 13 Then rtxtKhachhangDchi.SetFocus End If End Sub Private Sub txtKhachhangCDDT_LostFocus() BuocphaidienDL txtKhachhangCDDT, True End Sub Private Sub txtKhachhangDThoai_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtKhachhangDThoai, KeyAscii If KeyAscii = 13 Then txtKhachhangFax.SetFocus End If End Sub Private Sub txtKhachhangDThoai_LostFocus() BuocphaidienDL txtKhachhangDThoai, True End Sub Private Sub txtKhachhangE_mail_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtKhachhangE_mail, KeyAscii If KeyAscii = 13 Then txtKhachhangSide.SetFocus End If End Sub Private Sub txtKhachhangE_mail_LostFocus() BuocphaidienDL txtKhachhangE_mail, False End Sub Private Sub txtKhachhangFax_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtKhachhangFax, KeyAscii If KeyAscii = 13 Then txtKhachhangE_mail.SetFocus End If End Sub Private Sub txtKhachhangFax_LostFocus() BuocphaidienDL txtKhachhangFax, True End Sub Private Sub txtKhachhangMa_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtKhachhangMa, KeyAscii If KeyAscii = 13 Then txtKhachhanhTenCty.SetFocus End If End Sub Private Sub txtKhachhangMavung_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtKhachhangMavung, KeyAscii If KeyAscii = 13 Then cboKhachhangNuoc.SetFocus End If End Sub Private Sub txtKhachhangMavung_LostFocus() BuocphaidienDL txtKhachhangMavung, True End Sub Private Sub txtKhachhangSide_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtKhachhangSide, KeyAscii If KeyAscii = 13 Then cmdLuu.SetFocus End If End Sub Private Sub txtKhachhangSide_LostFocus() BuocphaidienDL txtKhachhangSide, False End Sub Private Sub txtKhachhangTenDTac_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtKhachhangTenDTac, KeyAscii If KeyAscii = 13 Then txtKhachhangCDDT.SetFocus End If End Sub Private Sub txtKhachhangTenDTac_LostFocus() BuocphaidienDL txtKhachhangTenDTac, True End Sub Private Sub txtKhachhanhTenCty_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtKhachhanhTenCty, KeyAscii If KeyAscii = 13 Then txtKhachhangTenDTac.SetFocus End If End Sub Private Sub txtKhachhanhTenCty_LostFocus() BuocphaidienDL txtKhachhanhTenCty, True End Sub Private Sub VSFlexGridKhachhang_AfterEdit(ByVal Row As Long, ByVal Col As Long) On Error GoTo loi With VSFlexGridKhachhang If (.Col 0) And (.Cell(flexcpText, .RowSel, .ColSel) GuiTT) Then If MsgBox("Bạn có muốn lưu ô này vào trong CSDL hay không?", vbYesNo, "Thông báo") = vbNo Then .Cell(flexcpText, .RowSel, .ColSel) = GuiTT Exit Sub Else .Cell(flexcpForeColor, .RowSel, .ColSel) = vbRed End If Else Exit Sub End If End With loi: If Col = 0 Then MsgBox "Bạn không thể thay đổi dữ liệu trên cột này.", vbInformation, "Thông báo" With VSFlexGridKhachhang .Cell(flexcpForeColor, .RowSel, .ColSel) = vbBlack End With Exit Sub End If End Sub Private Sub VSFlexGridKhachhang_BeforeEdit(ByVal Row As Long, ByVal Col As Long, Cancel As Boolean) With VSFlexGridKhachhang GuiTT = .Cell(flexcpText, .RowSel, .ColSel) End With End Sub Private Sub VSFlexGridKhachhang_EnterCell() 'Gọi thủ tục VaoO VSFlexGridKhachhang, Label1 End Sub Private Sub VSFlexGridKhachhang_LeaveCell() 'Gọi thủ tục RoikhoiO VSFlexGridKhachhang End Sub Private Sub VSFlexGridKhachhang_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'Gọi thủ tục HienToolTipText VSFlexGridKhachhang End Sub Private Sub VSFlexGridKhachhangCTiet_EnterCell() VaoO VSFlexGridKhachhangCTiet, Label1 End Sub Private Sub VSFlexGridKhachhangCTiet_LeaveCell() RoikhoiO VSFlexGridKhachhangCTiet End Sub Private Sub VSFlexGridKhachhangCTiet_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) HienToolTipText VSFlexGridKhachhangCTiet End Sub Private Sub cmdTimkiem_Click() On Error GoTo loi Dim SQLTimkiemKH As String If cboKhachhangLocMa.Text = "Tất cả" Then SQLTimkiemKH = "Select * From tblKhachhang" Else SQLTimkiemKH = "Select *" & _ " From tblKhachhang" & _ " Where KhachhangID=" & cboKhachhangLocMa.Text & "" End If Ketnoi dataKhachhangLoc, SQLTimkiemKH If dataKhachhangLoc.Recordset.RecordCount = 0 Then MsgBox "Không tìm thấy khách hàng có mã: " & cboKhachhangLocMa.Text & "", vbInformation, "Thông báo" cboKhachhangLocMa.SelStart = 0 cboKhachhangLocMa.SelLength = Len(cboKhachhangLocMa.Text) Exit Sub Else lblKQTK.Visible = True End If loi: End Sub Private Sub Form_Load() Dim SQL As String SQL = "Select KhachhangID From tblKhachhang" HienForm Me CauhinhLuoiPhu VSFlexGridKhachhangLoc KhoitaoADODB SQL With cboKhachhangLocMa .AddItem "Tất cả" End With With rsado Do Until .EOF = True cboKhachhangLocMa.AddItem .Fields("KhachhangID").Value .MoveNext L._.ve_Excel.Visible = True Screen.MousePointer = 0 frmLienket.lblChuthichTH.Visible = False End If End Sub Private Sub Form_Load() 'Thực sự tạo ra các đối tượng ActiveX do Excel cung cấp Set Active_Excel = CreateObject("Excel.Application") Set Active_Workbook = Active_Excel.Workbooks.Add Set Active_Worksheet = Active_Workbook.Worksheets.Add Me.Top = frmLienket.Top + frmLienket.tabLienket.Top + frmLienket.imgMuiten2.Top Me.Left = frmLienket.Left + frmLienket.imgMuiten2.Left - Me.Width End Sub Private Sub Form_Unload(Cancel As Integer) On Error GoTo loi frmLienket.imgMuiten2.Visible = False cnado.Close Set cnado = Nothing Set Active_Excel = Nothing Set Active_Workbook = Nothing Set Active_Worksheet = Nothing loi: End Sub Option Explicit Private Sub cboTinhtoan_Change() If cboTinhtoan.Text = "Phần trăm" Then With VSFlexGrid1Tree .Subtotal flexSTClear .Subtotal flexSTPercent, 0, 6, "%", &HFFC0C0, vbBlack, True, "Phần trăm" End With End If If cboTinhtoan.Text = "Tổng" Then With VSFlexGrid1Tree .Subtotal flexSTClear .Subtotal flexSTSum, 0, 6, "$", &HFFC0C0, vbBlack, True, "Tổng" End With End If End Sub Private Sub chkCay_Click() Dim i As Integer For i = 0 To 3 With VSFlexGrid1Tree(i) If chkCay.Value = False Then .OutlineBar = flexOutlineBarNone Else .OutlineBar = flexOutlineBarComplete End If End With Next End Sub Private Sub chkLuoi_Click() Dim i As Integer For i = 0 To 3 With VSFlexGrid1Tree(i) If chkLuoi.Value = False Then .GridLines = flexGridNone Else .GridLines = flexGridFlat End If End With Next i With VSFlexGrid1Duyet If chkLuoi.Value = False Then .GridLines = flexGridNone Else .GridLines = flexGridFlat End If End With End Sub Private Sub chkNen_Click() Dim i As Integer For i = 0 To 3 With VSFlexGrid1Tree(i) If chkNen.Value = False Then .WallPaper = LoadPicture() Else .WallPaper = imgNen .WallPaperAlignment = flexPicAlignCenterCenter End If End With Next i With VSFlexGrid1Duyet If chkNen.Value = False Then .WallPaper = Nothing Else .WallPaper = imgNen .WallPaperAlignment = flexPicAlignCenterCenter End If End With End Sub Private Sub Form_Load() HienForm Me optMucdich(0).Value = True CauhinhLuoiPhu VSFlexGrid1Duyet With cboTinhtoan .AddItem "Tổng" .AddItem "Phần trăm" .AddItem "Nhỏ nhất" .AddItem "Lớn nhất" .AddItem "Trung bình" .AddItem "Phương sai" .AddItem "Độ lệch chuẩn" .AddItem "Đếm" .AddItem "Không" .ListIndex = 0 End With End Sub Private Sub Form_Unload(Cancel As Integer) cnado.Close Set cnado = Nothing End Sub Private Sub optMucdich_Click(Index As Integer) On Error GoTo loi Dim SQLTree As String Dim NewNode As Node Dim SQLDuyet As String Dim dong As Integer Dim cot As Integer dong = 1 Select Case Index '--------------------------------------------------------------- Case 0 Me.TreeView1.Nodes.Clear Set NewNode = Me.TreeView1.Nodes.Add(, tvwRootLines, "a", "Nhân viên BH", 1) SQLDuyet = "Select Ho,Ten From tblNhanvienbanhang Order By Ho" KhoitaoADODB SQLDuyet With rsado Do Until .EOF = True Set NewNode = Me.TreeView1.Nodes.Add("a", tvwChild, , .Fields("Ten").Value, 2, 3) .MoveNext Loop .Close End With 'Phần hiện lên lưới Tree VSFlexGrid1Tree(0).Visible = True VSFlexGrid1Tree(1).Visible = False VSFlexGrid1Tree(2).Visible = False VSFlexGrid1Tree(3).Visible = False SQLTree = "Select Ten,Ho,NgayHD,HanghoaID,Soluong,Dongia,tblChitietHD.[Soluong]*tblChitietHD.[Dongia] as Thanhtien" & _ " From tblNhanvienbanhang,tblHoadon,tblChitietHD" & _ " Where tblNhanvienbanhang.[MaNBan]=tblHoadon.[NguoibanID]" & _ " And tblHoadon.[MaHD]=tblChitietHD.[HoadonID]" & _ " Order By Ten" KhoitaoADODB SQLTree With VSFlexGrid1Tree(0) .FormatString = " |Tên|<Họ|Ngày HĐ|Mã hàng|Số lượng|Đơn giá|Thành tiền" .ColWidth(0) = 2000 .ColWidth(1) = 2000 .ColWidth(2) = 2000 .ColWidth(3) = 2000 End With Do Until rsado.EOF = True With VSFlexGrid1Tree(0) .Cell(flexcpPicture, dong, 3) = LoadPicture("C:\QLKH\GRAPHICS\ICONS\FLAGS\Flgbrazl.Ico") .Cell(flexcpText, dong, 1) = rsado.Fields("Ten").Value .Cell(flexcpText, dong, 2) = rsado.Fields("Ho").Value .Cell(flexcpText, dong, 3) = CStr(Left$(rsado.Fields("NgayHD").Value, 8)) .Cell(flexcpText, dong, 4) = CStr(rsado.Fields("HanghoaID").Value) .Cell(flexcpText, dong, 5) = CStr(rsado.Fields("Soluong").Value) .Cell(flexcpText, dong, 6) = CStr(rsado.Fields("Dongia").Value) .Cell(flexcpText, dong, 7) = CStr(rsado.Fields("Thanhtien").Value) dong = dong + 1 rsado.MoveNext End With Loop rsado.Close With VSFlexGrid1Tree(0) .OutlineCol = 0 .OutlineBar = flexOutlineBarComplete .SubtotalPosition = flexSTAbove .Subtotal flexSTClear .Subtotal flexSTSum, 0, 7, "$,", &HFFC0C0, vbRed, True, "Tổng toàn bộ" .Subtotal flexSTSum, 1, 7, "$,", &HFFC0C0, vbBlack, True, "Tổng theo tên" .Subtotal flexSTSum, 2, 7, "$", &HFFC0C0, vbBlack, True, "Tổng theo họ" .Subtotal flexSTSum, 3, 7, "$", &HFFC0C0, vbBlack, True, "Tổng theo ngày" .MergeCells = flexMergeRestrictColumns .MergeCol(0) = True .MergeCol(1) = True .MergeCol(2) = True .MergeCol(3) = True End With optMucdich(1).Value = False optMucdich(2).Value = False optMucdich(3).Value = False '--------------------------------------------------------------- Case 1 Me.TreeView1.Nodes.Clear Set NewNode = Me.TreeView1.Nodes.Add(, tvwRootLines, "a", "Nhà cung cấp", 1) SQLDuyet = "Select * From tblNhacungcap Order by TenCtyNCC" KhoitaoADODB SQLDuyet With rsado Do While .EOF = False Set NewNode = Me.TreeView1.Nodes.Add("a", tvwChild, , .Fields("TenCtyNcc").Value, 2, 3) .MoveNext Loop .Close End With 'Phần hiện lên lưới Tree VSFlexGrid1Tree(0).Visible = False VSFlexGrid1Tree(1).Visible = True VSFlexGrid1Tree(2).Visible = False VSFlexGrid1Tree(3).Visible = False SQLTree = "Select TenCtyNcc,TenSP,Soluong,tblChitietHD.[Dongia],[Soluong]*tblChitietHD.[Dongia] as Thanhtien" & _ " From tblNhacungcap,tblSanpham,tblChitietHD" & _ " Where tblNhacungcap.[MaNhaCC]=tblSanpham.[NhaCCID]" & _ " And tblSanpham.[MaSP]=tblChitietHD.[HanghoaID]" & _ " Order By TenCtyNcc" KhoitaoADODB SQLTree With VSFlexGrid1Tree(1) .FormatString = " |Tên nhà cung cấp|Tên sản phẩm|Số lượng|Đơn giá|Thành tiền" .ColWidth(0) = 2000 .ColWidth(1) = 4000 .ColWidth(2) = 2000 End With Do While rsado.EOF = False With VSFlexGrid1Tree(1) .Cell(flexcpPicture, dong, 2) = LoadPicture("C:\QLKH\GRAPHICS\ICONS\INDUSTRY\Bicycle.ico") .Cell(flexcpText, dong, 1) = rsado.Fields("TenCtyNcc").Value .Cell(flexcpText, dong, 2) = rsado.Fields("TenSp").Value .Cell(flexcpText, dong, 3) = CStr(rsado.Fields("Soluong").Value) .Cell(flexcpText, dong, 4) = CStr(rsado.Fields("Dongia").Value) .Cell(flexcpText, dong, 5) = CStr(rsado.Fields("Thanhtien").Value) dong = dong + 1 rsado.MoveNext End With Loop rsado.Close With VSFlexGrid1Tree(1) .OutlineCol = 0 .OutlineBar = flexOutlineBarComplete .SubtotalPosition = flexSTAbove .Subtotal flexSTClear .Subtotal flexSTSum, 0, 5, "$", &HFFC0C0, vbRed, True, "Tổng toàn bộ" .Subtotal flexSTSum, 1, 5, "$", &HFFC0C0, vbBlack, True, "Tổng theo NCC" .Subtotal flexSTSum, 2, 5, "$", &HFFC0C0, vbBlack, True, "Tổng theo hàng" .MergeCells = flexMergeRestrictColumns .MergeCol(0) = True .MergeCol(1) = True .MergeCol(2) = True End With VSFlexGrid1Duyet.Visible = False lblDuyet.Visible = False lblChuthich.Visible = False picHinhanh.Visible = False optMucdich(0).Value = False optMucdich(2).Value = False optMucdich(3).Value = False Case 2 Me.TreeView1.Nodes.Clear Set NewNode = Me.TreeView1.Nodes.Add(, tvwRootLines, "a", "Nhóm hàng hoá", 1) SQLDuyet = "Select * From tblNhomhang Order by TenNhom" KhoitaoADODB SQLDuyet With rsado Do Until .EOF = True Set NewNode = Me.TreeView1.Nodes.Add("a", tvwChild, , .Fields("Tennhom").Value, 2, 3) .MoveNext Loop .Close End With 'Hiện lên lưới Tree VSFlexGrid1Tree(0).Visible = False VSFlexGrid1Tree(1).Visible = False VSFlexGrid1Tree(2).Visible = True VSFlexGrid1Tree(3).Visible = False '======================== SQLTree = "Select TenNhom,TenSP,Soluong,tblChitietHD.[Dongia],Soluong*tblChitietHD.[Dongia] as Thanhtien" & _ " From tblNhomhang,tblSanpham,tblChitietHD" & _ " Where tblNhomhang.[Manhom]=tblSanpham.[NhomHHID]" & _ " And tblSanpham.[MaSP]=tblChitietHD.[HanghoaID]" & _ " Order By TenNhom" KhoitaoADODB SQLTree With VSFlexGrid1Tree(2) .FormatString = " |Tên nhóm hàng|Tên sản phẩm|Số lượng|Đơn giá|Thành tiền" .ColWidth(0) = 2000 .ColWidth(1) = 3000 .ColWidth(2) = 2000 End With Do Until rsado.EOF = True With VSFlexGrid1Tree(2) .Cell(flexcpPicture, dong, 2) = LoadPicture("C:\QLKH\GRAPHICS\ICONS\MISC\Mike.Ico") .Cell(flexcpText, dong, 1) = rsado.Fields("TenNhom").Value .Cell(flexcpText, dong, 2) = rsado.Fields("TenSP").Value .Cell(flexcpText, dong, 3) = CStr(rsado.Fields("Soluong").Value) .Cell(flexcpText, dong, 4) = CStr(rsado.Fields("Dongia").Value) .Cell(flexcpText, dong, 5) = CStr(rsado.Fields("Thanhtien").Value) dong = dong + 1 rsado.MoveNext End With Loop rsado.Close With VSFlexGrid1Tree(2) .OutlineCol = 0 .OutlineBar = flexOutlineBarComplete .SubtotalPosition = flexSTAbove .Subtotal flexSTClear .Subtotal flexSTSum, 0, 5, "$", &HFFC0C0, vbRed, True, "Tổng toàn bộ" .Subtotal flexSTSum, 1, 5, "$", &HFFC0C0, vbBlack, True, "Tổng theo nhóm hàng" .Subtotal flexSTSum, 2, 5, "$", &HFFC0C0, vbBlack, True, "Tổng theo hàng" .MergeCells = flexMergeRestrictColumns .MergeCol(0) = True .MergeCol(1) = True .MergeCol(2) = True End With VSFlexGrid1Duyet.Visible = False lblDuyet.Visible = False lblChuthich.Visible = False picHinhanh.Visible = False optMucdich(0).Value = False optMucdich(1).Value = False optMucdich(3).Value = False Case Else Me.TreeView1.Nodes.Clear Set NewNode = Me.TreeView1.Nodes.Add(, tvwRootLines, "a", "Hàng hoá", 1) SQLDuyet = "Select * From tblSanpham Order by TenSP" KhoitaoADODB SQLDuyet With rsado Do While .EOF = False Set NewNode = Me.TreeView1.Nodes.Add("a", tvwChild, , .Fields("TenSP").Value, 2, 3) .MoveNext Loop .Close End With 'Hiên lên lưới tree VSFlexGrid1Tree(0).Visible = False VSFlexGrid1Tree(1).Visible = False VSFlexGrid1Tree(2).Visible = False VSFlexGrid1Tree(3).Visible = True '============================== SQLTree = " Select TenSP,Soluong,tblChitietHD.[Dongia],Soluong*tblChitietHD.[Dongia] as Thanhtien" & _ " From tblSanpham,tblChitietHD" & _ " Where tblSanpham.[MaSP]=tblChitietHD.[HanghoaID]" & _ " Order By TenSP" KhoitaoADODB SQLTree With VSFlexGrid1Tree(3) .FormatString = " |Tên sản phẩm|Số lượng|Đơn giá|Thành tiền" .ColWidth(0) = 2000 .ColWidth(1) = 2000 End With Do Until rsado.EOF = True With VSFlexGrid1Tree(3) .Cell(flexcpPicture, dong, 1) = LoadPicture("C:\QLKH\GRAPHICS\ICONS\MISC\Clock05.Ico") .Cell(flexcpText, dong, 1) = rsado.Fields("TenSP").Value .Cell(flexcpText, dong, 2) = CStr(rsado.Fields("Soluong").Value) .Cell(flexcpText, dong, 3) = CStr(rsado.Fields("Dongia").Value) .Cell(flexcpText, dong, 4) = CStr(rsado.Fields("Thanhtien").Value) dong = dong + 1 rsado.MoveNext End With Loop rsado.Close With VSFlexGrid1Tree(3) .OutlineCol = 0 .OutlineBar = flexOutlineBarComplete .SubtotalPosition = flexSTAbove .Subtotal flexSTClear .Subtotal flexSTSum, 0, 4, "$", &HFFC0C0, vbRed, True, "Tổng toàn bộ" .Subtotal flexSTSum, 1, 4, "$", &HFFC0C0, vbBlack, True, "Tổng theo hàng" .MergeCells = flexMergeRestrictColumns .MergeCol(0) = True .MergeCol(1) = True End With VSFlexGrid1Duyet.Visible = False lblDuyet.Visible = False lblChuthich.Visible = False picHinhanh.Visible = False optMucdich(0).Value = False optMucdich(1).Value = False optMucdich(2).Value = False End Select loi: End Sub Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node) 'On Error GoTo loi Dim SQLChitietDuyet As String Dim i As Integer Dim Duongdanhinh As String Dim SQLHinhanh As String If optMucdich(0).Value = True Then If Node.Key = "a" Then VSFlexGrid1Duyet.Visible = False lblDuyet.Visible = False lblChuthich.Visible = False picHinhanh.Visible = False Exit Sub Else VSFlexGrid1Duyet.Visible = True lblDuyet.Visible = True picHinhanh.Visible = True SQLHinhanh = "Select Hinhanh" & _ " From tblNhanvienbanhang" & _ " Where Ten='" & Node.Text & "'" KhoitaoADODB SQLHinhanh With rsado If IsNull(.Fields("Hinhanh").Value) = False Then picHinhanh.Picture = LoadPicture(.Fields("Hinhanh").Value) Else picHinhanh.Picture = LoadPicture() End If .Close End With SQLChitietDuyet = "Select Ho,Ten,NgayHD,Cuocphi,Soluong,Dongia,Trietkhau" & _ " From tblNhanvienbanhang,tblHoadon,tblChitietHD" & _ " Where tblNhanvienbanhang.[MaNBan]=tblHoadon.[NguoibanID]" & _ " And tblHoadon.[MaHD]=tblChitietHD.[HoadonID]" & _ " And Ten='" & Node.Text & "'" Ketnoi dataDuyet, SQLChitietDuyet If dataDuyet.Recordset.RecordCount = 0 Then lblChuthich.Visible = True Exit Sub Else lblChuthich.Visible = False End If With VSFlexGrid1Duyet .MergeCells = flexMergeRestrictColumns For i = 0 To 1 .MergeCol(i) = True .Cell(flexcpBackColor, 1, i) = &HC0E0FF Next i End With End If End If '--------------------------------------------------------------------------------- If Node.Key = "a" Then lblDuyet.Visible = False lblChuthich.Visible = False VSFlexGrid1Duyet.Visible = False picHinhanh.Visible = False Exit Sub Else lblDuyet.Visible = True VSFlexGrid1Duyet.Visible = True '---------------------------------------------------------------------------- If optMucdich(1).Value = True Then SQLChitietDuyet = "Select TenCtyNcc,TenSP,tblChitietHD.[Dongia],Soluong,Trietkhau" & _ " From tblNhacungcap,tblSanpham,tblChitietHD" & _ " Where tblNhacungcap.[MaNhaCC]=tblSanpham.[NhaCCID]" & _ " And tblSanpham.[MaSP]=tblChitietHD.[HanghoaID]" & _ " And TenCtyNcc='" & Node.Text & "'" Ketnoi dataDuyet, SQLChitietDuyet If dataDuyet.Recordset.RecordCount = 0 Then lblChuthich.Visible = True Exit Sub Else lblChuthich.Visible = False End If With VSFlexGrid1Duyet .MergeCells = flexMergeRestrictColumns .MergeCol(0) = True .Cell(flexcpBackColor, 1, 0) = &HC0E0FF End With End If '---------------------------------------------------------------------------- If optMucdich(2).Value = True Then SQLChitietDuyet = "Select TenNhom,TenSP,tblChitietHD.[Dongia],Soluong,Trietkhau" & _ " From tblNhomhang,tblSanpham,tblChitietHD" & _ " Where tblNhomhang.[Manhom]=tblSanpham.[NhomHHID]" & _ " And tblSanpham.[MaSP]=tblChitietHD.[HanghoaID]" & _ " And TenNhom='" & Node.Text & "'" Ketnoi dataDuyet, SQLChitietDuyet If dataDuyet.Recordset.RecordCount = 0 Then lblChuthich.Visible = True Exit Sub Else lblChuthich.Visible = False End If With VSFlexGrid1Duyet .MergeCells = flexMergeRestrictColumns .MergeCol(0) = True .Cell(flexcpBackColor, 1, 0) = &HC0E0FF End With End If '---------------------------------------------------------------------------- If optMucdich(3).Value = True Then SQLChitietDuyet = "Select TenSP,tblChitietHD.[Dongia],Soluong,Trietkhau" & _ " From tblSanpham" & _ " Inner Join tblChitietHD" & _ " On tblSanpham.[MaSP]=tblChitietHD.[HanghoaID]" & _ " Where TenSP='" & Node.Text & "'" Ketnoi dataDuyet, SQLChitietDuyet If dataDuyet.Recordset.RecordCount = 0 Then lblChuthich.Visible = True Exit Sub Else lblChuthich.Visible = False End If With VSFlexGrid1Duyet .MergeCells = flexMergeRestrictColumns .MergeCol(0) = True .Cell(flexcpBackColor, 1, 0) = &HC0E0FF End With End If End If 'loi: End Sub Private Sub VSFlexGrid1Duyet_EnterCell() With VSFlexGrid1Duyet .Cell(flexcpPicture, .RowSel, .ColSel) = Image3 End With End Sub Private Sub VSFlexGrid1Duyet_LeaveCell() With VSFlexGrid1Duyet .Cell(flexcpPicture, .RowSel, .ColSel) = Nothing End With End Sub Private Sub VSFlexGrid1Tree_EnterCell(Index As Integer) Select Case Index Case 0 With VSFlexGrid1Tree(Index) If .ColSel 3 Then .Cell(flexcpPicture, .RowSel, .ColSel) = Image3 Else '.Cell(flexcpPicture, .RowSel, .ColSel) = LoadPicture("C:\QLKH\GRAPHICS\ICONS\FLAGS\Flgbrazl.Ico") End If End With Case 1 With VSFlexGrid1Tree(Index) If .ColSel 2 Then .Cell(flexcpPicture, .RowSel, .ColSel) = Image3 Else '.Cell(flexcpPicture, .RowSel, .ColSel) = LoadPicture("C:\QLKH\GRAPHICS\ICONS\INDUSTRY\Bicycle.ico") End If End With Case 2 With VSFlexGrid1Tree(Index) If .ColSel 2 Then .Cell(flexcpPicture, .RowSel, .ColSel) = Image3 Else '.Cell(flexcpPicture, .RowSel, .ColSel) = LoadPicture("C:\QLKH\GRAPHICS\ICONS\MISC\Mike.Ico") End If End With Case 3 With VSFlexGrid1Tree(Index) If .ColSel 1 Then .Cell(flexcpPicture, .RowSel, .ColSel) = Image3 Else '.Cell(flexcpPicture, .RowSel, .ColSel) = LoadPicture("C:\QLKH\GRAPHICS\ICONS\MISC\Clock05.Ico") End If End With End Select End Sub Private Sub VSFlexGrid1Tree_LeaveCell(Index As Integer) Select Case Index Case 0 With VSFlexGrid1Tree(Index) If .ColSel 3 Then .Cell(flexcpPicture, .RowSel, .ColSel) = LoadPicture() Else Exit Sub End If End With Case 1, 2 With VSFlexGrid1Tree(Index) If .ColSel 2 Then .Cell(flexcpPicture, .RowSel, .ColSel) = LoadPicture() Else Exit Sub End If End With Case Else With VSFlexGrid1Tree(Index) If .ColSel 1 Then .Cell(flexcpPicture, .RowSel, .ColSel) = LoadPicture() Else Exit Sub End If End With End Select End Sub Option Explicit Private Sub cmdXemDL_Click() On Error GoTo loi With comdXemDL .CancelError = True .DialogTitle = "Chọn tệp backup để xem" .Filter = "Text Files(*.txt)|*.txt|All Files(*.*)|*.*" .FilterIndex = 1 .MaxFileSize = 200 .InitDir = "C:\QLKH\Backup" .ShowOpen VSFlexGrid1XemDL.LoadGrid .FileName, flexFileAll End With loi: End Sub Private Sub cmdXemDL_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) lblThongbao.Visible = True imgMuiten.Visible = True End Sub Private Sub Form_Load() HienForm Me End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) lblThongbao.Visible = False imgMuiten.Visible = False End Sub Option Explicit 'Khai báo hai biến tiếp cận dữ liệu. Public cnado As New ADODB.Connection Public rsado As New ADODB.Recordset 'Ta định nghĩa một thủ tục kiểm tra giá trị nhập vào các Textbox 'Trong thủ tục có hai tham số DieuKhien:chỉ điều khiển cần nhập 'nKeyAscii:chỉ mã Ascii của ký tự được nhập Public Sub PheChuanKeyPress(Dieukhien As Control, nKeyAscii As Integer) Dim sMaxLength As String 'Biến này dùng để chứa chuỗi con của thuộc tính Tag của điều khiển Dim sKey As String * 1 'Biến này dùng để chứa ký tự được nhập vào từ bàn phím vào trong điều 'khiển If nKeyAscii 126 Then 'Kiểm tra nếu ký tự nhập vào là các phím đặc biệt trên bàn phím 'thì thoát khỏi thủ tục Beep Exit Sub Else: sMaxLength = Right$(Dieukhien.Tag, Len(Dieukhien.Tag) - 1) 'TH còn lại thì gán chuỗi con lấy từ thuộc tính Tag của điều khiển 'trừ ký tự đầu tiên cho biến sMaxLength(chính là số ký tự được nhập 'Vào điều khiển) End If If Len(Dieukhien.Text) > Val(sMaxLength) Then 'Kiểm tra xem số ký nhập vào điều khiển đã lớn hơn số ký tự cho 'phép hay chưa Beep nKeyAscii = 0 MsgBox "Số ký tự đã vượt qua giới hạn cho phép", vbInformation, "Thông báo" 'Tắt phím nhập Exit Sub End If sKey = UCase(Chr$(nKeyAscii)) 'đổi mã Ascii sang kiểu ký tự và đỏi ký tự đó ra chữ hoa đồng thời gán cho biến sKey Select Case Left$(Dieukhien.Tag, 1) 'Kiểm tra ký tự đầu tiên của thuộc tính Tag của điều khiển Case "A" 'Tức là điều khiển đó chỉ cho phép nhập ký tự If (Asc(sKey) 32) Or Asc(sKey) > 90 Then 'Kiểm tra nếu mã Ascii của phím nhập mà không 'phải là mã của ký tự thì tắt phím nhập và thoát khỏi thủ tục Beep nKeyAscii = 0 'Tắt phím nhập MsgBox "Bạn không thể nhập số vào đây", vbInformation, "Chú ý" Exit Sub End If Case "N" 'Tức là điểu khiển đó chỉ cho phép nhập phím số If (Asc(Chr$(nKeyAscii)) 46) Or Asc(Chr$(nKeyAscii)) > 57 Then 'Kiểm tra xem phím nhâp có mã Ascii thuộc kiểu số hay không Beep nKeyAscii = 0 'Tắt phím nhập MsgBox "Bạn không thể nhập ký tự vào đây", vbInformation, "Chú ý" Exit Sub End If Case "*" End Select 'Chú ý thuộc tính Tag của điều khiển qui định kiểu dữ liệu có thể nhập vào 'điều khiển đó vd:A11 ,điều khiển đó chỉ cho phép kiểu ký tự và tối đa là 11 ký tự 'N4:điều khiển đó chỉ cho phép cho phép nhập kiểu số với tối đa 4 sô End Sub Public Sub Vohieuhoa(ByVal FrmCTD As Form) Dim Dieukhien As Control For Each Dieukhien In FrmCTD.Controls If (TypeOf Dieukhien Is TextBox) Or (TypeOf Dieukhien Is ComboBox) Or (TypeOf Dieukhien Is RichTextBox) Or (TypeOf Dieukhien Is MaskEdBox) Or (TypeOf Dieukhien Is DBCombo) Or (TypeOf Dieukhien Is DTPicker) Or (TypeOf Dieukhien Is CheckBox) Then Dieukhien.Enabled = False ElseIf TypeOf Dieukhien Is CommandButton Then Select Case Dieukhien.Name Case "cmdThem" Dieukhien.Enabled = True Case "cmdXoa" Dieukhien.Enabled = True Case "cmdLuu" Dieukhien.Enabled = False Case "cmdLocnhanh" Dieukhien.Enabled = True Case "cmdHDThemCTHD" Dieukhien.Enabled = True Case Else Dieukhien.Enabled = False End Select Else 'Dieukhien.Enabled = True End If Next End Sub Public Sub KhoitaoControlsLucThem(ByVal FrmCTD As Form) ', ByVal DataKetnoi As Data) Dim Dieukhien As Control 'DataKetnoi.Enabled = False For Each Dieukhien In FrmCTD.Controls If TypeOf Dieukhien Is CommandButton Then Select Case Dieukhien.Name Case "cmdThem" Dieukhien.Enabled = False Case "cmdXoa" Dieukhien.Enabled = False Case "cmdLuu" Dieukhien.Enabled = True Case "cmdLocnhanh" Dieukhien.Enabled = True Case Else Dieukhien.Enabled = True End Select End If If (TypeOf Dieukhien Is TextBox) Or (TypeOf Dieukhien Is ComboBox) Or (TypeOf Dieukhien Is RichTextBox) Or (TypeOf Dieukhien Is MaskEdBox) Or (TypeOf Dieukhien Is DBCombo) Then Dieukhien.Enabled = True Dieukhien.Text = "" ElseIf TypeOf Dieukhien Is DTPicker Then Dieukhien.Enabled = True Dieukhien.Value = Now() ElseIf (TypeOf Dieukhien Is CheckBox) Then Dieukhien.Enabled = True Dieukhien.Value = 0 Else End If Next End Sub Public Sub Xoa(ByVal DataKetnoi As Data) 'On Error GoTo loi If MsgBox("Bạn có muốn xoá bản ghi này hay không?", vbYesNo, "Thông báo") = vbYes Then DataKetnoi.Recordset.Delete DataKetnoi.Refresh 'DataKetnoi.Recordset.MoveLast Else Exit Sub End If 'loi: ' MsgBox "Không có dữ liệu để xoá", vbInformation, "Thông báo" ' Exit Sub End Sub Public Sub KhoitaoControlsLucLuu(ByVal FrmCTD As Form) ', ByVal DataKetnoi As Data) Dim Dieukhien As Control 'DataKetnoi.Enabled = True For Each Dieukhien In FrmCTD.Controls If TypeOf Dieukhien Is CommandButton Then Select Case Dieukhien.Name Case "cmdThem" Dieukhien.Enabled = True Case "cmdXoa" Dieukhien.Enabled = True Case "cmdLuu" Dieukhien.Enabled = False Case "cmdLocnhanh" Dieukhien.Enabled = True Case Else Dieukhien.Enabled = False End Select End If Next End Sub Public Sub VaoO(ByVal Luoi As VSFlexGrid, ByVal Nhan As Label) With Luoi .Cell(flexcpFontBold, 0, .ColSel) = True .Cell(flexcpForeColor, 0, .ColSel) = &H80& .Cell(flexcpFontBold, .RowSel, .ColSel) = True Nhan.Caption = "(" & .RowSel & "," & .ColSel & ")" End With End Sub Public Sub RoikhoiO(ByVal Luoi As VSFlexGrid) With Luoi .Cell(flexcpFontBold, 0, .ColSel) = False .Cell(flexcpForeColor, 0, .ColSel) = vbBlack .Cell(flexcpFontBold, .RowSel, .ColSel) = False End With End Sub Public Sub SaukhiSua(ByVal Luoi As VSFlexGrid, ByVal Gui As String) On Error GoTo loi With Luoi If (.Col 0) And (.Cell(flexcpText, .RowSel, .ColSel) Gui) Then If MsgBox("Bạn có muốn lưu ô này vào trong CSDL hay klhông?", vbYesNo, "Thông báo") = vbNo Then .Cell(flexcpText, .RowSel, .ColSel) = Gui Exit Sub Else .Cell(flexcpForeColor, .RowSel, .ColSel) = vbRed End If Else End If End With loi: If Luoi.Col = 0 Then MsgBox "Bạn không thể thay đổi dữ liệu trên cột này", vbInformation, "Thông báo" Luoi.Cell(flexcpForeColor, Luoi.RowSel, Luoi.ColSel) = vbBlack Exit Sub End If End Sub Public Sub Truockhisua(ByVal Luoi As VSFlexGrid, ByVal GuiDL As String) With Luoi GuiDL = .Cell(flexcpText, .RowSel, .ColSel) End With End Sub Public Sub HienToolTipText(ByVal Luoi As VSFlexGrid) On Error GoTo loi With Luoi .ToolTipText = "Ô có giá trị là: " & .Cell(flexcpText, .MouseRow, .MouseCol) End With loi: Exit Sub End Sub Public Sub Ketnoi(ByVal DataKetnoi As Data, ByVal SQL As String) With DataKetnoi .DatabaseName = "C:\QLKH\CSDL\CsdlQLKH.mdb" .RecordSource = SQL .Refresh End With End Sub Public Sub HienForm(ByVal frm As Form) With frm .Top = (Screen.Height - frm.Height) / 2 .Left = (Screen.Width - frm.Width) / 2 End With End Sub Public Sub CauhinhLuoiChinh(ByVal Luoi As VSFlexGrid) With Luoi .Editable = flexEDKbd .DataMode = flexDMBound .ExplorerBar = flexExSort .AutoResize = True .AutoSearch = flexSearchFromCursor .SelectionMode = flexSelectionFree End With End Sub Public Sub CauhinhLuoiPhu(ByVal Luoi As VSFlexGrid) With Luoi .Editable = flexEDNone .DataMode = flexDMBound .ExplorerBar = flexExSort .AutoResize = True .AutoSearch = flexSearchFromCursor .SelectionMode = flexSelectionFree End With End Sub Public Function ThanhTien(ByVal Soluong As Integer, ByVal Dongia As Currency) As Currency ThanhTien = Soluong * Dongia End Function Public Function TienSauTrietKhau(ByVal Soluong As Integer, ByVal Dongia As Currency, ByVal Trietkhau As Double) As Currency TienSauTrietKhau = Soluong * Dongia * (1 - Trietkhau) End Function 'Hàm này tính tiền thực lãnh sau khi đã nộp thuế VAT Public Function ThucLanh(ByVal Soluong As Integer, ByVal Dongia As Currency, ByVal Trietkhau As Double) As Currency 'Thực lãnh sau khi đã trừ đi thuế VAT ThucLanh = Soluong * Dongia * (1 - Trietkhau) * 0.9 End Function 'Tạo đối tượng ADODB để tiếp cận dữ liệu Public Sub KhoitaoADODB(ByVal SQL As String) On Error GoTo loi 'Thực sự tạo biến đối tượng tiếp cận dữ liệu,đối tượng này dùng 'để kết nối với một CSDL. Set cnado = New ADODB.Connection With cnado 'Chỉ ra trình cung cấp dữ liệu cho đối tượng .Provider = "Microsoft.Jet.OLEDB.3.51" .ConnectionString = "C:\QLKH\CSDL\CsdlQLKH.mdb" .Open End With 'Thực sự tạo ra một đối tượng Recordet. Set rsado = New ADODB.Recordset With rsado .CursorType = adOpenKeyset .LockType = adLockOptimistic 'Chỉ ra nguồn dữ liệu là một Recorset:Bảng,Câu lệnh SQL .Source = SQL 'Kích hoạt kết nối,tức khi đã có đối tượng kết nối và đối tượng 'Recordset nhưng vì đối tượng Recordset là một đối tượng 'không phải là đối tượng con của Connection trong cây phân 'cấp ADODB nên ta muốn nhận được một đối tượng Recordset 'Thực sự thì cần câu lệnh này. .ActiveConnection = cnado .Open End With loi: End Sub 'Thủ tục này định nghĩa các Controls nào được phép để trống Public Sub BuocphaidienDL(ByVal Dieukhien As Control, ByVal PhaidienDL As Boolean) If PhaidienDL = True Then If Dieukhien.Text = "" Then Dieukhien.SetFocus MsgBox "Bạn phải điền dữ liệu vào đây", vbInformation, "Thông báo" Else End If Else End If End Sub Public Sub ThaydoiDD(ByVal SQL As String) 'Thủ tục này định nghĩa đối tượng tiếp cận dữ liêu,đồng thời 'cho phép thay đổi đường dẫn CSDL On Error GoTo loi Set cnado = New ADODB.Connection With cnado .Provider = "Mirosoft.Jet.OLEDB.3.51" .ConnectionString = "C:\QLKH\CSDL\CsdlQLKH.mdb" .Open End With With rsado .LockType = adLockPessimistic .CursorType = adOpenKeyset .Source = SQL .ActiveConnection = cnado .Open End With loi: If Error = 80004005 Then If MsgBox("ứng dụng không kết nối được với CSDL,đường dẫn có thể bị thay đổi.Bạn có muốn tìm đường dẫn hay không?", vbYesNo, "Thông báo") = vbYes Then Dim cdHopthoai As CommonDialog Dim Gan As String Dim Doc As String With cdHopthoai .CancelError = True .DialogTitle = "Chọn đường dẫn đến CSDL" .Filter = "Microsoft Acess Files(*.mdb)|*.mdb" .Filter = 1 .MaxFileSize = 200 .InitDir = "C:\QLKH\CSDL" .ShowOpen Gan = cdHopthoai.FileName End With Dim fso As New FileSystemObject Dim fil As File Dim ts As TextStream Set fso = CreateObject("Scripting.FileSystemObject") fso.CreateTextFile ("C:\QLKH\Duongdan\Path.txt") Set fil = fso.GetFile("C:\QLKH\Duongdan\Path.txt") Set st = fil.OpenAsTextStream(ForWriting) ts.Write (Gan) ts.Close Set ts = fil.OpenAsTextStream(ForReading) Doc = ts.ReadLine ts.Close Set cnado = New ADODB.Connection With cnado .Provider = "Microsoft.Jet.OLEDB.3.51" .ConnectionString = """ & Doc & """ .Open End With rsado .LockType = adLockPessimistic .CursorType = adOpenKeyset .Source = SQL .ActiveConnection = cnado .Open End With Else Exit Sub End If End If End Sub Public Sub BackupDL() 'ByVal LuoiCanBackUp As VSFlexGrid, ByVal TentepTxt As String) Dim cmHopthoai As CommonDialog With cmHopthoai '.CancelError = True '.DialogTitle = "Chọn thư mục cần Backup dữ liệu" '.Filter = "Text Files(*.txt)|*.txt|Microsoft Words(*.doc)|*.doc" '.FilterIndex = 1 '.MaxFileSize = 200 '.InitDir = "C:\QLKH\Backup" .ShowSave End With End Sub Public Sub XoaTatCaDL(ByVal dataNguon As Data) With Data Do While .Recordset.EOF = False .Recordset.Delete .MoveNext Loop .Refresh End With End Sub ._.

Các file đính kèm theo tài liệu này:

  • docP0053.doc
Tài liệu liên quan