LUẬN VĂN:

Xây dựng phần mềm quản lý bỏn hàng

tại trung tõm thương mại NC-TH

Lời mở đầu

Sự ra đời và phát triển của công nghệ thông tin là một trong những thành quả vĩ

đại nhất của con người. Nhịp độ phát triển của công nghệ thông tin đang là vấn đề rất

được các ngành khoa học giáo dục kinh tế… quan tâm. Nó hiện hữu với một tầm vóc

hết sức mạnh mẽ to lớn và ngày đang một lớn mạnh thêm.

Ngày nay những thành tự, những đổi mới trong công nghệ, trong quản lý kinh

doanh, trong lĩnh vực giáo dục… đều có sự góp phần quan trọng của tin học. Vai trũ của

tin học rất to lớn, đa dạng vô tận… bởi vậy khi loài người đang bước vào thời kỳ công

nghiệp hoá, hiện dại hoá, tin học đó thực sự trở thành một ngành khoa học công nghệ

mũi nhọn.

Trong hoạt động sản xuất kinh doanh như hiện nay, việc tin hoc hoá các hoạt động

mua bán hàng hoá là rất cần thiết. Một doanh nghiệp muốn phát triển khả năng tiếp cận

thông tin, thị trường, … và khả năng đáp ứng nhu cầu của khách hàng cũng như của đối

tác một cách hiệu quả nhất thỡ không thể thiếu một hệ thống thông tin hỗ trợ.

Việc ứng dụng vào các lĩnh vực làm sao để đạt được một cách có hiệu quả, sự lựa

chọn và vận dụng những phần mềm sao cho phù hợp và đạt được kết quả tốt là câu hỏi

luôn đặt ra đối với các nhà quản lý. Ngày nay các phần mềm cơ bản đó được ứng dụng

và phát triển rộng rói trong hầu hết mọi doanh nghiệp. Thế nhưng yêu cầu của người sử

dụng phần mềm ngày càng đa dạng và nhiều tính năng hơn. Do dó yêu cầu người làm

phần mềm phải đáp ứng được các yêu cầu trên.

Cũng nhằm mục đích nói trên mà đề tài “Xõy dựng phần mềm quản lý bỏn hàng

tại trung tõm thương mại NC-TH” ra đời.

A. Giới thiệu chung về đề tài lựa chọn

1. Tên đề tài

Xõy dựng phần mềm quản lý bỏn hàng cho trung tõm thương mại NC-HT thuộc

tập đoàn Hitech

2. Lý do chọn đề tài

Trong môi trường kinh doanh cạnh tranh ngày nay để đảm bảo một doanh nghiệp

luôn đứng vững thỡ tất yếu doanh nghiệp đó phải có một chiến lược quản lý phự hợp.

Đối với lĩnh vực quản lý nói chung và quản lý kinh doanh của một doanh nghiệp núi

riờng, việc xử lý các thông tin nhận được là một vấn đề không đơn giản vỡ lượng thông

tin ngày càng lớn và thường xuyên thay đổi, nó luôn là một bài toán hết sức phức tạp,

nhất là trong việc tổ chức sắp xếp dữ liệu sao cho phù hợp đồng thời tỡm ra những

phương pháp tính toán tối ưu nhất ….Tuy nhiên sự ra đời của máy vi tính cùng với sự

phát triển của công nghệ thông tin đó đưa tới một giải pháp hiệu quả để giải quyết các

vấn đề một cách trên nhanh chóng và hiệu quả. Đó là giải pháp sử dụng các phần mềm

để quản lý cỏc hoạt động kinh doanh của doanh nghiệp.

Đối với trung tâm thương mại, đứng trước sự phát triển mạnh mẽ của nền kinh tế

họ cũng lựa chọn công cụ tin học hoá các bộ phận quản lý nhằm mục đích thúc đẩy việc

kinh doanh của mỡnh đồng thời giảm chi phí và thời gian một cách tối uư nhất trong

quản lý. Mục tiờu để các nhà quản lý lựa chọn để tiến hành công tác tin học hoá đầu tiên

là bộ phận quản lý bỏn hàng. Bời vỡ, hiện nay số lượng hoá đơn cần phải xử lý trong

một ngày tăng lên rất nhiều và đồng thời yêu cầu về các báo cáo doanh thu, hàng tồn

kho, khách hàng, nhà cung cấp…phải được một cách thường xuyên liên tục nên phương

pháp quản lý bằng thủ cụng khụng cũn phự hợp nữa.

Nắm bắt được thực tế của trung tâm nên em lựa chọn đề tài viết phần mềm quản

lý bỏn hàng nhằm giỳp trung tõm cú thể quản lý dễ dàng và hiệu quả hơn nghiệp vụ bán

hàng của mỡnh.

3. Mục tiêu của đề tài

Chuyên nghiệp hoá các hoạt động liên quan đến bán hàng, giảm thiểu thời gian

tỡm kiếm thụng tin về đối tác, khách hàng, về các hoạt động vật tư, thông tin về hàng

tồn kho …

 Đơn giản hoá các chứng từ: Các chứng từ đều được hoàn thành theo mẫu,

việc cập nhật các chứng từ đơn giản và tốn ít thời gian.

 Đáp ứng nhu cầu quản lý của các cơ quan liên quan một cách nhanh chóng và

chính xác như các báo cáo về việc nhập và xuất hàng hoá…

 Đáp ứng được nhu cầu ứng dụng những thành tựu của quá trỡnh phỏt triển

khoa học cụng nghệ vào quản lý.

4. Công cụ nghiên cứu và thực hiện đề tài

4.1. Hệ quản trị cơ sở dữ liệu Microsoft access 2003

Để tạo lập cơ sở dữ liệu ta sử dụng hệ quản trị cơ sở dữ liệu Microsoft Access

2003, hệ quản trị cơ sở dữ liệu này phổ biến, rất thân thiện với người sử dụng, dễ sử

dụng và nó có độ tương thích cao với ngôn ngữ lập trỡnh Visual Basic 6.0.

4.2. Ngụn ngữ lập trỡnh Visual Basic 6.0

Để viết Code của chương trỡnh em lựa chọn ngụn ngữ Visual Basic 6.0. Đây là

một ngôn ngữ lập trỡnh hướng sự kiện và cho phép lập trỡnh hướng đối tượng để xây

dựng chương trỡnh trong mụi trường Windows.Hơn nữa Visual Basic 6.0 là ngôn ngữ

lập trỡnh với tớnh trực quan cao: việc sử dụng công cụ Toolbox để thiết kế giúp người

lập trỡnh thiết kế một cỏch dễ dàng.

Visual Basic cung cấp nhiều công cụ để cho phép kết nối và khai thác dữ

liệu ở nhiều hệ quản trị cơ sở dữ liệu khác nhau. Ngoài ra ngôn ngữ lập trỡnh này cú

chế độ bảo mật an toàn dữ liệu khá tốt, dễ sử dụng và được sử dụng rất phổ biến trong

thông tin quản lý.

4.3. Công cụ làm báo cáo Crystal Report

Khi xây dựng một chương trỡnh với mục đích ứng dụng thực tiễn thỡ kết quả

cuối cựng là dữ liệu phải được kết xuất và có thể xuất ra các thiết bị như máy in hay các

chương trỡnh hỗ trợ khỏc cho phộp người dùng in hay trích dữ liệu sang các chương

trỡnh tương thích khác.

Crystal Report là một công cụ chuẩn cho phép thiết kế các báo cáo trên

ứng dụng Visual Basic. Ngoài ra có thể tạo báo cáo trên ứng dụng và Web, sau đó thiết

lập như một dịch vụ trên trỡnh chủ tệp tin dạng Crystal Report cú tờn mở rộng “.rpt”.

Để tạo báo cáo bằng Crystal Report trong Visual Basic chúng ta sẽ kết nối với cơ sở dữ

liệu, có thể là Microsoft Access hay SQL Server 2000. Trong phần mềm này sẽ sử dụng

hệ quản trị cơ sở dữ liệu Microsoft Access 2003.

B. Nội dung

1. Nội dung bài toỏn quản lý bỏn hàng

Trung tâm thương mại NC-HT những năm gần đây phát triển rất mạnh, quy mô

ngày càng được mở rộng và doanh thu liên tục tăng. Vỡ thế việc quản lý bỏn hàng gặp

rất nhiều khú khăn và việc quản lý thủ công không thể đáp ứng nhu cầu của các nhà

quản lý cấp trờn.Hoạt động quản lý bán hàng của trung tâm như sau:

 Khi khỏch hàng cú nhu cầu về hàng hoỏ thỡ bộ phận tiếp nhận yờu cầu mua

hàng, khách hàng có thể mua hàng tại trung tâm hoặc gọi điện để đặt hàng. Sau đó phiếu

mua hàng của khách hàng sẽ được gửi đến phũng vật tư.

 Phũng vật tư thông báo đến bộ phận quản lý kho, thủ kho tiến hành kiểm tra

trong kho nếu cũn hàng sẽ xuất hàng cho bộ phận chuyển hàng cho khách hàng. Ngược

lại nếu trong kho không cũn đủ hàng thỡ phũng vật tư đơn hàng cần mua đến nhà cung

cấp và nhập hàng vào kho.

 Để thực hiện việc quản lý của mỡnh cú theo dừi cỏc bảng danh mục sau

đây:

o Danh mục hàng hoá

o Danh mục khách hàng

o Danh mục nhà cung cấp

o Danh mục nhân viên

 Việc mua bán tại trung tâm luôn được thanh toán ngay nên không có công nợ,

trên một hoá đơn có thể bán nhiều mặt hàng, tỷ lệ thuế cho các mặt hàng bán ra và mua

vào là 10%.Khách hàng được hưởng chiết khấu trực tiếp trên hoá đơn theo quy định

sau:

o Nếu tổng giá trị hoá đơn từ 1 triệu đến 3 triệu thỡ chiết khấu 5%

o Nếu trờn 3 triệu thỡ chiết khấu 8%

 Định kỳ hay bất thường có thể lên báo cáo sau:

o Báo cáo tổng hợp hàng nhập trong một khoảng thời gian xác định

o Báo cáo hàng bán trong một khoảng thời gian xác định

o Báo cáo tổng hợp tồn kho

o Báo cáo tổng hợp hàng bán theo khách hàng

o Báo cáo tổng hợp hàng mua theo nhà cung cấp

2. Phân tích nghiệp vụ

2.1. Quy trỡnh mua hàng

 Hàng nội địa

o Mục đích: Quy trỡnh nhập khẩu cung cấp một quỏ trỡnh thống nhất

trong lĩnh vực nhập khẩu hàng, tạo điều kiện cho ban tài chính kế toán, phũng vật tư và

các đơn vị có một quy trỡnh thống nhất, hiệu quả chuẩn hoỏ khi cú nhu cầu đặt hàng

nhập khẩu

o Lưu đồ

Nhận yêu cầu mua

Kiểm tra hàng trong kho

Đánh giá nhà cung cấp

Không

Vật tư hàng hóa trong kho có giá trị

Lựa chọn nhà cung ứng

Chọn

Đàm phán ký kết hợp đồng

Thực hiện hợp đồng

Nhập kho hàng hóa

Thông báo cho người sử dụng

Lưu HS

 Hàng nhập khẩu

