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