Đề tài Tìm hiểu hệ thống thông tin quản lý bán hàng

Tài liệu Đề tài Tìm hiểu hệ thống thông tin quản lý bán hàng: 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ững 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...

doc154 trang | Chia sẻ: hunglv | Lượt xem: 1283 | Lượt tải: 1download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Tìm hiểu hệ thống thông tin quản lý bán hàng, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
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ững 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 = VtChChartType2dBar 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 Loop .Close End With End Sub Private Sub Form_Unload(Cancel As Integer) cnado.Close Set cnado = Nothing End Sub Option Explicit Private Sub cmdBangtinh_Click() On Error GoTo loi Shell "C:\WINDOWS\CALC.EXE", vbMaximizedFocus loi: Exit Sub End Sub Private Sub cmdBCBHTheoHH_Click() rptBCBHTheoHH.Show End Sub Private Sub cmdBCBHTheoNCC_Click() rptBCBHTheoNCC.Show End Sub Private Sub cmdBCBHTheonhom_Click() rptBCBHTheoNhomHH.Show End Sub Private Sub cmdBCBHTheoNV_Click() rptBCBHTheoNV.Show End Sub Private Sub cmdBCBHTheoQui_Click() imgMuiten.Visible = True frmQui.Show End Sub Private Sub cmdBCDSSP_Click() frmBCHang.Show imgMuiten1.Visible = True End Sub Private Sub cmdBCBHTheothang_Click() rptBCBHTheoThang.Show End Sub Private Sub cmdBCDSHH_Click() imgMuiten1.Visible = True frmBCHang.Show End Sub Private Sub cmdBCDSKhach_Click() rptDSKhachhang.Show End Sub Private Sub cmdExcel_Click() On Error GoTo loi Shell "C:\Program Files\Microsoft Office\Office\EXCEL.EXE", vbMaximizedFocus loi: Exit Sub End Sub Private Sub cmdHanghoa_Click() frmSanpham.Show End Sub Private Sub cmdLuuDL_Click() On Error GoTo loi Dim Ten As String With comdHopthoai .CancelError = True .DialogTitle = "Bạn phải đặt tên File thì mới Backup được dữ liêu" .Filter = "Text Files(*.txt)|*.txt|Microsoft Words(*.doc)|*.doc|All Files(*.*)|*.*" .FilterIndex = 1 .MaxFileSize = 200 .InitDir = "C:\QLKH\Backup" .ShowSave Screen.MousePointer = 99 Screen.MouseIcon = LoadPicture("C:\QLKH\GRAPHICS\CURSORS\Wait07.cur") Ten = frmChitietHD.VSFlexGrid1ChitietHD.Name frmChitietHD.VSFlexGrid1ChitietHD.SaveGrid .InitDir & "\" & Right$(Ten, Len(Ten) - 10) & ".txt", flexFileAll Ten = frmHDBanhang.VSFlexGrid1HD.Name frmHDBanhang.VSFlexGrid1HD.SaveGrid .InitDir & "\" & Right$(Ten, Len(Ten) - 10) & ".txt", flexFileAll Ten = frmKhachhang.VSFlexGridKhachhang.Name frmKhachhang.VSFlexGridKhachhang.SaveGrid .InitDir & "\" & Right$(Ten, Len(Ten) - 10) & ".txt", flexFileAll Ten = frmNguoigui.VSFlexGrid1NgGui.Name frmNguoigui.VSFlexGrid1NgGui.SaveGrid .InitDir & "\" & Right$(Ten, Len(Ten) - 10) & ".txt", flexFileAll Ten = frmNhaCCap.VSFlexGrid1Ncc.Name frmNhaCCap.VSFlexGrid1Ncc.SaveGrid .InitDir & "\" & Right$(Ten, Len(Ten) - 10) & ".txt", flexFileAll Ten = frmNhanvienbanhang.VSFlexGrid1Nnbh.Name frmNhanvienbanhang.VSFlexGrid1Nnbh.SaveGrid .InitDir & "\" & Right$(Ten, Len(Ten) - 10) & ".txt", flexFileAll Ten = frmNhomSP.VSFlexGrid1NhomHH.Name frmNhomSP.VSFlexGrid1NhomHH.SaveGrid .InitDir & "\" & Right$(Ten, Len(Ten) - 10) & ".txt", flexFileAll Ten = frmSanpham.VSFlexGrid1SP.Name frmSanpham.VSFlexGrid1SP.SaveGrid .InitDir & "\" & Right$(Ten, Len(Ten) - 10) & ".txt", flexFileAll MousePointer = 0 End With loi: End Sub Private Sub cmdLuuDL_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) With lblChuthich .Visible = True .Caption = "Cho phép bạn lưu bảng dữ liệu lên tệp *.txt với tên tệp được đặt tự động" End With End Sub Private Sub cmdNapDL_Click() frmXemDLCu.Show End Sub Private Sub cmdNapDL_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) With lblChuthich .Visible = True .Caption = "Cho phép bạn xem dữ liệu đẫ được backup lên tệp *.txt" End With End Sub Private Sub cmdNhapCTietHD_Click() frmChitietHD.Show End Sub Private Sub cmdNhapHDBH_Click() frmHDBanhang.Show End Sub Private Sub cmdNhapKhachhang_Click() frmKhachhang.Show End Sub Private Sub cmdNhapNCC_Click() frmNhaCCap.Show End Sub Private Sub cmdNhapNguoigui_Click() frmNguoigui.Show End Sub Private Sub cmdNhapNhomSP_Click() frmNhomSP.Show End Sub Private Sub cmdThoatCT_Click() Unload Me End Sub Private Sub cmdQLNSD_Click() MsgBox "Tính năng này sẽ được phát triển trong phiên bản sau", vbInformation, "Thông báo" End Sub Private Sub cmdQLNSD_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) With lblChuthich .Visible = True .Caption = "Tính năng này chưa được nghiên cứu,xin bạn hãy chờ đến phiên bản sau" End With End Sub Private Sub cmdThoat_Click() Unload Me End Sub Private Sub cmdTonghop_Click() imgMuiten2.Visible = True frmTonghop.Show End Sub Private Sub cmdTonghop_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) With lblChuthichTH .Visible = True .Caption = "Cho phép ta xem thông tin dưới dạng lưới cô đọng hoặc có thể xuất dữ liệu lên Excel" End With End Sub Private Sub cmdTrogiup_Click() MsgBox "Tính năng này sẽ được phát triển trong phiên bản sau.", vbInformation, "Thông báo" End Sub Private Sub cmdTrogiup_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) With lblChuthich .Visible = True .Caption = "Tính năng này chưa có" End With End Sub Private Sub cmdWord_Click() On Error GoTo loi Shell "C:\Program Files\Microsoft Office\Office\WINWORD.EXE", vbMaximizedFocus loi: Exit Sub End Sub Private Sub cmdXemTT_Click() frmTreeView.Show End Sub Private Sub cmdXemTT_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) With lblChuthichTT .Visible = True .Caption = "Cung cấp thông tin một cách trực quan về kết quả bán hàng của từng nhân viên,hàng hoá v.v..." End With End Sub Private Sub cmdXoaDL_Click() If MsgBox("Thực hiện công việc này sẽ làm cho dữ liệu bị xoá hết.Bạn có muốn tiếp tục hay không?", vbYesNo + vbCritical, "Thông báo") = vbYes Then XoaTatCaDL frmChitietHD.dataCTHD XoaTatCaDL frmHDBanhang.dataHDBH XoaTatCaDL frmNhanvienbanhang.dataNvbh XoaTatCaDL frmKhachhang.dataKhachhang XoaTatCaDL frmNguoigui.dataNguoigui XoaTatCaDL frmSanpham.dataSanpham XoaTatCaDL frmNhaCCap.dataNhaCC XoaTatCaDL frmSanpham.dataSanpham Else Exit Sub End If End Sub Private Sub cmdXoaDL_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) With lblChuthich .Visible = True .Caption = "Nghịch vào đây sẽ rất nguy hiển,dữ liệu sẽ bị mất tất,hãy cẩn thận nhé." End With End Sub Private Sub cmnNhapNVBH_Click() frmNhanvienbanhang.Show End Sub Private Sub Form_Load() HienForm Me Me.tabLienket.Tab = 0 lblChuchay.Top = 120 lblChuchay.Left = Picture2.Width End Sub Private Sub Form_Unload(Cancel As Integer) Unload frmQui Unload frmBCHang Unload frmTonghop Unload frmDothi Unload frmXemDLCu End Sub Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) With lblChuthichTT .Visible = False End With End Sub Private Sub Image2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) With lblChuthichTH .Visible = False End With End Sub Private Sub Image3_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) With lblChuthich .Visible = False End With End Sub Private Sub Timer1_Timer() Dim X As Integer X = 15 If lblChuchay.Left > -lblChuchay.Width Then lblChuchay.Left = lblChuchay.Left - X Else lblChuchay.Left = frmLienket.Picture2.Width 'Timer1_Timer End If End Sub Option Explicit Private GuiTT As String Private Sub cmdLocnhanh_Click() frmNguoiguiLoc.Show End Sub Private Sub cmdLuu_Click() 'Gọi thủ tục KhoitaolucLuu KhoitaoControlsLucLuu Me With dataNguoigui.Recordset .Fields("MaNGui").Value = txtNgGuiMa.Text .Fields("TenCtyGui").Value = txtNgGuiTenCty.Text .Fields("Dienthoai").Value = txtNgGuiDThoai.Text .Fields("Fax").Value = txtNgGuiFax.Text .Fields("Email").Value = txtNgGuiE_mail.Text .Fields("Wedside").Value = txtNgGuiSide.Text .Update End With dataNguoigui.Refresh 'Gọi thủ tục dataNguoigui.Recordset.MoveLast Vohieuhoa Me End Sub Private Sub cmdThem_Click() Dim SQLMatudong As String SQLMatudong = "Select Max([MaNGui]) as Lonnhat From tblNguoigui" 'Gọi thủ tục tạo data kết nối cho txtNguoiguiMa Ketnoi dataMatudong, SQLMatudong dataNguoigui.Recordset.AddNew 'Gọi thủ tục để khởi tạo Controls lúc thêm KhoitaoControlsLucThem Me 'Tự động điền mã vào txtNguoiguimMa If dataNguoigui.Recordset.RecordCount = 0 Then txtNgGuiMa.Text = "1" dataNguoigui.Caption = "1" Else With dataMatudong txtNgGuiMa.Text = "" & .Recordset.Fields("Lonnhat").Value + 1 dataNguoigui.Caption = "" & .Recordset.Fields("Lonnhat").Value + 1 End With End If txtNgGuiTenCty.SetFocus lblMatudong.Visible = True End Sub Private Sub cmdXoa_Click() If dataNguoigui.Recordset.RecordCount > 0 Then If dataNguoiguiCtietHD.Recordset.RecordCount > 0 Then MsgBox "Bạn không thể xoá được 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 dataNguoigui dataNguoigui.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 dataNguoigui_Reposition() On Error GoTo loi Dim SQLNguoiguiCTHD As String SQLNguoiguiCTHD = "Select *" & _ " From tblHoadon" & _ " Where NGuiID=" & dataNguoigui.Recordset.Fields("MaNGui").Value & "" 'Gọi thủ tục tạo data kết nối cho lưới phụ Ketnoi dataNguoiguiCtietHD, SQLNguoiguiCTHD With dataNguoigui .Caption = "" & .Recordset.Fields("MaNGui").Value End With With VSFlexGrid1NgGuiCTHD .MergeCells = flexMergeRestrictColumns .MergeCol(5) = True End With loi: End Sub Private Sub Form_Load() Dim SQLNguoigui As String SQLNguoigui = "Select * From tblNguoigui" 'Gọi thủ tục HienForm HienForm Me 'Gọi thủ tục vô hiệu hoá các điều khiển không cần thiết Vohieuhoa Me 'Gọi thủ tục khởi tạo data kết nối Ketnoi dataNguoigui, SQLNguoigui 'Gọi thủ tục định dạng lưới CauhinhLuoiChinh VSFlexGrid1NgGui CauhinhLuoiPhu VSFlexGrid1NgGuiCTHD End Sub Private Sub txtNgGuiDThoai_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtNgGuiDThoai, KeyAscii If KeyAscii = 13 Then txtNgGuiFax.SetFocus End If End Sub Private Sub txtNgGuiDThoai_LostFocus() BuocphaidienDL txtNgGuiDThoai, True End Sub Private Sub txtNgGuiE_mail_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtNgGuiE_mail, KeyAscii If KeyAscii = 13 Then txtNgGuiSide.SetFocus End If End Sub Private Sub txtNgGuiE_mail_LostFocus() BuocphaidienDL txtNgGuiE_mail, False End Sub Private Sub txtNgGuiFax_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtNgGuiFax, KeyAscii If KeyAscii = 13 Then txtNgGuiE_mail.SetFocus End If End Sub Private Sub txtNgGuiFax_LostFocus() BuocphaidienDL txtNgGuiFax, True End Sub Private Sub txtNgGuiSide_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtNgGuiSide, KeyAscii If KeyAscii = 13 Then cmdLuu.SetFocus End If End Sub Private Sub txtNgGuiSide_LostFocus() BuocphaidienDL txtNgGuiSide, False End Sub Private Sub txtNgGuiTenCty_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtNgGuiTenCty, KeyAscii If KeyAscii = 13 Then txtNgGuiDThoai.SetFocus End If End Sub Private Sub txtNgGuiTenCty_LostFocus() BuocphaidienDL txtNgGuiTenCty, True End Sub Private Sub VSFlexGrid1NgGui_AfterEdit(ByVal Row As Long, ByVal Col As Long) On Error GoTo loi With VSFlexGrid1NgGui 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 VSFlexGrid1NgGui .Cell(flexcpForeColor, .RowSel, .ColSel) = vbBlack End With Exit Sub End If End Sub Private Sub VSFlexGrid1NgGui_BeforeEdit(ByVal Row As Long, ByVal Col As Long, Cancel As Boolean) With VSFlexGrid1NgGui GuiTT = .Cell(flexcpText, .RowSel, .ColSel) End With End Sub Private Sub VSFlexGrid1NgGui_EnterCell() 'Gọi thủ tục VaoO VSFlexGrid1NgGui, Label1 End Sub Private Sub VSFlexGrid1NgGui_LeaveCell() 'Gọi thủ tục RoikhoiO VSFlexGrid1NgGui End Sub Private Sub VSFlexGrid1NgGui_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'Gọi thủ tục HienToolTipText VSFlexGrid1NgGui End Sub Private Sub VSFlexGrid1NgGuiCTHD_EnterCell() VaoO VSFlexGrid1NgGuiCTHD, Label1 End Sub Private Sub VSFlexGrid1NgGuiCTHD_LeaveCell() RoikhoiO VSFlexGrid1NgGuiCTHD End Sub Private Sub VSFlexGrid1NgGuiCTHD_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) HienToolTipText VSFlexGrid1NgGuiCTHD End Sub Option Explicit Private Sub cmdTimkiem_Click() On Error GoTo loi Dim SQLTkiemNGui As String If cboLocNGuima.Text = "Tất cả" Then SQLTkiemNGui = "Select * From tblNguoigui" Else SQLTkiemNGui = "Select *" & _ " From tblNguoigui" & _ " Where MaNGui=" & cboLocNGuima.Text & "" End If Ketnoi dataNGuiLoc, SQLTkiemNGui If dataNGuiLoc.Recordset.RecordCount = 0 Then MsgBox "Không tìm thấy người gửi có mã: " & cboLocNGuima.Text & "", vbInformation, "Thông báo" cboLocNGuima.SelStart = 0 cboLocNGuima.SelLength = Len(cboLocNGuima.Text) Exit Sub Else lblKQTK.Visible = True End If loi: End Sub Private Sub Form_Load() Dim SQL As String SQL = "Select * From tblNguoigui" HienForm Me CauhinhLuoiPhu VSFlexGridNguiTK KhoitaoADODB SQL With cboLocNGuima .AddItem "Tất cả" End With With rsado Do While .EOF = False cboLocNGuima.AddItem .Fields("MaNGui").Value .MoveNext Loop .Close End With End Sub Private Sub Form_Unload(Cancel As Integer) cnado.Close Set cnado = Nothing End Sub Option Explicit Private GuiTT As String Private Sub cboNCCNuoc_KeyPress(KeyAscii As Integer) PheChuanKeyPress cboNCCNuoc, KeyAscii If KeyAscii = 13 Then meditDthoaiNcc.SetFocus End If End Sub Private Sub cboNCCNuoc_LostFocus() BuocphaidienDL cboNCCNuoc, True End Sub Private Sub cboNCCTpho_KeyPress(KeyAscii As Integer) PheChuanKeyPress cboNCCTpho, KeyAscii If KeyAscii = 13 Then cboNCCVung.SetFocus End If End Sub Private Sub cboNCCTpho_LostFocus() BuocphaidienDL cboNCCTpho, True End Sub Private Sub cboNCCVung_KeyPress(KeyAscii As Integer) PheChuanKeyPress cboNCCVung, KeyAscii If KeyAscii = 13 Then txtNCCmavung.SetFocus End If End Sub Private Sub cboNCCVung_LostFocus() BuocphaidienDL cboNCCVung, True End Sub Private Sub cmdLocnhanh_Click() frmNhaCCLoc.Show End Sub Private Sub cmdLuu_Click() 'Gọi thủ tục khởi tạo Controls lúc luu KhoitaoControlsLucLuu Me With dataNhaCC.Recordset .Fields("MaNhaCC").Value = txtNCCma.Text .Fields("TenCtyNcc").Value = txtNCCten.Text .Fields("TenDTNcc").Value = txtNCCTenDT.Text .Fields("ChucdanhDTNcc").Value = txtNCCChucdanh.Text .Fields("DiachiNcc").Value = rtxtDiachiNcc.Text .Fields("ThanhphoNcc").Value = cboNCCTpho.Text .Fields("VungNcc").Value = cboNCCVung.Text .Fields("MavungNcc").Value = txtNCCmavung.Text .Fields("NuocNcc").Value = cboNCCNuoc.Text .Fields("DienthoaiNcc").Value = meditDthoaiNcc.Text .Fields("FaxNcc").Value = txtNCCFax.Text .Fields("WedsideNcc").Value = txtNCCWed.Text .Fields("EmailNcc").Value = txtNCCEmail.Text .Update End With dataNhaCC.Refresh 'Gọi thủ tục Vohieuhoa dataNhaCC.Recordset.MoveLast Vohieuhoa Me End Sub Private Sub cmdThem_Click() Dim SQLMatudong As String SQLMatudong = "Select Max([MaNhaCC]) as Lonnhat From tblNhacungcap" 'Gọi thủ tục tạo Data kết nối để tạo nguồn kết nối cho txtNccma Ketnoi dataMatudong, SQLMatudong dataMatudong.Refresh dataNhaCC.Recordset.AddNew 'Gọi hàm để qui định thuộc tính các Controls lúc Thêm KhoitaoControlsLucThem Me If dataNhaCC.Recordset.RecordCount = 0 Then txtNCCma.Text = "1" dataNhaCC.Caption = "1" Else With dataMatudong txtNCCma.Text = "" & .Recordset.Fields("Lonnhat").Value + 1 dataNhaCC.Caption = "Nhà CC: " & .Recordset.Fields("Lonnhat").Value + 1 End With End If txtNCCten.SetFocus lblTudong.Visible = True End Sub Private Sub cmdXoa_Click() If dataNhaCC.Recordset.RecordCount > 0 Then If dataNccChitietSp.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 Xoa Xoa dataNhaCC dataNhaCC.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 dataNhaCC_Reposition() On Error GoTo loi Dim SQLNccCTietSP As String SQLNccCTietSP = "Select *" & _ " From tblSanpham" & _ " Where NhaCCID=" & dataNhaCC.Recordset.Fields("MaNhaCC").Value & "" 'Gọi thủ tục khởi tạo data kết nỗi cho lưới chi tiết Ketnoi dataNccChitietSp, SQLNccCTietSP dataNccChitietSp.Refresh With dataNhaCC .Caption = "" & .Recordset.Fields("ManhaCC").Value End With With VSFlexGrid1NccCtietSP .MergeCells = flexMergeRestrictColumns .MergeCol(2) = True End With loi: End Sub Private Sub Form_Load() Dim SQLNhaCC As String SQLNhaCC = "Select * From tblNhacungcap Order By NuocNcc" 'Gọi thủ tục Vohieuhoa các Controls Vohieuhoa Me 'Gọi thủ tục hiện Form HienForm Me 'Gọi thủ tục tạo data kết nối với nguồn dữ liệu Ketnoi dataNhaCC, SQLNhaCC optTron(1).Value = True 'Cấu hình thuộc tính cho lưới CauhinhLuoiChinh VSFlexGrid1Ncc CauhinhLuoiPhu VSFlexGrid1NccCtietSP With cboNCCTpho .AddItem "Hà Nội" .AddItem "Hải Phòng" .AddItem "Tp HCM" .AddItem "Đà Nẵng" .AddItem "Nam Định" End With With cboNCCVung .AddItem "Bắc" .AddItem "Trung" .AddItem "Nam" .AddItem "Hải đảo" .AddItem "Miền Núi" End With With cboNCCNuoc .AddItem "Việt Nam" .AddItem "Trung Quốc" .AddItem "Thái Lan" .AddItem "Indonesia" .AddItem "Malaysia" End With End Sub Private Sub meditDthoaiNcc_KeyPress(KeyAscii As Integer) PheChuanKeyPress meditDthoaiNcc, KeyAscii If KeyAscii = 13 Then txtNCCFax.SetFocus End If End Sub Private Sub meditDthoaiNcc_LostFocus() BuocphaidienDL meditDthoaiNcc, True End Sub Private Sub optTron_Click(Index As Integer) Select Case Index Case 1 optTron(0).Value = False With VSFlexGrid1Ncc .MergeCells = flexMergeNever End With Case 0 optTron(1).Value = False With VSFlexGrid1Ncc .MergeCells = flexMergeRestrictColumns .MergeCol(8) = True End With Case Else End Select End Sub Private Sub rtxtDiachiNcc_KeyPress(KeyAscii As Integer) PheChuanKeyPress rtxtDiachiNcc, KeyAscii If KeyAscii = 13 Then cboNCCTpho.SetFocus End If End Sub Private Sub rtxtDiachiNcc_LostFocus() BuocphaidienDL rtxtDiachiNcc, True End Sub Private Sub txtNCCChucdanh_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtNCCChucdanh, KeyAscii If KeyAscii = 13 Then rtxtDiachiNcc.SetFocus End If End Sub Private Sub txtNCCDThoai_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtNCCDThoai, KeyAscii If KeyAscii = 13 Then txtNCCFax.SetFocus End If End Sub Private Sub txtNCCChucdanh_LostFocus() BuocphaidienDL txtNCCChucdanh, True End Sub Private Sub txtNCCEmail_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtNCCEmail, KeyAscii If KeyAscii = 13 Then txtNCCWed.SetFocus End If End Sub Private Sub txtNCCEmail_LostFocus() BuocphaidienDL txtNCCEmail, False End Sub Private Sub txtNCCFax_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtNCCFax, KeyAscii If KeyAscii = 13 Then txtNCCEmail.SetFocus End If End Sub Private Sub txtNCCFax_LostFocus() BuocphaidienDL txtNCCFax, True End Sub Private Sub txtNCCma_KeyPress(KeyAscii As Integer) 'Gọi thủ tục PheChuan PheChuanKeyPress txtNCCma, KeyAscii If KeyAscii = 13 Then txtNCCten.SetFocus End If End Sub Private Sub txtNCCmavung_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtNCCmavung, KeyAscii If KeyAscii = 13 Then cboNCCNuoc.SetFocus End If End Sub Private Sub txtNCCmavung_LostFocus() BuocphaidienDL txtNCCmavung, True End Sub Private Sub txtNCCten_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtNCCten, KeyAscii If KeyAscii = 13 Then txtNCCTenDT.SetFocus End If End Sub Private Sub txtNCCten_LostFocus() BuocphaidienDL txtNCCten, True End Sub Private Sub txtNCCTenDT_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtNCCTenDT, KeyAscii If KeyAscii = 13 Then txtNCCChucdanh.SetFocus End If End Sub Private Sub txtNCCTenDT_LostFocus() BuocphaidienDL txtNCCTenDT, True End Sub Private Sub txtNCCWed_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtNCCWed, KeyAscii If KeyAscii = 13 Then cmdLuu.SetFocus End If End Sub Private Sub txtNCCWed_LostFocus() BuocphaidienDL txtNCCWed, False End Sub Private Sub VSFlexGrid1Ncc_AfterEdit(ByVal Row As Long, ByVal Col As Long) On Error GoTo loi With VSFlexGrid1Ncc 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 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 VSFlexGrid1Ncc .Cell(flexcpForeColor, .RowSel, .ColSel) = vbBlack End With Exit Sub End If End Sub Private Sub VSFlexGrid1Ncc_BeforeEdit(ByVal Row As Long, ByVal Col As Long, Cancel As Boolean) With VSFlexGrid1Ncc GuiTT = .Cell(flexcpText, .RowSel, .ColSel) End With End Sub Private Sub VSFlexGrid1Ncc_EnterCell() 'Gọi thủ tục VaoO VaoO VSFlexGrid1Ncc, Label1 End Sub Private Sub VSFlexGrid1Ncc_LeaveCell() 'Gọi thủ tục RoiO RoikhoiO VSFlexGrid1Ncc End Sub Private Sub VSFlexGrid1Ncc_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'Gọi thủ tục HienToolTip HienToolTipText VSFlexGrid1Ncc End Sub Private Sub VSFlexGrid1NccCtietSP_EnterCell() VaoO VSFlexGrid1NccCtietSP, Label1 End Sub Private Sub VSFlexGrid1NccCtietSP_LeaveCell() RoikhoiO VSFlexGrid1NccCtietSP End Sub Private Sub VSFlexGrid1NccCtietSP_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'Gọi thủ tục hiện ToolTip HienToolTipText VSFlexGrid1NccCtietSP End Sub Option Explicit Private Sub cmdTimkiem_Click() On Error GoTo loi Dim SQLLocNCC As String If cboLocNCCma.Text = "Tất cả" Then SQLLocNCC = "Select * From tblNhacungcap" Else SQLLocNCC = "Select *" & _ " From tblNhacungcap" & _ " Where MaNhaCC=" & cboLocNCCma.Text & "" End If Ketnoi dataLocNCC, SQLLocNCC If dataLocNCC.Recordset.RecordCount = 0 Then MsgBox "Không tìm thấy nhà cung cấp có mã: " & cboLocNCCma.Text & "", vbInformation, "Thông báo" cboLocNCCma.SelStart = 0 cboLocNCCma.SelLength = Len(cboLocNCCma.Text) Exit Sub Else lblKQTK.Visible = True End If loi: End Sub Private Sub Form_Load() Dim SQL As String SQL = "Select MaNhaCC From tblNhacungcap" HienForm Me CauhinhLuoiPhu VSFlexGridNCCloc KhoitaoADODB SQL With cboLocNCCma .AddItem "Tất cả" End With With rsado Do While .EOF = False cboLocNCCma.AddItem .Fields("MaNhaCC").Value .MoveNext Loop .Close End With End Sub Option Explicit Private GuiTT As String Private Sub cboNuocNvbh_KeyPress(KeyAscii As Integer) PheChuanKeyPress cboNuocNvbh, KeyAscii If KeyAscii = 13 Then txtDthoaiNvbh.SetFocus End If End Sub Private Sub cboNuocNvbh_LostFocus() BuocphaidienDL cboNuocNvbh, True End Sub Private Sub cboTphoNvbh_KeyPress(KeyAscii As Integer) PheChuanKeyPress cboTphoNvbh, KeyAscii If KeyAscii = 13 Then cboVungNvbh.SetFocus End If End Sub Private Sub cboTphoNvbh_LostFocus() BuocphaidienDL cboTphoNvbh, True End Sub Private Sub cboVungNvbh_KeyPress(KeyAscii As Integer) PheChuanKeyPress cboVungNvbh, KeyAscii If KeyAscii = 13 Then txtMavungNvbh.SetFocus End If End Sub Private Sub cboVungNvbh_LostFocus() BuocphaidienDL cboVungNvbh, True End Sub Private Sub cmdChonhinh_Click() On Error GoTo loi With Hopthoai 'Thuộc tính này sẽ bẫy lỗi khi ta Cancel hộp thoại,tức là nếu 'ta qui định thuộc tính này là True thì lỗi sẽ xẩy ra nếu ta Cancel .CancelError = True .DialogTitle = "Chọn hình" .Filter = "JPG Files(*.jpg)|*.jpg|Bitmap Files(*.bmp)|*.bmp" .FilterIndex = 1 .MaxFileSize = 150 .InitDir = "C:\QLBH\Hinh" .ShowOpen Picture1.Picture = LoadPicture(.FileName) lblDuongdan.Caption = "" & .FileName End With loi: 'MsgBox "Bạn đã không chọn hình.", vbInformation, "Thông báo" End Sub Private Sub cmdLocnhanh_Click() frmNhanvienbanhangLoc.Show End Sub Private Sub cmdLuu_Click() 'Gọi thủ tục khởi tạo lúc Luu KhoitaoControlsLucLuu Me With dataNvbh.Recordset .Fields("MaNBan").Value = txtMaNvbh.Text .Fields("Ten").Value = txtTenNvbh.Text .Fields("Ho").Value = txtHoNvbh.Text .Fields("Chucdanh").Value = txtChudanhNvbh.Text .Fields("Bidanh").Value = txtBidanhNvbh.Text If dtpNgaysinhNvbh.Value < Now() Then .Fields("Ngaysinh").Value = dtpNgaysinhNvbh.Value Else MsgBox "Ngày sinh không được sau: " & Now() & "", vbInformation, "Thông báo" dtpNgaysinhNvbh.SetFocus cmdLuu.Enabled = True Exit Sub End If If dtpNgayVLNvbh.Value <= Now() Then .Fields("Ngaynhanviec").Value = dtpNgayVLNvbh.Value Else MsgBox "Ngày vào làm của nhân viên không được sau: " & Now() & "", vbInformation, "Thông báo" dtpNgayVLNvbh.SetFocus cmdLuu.Enabled = True Exit Sub End If .Fields("Baocaotoi").Value = dbcboBaocaotoiNvbh.Text .Fields("Diachi").Value = rtxtDChiNvbh.Text .Fields("Thanhpho").Value = cboTphoNvbh.Text .Fields("Vung").Value = cboVungNvbh.Text .Fields("Mavung").Value = txtMavungNvbh.Text .Fields("Nuoc").Value = cboNuocNvbh.Text .Fields("DTNha").Value = txtDthoaiNvbh.Text .Fields("Ghichu").Value = rtxtGhichuNvbh.Text .Fields("Email").Value = txtEmailNvbh.Text .Update End With dataNvbh.Refresh tabNhanvienBH.Tab = 0 'Gọi thủ tục dataNvbh.Recordset.MoveLast Vohieuhoa Me End Sub Private Sub cmdThem_Click() Dim SQLMatudong As String SQLMatudong = "Select Max([MaNBan]) as Lonnhat From tblNhanvienbanhang" tabNhanvienBH.Tab = 0 'Gọi thủ tục tạo data là nguồn kết nối cho txtNvbhMa Ketnoi dataMatudong, SQLMatudong dataMatudong.Refresh dataNvbh.Recordset.AddNew 'Gọi thủ tục khởi tạo Controls lúc thêm KhoitaoControlsLucThem Me If dataNvbh.Recordset.RecordCount = 0 Then txtMaNvbh.Text = "1" dataNvbh.Caption = "1" Else With dataMatudong txtMaNvbh.Text = "" & .Recordset.Fields("Lonnhat") + 1 dataNvbh.Caption = "Nviên: " & .Recordset.Fields("Lonnhat") + 1 End With End If txtHoNvbh.SetFocus lblMatudong.Visible = True End Sub Private Sub cmdXoa_Click() If dataNvbh.Recordset.RecordCount > 0 Then If dataNvbhHoadon.Recordset.RecordCount > 0 Then MsgBox "Bạn không thể xoá được bản ghi này vì nó con xuất hiện trong bảng con.", vbInformation, "Thông báo" Exit Sub Else 'Gọi thủ tục xoá Xoa dataNvbh dataNvbh.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 dataNvbh_Reposition() On Error GoTo loi Dim SQLNvbhHoadon As String SQLNvbhHoadon = "Select *" & _ " From tblHoadon" & _ " Where NguoibanID=" & dataNvbh.Recordset.Fields("MaNBan").Value & "" 'Gọi thủ tục tạo data kết nối cho lưới phụ Ketnoi dataNvbhHoadon, SQLNvbhHoadon dataNvbhHoadon.Refresh With dataNvbh .Caption = "Nviên: " & .Recordset.Fields("MaNBan").Value lblHoTenNvbh.Caption = "" & .Recordset.Fields("Ho").Value & " " & .Recordset.Fields("Ten").Value 'Kiểm tra xem mẩu tin tương ứng với trường kiểu text Hinhanh co 'là Null hay không If IsNull(.Recordset.Fields("Hinhanh").Value) = False Then Picture1.Picture = LoadPicture(.Recordset.Fields("Hinhanh").Value) lblKhongcohinh.Visible = False Else 'Không nạp hình ảnh nào vào PictureBox Picture1.Picture = LoadPicture() lblKhongcohinh.Visible = True End If End With With VSFlexGrid1NvbhHDon .MergeCells = flexMergeRestrictColumns .MergeCol(4) = True End With '-------------------------------------------------------------------------------- loi: End Sub Private Sub dbcboBaocaotoiNvbh_KeyPress(KeyAscii As Integer) PheChuanKeyPress dbcboBaocaotoiNvbh, KeyAscii If KeyAscii = 13 Then dtpNgayVLNvbh.SetFocus End If End Sub Private Sub dbcboBaocaotoiNvbh_LostFocus() BuocphaidienDL dbcboBaocaotoiNvbh, True End Sub Private Sub dtpNgayVLNvbh_KeyPress(KeyAscii As Integer) 'PheChuanKeyPress dtpNgayVLNvbh, KeyAscii 'If KeyAscii = 13 Then ' tabNhanvienBH.Tab = 1 ' rtxtDChiNvbh.SetFocus 'End If End Sub Private Sub Form_Load() Dim SQLNvbh As String SQLNvbh = "Select * From tblNhanvienbanhang" 'Gọi thủ tục Vohieuhoa Me 'Gọi thủ tục HienForm Me 'Gọi thủ tục tạo data kết nối Ketnoi dataNvbh, SQLNvbh 'Gọi thủ tục CauhinhLuoiChinh VSFlexGrid1Nnbh CauhinhLuoiPhu VSFlexGrid1NvbhHDon With cboTphoNvbh .AddItem "Hà Nội" .AddItem "Hải Phòng" .AddItem "Tp HCM" .AddItem "Đà Nẵng" .AddItem "Nam Định" End With With cboVungNvbh .AddItem "Bắc" .AddItem "Trung" .AddItem "Nam" .AddItem "Hải đảo" .AddItem "Miền Núi" End With With cboNuocNvbh .AddItem "Việt Nam" .AddItem "Trung Quốc" .AddItem "Thái Lan" .AddItem "Indonesia" .AddItem "Malaysia" End With End Sub Private Sub rtxtDChiNvbh_KeyPress(KeyAscii As Integer) PheChuanKeyPress rtxtDChiNvbh, KeyAscii End Sub Private Sub rtxtDChiNvbh_LostFocus() BuocphaidienDL rtxtDChiNvbh, True End Sub Private Sub rtxtGhichuNvbh_KeyPress(KeyAscii As Integer) PheChuanKeyPress rtxtGhichuNvbh, KeyAscii If KeyAscii = 13 Then txtEmailNvbh.SetFocus End If End Sub Private Sub rtxtGhichuNvbh_LostFocus() BuocphaidienDL rtxtGhichuNvbh, True End Sub Private Sub txtBidanhNvbh_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtBidanhNvbh, KeyAscii If KeyAscii = 13 Then rtxtGhichuNvbh.SetFocus End If End Sub Private Sub txtBidanhNvbh_LostFocus() BuocphaidienDL txtBidanhNvbh, True End Sub Private Sub txtChudanhNvbh_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtChudanhNvbh, KeyAscii If KeyAscii = 13 Then dbcboBaocaotoiNvbh.SetFocus End If End Sub Private Sub txtChudanhNvbh_LostFocus() BuocphaidienDL txtChudanhNvbh, True End Sub Private Sub txtDthoaiNvbh_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtDthoaiNvbh, KeyAscii If KeyAscii = 13 Then txtBidanhNvbh.SetFocus End If End Sub Private Sub txtDthoaiNvbh_LostFocus() BuocphaidienDL txtDthoaiNvbh, True End Sub Private Sub txtEmailNvbh_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtEmailNvbh, KeyAscii If KeyAscii = 13 Then dtpNgaysinhNvbh.SetFocus End If End Sub Private Sub txtEmailNvbh_LostFocus() BuocphaidienDL txtEmailNvbh, False End Sub Private Sub txtHoNvbh_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtHoNvbh, KeyAscii If KeyAscii = 13 Then txtTenNvbh.SetFocus End If End Sub Private Sub txtHoNvbh_LostFocus() BuocphaidienDL txtHoNvbh, True End Sub Private Sub txtMavungNvbh_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtMavungNvbh, KeyAscii If KeyAscii = 13 Then cboNuocNvbh.SetFocus End If End Sub Private Sub txtMavungNvbh_LostFocus() BuocphaidienDL txtMavungNvbh, True End Sub Private Sub txtTenNvbh_KeyPress(KeyAscii As Integer) PheChuanKeyPress txtTenNvbh, KeyAscii If KeyAscii = 13 Then txtChudanhNvbh.SetFocus lblHoTenNvbh.Caption = "" & txtHoNvbh.Text & " " & txtTenNvbh.Text End If End Sub Private Sub txtTenNvbh_LostFocus() BuocphaidienDL txtTenNvbh, True End Sub Private Sub VSFlexGrid1Nnbh_AfterEdit(ByVal Row As Long, ByVal Col As Long) On Error GoTo loi With VSFlexGrid1Nnbh 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 "Cột này không cho phép thay đổi giá trị.", vbInformation, "Thông báo" With VSFlexGrid1Nnbh .Cell(flexcpForeColor, .RowSel, .ColSel) = vbBlack End With Exit Sub End If End Sub Private Sub VSFlexGrid1Nnbh_BeforeEdit(ByVal Row As Long, ByVal Col As Long, Cancel As Boolean) With VSFlexGrid1Nnbh GuiTT = .Cell(flexcpText, .RowSel, .ColSel) End With End Sub Private Sub VSFlexGrid1Nnbh_EnterCell() 'Gọi thủ tục VaoO VaoO VSFlexGrid1Nnbh, Label1 End Sub Private Sub VSFlexGrid1Nnbh_LeaveCell() 'Gọi thủ tục RoiO RoikhoiO VSFlexGrid1Nnbh End Sub Private Sub VSFlexGrid1Nnbh_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'Gọi thủ tục HienToolTip HienToolTipText VSFlexGrid1Nnbh End Sub Private Sub VSFlexGrid1NvbhHDon_EnterCell() VaoO VSFlexGrid1NvbhHDon, Label1 End Sub Private Sub VSFlexGrid1NvbhHDon_LeaveCell() RoikhoiO VSFlexGrid1NvbhHDon End Sub Private Sub VSFlexGrid1NvbhHDon_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'Gọi thủ tục HienToolTipText VSFlexGrid1NvbhHDon End Sub Private Sub cmdTimkiem_Click() On Error GoTo loi Dim SQLNvbhLoc As String If cboLocNVBHMa.Text = "Tất cả" Then SQLNvbhLoc = "Select * From tblNhanvienbanhang" Else SQLNvbhLoc = "Select *" & _ " From tblNhanvienbanhang" & _ " Where MaNBan=" & cboLocNVBHMa.Text & "" End If Ketnoi dataLocNVBH, SQLNvbhLoc If dataLocNVBH.Recordset.RecordCount = 0 Then MsgBox "Không tìm thấy nhân viên có mã là: " & cboLocNVBHMa.Text & "", vbInformation, "Thông báo" cboLocNVBHMa.SelStart = 0 cboLocNVBHMa.SelLength = Len(cboLocNVBHMa.Text) Exit Sub Else lblKQTK.Visible = True End If loi: End Sub Private Sub Form_Load() Dim SQL As String SQL = "Select * From tblNhanvienbanhang" HienForm Me CauhinhLuoiPhu VSFlexGridNVBHLoc KhoitaoADODB SQL With cboLocNVBHMa .AddItem "Tất cả" End With With rsado Do While .EOF = False cboLocNVBHMa.AddItem .Fields("MaNBan").Value .MoveNext Loop .Close End With End Sub Private Sub Form_Unload(Cancel As Integer) cnado.Close Set cnado = Nothing End Sub Option Explicit Private GuiTT As String Private Sub cdmNHomSPChonhinh_Click() On Error GoTo loi With HophinhNsp .CancelError = True .DialogTitle = "Chọn hình" .Filter = "JPG Files(*.jpg)|*.jpg|Bitmap Files(*.bmp)|*.bmp|All Files(*.*)|*.*" .FilterIndex = 1 .InitDir = "C:\QLKH\Hinh" .MaxFileSize = 150 .ShowOpen lblHinhanhNSP.Caption = "" & .FileName picNhomSPhinh.Picture = LoadPicture(.FileName) End With loi: End Sub Private Sub cmdLocnhanh_Click() frmNhomSPLoc.Show End Sub Private Sub cmdLuu_Click() 'Gọi thủ tục khởi tạo Controls lúc Luu DL KhoitaoControlsLucLuu Me With dataNhomhh .Recordset.Fields("MaNhom").Value = txtNhomSPMa.Text .Recordset.Fields("Tennhom").Value = txtNhomSPten.Text .Recordset.Fields("Mota").Value = rtxtNhomSPmota.Text .Recordset.Update .Refresh End With 'Gọi thủ tục Vohieuhoa dataNhomhh.Recordset.MoveLast Vohieuhoa Me End Sub Private Sub cmdThem_Click() Dim SQLMatudong As String SQLMatudong = "Select Max([MaNhom]) as Lonnhat From tblNhomhang" 'Gọi thủ tục khởi tạo Data kết nối cho txtNhomSPma Ketnoi dataMatudong, SQLMatudong dataMatudong.Refresh dataNhomhh.Recordset.AddNew 'Gọi hàm khởi tạo thuộc tính các Controls lúc thêm mới DL KhoitaoControlsLucThem Me If dataNhomhh.Recordset.RecordCount = 0 Then txtNhomSPMa.Text = "1" dataNhomhh.Caption = "1" Else With dataMatudong txtNhomSPMa.Text = "" & dataMatudong.Recordset.Fields("Lonnhat").Value + 1 dataNhomhh.Caption = "Nhóm: " & dataMatudong.Recordset.Fields("Lonnhat").Value + 1 End With End If txtNhomSPten.SetFocus lblTudong.Visible = True End Sub Private Sub cmdXoa_Click() If dataNhomhh.Recordset.RecordCount > 0 Then If dataNhomhangCTietHH.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 xoá dữ liệu Xoa dataNhomhh dataNhomhh.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 dataNhomhh_Reposition() On Error GoTo loi Dim SQLNhomhangCTietHH As String SQLNhomhangCTietHH = "Select *" & _ " From tblSanpham" & _ " Where NhomHHID=" & dataNhomhh.Recordset.Fields("MaNhom").Value & "" 'Gọi hàm khởi tạo Data kết nối cho luới chi tiết Ketnoi dataNhomhangCTietHH, SQLNhomhangCTietHH dataNhomhangCTietHH.Refresh 'Hiện thứ tự nhóm HH lên Caption của dataNhomHH With dataNhomhh .Caption = "Nhóm: " & dataNhomhh.Recordset.Fields("MaNhom").Value If IsNull(.Recordset.Fields("HinhNhom").Value) = False Then picNhomSPhinh.Picture = LoadPicture(.Recordset.Fields("HinhNhom").Value) lblKhongcohinh.Visible = False Else picNhomSPhinh.Picture = LoadPicture() lblKhongcohinh.Visible = True End If End With With VSFlexGrid1NhomHHChitiet .MergeCells = flexMergeRestrictColumns .MergeCol(3) = True End With loi: End Sub Private Sub Form_Load() Dim SQLNhomhang As String SQLNhomhang = "Select * From tblNhomhang" 'Gọi thủ tục khởi tạo Data kết nối Ketnoi dataNhomhh, SQLNhomhang 'Gọi thủ tục Vohieuhoa để vô hiệu hoá những điều khiển trên Form Vohieuhoa Me 'Gọi thủ tục HienForm HienForm Me 'Gọi thủ tục qui định thuộc tính cho lưới chính và lưới phụ CauhinhLuoiChinh VSFlexGrid1NhomHH CauhinhLuoiPhu VSFlexGrid1NhomHHChitiet End Sub Private Sub rtxtNhomSPmota_KeyPress(KeyAscii As Integer) PheChuanKeyPress rtxtNhomSPmota, KeyAscii If KeyAscii = 13 Then cmdLuu.SetFocus End If End Sub Private Sub rtxtNhomSPmota_LostFocus() BuocphaidienDL rtxtNhomSPmota, True End Sub Private Sub txtNhomSPMa_KeyPress(KeyAscii As Integer) 'Gọi thủ tục PhechuanKeypress PheChuanKeyPress txtNhomSPMa, KeyAscii If KeyAscii = 13 Then txtNhomSPten.SetFocus End If End Sub Private Sub txtNhomSPMa_LostFocus() BuocphaidienDL txtNhomSPMa, True End Sub Private Sub txtNhomSPten_KeyPress(KeyAscii As Integer) 'Gọi thủ tục PhechuanKeypress PheChuanKeyPress txtNhomSPten, KeyAscii If KeyAscii = 13 Then rtxtNhomSPmota.SetFocus End If End Sub Private Sub txtNhomSPten_LostFocus() BuocphaidienDL txtNhomSPten, True End Sub Private Sub VSFlexGrid1NhomHH_AfterEdit(ByVal Row As Long, ByVal Col As Long) On Error GoTo loi With VSFlexGrid1NhomHH If (.Col 0) And (.Cell(flexcpText, .RowSel, .ColSel) GuiTT) Then If MsgBox("Bạn có muốn xoá bản ghi này 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 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 VSFlexGrid1NhomHH .Cell(flexcpForeColor, .RowSel, .ColSel) = vbBlack End With Exit Sub End If End Sub Private Sub VSFlexGrid1NhomHH_BeforeEdit(ByVal Row As Long, ByVal Col As Long, Cancel As Boolean) With VSFlexGrid1NhomHH GuiTT = .Cell(flexcpText, .RowSel, .ColSel) End With End Sub Private Sub VSFlexGrid1NhomHH_EnterCell() 'Gọi thủ tục VaoO VaoO VSFlexGrid1NhomHH, Label1 End Sub Private Sub VSFlexGrid1NhomHH_LeaveCell() 'Gọi thủ tục RoikhoiO RoikhoiO VSFlexGrid1NhomHH End

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

  • doc27566.DOC