o Mục đích : Quy trỡnh nhập khẩu cung cấp một quỏ trỡnh thống nhất

trong lĩnh vực nhập khẩu hàng, tạo điều kiện cho ban tài chính kế toán, phũng vật tư và

các đơn vị có một quy trỡnh thống nhất, hiệu quả chuẩn hoá khi có nhu cầu đặt hàng

nhập khẩu

o Lưu đồ

Đề nghị đặt hàng

Xét duyệt

Không duyệt

Duyệt

Đặt hàng

Thanh toán

Thông báo cho nhà cung cấp chuyển hàng

Nhận HS từ nhà cung cấp và người vận

Nhận hàng tại cảng

Kiểm tra hàng hoá

Nhập kho hoàn thiện hồ sơ nhập khẩu

Lưu HS

T

2.2. Quy trỡnh quản lý kho

 Mục đích: Quản lý sản phẩm từ lúc nhận hàng vào kho cho đến khi hàng

được xuất kho.

Yêu cầu nhập

Không đạt

Kiểm tra

Đạt

Nhận sản phẩm nhập kho

Dán mó hiệu

Bảo quản

Không đạt

KT trước khi xuất kho

Đạt

 Lưu đồ

Xuất sản phẩm

Lưu HS

2.3. Quy trỡnh triển khai bỏn hàng

Được thực hiện như sau:

 Nhận yêu cầu triển khai bán hàng cho khách hàng

Khi tiếp nhận yêu cầu mua hàng, bộ phận triển khai thu thập đầy đủ chính xác

thông tin về nhu cầu mua hàng của khách hàng, thông tin về khách hàng, địa chỉ của

khách hàng

 Giao hàng cho khách hàng

Cán bộ triển khai phải thống nhất với khách hàng về thời gian, người liên hệ và

địa điểm bàn giao hàng sau đó đóng gói hàng hoá chuyển tới địa chỉ của khách hàng

Tại nơi giao hàng nhân viên giao hàng hoá cho khách hàng .Nhân viên giao hàng

phải có trách nhiệm xin ý kiến đóng ghóp của khách hàng.

Nếu khách hàng có vướng mắc về sản phẩm, không chấp nhận, nhân viên giao

hàng phải xin xác nhận của khách hàng và thông báo ngay cho trưởng phũng quản lý

bỏn hàng và bàn giao cỏc giấy tờ liờn quan để kịp thời xử lý.

 áo cáo và lưu hồ sơ

Sau khi hoàn tất viêc giao hàng, nhân viên giao hàng nộp hồ sơ giao hàng cho

cán bộ quản lý hồ sơ để kiểm tra và lưu trữ.

3. Phân tích yêu cầu người sử dụng

3.1. Yêu cầu chung

 Trên các Form nhập dữ liệu phải được bố trí thuận tiện, dễ sử dụng. Đây là một

yêu cầu mang tính trừu tượng bởi lẽ mức độ thuận tiện, dễ sử dụng phụ thuộc vào cách

đánh giá khác nhau của từng người sử dụng. Tuy nhiên việc thiết kế giao diện phải đảm

bảo một số yêu cầu sau:

o Màu sắc trên from phải hài hoà không có quá nhiều màu sắc song cũng

cần phải làm nổi bật một số trường quan trọng như mó hàng, mó khỏch hàng, mó nhà

cung cấp…

o Dùng phím Tab để thay đổi vị trí trường nhập theo một thứ tự từ trên

xuống dưới, từ trái qua phải hay thay đổi từ form chính sang form con.

o Hiển thị các thực đơn cùng với hướng dẫn sử dụng phím tắt…

 Trên các Form phải sử dụng các từ ngữ dễ hiểu, thân thiện với người sử dụng.

 Giảm thiểu tối đa việc nhập liệu bằng tay và nên sử dụng các Combo Box

để người sử dụng chọn các giá trị chuẩn có sẵn. Điều này sẽ giúp người sử dụng

tiết kiệm thời gian và tăng độ chính xác của thông tin.

 Dựa vào các quy tắc đó được chấp nhận về đồ hoạ để minh họa thông tin trên

màn hỡnh giao diện: vớ dụ dựng biểu tượng máy in để mô tả nút có chức năng in văn

bản, sử dụng biểu tượng của đĩa mềm để mô tả chức năng lưu văn bản,…

 Phải có dấu hiệu cho biết người sử dụng đang thao tác với thực đơn nào: ví dụ

khi người sử dụng đang nhập danh mục hàng hoỏ thỡ trờn thanh tiờu đề của form phải

hiển thị chữ Danh mục hàng hoá…

 Khi người sử dụng tiến hành một số thao tác làm thay đổi dữ liệu hệ thống cần

phải có câu hỏi xác nhận nhằm tránh những mất mát đáng tiếc có thể xảy ra: ví dụ khi

người sử dụng ấn vào nút xoá hoá đơn chương trỡnh phải hiện một Message box xỏc

nhận lại xem cú muốn xoỏ thật khụng.

 Các phím nóng phải được sử dụng thống nhất trong toàn hệ thống, tiện lợi cho

người sử dụng

3.2. Yêu cầu đối với nghiệp vụ nhập hàng

 Phiếu nhập hàng phải hiển thị đầy đủ các trường: Số hiệu phiếu nhập, mó nhà

cung cấp, mó hàng hoỏ nhập, tờn hàng hoỏ đơn vị tính, số lượng nhập…

 Khi nhân viên nhấn nút lưu phiếu nhập hàng thỡ chương trỡnh phải tự động cập

nhật số liệu liên quan đến hàng hoá vừa nhập vào bảng danh mục hàng hoá.

3.3. Yêu cầu đối với nghiệp vụ xuất hàng

 Phiếu xuất hàng phải hiển thị đầy đủ thông tin cần thiết về số hiệu phiếu xuất,

ngày xuất, mó hàng hoỏ, đơn vị tính, số lượng…

 Khi nhân viên lưu phiếu xuất thỡ dữ liệu tồn kho phải được cập nhật.

3.4. Yêu cầu đối với nghiệp vụ lập báo cáo

 Do là một trung tâm thương mại cung cấp nhiều loại mặt hàng cho khách hàng

nên trung tâm thương mại phải lên nhiều loại báo cáo như: báo cáo hàng nhập theo thời

gian, báo cáo hàng xuất theo thời gian, báo cáo doanh thu theo khách hàng, báo cáo chi

phí theo nhà cung cấp, báo cáo kết quả kinh doanh…

 Phải thiết kế cỏc form cú giao diện phự hợp với từng loại bỏo cỏo theo yờu cầu

của từng cấp quản lý.

 Sử dụng công cụ làm báo cáo Crystal Report để làm các báo cáo này. Các báo

cáo phải hiển thị đầy đủ thông tin cần thiết theo từng loại báo cáo.

3.5. Các yêu cầu khác

 Yêu cầu về bảo mật và an toàn dữ liệu: Chương trỡnh phải đảm bảo tương đối

tốt về bảo mật và an toàn dữ liệu, có thể khôi phục dữ liệu đầy đủ và tin cậy.

 Yêu cầu về tính mở: Hệ thống phải dễ dàng mở rộng và nâng cấp trong tương

lai.

 Yêu cầu về tính hiệu quả: Hệ thống cần tối ưu hoá năng lực xử lý thụng tin, cú

cỏc cụng cụ tỡm kiếm nhanh và hợp lý.

4. Phõn tớch hệ thống thụng tin quản lý bỏn hàng tại trung tõm thương mại

NC-HT

4.1. Sơ đồ chức năng kinh doanh của trung tâm thương mại

Quản lý bán hàng

Bán hàng

Quản lý mua

Quản lý kho hàng

Mua nội địa

Nhập khẩu

Yêu cầu nhập kho

Nhân đơn đặt

Nhận yêu cầu

Yêu cầu mua hàng

KT sản phẩm nhập kho

Xử lý đơn

Đặt hàng

Nhập kho

Chọn NCC

Lập hoá đơn bán

Ký kết đơn

Thanh toán

Dán mó hiệu sản phẩm

Làm thủ tục thu tiền

Bảo quản sản phẩm

Thanh toán

Nhận hàng tại

Giao hàng

Kiểm tra sản phẩm xuất kho

Lập báo cáo

Kiểm tra hàng

Lập báo cáo

Xuất kho

Lập báo cáo

Lập báo cáo

4.2. Sơ đồ luồng dữ liệu DFD

4.2.1. Sơ đồ ngữ cảnh

Đơn đặt hàng

Báo cáo

Khách hàng

Lónh đạo

Yêu cầu mua hàng

Đơn đặt hàng

Phũng vật tư

TT xuất nhập

Nhà cung cấp

Phần mềm quản lý bỏn hàng

Thủ kho

Yêu cầu giao hàng

Khách hàng

Phiếu nhận hàng

Bộ phận giao hàng

4.2.2. Sơ đồ DFD mức 0 của cỏc nghiệp vụ quản lý bỏn hàng

Phiếu Yc mua hàng

Đơn đạt hàng

ĐH đó duyệt

P.Vt ư

1.0 Xử lý đơn hàng

2.0 Kiểm tra tồn

Khách hàng

Đơn hàng

Hồ sơ đơn hàng

phiếu yc mua hàng đó duyệt

Phiếu xuất

5.0 Giao hàng

P.Trỉên khai

4.0 Vào sổ xnhập

YC Giao hàng

DS hàng đạt yêu cầu

Phiếu giao nhận HH

Hoá đơn

3.0 Xử lý mua hàng

Hồ sơ kho hàng

Khách hàng

Phiếu thu

6.0 Xử lý tiền thu

Báo cáo tồn kho

7.0 Làm báo cáo

Sổ sách kế toán

Lónh đạo

Báo cáo tổng hợp

4.3. Các bảng dữ liệu đầu vào

 Bảng danh mục hàng hoá

STT Tên trường Kiểu dữ liệu Độ rộng Giải thích

1 MaHH Text Mó hàng hoỏ 10

2 TenHH Text Tên hàng hóa 50

3 DVT Text Đơn vị tính 10

4 GiaBan Number Giá bán

5 GiaNhap Number Giá nhập

6 XuatXu Text 50 Xuất xứ

7 TonKho Number Tồn kho

8 HanSuDung Date/time Hạn sử dụng

 Bảng danh mục khách hàng

STT Tên trường Kiểu dữ liệu Độ rộng Giải thích

Mó khỏch hàng 1 MaKH Text 10

Tên khách hàng 2 TenKH Text 50

Điạ chỉ 3 DiaChi Text 10

Số điện thoại 4 DT Text 10

Ghi chú 5 GhiChu Text 50

 Bảng danh mục nhà cung cấp

STT Tên trường Kiểu dữ liệu Độ rộng Giải thích

1 MaNCC Text Mó nhà cung cấp 10

2 TenNCC Text Tên nhà cung cấp 50

3 DiaChi Text Điạ chỉ 10

4 DT Text Số điện thoại 10

5 GhiChu Text Ghi chú 50

 Bảng nhân viên

STT Tên trường Kiểu dữ liệu Độ rộng Giải thích

1 MaNV Text Mó nhõn viờn 10

2 TenNV Text Tên nhân vien 50

3 DiaChi Text Điạ chỉ 10

4 QueQuan Text Quê quán 50

5 MucLuong Number Mức lương

DT Text Số điện thoại 10

 Bảng hoá đơn nhập hàng

STT Tên trường Kiểu dữ liệu Độ rộng Giải thích

1 SoHHDN Text 10 Số hiệu hoá đơn

2 MaNCC Text 10 Mó khỏch hàng

3 MaNV Text 10 Mó nhõn viờn

4 NgayMua Date/time 10 Ngày bán

 Bảng hoá đơn bán hàng

STT Tên trường Kiểu dữ liệu Độ rộng Giải thích

1 SoHHDB Text 10 Số hiệu hoá đơn

2 MaKH Text 10 Mó khỏch hàng

3 MaNV Text 10 Mó nhõn viờn

4 NgayBan Date/time 10 Ngày bán

5 ChietKhau Text 50 Tỷ lệ chiết khấu

 Bảng chi tiết bán hàng

STT Tên trường Kiểu dữ liệu Độ rộng Giải thích

1 SoHHDB Text 10 Số hiệu hoá đơn

2 MaHH Text 10 Mó hàng hoỏ

3 SoLuong Text 10 Số lượng

 Bảng chi tiết hàng nhập

STT Tên trường Kiểu dữ liệu Độ rộng Giải thích

1 SoHHDN Text 10 Số hiệu hoá đơn

2 MaHH Text 10 Mó hàng hoỏ

3 SoLuong Text 10 Số lượng

 Mối quan hệ giữa các bảng

4.4. Các thuật toán

4.4.1. Giải thuật đăng nhập chương trỡnh

Bắt đầu

N=0

Nhập tên và mật khẩu

N=N+1

F

N<=3

T

T

Đăng nhập hệ thống

Kiểm tra thông tin

Thông báo lỗi

Thực hiện chương trỡnh

T

Đăng nhập lại

F

Kết thúc

4.4.2. Giải thuật sửa dữ liệu

Bắt đầu

Mở Form cần sửa

Tỡm bản ghi cần sửa

F

Hiện thông báo

Có tồn tại bản ghi này

T

Hiện bản ghi cần sửa

Tiến hành sửa dữ liệu của bản ghi

Lưu bản ghi

T

Có tiếp tục sửa không?

F

Đóng Form sau khi sửa

Kết thúc

Bắt đầu

Nhập thông tin cần tỡm kiếm

F

Hiện thông báo

Kiểm tra có bản ghi nào thoả món

T

Hiển thị bản ghi tỡm thấy

Có tiếp tục không?

T

F

Đóng Form

Kết thúc

4.4.3. Giải thuật tỡm kiếm thụng tin theo từ hoặc cụm từ

Các giao diện chương trỡnh

Một số đoạn code chương trỡnh

1. Code form danh mục khách hàng

Private Sub KhongChoUpDate()

GrdKH.AllowUpdate = False

txtMakh.Locked = True

txtTenkhachhang.Locked = True

txtDiachi.Locked = True

txtDienthoai.Locked = True

txtGhichu.Locked = True

End Sub

Private Sub ChoPhepUpDate()

GrdKH.AllowUpdate = True

txtMakh.Locked = False

txtTenkhachhang.Locked = False

txtDiachi.Locked = False

txtDienthoai.Locked = False

txtGhichu.Locked = False

End Sub

Private Sub cmdKTTK_Click()

txtGiatri.Text = ""

cbTimtheo.Text = ""

NapAdodcKH

lbSokq.Caption = ""

lbSokq1.Caption = "Số bản ghi:" & AdodcKH.Recordset.RecordCount

KhongChoUpDate

End Sub

Private Sub cmdTim_Click()

Dim str As String

Dim trloi As Integer

If cbTimtheo.Text = "" Then

trloi = MsgBox("Bạn hóy nhập tiêu thức cần tỡm kiếm",

vbOKOnly)

If trloi = vbOK Then

cbTimtheo.SetFocus

Exit Sub

End If

ElseIf txtGiatri.Text = "" Then

trloi = MsgBox("Bạn hóy nhập giá trị cần tỡm kiếm", vbOKOnly)

If trloi = vbOK Then

txtGiatri.SetFocus

Exit Sub

End If

ElseIf cbTimtheo.Text = "Ma KH" Then

str = "MaKH"

ElseIf cbTimtheo.Text = "Ten KH" Then

str = "TenKH"

ElseIf cbTimtheo.Text = "Địa chỉ" Then

str = "DiaChi"

ElseIf cbTimtheo.Text = "Điện thoạii" Then

str = "DT"

ElseIf cbTimtheo.Text = "Ghi chú" Then

str = "GhiChu"

End If

AdodcKH.RecordSource = "SELECT MaKH,TenKH,DiaChi, DT,GhiChu FROM

KhachHang where " & str & "='" & txtGiatri.Text & "' ORDER BY MaKH "

AdodcKH.Refresh

lbSokq.Caption = "Số kết quả:" & AdodcKH.Recordset.RecordCount

lbSokq1.Caption = ""

End Sub

Private Sub Form_Load()

AdodcKH.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &

App.Path & "\Database\QuanLyBanHang.mdb;Persist Security Info=False"

NapAdodcKH

lbSokq1.Caption = "Số bản ghi:" & AdodcKH.Recordset.RecordCount

KhongChoUpDate

End Sub

Private Sub NapAdodcKH()

AdodcKH.CommandType = adCmdText

AdodcKH.RecordSource = "SELECT MaKH,TenKH,DiaChi, DT,GhiChu FROM

KhachHang ORDER BY MaKH"

AdodcKH.Refresh

End Sub

Private Sub CmdThem_Click()

Dim Traloi As Integer

Traloi = MsgBox("Bạn muốn thêm bản ghi mớii ?", vbInformation + vbYesNo)

If Traloi = vbNo Then

AdodcKH.Refresh

Exit Sub

Else

AdodcKH.Recordset.AddNew

ChoPhepUpDate

txtMakh.SetFocus

End If

End Sub

Private Sub CmdLuu_Click()

AdodcKH.Recordset.Save

GrdKH.AllowUpdate = False

lbSokq1.Caption = "Số bản ghi:" & AdodcKH.Recordset.RecordCount

End Sub

Private Sub CmdChon_Click()

ChoPhepUpDate

End Sub

Private Sub CmdSua_Click()

Dim Traloi As Integer

Traloi = MsgBox("Bạn muốn sửa bản ghi ?", vbInformation + vbYesNo)

If Traloi = vbNo Then

AdodcKH.Refresh

Exit Sub

Else

GrdKH.AllowUpdate = True

AdodcKH.Recordset.Update

End If

KhongChoUpDate

End Sub

Private Sub CmdXoa_Click()

Dim Traloi As Integer

Traloi = MsgBox("bạn muốn xoá bản ghi này ?", vbInformation + vbYesNo)

If Traloi = vbNo Then

GrdKH.AllowDelete = False

Else

GrdKH.AllowDelete = True

AdodcKH.Recordset.Delete

End If

lbSokq1.Caption = "Số bản ghii:" & AdodcKH.Recordset.RecordCount

End Sub

2. Code form danh mục mặt hàng

Private Sub KhongChoUpDate()

GrdMH.AllowUpdate = False

txtMahh.Locked = True

txtTenhang.Locked = True

txtDvt.Locked = True

txtGianhap.Locked = True

txtGiaban.Locked = True

txtTonkho.Locked = True

txtXuatxu.Locked = True

txtHansudung.Locked = True

End Sub

Private Sub ChoPhepUpDate()

GrdMH.AllowUpdate = True

txtMahh.Locked = False

txtTenhang.Locked = False

txtDvt.Locked = False

txtGianhap.Locked = False

txtGiaban.Locked = False

txtTonkho.Locked = False

txtXuatxu.Locked = False

txtHansudung.Locked = False

End Sub

Private Sub cmdKTTK_Click()

txtGiatri.Text = ""

cbTimtheo.Text = ""

NapAdodcMH

lbSokq.Caption = ""

lbSokq1.Caption = "Số bản ghi:" & AdodcMH.Recordset.RecordCount

KhongChoUpDate

End Sub

Private Sub cmdTim_Click()

Dim str As String

Dim trloi As Integer

If cbTimtheo.Text = "" Then

trloi = MsgBox("Bạn hóy nhập tiêu thức tỡm kiếm", vbOKOnly)

If trloi = vbOK Then

cbTimtheo.SetFocus

Exit Sub

End If

ElseIf txtGiatri.Text = "" Then

trloi = MsgBox("Bạn hóy nhập giá trị cần tỡm kiếm, vbOKOnly)

If trloi = vbOK Then

txtGiatri.SetFocus

Exit Sub

End If

ElseIf cbTimtheo.Text = "M· hµng" Then

str = "MaHH"

AdodcMH.RecordSource = "SELECT

MaHH,TenHH,DVT,GiaNhap,GiaBan,TonKho,Xuatxu,HanSuDung FROM HangHoa

where " & str & "='" & txtGiatri.Text & "' ORDER BY MaHH "

ElseIf cbTimtheo.Text = "Tên hàng" Then

str = "TenHH"

AdodcMH.RecordSource = "SELECT

MaHH,TenHH,DVT,GiaNhap,GiaBan,TonKho,Xuatxu,HanSuDung FROM HangHoa

where " & str & "='" & txtGiatri.Text & "' ORDER BY MaHH "

ElseIf cbTimtheo.Text = "Đơn vị tính" Then

str = "DVT"

AdodcMH.RecordSource = "SELECT

MaHH,TenHH,DVT,GiaNhap,GiaBan,TonKho,Xuatxu,HanSuDung FROM HangHoa

where " & str & "='" & txtGiatri.Text & "' ORDER BY MaHH "

ElseIf cbTimtheo.Text = "Giá nhập" Then

str = "GiaNhap"

AdodcMH.RecordSource = "SELECT

MaHH,TenHH,DVT,GiaNhap,GiaBan,TonKho,Xuatxu,HanSuDung FROM HangHoa

where " & str & "=" & txtGiatri.Text & " ORDER BY MaHH "

ElseIf cbTimtheo.Text = "Xuất xứ" Then

str = "Xuatxu"

AdodcMH.RecordSource = "SELECT

MaHH,TenHH,DVT,GiaNhap,GiaBan,TonKho,Xuatxu,HanSuDung FROM HangHoa

where " & str & "='" & txtGiatri.Text & "' ORDER BY MaHH "

ElseIf cbTimtheo.Text = "Hạn sử dụng" Then

str = "HanSuDung"

AdodcMH.RecordSource = "SELECT

MaHH,TenHH,DVT,GiaNhap,GiaBan,TonKho,Xuatxu,HanSuDung FROM HangHoa

where " & str & "=DateValue('" & txtGiatri.Text & "') ORDER BY MaHH "

ElseIf cbTimtheo.Text = "Tồn kho" Then

str = "TonKho"

AdodcMH.RecordSource = "SELECT

MaHH,TenHH,DVT,GiaNhap,GiaBan,TonKho,Xuatxu,HanSuDung FROM HangHoa

where " & str & "=" & txtGiatri.Text & " ORDER BY MaHH "

ElseIf cbTimtheo.Text = "Giá bán" Then

str = "GiaBan"

AdodcMH.RecordSource = "SELECT

MaHH,TenHH,DVT,GiaNhap,GiaBan,TonKho,Xuatxu,HanSuDung FROM HangHoa

where " & str & "=" & txtGiatri.Text & " ORDER BY MaHH "

End If

AdodcMH.Refresh

lbSokq.Caption = "Số kết quả:" & AdodcMH.Recordset.RecordCount

lbSokq1.Caption = ""

End Sub

Private Sub Form_Load()

AdodcMH.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &

App.Path & "\Database\QuanLyBanHang.mdb;Persist Security Info=False"

NapAdodcMH

lbSokq1.Caption = "Số bản ghi:" & AdodcMH.Recordset.RecordCount

KhongChoUpDate

End Sub

Private Sub NapAdodcMH()

AdodcMH.CommandType = adCmdText

AdodcMH.RecordSource = "SELECT

MaHH,TenHH,DVT,GiaNhap,GiaBan,TonKho,Xuatxu,HanSuDung FROM HangHoa

ORDER BY MaHH"

AdodcMH.Refresh

End Sub

Private Sub CmdThem_Click()

Dim Traloi As Integer

Traloi = MsgBox("Bạn muốn thêm bản ghi mới ?", vbInformation + vbYesNo)

If Traloi = vbNo Then

AdodcMH.Refresh

Exit Sub

Else

AdodcMH.Recordset.AddNew

ChoPhepUpDate

txtMahh.SetFocus

End If

End Sub

Private Sub CmdLuu_Click()

AdodcMH.Recordset.Save

GrdMH.AllowUpdate = False

lbSokq1.Caption = "Số bản ghi:" & AdodcMH.Recordset.RecordCount

End Sub

Private Sub CmdChon_Click()

ChoPhepUpDate

End Sub

Private Sub CmdSua_Click()

Dim Traloi As Integer

Traloi = MsgBox("Bạn muốn sửa bản ghi này?", vbInformation + vbYesNo)

If Traloi = vbNo Then

AdodcMH.Refresh

Exit Sub

Else

GrdMH.AllowUpdate = True

AdodcMH.Recordset.Update

End If

KhongChoUpDate

End Sub

Private Sub CmdXoa_Click()

Dim Traloi As Integer

Traloi = MsgBox("Bạn muốn xoá bản ghi này ?", vbInformation + vbYesNo)

If Traloi = vbNo Then

GrdMH.AllowDelete = False

Else

GrdMH.AllowDelete = True

AdodcMH.Recordset.Delete

End If

lbSokq1.Caption = "Số bản ghi:" & AdodcMH.Recordset.RecordCount

End Sub

3. Code form hoá đơn bán hàng

Option Explicit

Dim KiemtraHH As Integer

Dim KiemtraHD As Integer

Dim rsMaHH As New ADODB.Recordset

Dim rsMaKH As New ADODB.Recordset

Dim rsNapTuDong As New ADODB.Recordset

Dim rsMaNV As New ADODB.Recordset

Dim rsTong As New ADODB.Recordset

Dim rsSoHHDB As New ADODB.Recordset

Dim rsKiemTraCTB1 As New ADODB.Recordset

Dim rsKiemTraCTB2 As New ADODB.Recordset

Dim rsSoLuong As New ADODB.Recordset

Dim rsHoaDonBan As New ADODB.Recordset

Dim KT1 As Integer

Dim KT2 As Integer

Dim KT3 As Integer

Dim Ten1 As String

Private Sub cmbMaHH_Click()

Dim sql As String

sql = "SElect TenHH, DVT, GiaBan, TonKho, XuatXu from HangHoa where

MaHH=('" & cmbMaHH.Text & "')"

rsNapTuDong.Open sql, Conn

TxtTenHH.Text = rsNapTuDong!TenHH

txtDvt.Text = rsNapTuDong!DVT

txtGiaban.Text = rsNapTuDong!GiaBan

txtTonkho.Text = rsNapTuDong!TonKho

txtXuatxu.Text = rsNapTuDong!XuatXu

TxtSoLuong.Text = ""

txtThanhTien.Text = ""

TxtSoLuong.SetFocus

rsNapTuDong.Close

End Sub

Private Sub ThanhTien()

txtThanhTien.Text = Val(TxtSoLuong.Text) * Val(txtGiaban.Text)

End Sub

Private Sub cmdFirst1_Click()

If KT1 = 1 Or KT2 = 1 Or (adoCTB.Recordset.EOF And adoCTB.Recordset.BOF)

Then

Exit Sub

Else

adoCTB.Recordset.MoveFirst

End If

End Sub

Private Sub cmdFirst2_Click()

If KT1 = 1 Or KT2 = 1 Or (adoHDB.Recordset.EOF And adoHDB.Recordset.BOF)

Then

Exit Sub

Else

adoHDB.Recordset.MoveFirst

NapadoCTB

NapadoTHB

End If

End Sub

Private Sub cmdLast1_Click()

If KT1 = 1 Or KT2 = 1 Or (adoCTB.Recordset.EOF And adoCTB.Recordset.BOF)

Then

Exit Sub

Else

adoCTB.Recordset.MoveLast

End If

End Sub

Private Sub cmdLast2_Click()

If KT1 = 1 Or KT2 = 1 Or (adoHDB.Recordset.EOF And adoHDB.Recordset.BOF)

Then

Exit Sub

Else

adoHDB.Recordset.MoveLast

NapadoCTB

NapadoTHB

End If

End Sub

Private Sub CmdLuuHD_Click()

Dim Traloi As Integer

Dim sql As String

Dim sql1 As String

Dim sql2 As String

On Error GoTo XuLyLoi

If KT1 = 1 Then

If TxtSoHHDB.Text = "" Or cmbMaNV.Text = "" Or TxtNgayBan.Text = "" Or

CmbMaKH.Text = "" Then

Exit Sub

End If

sql1 = "Select SoHHDB from HoaDonBan"

rsSoHHDB.Open sql1, Conn

NapadoCTB

NapadoTHB

Do Until rsSoHHDB.EOF

If TxtSoHHDB.Text = rsSoHHDB!SoHHDB Then

sql2 = "Select KhachHang.MaKH, TenKH, KhachHang.DiaChi, KhachHang.DT,

NgayBan, NhanVien.MaNV, TenNV, ChietKhau from HoaDonBan, NhanVien,

KhachHang " & _

"where HoaDonBan.MaKH=KhachHang.MaKH and HoaDonBan.MaNV=

NhanVien.MaNV and SoHHDB=('" & TxtSoHHDB.Text & "')"

rsHoaDonBan.Open sql2, Conn

TxtNgayBan.Text = rsHoaDonBan!NgayBan

cmbMaNV.Text = rsHoaDonBan!MaNV

txtTennv.Text = rsHoaDonBan!TenNV

CmbMaKH.Text = rsHoaDonBan!MaKH

txtTenKH.Text = rsHoaDonBan!TenKH

txtDiachi.Text = rsHoaDonBan!DiaChi

txtDT.Text = rsHoaDonBan!DT

sql = " update HoaDonBan set ChietKhau=val('" & txtChietKhau.Text & "')

where SoHHDB=('" & TxtSoHHDB.Text & "')"

Conn.Execute sql

adoCTB.Refresh

adoTHB.Refresh

NapadoCTB

NapadoTHB

MsgBox "Lưu thành công!", vbOKOnly

rsSoHHDB.Close

rsHoaDonBan.Close

Exit Sub

Else

rsSoHHDB.MoveNext

End If

Loop

If txtChietKhau = "" Then

sql = "insert into HoaDonBan (SoHHDB, MaKH, NgayBan, MaNV) values ('" &

TxtSoHHDB.Text & "', '" & CmbMaKH.Text & "', '" & TxtNgayBan.Text & "', '" &

cmbMaNV.Text & "')"

Conn.Execute sql

Else

sql = "insert into HoaDonBan values ('" & TxtSoHHDB.Text & "', '" &

CmbMaKH.Text & "', '" & TxtNgayBan.Text & "', '" & cmbMaNV.Text & "','" &

txtChietKhau & "')"

Conn.Execute sql

End If

MsgBox "Lưu thành công!", vbOKOnly

rsSoHHDB.Close

Exit Sub

ElseIf KT2 = 1 Then

sql = "update HoaDonBan set MaKH=('" & CmbMaKH.Text & "'), MaNV=('" &

cmbMaNV.Text & "'), NgayBan=('" & TxtNgayBan.Text & "'), ChietKhau=('" &

txtChietKhau.Text & "') where SoHHDB=('" & TxtSoHHDB.Text & "')"

Conn.Execute sql

adoTHB.Refresh

NapadoTHB

MsgBox "Xoá thành công”

Exit Sub

Else

Exit Sub

End If

XuLyLoi:

MsgBox "bạn hóy xem lại dữ liệu nhập!", vbOKOnly

MsgBox Error$

rsSoHHDB.Close

Exit Sub

End Sub

Private Sub CmdLuuMH_Click()

Dim sql As String

Dim sql1 As String

Dim sql2 As String

Dim sql3 As String

Dim sql4 As String

Dim Traloi As Integer

Dim sql5 As String

If KT2 = 1 Then

sql5 = "Select SoHHDB from HoaDonBan"

rsSoHHDB.Open sql5, Conn

Do Until rsSoHHDB.EOF

If TxtSoHHDB.Text <> rsSoHHDB!SoHHDB Then

rsSoHHDB.MoveNext

Else

sql = "Select MaHH from HangHoa"

rsMaHH.Open sql, Conn

Do Until rsMaHH.EOF

If cmbMaHH.Text <> rsMaHH!MaHH Then

rsMaHH.MoveNext

Else

If Val(TxtSoLuong.Text) > Val(txtTonkho.Text) Then

MsgBox " Trong kho không có đủ!", vbOKOnly

rsSoHHDB.Close

rsMaHH.Close

Exit Sub

ElseIf Val(TxtSoLuong.Text) = "0" Then

MsgBox " Không hợp lệ!", vbOKOnly

rsSoHHDB.Close

rsMaHH.Close

Exit Sub

Else

sql1 = "Select MaHH from ChiTietBanHang where MaHH=('" & cmbMaHH.Text &

"') and SoHHDB=('" & TxtSoHHDB.Text & "')"

rsKiemTraCTB1.Open sql1, Conn

If rsKiemTraCTB1.EOF Then

sql2 = " Insert into ChiTietBanHang values ('" & TxtSoHHDB.Text & "', '" &

cmbMaHH.Text & "', '" & TxtSoLuong.Text & "')"

Conn.Execute sql2

sql3 = " Update HangHoa set TonKho=TonKho - val('" & TxtSoLuong.Text & "')

where MaHH=('" & cmbMaHH.Text & "')"

Conn.Execute sql3

adoCTB.Refresh

adoTHB.Refresh

'NapadoCTB

'cmbMaHH.DataField =AdoCTB.Recordset!TenHH

'TxtTenHH.DataField = AdoCTB.Recordset!TenHH

'TxtSoLuong.DataField = adoCTB.Recordset!SoLuong

'TxtDVT.DataField = AdoCTB.Recordset!DVT

'TxtGiaBan.DataField = AdoCTB.Recordset!GiaBan

'TxtTonKho.DataField = adoCTB.Recordset!TonKho

'txtThanhTien.DataField = adoCTB.Recordset!ThanhTien

't xtXuatXu.DataField = AdoCTB.Recordset!XuatXu

MsgBox "Lưu thành công!", vbOKOnly

Else

Traloi = MsgBox(" ?", vbInformation + vbYesNo)

If Traloi = vbYes Then

sql3 = " Update ChiTietBanHang set SoLuong=SoLuong + val('" &

TxtSoLuong.Text & "') where MaHH=('" & cmbMaHH.Text & "') and SoHHDB=('"

& TxtSoHHDB.Text & "')"

Conn.Execute sql3

sql3 = " Update HangHoa set TonKho=TonKho - val('" & TxtSoLuong.Text & "')

where MaHH=('" & cmbMaHH.Text & "')"

Conn.Execute sql3

adoCTB.Refresh

adoTHB.Refresh

'NapadoCTB

Else

End If

End If

rsKiemTraCTB1.Close

End If

rsSoHHDB.Close

rsMaHH.Close

Exit Sub

End If

Loop

If rsMaHH.EOF Then

vbOKOnly

End If

rsMaHH.Close

rsSoHHDB.Close

Exit Sub

End If

Loop

If rsSoHHDB.EOF Then

rsSoHHDB.Close

ElseIf KT3 = 1 Then

sql = "Update ChiTietBanHang set SoLuong=val('" & TxtSoLuong.Text & "') where

SoHHDB=('" & TxtSoHHDB.Text & "') and MaHH=('" & cmbMaHH.Text & "')"

sql1 = "Update HangHoa set TonKho=(TonKho + val('" & Text1.Text & "') - val('"

& TxtSoLuong.Text & "')) where MaHH=('" & cmbMaHH.Text & "')"

Conn.Execute sql

Conn.Execute sql1

adoCTB.Refresh

adoTHB.Refresh

NapadoCTB

Else

Exit Sub

End If

End Sub

Private Sub cmdNext1_Click()

If KT1 = 1 Or KT2 = 1 Or (adoCTB.Recordset.EOF And adoCTB.Recordset.BOF)

Then

Exit Sub

Else

If adoCTB.Recordset.EOF = False Then

adoCTB.Recordset.MoveNext

Else

adoCTB.Recordset.MoveLast

End If

End If

End Sub

Private Sub cmdNext2_Click()

If KT1 = 1 Or KT2 = 1 Or (adoHDB.Recordset.EOF And adoHDB.Recordset.BOF)

Then

Exit Sub

Else

If adoHDB.Recordset.EOF = False Then

adoHDB.Recordset.MoveNext

NapadoCTB

NapadoTHB

Else

adoHDB.Recordset.MoveLast

NapadoCTB

NapadoTHB

End If

End If

End Sub

Private Sub cmdPri1_Click()

If KT1 = 1 Or KT2 = 1 Or (adoCTB.Recordset.EOF And adoCTB.Recordset.BOF)

Then

Exit Sub

Else

If adoCTB.Recordset.BOF = False Then

adoCTB.Recordset.MovePrevious

Else

adoCTB.Recordset.MoveFirst

End If

End If

End Sub

Private Sub cmdPri2_Click()

If KT1 = 1 Or KT2 = 1 Or (adoHDB.Recordset.EOF And adoHDB.Recordset.BOF)

Then

Exit Sub

Else

If adoHDB.Recordset.BOF = False Then

adoHDB.Recordset.MovePrevious

NapadoCTB

NapadoTHB

Else

adoHDB.Recordset.MoveFirst

NapadoCTB

NapadoTHB

End If

End If

End Sub

Private Sub CmdSuaHD_Click()

KT2 = 1

vbOKOnly

TxtNgayBan.Locked = False

cmbMaNV.Locked = False

txtTennv.Locked = False

CmbMaKH.Locked = False

txtTenKH.Locked = False

txtDiachi.Locked = False

txtDT.Locked = False

txtChietKhau.Locked = False

End Sub

Private Sub CmdSuaMH_Click()

KT3 = 1

Dim Traloi As Integer

Traloi = MsgBox(" Bản có muốn sửa số lượng không?", vbYesNo)

If Traloi = vbYes Then

Text1.Text = TxtSoLuong.Text

TxtSoLuong.Locked = False

cmbMaHH.DataField = ""

TxtTenHH.DataField = ""

TxtSoLuong.DataField = ""

txtDvt.DataField = ""

txtGiaban.DataField = ""

txtTonkho.DataField = ""

txtThanhTien.DataField = ""

txtXuatxu.DataField = ""

TxtSoLuong.Text = ""

txtThanhTien.Text = ""

End If

End Sub

Private Sub cmdThemHD_Click()

KT1 = 1

adoTHB.Recordset.AddNew

ChoUpdate

TxtSoHHDB.Text = ""

TxtNgayBan.Text = ""

cmbMaNV.Text = ""

txtTennv.Text = ""

CmbMaKH.Text = ""

txtTenKH.Text = ""

txtDiachi.Text = ""

txtDT.Text = ""

txtTongThue.Text = ""

txtChietKhau.Text = ""

txtTongTien.Text = ""

txtTongTT.Text = ""

cmbMaHH.DataField = ""

TxtTenHH.DataField = ""

TxtSoLuong.DataField = ""

txtDvt.DataField = ""

txtGiaban.DataField = ""

txtTonkho.DataField = ""

txtThanhTien.DataField = ""

txtXuatxu.DataField = ""

cmbMaHH.Text = ""

TxtTenHH.Text = ""

txtGiaban.Text = ""

txtTonkho.Text = ""

txtDvt.Text = ""

txtXuatxu.Text = ""

TxtSoLuong.Text = ""

txtThanhTien = ""

cmbMaHH.Locked = True

TxtTenHH.Locked = True

TxtSoLuong.Locked = True

txtDvt.Locked = True

txtGiaban.Locked = True

txtTonkho.Locked = True

txtXuatxu.Locked = True

txtThanhTien.Locked = True

txtTongTT.Locked = True

NapcmbMaHH

NapcmbMaKH

NapcmbMaNV

NapadoCTB

NapadoTHB

TxtSoHHDB.SetFocus

End Sub

Private Sub CmdThemMH_Click()

KT2 = 1

If TxtSoHHDB.Text = "" Or cmbMaNV.Text = "" Or TxtNgayBan.Text = "" Or

CmbMaKH.Text = "" Then

Exit Sub

Else

Dim Traloi As Integer

Traloi = MsgBox("Bạn muốnt thêm bản ghi mới ?", vbInformation + vbYesNo)

If Traloi = vbNo Then

adoCTB.Refresh

Exit Sub

Else

ChoUpdate

NapcmbMaHH

cmbMaHH.DataField = ""

TxtTenHH.DataField = ""

TxtSoLuong.DataField = ""

txtDvt.DataField = ""

txtGiaban.DataField = ""

txtTonkho.DataField = ""

txtThanhTien.DataField = ""

txtXuatxu.DataField = ""

cmbMaHH.Text = ""

TxtTenHH.Text = ""

txtGiaban.Text = ""

txtTonkho.Text = ""

txtDvt.Text = ""

txtXuatxu.Text = ""

TxtSoLuong.Text = ""

txtThanhTien = ""

cmbMaHH.SetFocus

End If

End If

End Sub

Private Sub CmdThoat_Click()

Unload Me

End Sub

Private Sub CmdXoaHD_Click()

KT3 = 1

Dim sql As String

Dim sql1 As String

sql = "Select SoHHDB from ChiTietBanHang"

rsSoHHDB.Open sql, Conn

Do Until rsSoHHDB.EOF

If (TxtSoHHDB.Text) = rsSoHHDB!SoHHDB Then

rsSoHHDB.Close

Exit Sub

Else

rsSoHHDB.MoveNext

End If

Loop

If rsSoHHDB.EOF Then

sql1 = "Delete * from HoaDonBan where SoHHDB=('" & TxtSoHHDB.Text & "')"

Conn.Execute sql1

MsgBox "§· xo¸ thµnh c«ng"

NapadoHDB

End If

rsSoHHDB.Close

End Sub

Private Sub CmdXoaMH_Click()

Dim sql As String

Dim sql2 As String

sql = "delete * from ChiTietBanHang where MaHH=('" & cmbMaHH.Text & "') and

SoHHDB=('" & TxtSoHHDB.Text & "')"

sql2 = "update HangHoa set TonKho=TonKho+val('" & txtTonkho.Text & "') where

MaHH=('" & cmbMaHH.Text & "') "

Conn.Execute sql

Conn.Execute sql2

'NapadoCTB

adoCTB.Refresh

End Sub

Private Sub Form_Load()

NapadoHDB

NapadoCTB

NapadoTHB

Naptooltip

KhongChoUpDate

End Sub

Private Sub NapadoHDB()

adoHDB.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &

App.Path & "\Database\QuanLyBanHang.mdb;Persist Security Info=False"

adoHDB.CommandType = adCmdText

adoHDB.RecordSource = " SELECT SoHHDB, NgayBan, NhanVien.MaNV,

TenNV,KhachHang.MaKH, TenKH, KhachHang.DiaChi,

KhachHang.DT,ChietKhau from HoaDonBan, KhachHang, NhanVien " & _

"where HoaDonBan.MaNV=NhanVien.MaNV and

HoaDonBan.MaKH=KhachHang.MaKH"

adoHDB.Refresh

End Sub

Private Sub NapadoCTB()

adoCTB.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &

App.Path & "\Database\QuanLyBanHang.mdb;Persist Security Info=False"

adoCTB.CommandType = adCmdText

adoCTB.RecordSource = " select HangHoa.MaHH, TenHH, XuatXu, DVT,

SoLuong, GiaBan, SoLuong* GiaBan as ThanhTien, TonKho from HangHoa,

ChiTietBanHang " & _

"where HangHoa.MaHH=ChiTietBanHang.MaHH and SoHHDB=('" &

TxtSoHHDB.Text & "')"

adoCTB.Refresh

End Sub

Private Sub NapadoTHB()

adoTHB.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &

App.Path & "\Database\QuanLyBanHang.mdb;Persist Security Info=False"

adoTHB.CommandType = adCmdText

adoTHB.RecordSource = "select Sum(SoLuong*GiaBan) as TongTien,

Sum(SoLuong*GiaBan*0.1) as TongThue, (Sum(SoLuong*GiaBan) +

sum(SoLuong*GiaBan*0.1)-Sum(SoLuong*GiaBan*ChietKhau)) as TongTT " & _

"From HoaDonBan, HangHoa, ChiTietBanHang " & _

"Where HoaDonBan.SoHHDB=ChiTietBanHang.SoHHDB and

HangHoa.MaHH=ChiTietBanHang.MaHH " & _

"and HoaDonBan.SoHHDB=('" & TxtSoHHDB.Text & "')"

adoTHB.Refresh

End Sub

Private Sub Naptooltip()

CmdThemHD.ToolTipText = "Thªm ho¸ ®¬n"

CmdLuuHD.ToolTipText = "L-u ho¸ ®¬n"

CmdSuaHD.ToolTipText = "Söa ho¸ ®¬n"

CmdXoaHD.ToolTipText = "Xo¸ ho¸ ®¬n"

CmdThoat.ToolTipText = "Tho¸t "

End Sub

Private Sub KhongChoUpDate()

TxtSoHHDB.Locked = True

TxtNgayBan.Locked = True

cmbMaNV.Locked = True

txtTennv.Locked = True

CmbMaKH.Locked = True

txtTenKH.Locked = True

txtDiachi.Locked = True

txtDT.Locked = True

txtTongThue.Locked = True

txtChietKhau.Locked = True

txtTongTien.Locked = True

txtTongTT.Locked = True

cmbMaHH.Locked = True

TxtTenHH.Locked = True

TxtSoLuong.Locked = True

txtDvt.Locked = True

txtGiaban.Locked = True

txtTonkho.Locked = True

txtXuatxu.Locked = True

txtThanhTien.Locked = True

GrdHHB.AllowDelete = False

GrdHHB.AllowUpdate = False

End Sub

Private Sub ChoUpdate()

TxtSoHHDB.Locked = False

TxtNgayBan.Locked = False

cmbMaNV.Locked = False

txtTennv.Locked = False

CmbMaKH.Locked = False

txtTenKH.Locked = False

txtDiachi.Locked = False

txtDT.Locked = False

txtTongThue.Locked = False

txtChietKhau.Locked = False

txtTongTien.Locked = False

txtTongTT.Locked = False

cmbMaHH.Locked = False

TxtTenHH.Locked = False

TxtSoLuong.Locked = False

txtDvt.Locked = False

txtGiaban.Locked = False

txtTonkho.Locked = False

txtXuatxu.Locked = False

txtThanhTien.Locked = False

GrdHHB.AllowDelete = True

GrdHHB.AllowUpdate = True

End Sub

Private Sub NapcmbMaHH()

Dim sql As String

sql = "Select MaHH from HangHoa where TonKho<>null order by MaHH"

rsMaHH.Open sql, Conn

cmbMaHH.Clear

Do While Not rsMaHH.EOF

cmbMaHH.AddItem rsMaHH!MaHH

rsMaHH.MoveNext

Loop

rsMaHH.Close

End Sub

Private Sub NapcmbMaKH()

Dim sql As String

sql = "Select MaKH from KhachHang order by MaKH"

rsMaKH.Open sql, Conn

CmbMaKH.Clear

Do While Not rsMaKH.EOF

CmbMaKH.AddItem rsMaKH!MaKH

rsMaKH.MoveNext

Loop

rsMaKH.Close

End Sub

Private Sub txtThanhTien_Gotfocus()

txtThanhTien.Text = Val(TxtSoLuong.Text) * Val(txtGiaban.Text)

End Sub

Private Sub NapcmbMaNV()

Dim sql As String

sql = " select MaNV from NhanVien order by MaNV"

rsMaNV.Open sql, Conn

cmbMaNV.Clear

Do Until rsMaNV.EOF

cmbMaNV.AddItem rsMaNV!MaNV

rsMaNV.MoveNext

Loop

rsMaNV.Close

End Sub

Private Sub cmbMaNV_Click()

Dim sql As String

sql = "Select TenNV from NhanVien where MaNV=('" & cmbMaNV.Text & "')"

rsNapTuDong.Open sql, Conn

txtTennv.Text = rsNapTuDong!TenNV

rsNapTuDong.Close

End Sub

Private Sub cmbMaKH_Click()

Dim sql As String

sql = "Select TenKH, DiaChi, DT from KhachHang where MaKH=('" &

CmbMaKH.Text & "')"

rsNapTuDong.Open sql, Conn

txtTenKH.Text = rsNapTuDong!TenKH

txtDiachi.Text = rsNapTuDong!DiaChi

txtDT.Text = rsNapTuDong!DT

rsNapTuDong.Close

End Sub

Private Sub cmbMaKH_LostFocus()

Dim sql As String

On Error GoTo XuLyLoi

sql = "Select TenKH, DiaChi, DT from KhachHang where MaKH=('" &

CmbMaKH.Text & "')"

Dim rsTenKH As New ADODB.Recordset

rsTenKH.Open sql, Conn

txtTenKH.Text = rsTenKH!TenKH

txtDiachi.Text = rsTenKH!DiaChi

txtDT.Text = rsTenKH!DT

rsTenKH.Close

Exit Sub

XuLyLoi:

MsgBox " B¹n h·y nhËp l¹i m· kh¸ch hµng!", vbOKOnly

rsTenKH.Close

End Sub

Private Sub cmbMaNV_LostFocus()

Dim sql As String

On Error GoTo XuLyLoi

sql = "Select TenNV from NhanVien where MaNV=('" & cmbMaNV.Text & "')"

Dim rsTenNV As New ADODB.Recordset

rsTenNV.Open sql, Conn

txtTennv.Text = rsTenNV!TenNV

rsTenNV.Close

Exit Sub

XuLyLoi:

rsTenNV.Close

Exit Sub

End Sub

Private Sub cmbMaHH_LostFocus()

Dim sql As String

On Error GoTo XuLyLoi

sql = "Select TenHH, XuatXu, GiaBan ,DVT, TonKho from HangHoa where

MaHH=('" & cmbMaHH.Text & "')"

Dim rsTenHH As New ADODB.Recordset

rsTenHH.Open sql, Conn

TxtTenHH.Text = rsTenHH!TenHH

txtDvt.Text = rsTenHH!DVT

txtXuatxu.Text = rsTenHH!XuatXu

txtTonkho.Text = rsTenHH!TonKho

txtGiaban.Text = rsTenHH!GiaBan

rsTenHH.Close

Exit Sub

XuLyLoi:

rsTenHH.Close

Exit Sub

End Sub

4. Code form hoá đơn nhập hàng

Option Explicit

Dim KiemtraHH As Integer

Dim KiemtraHD As Integer

Dim rsMaHH As New ADODB.Recordset

Dim rsMaKH As New ADODB.Recordset

Dim rsNapTuDong As New ADODB.Recordset

Dim rsMaNV As New ADODB.Recordset

Dim rsTong As New ADODB.Recordset

Dim rsSoHHDM As New ADODB.Recordset

Dim rsKiemTraCTM1 As New ADODB.Recordset

Dim rsKiemTraCTM2 As New ADODB.Recordset

Dim rsSoLuong As New ADODB.Recordset

Dim rsHoaDonMua As New ADODB.Recordset

Dim rsMaNCC As New ADODB.Recordset

Dim rsTenNCC As New ADODB.Recordset

Dim KT1 As Integer

Dim KT2 As Integer

Dim KT3 As Integer

Dim Ten1 As String

Dim t As Integer

Private Sub cmbMaHH_Click()

Dim sql As String

sql = "SElect TenHH, DVT, GiaNhap, TonKho, XuatXu, HanSuDung from

HangHoa where MaHH=('" & cmbMaHH.Text & "')"

rsNapTuDong.Open sql, Conn

TxtTenHH.Text = rsNapTuDong!TenHH

txtDvt.Text = rsNapTuDong!DVT

txtGianhap.Text = rsNapTuDong!GiaNhap

txtTonkho.Text = rsNapTuDong!TonKho

txtXuatxu.Text = rsNapTuDong!XuatXu

txtHansudung.Text = rsNapTuDong!HanSuDung

TxtSoLuong.Text = ""

txtThanhTien.Text = ""

TxtSoLuong.SetFocus

rsNapTuDong.Close

End Sub

Private Sub ThanhTien()

txtThanhTien.Text = Val(TxtSoLuong.Text) * Val(txtGianhap.Text)

End Sub

Private Sub cmdFirst1_Click()

If KT1 = 1 Or KT2 = 1 Or (adoCTM.Recordset.EOF And adoCTM.Recordset.BOF)

Then

Exit Sub

Else

adoCTM.Recordset.MoveFirst

End If

End Sub

Private Sub cmdFirst2_Click()

If KT1 = 1 Or KT2 = 1 Or (adoHDM.Recordset.EOF And

adoHDM.Recordset.BOF) Then

Exit Sub

Else

adoHDM.Recordset.MoveFirst

NapadoCTM

NapadoTHM

End If

End Sub

Private Sub cmdLast1_Click()

If KT1 = 1 Or KT2 = 1 Or (adoCTM.Recordset.EOF And adoCTM.Recordset.BOF)

Then

Exit Sub

Else

adoCTM.Recordset.MoveLast

End If

End Sub

Private Sub cmdLast2_Click()

If KT1 = 1 Or KT2 = 1 Or (adoHDM.Recordset.EOF And

adoHDM.Recordset.BOF) Then

Exit Sub

Else

adoHDM.Recordset.MoveLast

NapadoCTM

NapadoTHM

End If

End Sub

Private Sub CmdLuuHD_Click()

Dim Traloi As Integer

Dim sql As String

Dim sql1 As String

Dim sql2 As String

'On Error GoTo XuLyLoi

If KT1 = 1 Then

If TxtSoHHDM.Text = "" Or cmbMaNV.Text = "" Or TxtNgayMua.Text = "" Or

cmbMaNCC.Text = "" Then

MsgBox "B¹n chưa điền đủ dữ liệu !", vbInformation + vbOKOnly

Exit Sub

End If

sql1 = "Select SoHHDM from HoaDonMua"

rsSoHHDM.Open sql1, Conn

NapadoCTM

NapadoTHM

Do Until rsSoHHDM.EOF

If TxtSoHHDM.Text = rsSoHHDM!SoHHDM Then

sql2 = "Select NhaCC.MaNCC, TenNCC, NhaCC.DiaChi, NhaCC.DT, NgayMua,

NhanVien.MaNV, TenNV from HoaDonMua, NhanVien, NhaCC " & _

"where HoaDonMua.MaNCC=NhaCC.MaNCC and HoaDonMua.MaNV=

NhanVien.MaNV and SoHHDM=('" & TxtSoHHDM.Text & "')"

rsHoaDonMua.Open sql2, Conn

TxtNgayMua.Text = rsHoaDonMua!NgayMua

cmbMaNV.Text = rsHoaDonMua!MaNV

txtTennv.Text = rsHoaDonMua!TenNV

cmbMaNCC.Text = rsHoaDonMua!MaNCC

txtTenNCC.Text = rsHoaDonMua!TenNCC

txtDiachi.Text = rsHoaDonMua!DiaChi

txtDT.Text = rsHoaDonMua!DT

adoCTM.Refresh

adoTHM.Refresh

NapadoCTM

NapadoTHM

MsgBox "§· l-u thµnh c«ng!", vbOKOnly

rsSoHHDM.Close

rsHoaDonMua.Close

Exit Sub

Else

rsSoHHDM.MoveNext

End If

Loop

sql = "insert into HoaDonMua values ('" & TxtSoHHDM.Text & "', '" &

cmbMaNCC.Text & "', '" & TxtNgayMua.Text & "', '" & cmbMaNV.Text & "')"

Conn.Execute sql

adoHDM.Refresh

MsgBox "§· l-u thµnh c«ng!", vbOKOnly

rsSoHHDM.Close

Exit Sub

ElseIf KT2 = 1 Then

sql = "update HoaDonMua set MaNCC=('" & cmbMaNCC.Text & "'), MaNV=('" &

cmbMaNV.Text & "'), NgayMua=('" & TxtNgayMua.Text & "') where

SoHHDM=('" & TxtSoHHDM.Text & "')"

Conn.Execute sql

adoTHM.Refresh

NapadoTHM

MsgBox "§· söa thµnh c«ng!"

Exit Sub

Else

Exit Sub

End If

'XuLyLoi:

'MsgBox "B¹n h·y xem l¹i d÷ liÖu nhËp!", vbOKOnly

'MsgBox Error$

'rsSoHHDM.Close

'Exit Sub

End Sub

Private Sub CmdLuuMH_Click()

Dim sql As String

Dim sql1 As String

Dim sql2 As String

Dim sql3 As String

Dim sql4 As String

Dim Traloi As Integer

Dim sql5 As String

If KT2 = 1 Then

sql5 = "Select SoHHDM from HoaDonMua"

rsSoHHDM.Open sql5, Conn

Do Until rsSoHHDM.EOF

If TxtSoHHDM.Text <> rsSoHHDM!SoHHDM Then

rsSoHHDM.MoveNext

Else

sql = "Select MaHH from HangHoa"

rsMaHH.Open sql, Conn

Do Until rsMaHH.EOF

If cmbMaHH.Text <> rsMaHH!MaHH Then

rsMaHH.MoveNext

ElseIf Val(TxtSoLuong.Text) = "0" Then

MsgBox " Sè l-îng mua kh«ng hîp lÖ!", vbOKOnly

rsSoHHDM.Close

rsMaHH.Close

Exit Sub

Else

sql1 = "Select MaHH from ChiTietHangMua where MaHH=('" & cmbMaHH.Text

& "') and SoHHDM=('" & TxtSoHHDM.Text & "')"

rsKiemTraCTM1.Open sql1, Conn

If rsKiemTraCTM1.EOF Then

sql2 = " Insert into ChiTietHangMua values ('" & TxtSoHHDM.Text & "', '" &

cmbMaHH.Text & "', '" & TxtSoLuong.Text & "')"

Conn.Execute sql2

sql3 = " Update HangHoa set TonKho=TonKho + val('" & TxtSoLuong.Text & "')

where MaHH=('" & cmbMaHH.Text & "')"

Conn.Execute sql3

adoCTM.Refresh

adoTHM.Refresh

'NapadoCTB

'cmbMaHH.DataField =AdoCTB.Recordset!TenHH

'TxtTenHH.DataField = AdoCTB.Recordset!TenHH

'TxtSoLuong.DataField = adoCTB.Recordset!SoLuong

'TxtDVT.DataField = AdoCTB.Recordset!DVT

'TxtGiaBan.DataField = AdoCTB.Recordset!GiaBan

'TxtTonKho.DataField = adoCTB.Recordset!TonKho

'txtThanhTien.DataField = adoCTB.Recordset!ThanhTien

't xtXuatXu.DataField = AdoCTB.Recordset!XuatXu

MsgBox "§· l-u thµnh c«ng!", vbOKOnly

Else

Traloi = MsgBox(" Mặt hàng này đã có rồi bạn có muốn cộng dồn không?",

vbInformation + vbYesNo)

If Traloi = vbYes Then

sql3 = " Update ChiTietHangMua set SoLuong=SoLuong + val('" &

TxtSoLuong.Text & "') where MaHH=('" & cmbMaHH.Text & "') and

SoHHDM=('" & TxtSoHHDM.Text & "')"

Conn.Execute sql3

sql3 = " Update HangHoa set TonKho=TonKho + val('" & TxtSoLuong.Text & "')

where MaHH=('" & cmbMaHH.Text & "')"

Conn.Execute sql3

adoCTM.Refresh

adoTHM.Refresh

'NapadoCTB

MsgBox "§· l-u thµnh c«ng!", vbOKOnly

Else

MsgBox "B¹n h·y nhËp l¹i mÆt hµng!", vbOKOnly

End If

End If

rsKiemTraCTM1.Close

rsSoHHDM.Close

rsMaHH.Close

Exit Sub

End If

Loop

If rsMaHH.EOF Then

MsgBox "Mặt hàng này chưa có trong danh mục mÆt hµng!", vbOKOnly

End If

rsMaHH.Close

rsSoHHDM.Close

Exit Sub

End If

Loop

If rsSoHHDM.EOF Then

MsgBox "B¹n h·y l-u ho¸ ®¬n tr-íc!", vbOKOnly

End If

rsSoHHDM.Close

ElseIf KT3 = 1 Then

sql = "Update ChiTietHangMua set SoLuong=val('" & TxtSoLuong.Text & "')

where SoHHDM=('" & TxtSoHHDM.Text & "') and MaHH=('" & cmbMaHH.Text

& "')"

sql1 = "Update HangHoa set TonKho=(TonKho - val('" & Text1.Text & "')+ val('"

& TxtSoLuong.Text & "')) where MaHH=('" & cmbMaHH.Text & "')"

Conn.Execute sql

Conn.Execute sql1

adoCTM.Refresh

adoTHM.Refresh

NapadoCTM

Else

Exit Sub

End If

End Sub

Private Sub cmdNext1_Click()

If KT1 = 1 Or KT2 = 1 Or (adoCTM.Recordset.EOF And adoCTM.Recordset.BOF)

Then

Exit Sub

Else

If adoCTM.Recordset.EOF = False Then

adoCTM.Recordset.MoveNext

Else

adoCTM.Recordset.MoveLast

End If

End If

End Sub

Private Sub cmdNext2_Click()

If KT1 = 1 Or KT2 = 1 Or (adoHDM.Recordset.EOF And

adoHDM.Recordset.BOF) Then

Exit Sub

Else

If adoHDM.Recordset.EOF = False Then

adoHDM.Recordset.MoveNext

NapadoCTM

NapadoTHM

Else

adoHDM.Recordset.MoveLast

NapadoCTM

NapadoTHM

End If

End If

End Sub

Private Sub cmdPri1_Click()

If KT1 = 1 Or KT2 = 1 Or (adoCTM.Recordset.EOF And adoCTM.Recordset.BOF)

Then

Exit Sub

Else

If adoCTM.Recordset.BOF = False Then

adoCTM.Recordset.MovePrevious

Else

adoCTM.Recordset.MoveFirst

End If

End If

End Sub

Private Sub cmdPri2_Click()

If KT1 = 1 Or KT2 = 1 Or (adoHDM.Recordset.EOF And

adoHDM.Recordset.BOF) Then

Exit Sub

Else

If adoHDM.Recordset.BOF = False Then

adoHDM.Recordset.MovePrevious

NapadoCTM

NapadoTHM

Else

adoHDM.Recordset.MoveFirst

NapadoCTM

NapadoTHM

End If

End If

End Sub

Private Sub CmdSuaHD_Click()

KT2 = 1

MsgBox "Nếu hoá đơn đã có bạn không sửa được số hiệu hoá đơn!", vbOKOnly

TxtNgayMua.Locked = False

cmbMaNV.Locked = False

txtTennv.Locked = False

cmbMaNCC.Locked = False

txtTenNCC.Locked = False

txtDiachi.Locked = False

txtDT.Locked = False

End Sub

Private Sub CmdSuaMH_Click()

KT3 = 1

Dim Traloi As Integer

Traloi = MsgBox(" Bạn có muốn sửa lượng bán mặt hàng này không?", vbYesNo)

If Traloi = vbYes Then

rsSoLuong.Open "Select SoLuong from ChiTietHangMua where MaHH=('" &

cmbMaHH.Text & "') and SoHHDM=('" & TxtSoHHDM.Text & "')", Conn

Text1.Text = rsSoLuong!SoLuong

TxtSoLuong.Locked = False

cmbMaHH.DataField = ""

TxtTenHH.DataField = ""

TxtSoLuong.DataField = ""

txtDvt.DataField = ""

txtGianhap.DataField = ""

txtTonkho.DataField = ""

txtThanhTien.DataField = ""

txtXuatxu.DataField = ""

txtHansudung.DataField = ""

TxtSoLuong.Text = ""

txtThanhTien.Text = ""

rsSoLuong.Close

End If

End Sub

Private Sub cmdThemHD_Click()

KT1 = 1

adoTHM.Recordset.AddNew

ChoUpdate

TxtSoHHDM.Text = ""

TxtNgayMua.Text = ""

cmbMaNV.Text = ""

txtTennv.Text = ""

cmbMaNCC.Text = ""

txtTenNCC.Text = ""

txtDiachi.Text = ""

txtDT.Text = ""

txtTongThue.Text = ""

txtTongTien.Text = ""

txtTongTT.Text = ""

cmbMaHH.DataField = ""

TxtTenHH.DataField = ""

TxtSoLuong.DataField = ""

txtDvt.DataField = ""

txtGianhap.DataField = ""

txtTonkho.DataField = ""

txtThanhTien.DataField = ""

txtXuatxu.DataField = ""

txtHansudung.DataField = ""

cmbMaHH.Text = ""

TxtTenHH.Text = ""

txtGianhap.Text = ""

txtTonkho.Text = ""

txtDvt.Text = ""

txtXuatxu.Text = ""

TxtSoLuong.Text = ""

txtThanhTien = ""

txtHansudung.Text = ""

cmbMaHH.Locked = True

TxtTenHH.Locked = True

TxtSoLuong.Locked = True

txtDvt.Locked = True

txtGianhap.Locked = True

txtTonkho.Locked = True

txtXuatxu.Locked = True

txtThanhTien.Locked = True

txtTongTT.Locked = True

txtHansudung.Locked = True

NapcmbMaHH

NapcmbMaNCC

NapcmbMaNV

NapadoCTM

NapadoTHM

TxtSoHHDM.SetFocus

End Sub

Private Sub CmdThemMH_Click()

KT2 = 1

If TxtSoHHDM.Text = "" Or cmbMaNV.Text = "" Or TxtNgayMua.Text = "" Or

cmbMaNCC.Text = "" Then

MsgBox "Bạn chưa điền đủ thông tin!", vbInformation + vbOKOnly

Exit Sub

Else

Dim Traloi As Integer

Traloi = MsgBox(" B¹n muèn thªm b¶n ghi míi ?", vbInformation + vbYesNo)

If Traloi = vbNo Then

adoCTM.Refresh

Exit Sub

Else

ChoUpdate

NapcmbMaHH

cmbMaHH.DataField = ""

TxtTenHH.DataField = ""

TxtSoLuong.DataField = ""

txtDvt.DataField = ""

txtGianhap.DataField = ""

txtTonkho.DataField = ""

txtThanhTien.DataField = ""

txtXuatxu.DataField = ""

txtHansudung.DataField = ""

cmbMaHH.Text = ""

TxtTenHH.Text = ""

txtGianhap.Text = ""

txtTonkho.Text = ""

txtDvt.Text = ""

txtXuatxu.Text = ""

TxtSoLuong.Text = ""

txtThanhTien = ""

txtHansudung = ""

cmbMaHH.SetFocus

End If

End If

End Sub

Private Sub CmdThoat_Click()

Unload Me

End Sub

Private Sub CmdXoaHD_Click()

Dim sql As String

Dim sql1 As String

sql = "Select SoHHDM from ChiTietHangMua"

rsSoHHDM.Open sql, Conn

Do Until rsSoHHDM.EOF

If (TxtSoHHDM.Text) = rsSoHHDM!SoHHDM Then

MsgBox "Ho¸ ®¬n nµy kh«ng ®-îc xo¸ do ®· ph¸t sinh giao dich!", vbOKOnly

rsSoHHDM.Close

Exit Sub

Else

rsSoHHDM.MoveNext

End If

Loop

If rsSoHHDM.EOF Then

sql1 = "Delete * from HoaDonMua where SoHHDM=('" & TxtSoHHDM.Text &

"')"

Conn.Execute sql1

adoHDM.Refresh

adoTHM.Refresh

MsgBox "§· xo¸ thµnh c«ng"

NapadoHDM

End If

rsSoHHDM.Close

End Sub

Private Sub CmdXoaMH_Click()

Dim sql As String

Dim sql2 As String

sql = "delete * from ChiTietHangMua where MaHH=('" & cmbMaHH.Text & "')

and SoHHDM=('" & TxtSoHHDM.Text & "')"

sql2 = "update HangHoa set TonKho=TonKho-val('" & TxtSoLuong.Text & "')

where MaHH=('" & cmbMaHH.Text & "') "

Conn.Execute sql

Conn.Execute sql2

'NapadoCTB

adoCTM.Refresh

MsgBox "§· xo¸ thµnh c«ng!"

End Sub

Private Sub Form_Load()

NapadoHDM

NapadoCTM

NapadoTHM

Naptooltip

KhongChoUpDate

End Sub

Private Sub NapadoHDM()

adoHDM.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="

& App.Path & "\Database\QuanLyBanHang.mdb;Persist Security Info=False"

adoHDM.CommandType = adCmdText

adoHDM.RecordSource = " SELECT SoHHDM, NgayMua, NhanVien.MaNV,

TenNV, NhaCC.MaNCC, TenNCC, NhaCC.DiaChi, NhaCC.DT from HoaDonMua,

NhaCC, NhanVien " & _

"where HoaDonMua.MaNV=NhanVien.MaNV and

HoaDonMua.MaNCC=NhaCC.MaNCC"

adoHDM.Refresh

End Sub

Private Sub NapadoCTM()

adoCTM.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &

App.Path & "\Database\QuanLyBanHang.mdb;Persist Security Info=False"

adoCTM.CommandType = adCmdText

adoCTM.RecordSource = " select HangHoa.MaHH, TenHH, XuatXu, DVT,

SoLuong, GiaNhap, HanSuDung, SoLuong* GiaNhap as ThanhTien, TonKho from

HangHoa, ChiTietHangMua " & _

"where HangHoa.MaHH=ChiTietHangMua.MaHH and SoHHDM=('" &

TxtSoHHDM.Text & "')"

adoCTM.Refresh

End Sub

Private Sub NapadoTHM()

adoTHM.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &

App.Path & "\Database\QuanLyBanHang.mdb;Persist Security Info=False"

adoTHM.CommandType = adCmdText

adoTHM.RecordSource = "select Sum(SoLuong*GiaNhap) as TongTien,

Sum(SoLuong*GiaNhap*0.1) as TongThue, (Sum(SoLuong*GiaNhap) +

sum(SoLuong*GiaNhap*0.1)) as TongTT " & _

"From HoaDonMua, HangHoa, ChiTietHangMua " & _

"Where HoaDonMua.SoHHDM=ChiTietHangMua.SoHHDM and

HangHoa.MaHH=ChiTietHangMua.MaHH " & _

"and HoaDonMua.SoHHDM=('" & TxtSoHHDM.Text & "')"

adoTHM.Refresh

End Sub

Private Sub Naptooltip()

CmdThemHD.ToolTipText = "Thêm hoá đơn"

CmdLuuHD.ToolTipText = "Lưu hoá đơn"

CmdSuaHD.ToolTipText = "Sửa hoá đơn”

CmdXoaHD.ToolTipText = "Xoá hoá đơn"

CmdThoat.ToolTipText = "Thoát "

End Sub

Private Sub KhongChoUpDate()

TxtSoHHDM.Locked = True

TxtNgayMua.Locked = True

cmbMaNV.Locked = True

txtTennv.Locked = True

cmbMaNCC.Locked = True

txtTenNCC.Locked = True

txtDiachi.Locked = True

txtDT.Locked = True

txtTongThue.Locked = True

txtTongTien.Locked = True

txtTongTT.Locked = True

cmbMaHH.Locked = True

TxtTenHH.Locked = True

TxtSoLuong.Locked = True

txtDvt.Locked = True

txtGianhap.Locked = True

txtTonkho.Locked = True

txtXuatxu.Locked = True

txtThanhTien.Locked = True

txtHansudung.Locked = True

GrdHHM.AllowDelete = False

GrdHHM.AllowUpdate = False

End Sub

Private Sub ChoUpdate()

TxtSoHHDM.Locked = False

TxtNgayMua.Locked = False

cmbMaNV.Locked = False

txtTennv.Locked = False

cmbMaNCC.Locked = False

txtTenNCC.Locked = False

txtDiachi.Locked = False

txtDT.Locked = False

txtTongThue.Locked = False

txtTongTien.Locked = False

txtTongTT.Locked = False

cmbMaHH.Locked = False

TxtTenHH.Locked = False

TxtSoLuong.Locked = False

txtDvt.Locked = False

txtGianhap.Locked = False

txtTonkho.Locked = False

txtXuatxu.Locked = False

txtHansudung.Locked = False

txtThanhTien.Locked = False

GrdHHM.AllowDelete = True

GrdHHM.AllowUpdate = True

End Sub

Private Sub NapcmbMaHH()

Dim sql As String

sql = "Select MaHH from HangHoa where TonKho<>null order by MaHH"

rsMaHH.Open sql, Conn

cmbMaHH.Clear

Do While Not rsMaHH.EOF

cmbMaHH.AddItem rsMaHH!MaHH

rsMaHH.MoveNext

Loop

rsMaHH.Close

End Sub

Private Sub NapcmbMaNCC()

Dim sql As String

sql = "Select MaNCC from NhaCC order by MaNCC"

rsMaNCC.Open sql, Conn

cmbMaNCC.Clear

Do While Not rsMaNCC.EOF

cmbMaNCC.AddItem rsMaNCC!MaNCC

rsMaNCC.MoveNext

Loop

rsMaNCC.Close

End Sub

Private Sub txtThanhTien_Gotfocus()

txtThanhTien.Text = Val(TxtSoLuong.Text) * Val(txtGianhap.Text)

End Sub

Private Sub NapcmbMaNV()

Dim sql As String

sql = " select MaNV from NhanVien order by MaNV"

rsMaNV.Open sql, Conn

cmbMaNV.Clear

Do Until rsMaNV.EOF

cmbMaNV.AddItem rsMaNV!MaNV

rsMaNV.MoveNext

Loop

rsMaNV.Close

End Sub

Private Sub cmbMaNV_Click()

Dim sql As String

sql = "Select TenNV from NhanVien where MaNV=('" & cmbMaNV.Text & "')"

rsNapTuDong.Open sql, Conn

txtTennv.Text = rsNapTuDong!TenNV

rsNapTuDong.Close

End Sub

Private Sub cmbMaNCC_Click()

Dim sql As String

sql = "Select TenNCC, DiaChi, DT from NhaCC where MaNCC=('" &

cmbMaNCC.Text & "')"

rsNapTuDong.Open sql, Conn

txtTenNCC.Text = rsNapTuDong!TenNCC

txtDiachi.Text = rsNapTuDong!DiaChi

txtDT.Text = rsNapTuDong!DT

rsNapTuDong.Close

End Sub

Private Sub cmbMaNCC_LostFocus()

Dim sql As String

On Error GoTo XuLyLoi

sql = "Select TenNCC, DiaChi, DT from NhaCC where MaNCC=('" &

cmbMaNCC.Text & "')"

Dim rsTenKH As New ADODB.Recordset

rsTenNCC.Open sql, Conn

txtTenNCC.Text = rsTenNCC!TenNCC

txtDiachi.Text = rsTenNCC!DiaChi

txtDT.Text = rsTenNCC!DT

rsTenNCC.Close

Exit Sub

XuLyLoi:

rsTenNCC.Close

Exit Sub

End Sub

Private Sub cmbMaNV_LostFocus()

Dim sql As String

On Error GoTo XuLyLoi

sql = "Select TenNV from NhanVien where MaNV=('" & cmbMaNV.Text & "')"

Dim rsTenNV As New ADODB.Recordset

rsTenNV.Open sql, Conn

txtTennv.Text = rsTenNV!TenNV

rsTenNV.Close

Exit Sub

XuLyLoi:

rsTenNV.Close

cmbMaNV.SetFocus

Exit Sub

End Sub

Private Sub cmbMaHH_LostFocus()

Dim sql As String

On Error GoTo XuLyLoi

sql = "Select TenHH, XuatXu, GiaNhap ,DVT, TonKho, HanSuDung from

HangHoa where MaHH=('" & cmbMaHH.Text & "')"

Dim rsTenHH As New ADODB.Recordset

rsTenHH.Open sql, Conn

TxtTenHH.Text = rsTenHH!TenHH

txtDvt.Text = rsTenHH!DVT

txtXuatxu.Text = rsTenHH!XuatXu

txtTonkho.Text = rsTenHH!TonKho

txtGianhap.Text = rsTenHH!GiaNhap

txtHansudung.Text = rsTenHH!HanSuDung

rsTenHH.Close

Exit Sub

XuLyLoi:

rsTenHH.Close

cmbMaHH.SetFocus

Exit Sub

End Sub

Mục lục

A. Giới thiệu chung về đề tài lựa chọn

1. Tên đề tài 5

2. Lý do chọn đề tài 5

3. Mục tiêu của đề tài 6

4. Công cụ nghiên cứu và thực hiện đề tài 6

4.1 Hệ quản trị cơ sở dữ liệu Microsoft access 2003 6

4.2 Ngôn ngữ lập trỡnh Visual Basic 6.0 6

4.3 Công cụ làm báo cáo Crystal Report 7

B. Nội dung 7

1. Nội dung bài toán quản lý bán hàng 7

2. Phân tích nghiệp vụ 9

2.1 Quy trỡnh mua hàng 9

2.2 Quy trỡnh quản lý kho 13

2.3 quy trỡnh triển khai bán hàng 14

3. Phân tích yêu cầu người sử dụng 14

3.1 Yêu cầu chung 14

3.2 Yêu cầu đối với nghiệp cụ nhập hàng 15

3.3 Yêu cầu đối với nghiệp vụ xuất hàng 16

3.4 Yêu cầu đối với nghiệp vụ xuất báo cáo 16

3.5 Các yêu cầu khác 16

4. Phân tích hệ thống thông tin quản lý bán hàng và lưu kho tại 17

trung tâm thương mại NC-HT

4.1 Sơ đồ chức năng kinh doanh của trung tâm thương mại 17

4.2 Sơ đồ luồng thông tin IFD 19

4.3 Sơ đồ luồng dữ liệu DFD 21

4.3.1 Sơ đồ ngữ cảnh

4.3.2 Sơ đồ DFD mức 0 của các nghiệp vụ quản lý bán

hàng

4.4 Các bảng dữ liệu đầu vào 25

4.5 Các thuật toán 25

4.5.1 Giải thuật đăng nhập chương trỡnh 27

4.5.2 Giải thuật sửa dữ liệu 28

4.5.3 Giải thuật tỡm kiếm thông tin theo các cụm từ 28

Giao diện chương trỡnh 29

Một số đoạn code chương trỡnh 37