LỜI NÓI ĐẦU
Trong 20 năm trở lại đây, một xu thế được thấy đặc biệt rõ nét ở các nước phát triển là số công việc liên quan đến tạo lập, xử lý thông tin ở dạng này hoặc dạng khác tăng lên nhanh chóng. Điều này khác hẳn so với những năm nửa đầu thế kỷ 20, khi công việc lao động chân tay chiếm vị trí chủ đạo.
Một trong những nguyên nhân chính của hiện tượng này là các ngành công nghiệp dịch vụ (như ngân hàng, khách sạn, du lịch, xuất bản .) tăng vọt. Đa số công việc thuộc lĩnh vực dịch vụ đều liên quan đến xử lý thông tin. Xử lý thông tin bằng máy được bắt đầu vào những năm 50, những thay đổi trong công nghệ xử lý thông tin diễn ra với nhịp độ rất nhanh kèm theo nhiều biến chuyển không dễ nhận thấy.
Để có thể thích ứng được với các biến chuyển trong đời sông kinh tế – xã hội, chúng ta cần nắm được thông tin. Đó là thông tin về những thay đổi có khả năng xẩy ra trong tương lai gần, là thông tin về các khả năng đương đầu có thể lựa chọn, thông tin về những người khác hành động như thế nào trong các hoàn cảnh tương tự . Chính vì vậy, các tổ chức cần có trong tay một khối lượng lớn thông tin đủ mạnh để có thể nắm bắt được nhu cầu của khách hàng, nhìn thấy rõ xu thế cạnh tranh và môi trường kinh tế bên ngoài; đồng thời phải xử lý các thông tin này một cách nhanh nhất để có những quyết định kịp thời.
Như vậy, việc nắm bắt thông tin nhanh chóng, chính xác sẽ làm giảm bớt các yếu tố bất định cho cả tổ chức lẫn cá nhân. Thông tin đã trở thành một vấn đề sống còn đối với mọi lĩnh vực của đời sống kinh tế xã hội; đặc biệt là trong lĩnh vực quản lý kinh tế và nghiên cứu ứng dụng khoa học.
Qua quá trình thực tập tại Công ty TNHH dược , với sự giúp đỡ tận tình của thầy giáo hướng dẫn Đặng Quế Vinh, cùng với sự chỉ bảo của các anh chị đang làm việc tại công ty Fast em đã hoàn thành xong chuyên đề của mình với đề tài mang tên: Xây dựng chương trình quản lý kho hàng trong hệ thông tin kế toán.
Đề tài này được hình thành trên cơ sở nhu cầu cung cấp một cách đầy đủ, nhanh chóng, chính xác và thường xuyên có tính tác nghiệp cũng như tổng hợp những thông tin về tình hình số lượng cũng như chất lượng và hiện trạng của vật tư, hàng hoá trong kho và luân chuyển qua kho cho người lãnh đạo đơn vị để ra quyết định xuất nhập kho hữu hiệu nhất trong từng thời điểm nhất định.
Đề tài gồm các chương sau:
Chương I: Công ty Phần mềm tài chính kế toán Fast và bài toán quản lý kho hàng trong hệ thông tin kế toán. Chương này giới thiệu về công ty Fast nơi em thưc tập và nội dung bài toán "Xây dựng chương trình quản lý kho hàng trong hệ thông tin kế toán".
Chương II: Khảo sát thực tế. Chương này giới thiệu khái quát về vấn dề quản lý kho hàng đối với một doanh nghiệp, những thông tin đầu vào và đầu ra của bài toán.
Chương III: Phân tích và thiết kế hệ thống cho chương trình "Quản lý kho"
Em xin bày tỏ sự cám ơn sâu sắc của em tới Thầy giáo Đặng Quế Vinh đã tận tình hướng dẫn em hoàn thành chuyên đề này; cám ơn rất nhiều sự giúp đỡ từ phía các cán bộ, nhân viên Công ty Fast trong thời gian em thực tập tại đây.
Tuy nhiên, do thời gian có hạn và do vốn kiến thức của em còn hạn chế, thiếu kinh nghiệm thực tế nên chắc sẽ không tránh khỏi những thiếu sót. Vậy kính mong thầy giáo và tất cả những người quan tâm đến đề tài này thông cảm và bổ sung thiếu sót cho em.
Một lần nữa em xin chân thành cảm ơn !
MỤC LỤC
LỜI NÓI ĐẦU 1
CHƯƠNG I: CÔNG TY PHẦN MỀM TÀI CHÍNH KẾ TOÁN FAST VÀ BÀI TOÁN QUẢN LÝ KHO HÀNG TRONG HỆ THÔNG TIN KẾ TOÁN 3
I. Vài nét về lịch sử thành lập công ty 3
II. Bài toán xây dựng phân hệ thông tin quản lý kho hàng trong hệ thông tin kế toán 9
III. Môi trường và công cụ.
CHƯƠNG II : KHẢO SÁT THỰC TẾ 16
I. Tóm tắt chức năng, nhiệm vụ, tổ chức và các quy trình nghiệp vụ của một công ty trong quản lý kho hàng 17
II.Mô tả hệ thống thông tin điều hành và quản lý 19
CHƯƠNG III: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 30
I. Phân tích hệ thống 30
II. Cấu trúc dữ liệu 36
III. Cấu trúc chương trình 44
IV. Một số thuật toán trong chương trình 46
V. Xây dựng chương trình 50
KẾT LUẬN 60
PHỤ LỤC 62
99 trang |
Chia sẻ: maiphuongtl | Lượt xem: 1962 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đề tài Xây dựng chương trình quản lý kho hàng trong hệ thông tin kế toán, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
à nơi lưu trữ danh mục các khách hàng có quan hệ xuất nhập hàng hoá, vật tư với công ty.
THUỘC TÍNH
SỬ DỤNG
KIỂU
ĐỘ DÀI
GHI CHÚ
MaKh
TenKh
Tel
DiaChi
ID
Char
Char
Char
Char
5
30
11
50
Trường khoá chính
Tên khách hàng
Điện thoại của khách
Địa chỉ của khách
5. Phiếu nhập (Master)
Tên thực thể là PhieuNh, là nơi lưu trữ danh mục các phiếu nhập kho đối với các kho của công ty.
THUỘC TÍNH
SỬ DỤNG
KIỂU
ĐỘ DÀI
GHI CHÚ
Ma_CT
Ngay
TK_NO
TK_CO
MA_KH
MA_KHO
DIEN_GIAI
ID
Char
Date
Char
Char
Char
Char
Char
5
5
5
5
5
30
Trường khoá chính
Ngày chứng từ
Tài khoản nợ
Tài khoản có
Mã khách giao hàng
Mã kho nhập
Ghi chú
6. Chi tiết nhập (Details)
Tên thực thể là CtNh, là nơi lưu trữ danh mục các dòng của phiếu nhập kho có mã là Ma_Ct.
THUỘC TÍNH
SỬ DỤNG
KIỂU
ĐỘ DÀI
GHI CHÚ
MA_CT
STT0
MA_VT
SO_LUONG
DON_GIA
ID
ID
Char
Number
Char
Number
Number
5
5
Mã chứng từ
Số thứ tự từng dòng
Mã vật tư
Số lượng
Đơn giá
1 many
Invoice(Master) Invoice(Details)
7. Phiếu lưu chuyển (Master).
Tên thực thể là PhieuLc, là nơi lưu trữ danh mục các phiếu nhập lưu chuyển của một kho đối với các kho khác của công ty.
THUỘC TÍNH
SỬ DỤNG
KIỂU
ĐỘ DÀI
GHI CHÚ
Ma_CT
Ngay
TK_NO
TK_CO
MA_KHO_N
MA_KHO_X
DIEN_GIAI
ID
Char
Date
Char
Char
Char
Char
Char
5
5
5
5
5
30
Trường khoá chính
Ngày chứng từ
Tài khoản nợ
Tài khoản có
Mã kho nhập
Mã kho xuất
Ghi chú
8. Chi tiết lưu chuyển (Details)
Tên thực thể là CtLc, là nơi lưu trữ danh mục các dòng của phiếu lưu chuyển có mã là Ma_Ct.
THUỘC TÍNH
SỬ DỤNG
KIỂU
ĐỘ DÀI
GHI CHÚ
MA_CT
STT
MA_VT
SO_LUONG
ID
ID
Char
Number
Char
Number
5
5
Mã chứng từ
Số thứ tự từng dòng
Mã vật tư
Số lượng
1 many
Local voicher (Master) Local voicher (Details)
9. Phiếu xuất (Master)
Tên thực thể là PhieuX, là nơi lưu trữ danh mục các phiếu xuất kho đối với các kho của công ty.
THUỘC TÍNH
SỬ DỤNG
KIỂU
ĐỘ DÀI
GHI CHÚ
Ma_CT
Ngay
TK_NO
TK_CO
MA_KH
MA_KHO
DIEN_GIAI
ID
Char
Date
Char
Char
Char
Char
Char
5
5
5
5
5
30
Trường khoá chính
Ngày chứng từ
Tài khoản nợ
Tài khoản có
Mã khách nhận hàng
Mã kho xuất
Ghi chú
10. Chi tiết xuất (Details)
Tên thực thể là CtXuat, là nơi lưu trữ danh mục các dòng của phiếu xuất kho có mã là Ma_Ct.
THUỘC TÍNH
SỬ DỤNG
KIỂU
ĐỘ DÀI
GHI CHÚ
MA_CT
STT0
MA_VT
SO_LUONG
DON_GIA
ID
ID
Char
Number
Char
Number
Number
5
5
Mã chứng từ
Số thứ tự từng dòng
Mã vật tư
Số lượng
Đơn giá
1 many
Invoice(Master) Invoice(Details)
11. Hàng tồn kho
Tên thực thể là TonKho, là nơi lưu trữ khối lượng hàng tồn kho đôí với từng mặt hàng và ở tựng kho.
THUỘC TÍNH
SỬ DỤNG
KIỂU
ĐỘ DÀI
GHI CHÚ
MaKho
MaVt
Ton_dq
ID
ID
Char
Char
Number
5
5
Mã kho
Mã vật tư
Lượng hàng tồn kho
III. Cấu trúc chương trình
Do cơ cấu tổ chức, thực tế công việc hiện nay của công ty nên sẽ chia toàn bộ hệ thống thành một số bài toán nhỏ nhưng vẫn cố gắng đảm bảo được tính nhất quán của cơ sở dữ liệu, tiện lợi cho việc hợp nhất thành một hệ thống hoàn chỉnh khi có điều kiện. Cấu trúc chương trình được thể hiện thông qua sơ đồ sau:
Quản lý kho hàng
Hệ thống danh mục
Giao dịch
Tìm kiếm và xử lý
Báo cáo
-DM Khách
-DM Kho
-DM Vật tư
-DM Chứng từ
-Phiếu nhập
-Phiếu xuất
-Phiếu lưu chuyển
-Tìm theo kho
-Tìm theo mã
-Tính hàng tồn
-Báo cáo tồn
-Báo cáo tổng hợp
-Thẻ kho
1. Phạm vi sủ dụng: Chương trình được sử dụng trong các kho hàng khu vực như: tổng kho, các kho con....
2. Dữ liệu vào: các hoá đơn xuất kho, phiếu bán hàng, phiếu vận chuyển nội bộ.
3. Thông tin kết xuất: Các báo cáo tình trạng xuất nhập của từng kho trong từng ngày, từng tháng, tình trạng kho hàng, bảng tổng hợp tình hình xuất nhập hàng gửi cho ban giám đốc công ty, các báo cáo trợ giúp quá trình phân tích kinh doanh.
4. Nhiệm vụ: Nhận các thông tin về sản phẩm có trong kho của mình (Transaction-Product file maintain).
Nhận các thông tin về kho (Transaction- Location Maintain).
Nhập vào máy các thông tin về hoá đơn bán hàng (Input/Output- Output voucher).
Nhập vào máy các hoá đơn vận chuyển nội bộ các mặt hàng chuyển từ kho khác đến, chuyển tới các kho khác (Input/Output .... Move local voucher).
Tổng kết tất cả các thông tin đưa vào bộ nhớ (Automatic).
Đưa ra các báo cáo theo mẫu, theo yêu cầu hỏi đáp (report).
CÔNG TY
Tổng kho
Kho 1
....
Kho 2
IV. Một số thuật toán trong chương trình
1. Thuật toán kiểm tra người sử dụng
false
True
True
False
Begin
-Nhập tên người sử dụng
-Nhập mật khẩu
Kiểm tra tên và MK
Hiện màn hình làm việc của chương trình
Có nhập lại không
Thoát khỏi chương trình
End
2. Thuật toán nhập phiếu nhập
True
false
True
false
Begin
Nhập ngày,mã chứng từ,Tk nợ có, diễn giải
Nhập mã kho
Kiểm tra mã kho trong bảng DM_kho
Hiện bảng DM_kho để chọn
Nhập mã khách
Lấy tên kho tương ứng điền vào hộp tên kho
Hiện bảng DM_kho để chọn
Lấy tên khách tương ứng điền vào hộp tên khách
Kiểm tra mã khách trong bảng DM_kh
false
True
false
True
Nhập mã vật tư
Kiểm tra mã vật tư trong bảng DM_vt
Hiện bảng DM_vt để chọn
Lấy tên vật tư tương ứng điền vào hộp tên vật tư
Nhập số lượng, đơn giá của vật tư
Tính tổng giá trị
Có nhập nữa không
Tính lại lượng tồn trong kho, lưu lại giá trị mới
Lưu phiếu nhập vào bảng phiếu nhập và bảng phiếu nhập chi tiết
Quay lại Menu chính
End
3.Thuật toán tính tồn cho phiếu xuất kho
False
True
True
False
BEGIN
Kiểm tra trong kho có mặt hàng đó không
Thông báo mặt hàng không có trong kho. Yêu cầu nhập lại
Kiểm tra trong kho mặt hàng đó có còn đủ gể xuất không
False
Thông báo mặt hàng không có đủ để xuất kho. Yêu cầu nhập lại
Cho xuất hàng trừ số lượng hành trong kho
END
Hàng tồn nhỏ hơn số lượng min
True
Thông báo lượng hàng trong kho nhỏ hơn số lượng min Yêu cầu nhập thêm
V. Xây dựng chương trình
1. Danh mục khách hàng
1.1. Chức năng
Phần này cho phép quản lý tất cả các khách hàng có quan hệ xuất nhập hàng hoá, vật tư đối với công ty. Nhân viên sử dụng chương trình nếu được quyền truy nhập vào chức năng này của chương trình sẽ đựợc phép thêm những khách hàng mới vào trong danh mục, sửa đổi thông tin về những khách hàng dã có sẵn trong danh mục khách hàng.
Do yêu cầu của công tác quản lý kho hàng, trong danh mục khách hàng chỉ lưu giữ những thông tin tối thiểu về mỗi khách hàng, đó là tên khách hàng, địa chỉ và số điện thoại của khách hàng.
Tất cả những khách hàng có tham gia vào một quy trình nghiệp vụ xuất hay nhập kho thì đều phải đưọc lưu giữ trong danh mục khách hàng. Khi xoá tên một khách hàng trong danh mục khách, tất cả những phiếu nhập xuất có tên khách hàng đó sẽ được chương trình tự động huỷ bỏ.
1.2. Giao diện Form danh mục khách hàng
Khi nhập một khách hàng mới cần phải nhập mã khách hàng. Mã này là duy nhất cho mỗi khách hàng nên chương trình phải kiểm tra sự trùng nhau giữa mã nhập vào và mã của những khách hàng đã có trong danh mục.
2. Danh mục vật tư
2.1. Chức năng
Phần này cho phép quản lý tất cả các vật tư, hàng hoá có trong mỗi kho của công ty. Nhân viên sử dụng chương trình nếu được quyền truy nhập vào chức năng này của chương trình sẽ đựợc phép thêm những tên hàng hoá, vật tư mới vào trong danh mục, sửa đổi thông tin về những vật tư, hàng hoá đã có sẵn trong danh mục vật tư.
Do yêu cầu của công tác quản lý kho hàng, trong danh mục vật tư chỉ lưu giữ những thông tin về hàng hoá, vật tư sau: tên vật tư, đơn vị tính, số lượng tối đa và số lượng tối thiểu vật tư đó được phép lưu giữ trong một kho hàng theo quy định của công ty. Những thông tin về từng loại vật tư được lưu giữ trong bảng DmVt trong file “Hethong.mdb”.
Tất cả những vật tư, hàng hoá xuất hiện trong một hoá đơn xuất hay nhập kho đều phải đưọc lưu giữ trong danh mục vật tư. Khi xoá tên một vật tư, tất cả những phiếu nhập, xuất có tên vật tư đó sẽ được chương trình tự động huỷ bỏ.
2.2. Giao diện Form danh mục vât tư
(xem ở trang sau)
Khi nhập một vật tư mới cần phải nhập mã vật tư. Mã này là duy nhất cho mỗi vật tư nên chương trình phải kiểm tra sự trùng nhau giữa mã nhập vào và mã của những vật tư đã có trong danh mục.
3. Màn hình phiếu Nhập kho
3.1. Chức năng
Phần này cho phép lưu giữ những phiếu nhập kho đối với tất cả các các kho của công ty. Nhân viên sử dụng chương trình khi vào màn hình nhập liệu, lựa chọn phiếu nhập kho sẽ được phép nhập thêm những phiếu nhập kho mới, xem lại những phiếu nhập kho đã nhập trước đó, xoá đi những phiếu nhập kho không còn cần phải lưu giữ. Để tạo điều kiện thuận lợi, nhanh chóng cho người sử dụng, trên màn hình nhập phiếu nhập có chức năng tìm kiếm phiếu nhập theo một số điều kiện cho trước như ngày nhập phiếu, mã phiếu...
Để tạo điều kiện thuận lợi, dễ dàng trong công việc, tạo cảm giác thân thiện đối với người sử dụng, màn hình nhập liệu Phiếu nhập kho được thiết kế gần giống với mẫu phiếu nhập kho theo quy định của bộ tài chính.
Thông tin về Phiếu nhập kho được lưu giữ trong hai bảng PhiêuNh và CtNh trong file “Hethong.mdb”. Tuy nhiên, để có được thông tin đầy đủ về một phiếu nhập kho, chương trình cần phải truy nhập vào các bảng DmVt, DmKh và DmKho. Quan hệ giữa các bảng được mô tả trong phần trước.
3.2. Giao diện Form Phiếu nhập kho
Khi nhập một phiếu nhập kho mới trước hết phải nhập mã chứng từ. Mã chứng từ là yếu tố giúp phân biệt giữa những Phiếu nhập kho với nhau, vì vậy không được phép có sự trùng nhau về mã chứng từ. Máy sẽ tự động kiểm tra, so sánh với những mã chứng từ đang lưu giữ, nếu có sự trùng lặp mã chứng từ thì sẽ thông báo và yêu cầu nhập lại mã chứng từ.
Đối với tên kho nhận hàng, tên khách giao hàng và vật tư, hàng hoá thì cần nhập mã số. Sau khi nhập mã số máy sẽ kiểm tra xem có mã đó trong danh mục tương ứng hay không. Nếu có mã đó thì sẽ cho hiện tên tương ứng, ngược lại nếu không tồn tại mã đó trong danh mục thì cho hiện danh mục với đầy đủ mã số và tên cho người nhập lựa chọn.
Với việc nhập vật tư hàng hóa, sau khi nhập xong một dòng máy sẽ tự động tính tổng giá trị khối lượng hàng đã nhập và tính lại lượng thuế giá trị gia tăng tương ứng.
Với công việc tìm kiếm những Phiếu nhập kho đã nhập trước đó, ta có thể dùng nút tua để tua lần lượt qua từng phiếu đến phiếu cần tìm hoặc nhấn nút tìm cho hiện Form tìm kiếm. Khi đã tìm được phiếu máy sẽ tự động hiển thị phiếu tìm được trên màn hình.
Khi lưu lại phiếu nhập kho chương trình sẽ ghi lại phần đầu phiếu vào bảng PhieuNh và ghi lại từng dòng trong phần bảng của phiếu cùng mã phiếu vào bảng CtNh. Sau đó chương trình sẽ thực hiện công việc tính lại hàng tồn kho.
Dưới đây là màn hình tìm kiếm:
4. Các báo cáo và phân tích tình hình xuất nhập tồn trong chương trình
Để phục vụ cho công tác quản lý kho hàng, đáp ứng yêu cầu nghiệp vụ quản lý kho, chương trình cho phép in ra những Phiếu nhập kho, Phiếu xuất kho và phiếu lưu chuyển nội bộ đang được lưu trữ trong máy.
Để phục vụ cho công tác báo cáo định kỳ về tình hình hàng hoá vật tư được lưu giữ trong kho, chương trình cho phép in ra những bảng báo cáo tình hình xuất nhập hàng hoá của các kho theo ngày, theo tháng hoặc theo năm.
Chương trình còn cho phép in ra bảng báo cáo tình hình hàng tồn kho tại các kho của công ty.
Như chúng ta đã biết, hàng hoá xuất kho với khối lượng lớn là một trong những yếu tố chứng tỏ loại hàng đó đang có nhu cầu lớn trên thị trường. Để trợ giúp cho việc phân tích kinh doanh của công ty, chương trình cho phép in ra bảng báo cáo tình hình xuất kho của hàng hoá xuất kho theo thứ tự khối lượng xuất kho.
Để phục vụ cho công tác tra cứu những thông tin về một loại hàng tồn kho được nhanh chóng thuận tiện, chương trình cho phép in ra báo cáo về tình trạng tồn kho (bao gồm khối lượng tồn kho và địa điểm kho đang cất giữ) của một loại hàng hoá, vật tư theo yêu cầu của người sử dụng.
Dưới đây là một số màn hình báo cáo của chương trình
Màn hình báo cáo tình hình hàng tồn kho
Màn hình báo cáo tình hình nhập xuất trong tháng
5. Màn hình chính của chương trình quản lý kho
Màn hình chính của chương trình quản lý kho được thiết kế với một hệ thống Menu, menu popup, các Toolbar và Taskbar giúp cho người sử dụng có cảm giác thoải mái, thuận tiện trong khi sử dụng.
6. Sơ đồ quan hệ thực thể
Cơ sở dữ liệu của chương trình như đã trình bày ở trên được xây dựng trên hệ quản trị cơ sở dữ liệu Access. Màn hình quan hệ giữa các thực thể của Access là một công cụ hết sức hữu ích và tiện lợi. Qua đây ta có thể có đựoc một cái nhìn đầy đủ, rõ ràng về mối quan hệ giữa các thực thể trong cơ sở dữ liệu với nhau.
KẾT LUẬN
Trong quản lý kinh doanh, tin học ngày càng đóng vai trò quan trọng. Nó đang trở thành một bộ phận cấu thành của hệ thống công cụ quản lý kinh tế, tài chính, có vai trò tích cực trong quản lý điều hành và kiểm soát các hoạt động kinh tế của Nhà nước cũng như các hoạt động kinh tế tài chính của doanh nghiệp.
Môi trường kinh tế mới kết hợp với sự đầu tư nước ngoài ngày càng mở rộng cùng với việc tự chủ trong hạch toán kinh doanh buộc các doanh nghiệp phải tổ chức tốt các hoạt động kinh doanh của mình, nắm bắt được tình hình kết quả kinh doanh của đơn vị để đảm bảo lợi nhuận thu được là cao nhất.
Việc sử dụng các chương trình tin học trong quản lý sẽ giúp các đơn vị giảm bớt được các nguồn chi phí, gián tiếp làm giảm giá thành sản phẩm, nâng cao được tính cạnh tranh của mình trên thị trường.
Chương trình Fast Acounting được thiết kế và xây dựng đã đáp ứng được mong muốn đó của các doanh nghiệp. Chính vì vậy Fast Acounting đã được đông đảo những doanh nghiệp đặc biệt là những doanh nghiệp vừa và nhỏ sử dụng trong hoạt động kinh doanh.
Xây dựng bài toán quản lý kho hàng trong hệ thông tin kế toán tuy chỉ là một phần của cả một bài toán kế toán quản lý doanh nghiệp nhưng em cũng đã cố gắng xây dựng chương trình nhằm đạt được mục đích, đem lại những thuận lợi cho người khai thác, sử dụng. Việc sử dụng chương trình không đòi hỏi người sử dụng phải có những hiểu biết sâu về tin học hay công nghệ thông tin. Hệ thống giao diện thực đơn, cửa sổ, hộp thoại, phím tắt của chương trình mang tính đơn giản, tiện dụng và thân thiện với người sử dụng.
Chương trình này được thiết kế theo hướng các nhà thiết kế có thể sửa đổi thêm bớt các thuộc tính chức năng của chương trình khi cần thiết. Nó cũng được thiết kế theo hướng mở để tạo thuận lợi hơn cho người sử dụng.
Tuy nhiên, chương trình còn tồn tại một số nhược điểm như tốc độ xử lý sẽ giảm nếu dữ liệu vào lớn, hình thức báo cáo in ra chưa được đẹp ...
Dẫu vậy, chương trình vẫn là một sản phẩm có một giá trị thực tiễn cao và thực sự đem lại nhiều tiện lợi cho người sử dụng.
PHỤ LỤC CHƯƠNG TRÌNH
I. Form DMKH
Dim kt As Boolean
Private Sub Command1_Click()
If Command1.Caption = "Nhập" Then
frame1.Enabled = True
Command2.Enabled = True
Command3.Enabled = False
Command1.Caption = "Lưu"
Command2.Caption = "Hoãn"
Text1.SetFocus
Else
Data1.Recordset.AddNew
Data1.Recordset.Fields(0).Value = Text1.Text
Data1.Recordset.Fields(1).Value = Text2.Text
Data1.Recordset.Fields(2).Value = Text3.Text
Data1.Recordset.Update
Data1.Refresh
frame1.Enabled = False
Command2.Enabled = True
Command3.Enabled = True
Command1.Caption = "Nhập"
Command2.Caption = "Xoá"
End If
End Sub
Private Sub Command2_Click()
If Command2.Caption = "Xoá" Then
dk = MsgBox("Bạn có chắc chắn xoá không ?", vbYesNo + vbQuestion, "Chú ý")
If dk = vbYes Then
Data1.Recordset.Delete
Data1.Refresh
If Data1.Recordset.BOF = False Then
Data1.Recordset.MoveFirst
Else
frame1.Enabled = True
Text1.Text = ""
Text2.Text = ""
frame1.Enabled = False
Command2.Enabled = False
End If
End If
Else
frame1.Enabled = False
Command1.Caption = "Nhập"
Command2.Caption = "Xoá"
Command3.Enabled = True
If Data1.Recordset.BOF = False Then
Data1.Recordset.MoveFirst
Else
frame1.Enabled = True
Text1.Text = ""
Text2.Text = ""
frame1.Enabled = False
Command2.Enabled = False
End If
End If
End Sub
Private Sub Command3_Click()
Unload Me
End Sub
Private Sub Data1_Reposition()
On Error GoTo loi
If kt = False Then Exit Sub
If Not IsNull(Data1.Recordset.Fields(0).Value) Then
Text1.Text = Data1.Recordset.Fields(0).Value
Else
Text1 = ""
End If
If Not IsNull(Data1.Recordset.Fields(1).Value) Then
Text2.Text = Data1.Recordset.Fields(1).Value
Else
Text2 = ""
End If
If Not IsNull(Data1.Recordset.Fields(2).Value) Then
Text3.Text = Data1.Recordset.Fields(2).Value
Else
Text3 = ""
End If
Exit Sub
loi:
If Err.Number = 3021 Then
Exit Sub
End If
End Sub
Private Sub Data1_Validate(Action As Integer, Save As Integer)
Select Case Action
Case vbDataActionMoveFirst
kt = True
Case vbDataActionMovePrevious
kt = True
Case vbDataActionMoveNext
kt = True
Case vbDataActionMoveLast
kt = True
Case vbDataActionAddNew
kt = False
Case vbDataActionUpdate
kt = True
Case vbDataActionDelete
kt = False
Case vbDataActionFind
kt = False
Case vbDataActionBookmark
Case vbDataActionClose
End Select
End Sub
Private Sub Form_Load()
Data1.DatabaseName = Loctext + "Hethong.mdb"
Data1.RecordSource = "dmkh"
Data1.Refresh
frame1.Enabled = False
If Data1.Recordset.BOF = True Then
Command2.Enabled = False
Else
Data1.Recordset.MoveFirst
End If
End Sub
Private Sub Form_Resize()
Me.Height = 3780
Me.Width = 4590
Me.Top = (Screen.Height - Me.Height) / 3
Me.Left = (Screen.Width - Me.Width) / 2
End Sub
Private Sub Text1_GotFocus()
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text2.SetFocus
End If
End Sub
Private Sub Text2_GotFocus()
Text2.SelStart = 0
Text2.SelLength = Len(Text2.Text)
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text3.SetFocus
End If
End Sub
Private Sub Text3_GotFocus()
Text3.SelStart = 0
Text3.SelLength = Len(Text3.Text)
End Sub
Private Sub Text3_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Command1.SetFocus
End If
End Sub
Form Nhập liệu :
Dim kt As Boolean
Dim dk As String
Dim dk1 As String
Dim nut1 As Byte
Dim i As Byte
'Dim DK As String
Private Sub Command1_Click()
If Command1.Caption = "Nhập" Then
xoa
MaskEdBox1.Text = Date
Text1.Text = Mid(MaskEdBox1.Text, 4, 2) & "-"
Text2.Text = ""
Text12.Text = ""
Text13.Text = ""
Text5.Text = ""
Text6.Text = ""
Text7.Text = ""
Text11.Text = ""
Text10.Text = ""
'Text3.Enabled = True
'Text4.Enabled = True
Frame1.Enabled = True
Frame2.Enabled = True
Frame3.Enabled = True
MaskEdBox1.SetFocus
nut1 = 1
Command1.Caption = "Nhập tiếp"
Command2.Enabled = False
Command3.Enabled = True
Command4.Enabled = True
Command5.Enabled = False
Command6.Enabled = False
Command7.Enabled = False
Command8.Enabled = False
i = 1
Else
If Len(Text5.Text) = 0 Then
MsgBox "Mã vật tư không thể trống", vbInformation, "Chú ý"
Text5.SetFocus
Exit Sub
End If
If Len(Text7.Text) = 0 Then
MsgBox "Số lượng không thể trống", vbInformation, "Chú ý"
Text7.SetFocus
Exit Sub
End If
If Len(Text8.Text) = 0 Then
MsgBox "Đơn giá không thể trống", vbInformation, "Chú ý"
Text8.SetFocus
Exit Sub
End If
Data1.Recordset.AddNew
Data1.Recordset.Fields(0).Value = Text1.Text
Data1.Recordset.Fields(1).Value = i
Data1.Recordset.Fields(2).Value = Text5.Text
Data1.Recordset.Fields(3).Value = Text6.Text
Data1.Recordset.Fields(4).Value = Text7.Text
Data1.Recordset.Fields(5).Value = Text8.Text
Data1.Recordset.Fields(6).Value = Val(Text7.Text) * Val(Text8.Text)
Data1.Recordset.Update
Data1.Refresh
Text5.SetFocus
i = i + 1
End If
End Sub
Private Sub Command2_Click()
Data5.DatabaseName = Loctext + "ht1.mdb"
Data5.RecordSource = "lpnk1"
Data5.Refresh
Command1.Enabled = False
Command2.Enabled = False
Command3.Enabled = True
Command4.Enabled = True
Command5.Enabled = False
Command6.Enabled = False
Command7.Enabled = False
Command8.Enabled = False
Text3.Enabled = True
Text4.Enabled = True
Frame1.Enabled = True
Frame2.Enabled = True
Text3.SetFocus
nut1 = 2
End Sub
Public Sub xoa()
Data1.Refresh
If Not Data1.Recordset.BOF Then
Data1.Recordset.MoveFirst
Do While Not Data1.Recordset.EOF
Data1.Recordset.Delete
Data1.Recordset.MoveNext
Loop
End If
End Sub
Public Sub chuyen()
xoa
Set db = OpenDatabase(Loctext + "hethong.mdb")
If nut = 1 Then
db.Execute "insert into phu select mact,stt0,mavt,tenvt,soluong,dongia,tien from query1 where mact='" & Text1.Text & "'"
Else
db.Execute "insert into phu select mact,stt0,mavt,tenvt,soluong,dongia,tien from query2 where mact='" & Text1.Text & "'"
End If
db.Close
Dim tt1
tt1 = 0
Set db = OpenDatabase(Loctext + "hethong.mdb")
Set rs = db.OpenRecordset("phu")
rs.MoveFirst
Do While rs.EOF = False
tt1 = tt1 + rs.Fields("tien").Value
rs.MoveNext
Loop
rs.Close
db.Close
Text10.Text = Str(tt1)
Text11.Text = Str(tt1 / 10)
Data1.Refresh
DBGrid1.Refresh
End Sub
Private Sub Command3_Click()
If Len(Text5.Text) = 0 Then
MsgBox "Mã vật tư không thể trống", vbInformation, "Chú ý"
Text5.SetFocus
Exit Sub
End If
If Len(Text7.Text) = 0 Then
MsgBox "Số lượng không thể trống", vbInformation, "Chú ý"
Text7.SetFocus
Exit Sub
End If
If Len(Text8.Text) = 0 Then
MsgBox "Đơn giá không thể trống", vbInformation, "Chú ý"
Text8.SetFocus
Exit Sub
End If
Data1.Recordset.AddNew
Data1.Recordset.Fields(0).Value = Text1.Text
Data1.Recordset.Fields(1).Value = i
Data1.Recordset.Fields(2).Value = Text5.Text
Data1.Recordset.Fields(3).Value = Text6.Text
Data1.Recordset.Fields(4).Value = Text7.Text
Data1.Recordset.Fields(5).Value = Text8.Text
Data1.Recordset.Fields(6).Value = Val(Text7.Text) * Val(Text8.Text)
Data1.Recordset.Update
Data1.Refresh
If Len(Text1.Text) = 0 Then
MsgBox "Mã chứng từ không thể trống", vbInformation, "Thông Báo"
Text1.SetFocus
Exit Sub
End If
If Len(MaskEdBox1.Text) = 0 Then
MsgBox "Ngày nhập phiếu không thể trống", vbInformation, "Thông Báo"
MaskEdBox1.SetFocus
Exit Sub
End If
If Len(Text12.Text) = 0 Then
MsgBox "Mã kho hàng không thể trống", vbInformation, "Thông Báo"
Text12.SetFocus
Exit Sub
End If
Data2.Recordset.AddNew
Data2.Recordset.Fields(1).Value = Text1.Text
Data2.Recordset.Fields(2).Value = MaskEdBox1.Text
Data2.Recordset.Fields(3).Value = Text13.Text
Data2.Recordset.Fields(4).Value = Text12.Text
Data2.Recordset.Fields(5).Value = Text9.Text
Data2.Recordset.Fields(6).Value = Text3.Text
Data2.Recordset.Fields(7).Value = Text4.Text
Data2.Recordset.Update
Data2.Refresh
If nut = 1 Then
Set db = OpenDatabase(Loctext + "hethong.mdb")
db.Execute "Insert into ctx select mact,stt0,mavt,soluong,dongia,tien from phu"
Dim rs1 As Recordset
Set rs = db.OpenRecordset("phu")
rs.MoveFirst
Do While rs.EOF = False
Set rs1 = db.OpenRecordset("select * from tonkho where makho='" & Text12.Text & "' and mavt='" & rs.Fields(2).Value & "'")
rs1.Edit
rs1.Fields(2).Value = rs1.Fields(2).Value - rs.Fields(4).Value
rs1.Update
rs1.Close
rs.MoveNext
Loop
rs.Close
db.Close
Else
Set db = OpenDatabase(Loctext + "hethong.mdb")
db.Execute "Insert into ctnh select mact,stt0,mavt,soluong,dongia,tien from phu"
Set rs = db.OpenRecordset("phu")
rs.MoveFirst
Do While rs.EOF = False
Set rs1 = db.OpenRecordset("select * from tonkho where makho='" & Text1.Text & "' and mavt='" & rs.Fields(2).Value & "'")
If rs1.BOF = rs1.EOF And rs1.EOF = True Then
rs1.AddNew
rs1.Fields(0).Value = Text12.Text
rs1.Fields(1).Value = rs.Fields(2).Value
rs1.Fields(2).Value = rs.Fields(4).Value
rs1.Update
Else
rs1.Edit
rs1.Fields(2).Value = rs1.Fields(2).Value + rs.Fields(4).Value
rs1.Update
End If
rs1.Close
rs.MoveNext
Loop
rs.Close
db.Close
End If
Frame1.Enabled = False
Frame2.Enabled = False
Frame3.Enabled = False
Command1.Enabled = True
Command2.Enabled = True
Command3.Enabled = False
Command4.Enabled = False
Command5.Enabled = True
Command6.Enabled = True
Command7.Enabled = True
Command8.Enabled = True
Command1.Caption = "Nhập"
Data2.Recordset.MoveLast
chuyen
Command1.SetFocus
End Sub
Private Sub Command4_Click()
xoa
Command1.Enabled = True
Command1.Caption = "Nhập"
Command2.Enabled = True
If Data2.Recordset.BOF = False Then
Data2.Recordset.MoveLast
chuyen
Command3.Enabled = False
Command4.Enabled = False
Command5.Enabled = True
Else
Command5.Enabled = False
End If
Frame1.Enabled = False
Frame2.Enabled = False
Frame3.Enabled = False
Command6.Enabled = True
Command7.Enabled = True
Command8.Enabled = True
End Sub
Private Sub Command5_Click()
dk = MsgBox("Bạn có chắc chắn xoá không ?", vbCritical + vbYesNo, "Chú ý")
If dk = vbYes Then
Data2.Recordset.Delete
Data2.Refresh
If Data2.Recordset.BOF Then
Command5.Enabled = False
End If
End If
End Sub
Private Sub Command6_Click()
Set db = OpenDatabase(Loctext + "hethong")
db.Execute "delete * from table1"
Set rs = db.OpenRecordset("table1")
rs.AddNew
rs.Fields(0).Value = Text1.Text
rs.Update
rs.Close
db.Close
If Label1.Caption = "Phiếu Xuất Kho" Then
CrystalReport1.DataFiles(0) = Loctext & "hethong.mdb"
CrystalReport1.ReportFileName = Loctext$ + "px.rpt"
Else
CrystalReport1.DataFiles(0) = Loctext & "hethong.mdb"
CrystalReport1.ReportFileName = Loctext$ + "pnh.rpt"
End If
On Error GoTo ErrorHandler
CrystalReport1.Action = 1
Screen.MousePointer = 0
Exit Sub
ErrorHandler:
MsgBox CrystalReport1.LastErrorString
Screen.MousePointer = 0
Exit Sub
End Sub
Private Sub Command7_Click()
dktk.Show 1
dk = "mact='" & ma & "'"
Data2.Recordset.FindFirst dk
Data2.Recordset.MoveNext
Data2.Recordset.MovePrevious
chuyen
End Sub
Private Sub Command8_Click()
Unload Me
End Sub
Private Sub Data2_Reposition()
'On Error GoTo loi
If kt = False Then Exit Sub
If Not IsNull(Data2.Recordset.Fields(1).Value) Then
Text1.Text = Data2.Recordset.Fields(1).Value
Else
Text1 = ""
End If
If Not IsNull(Data2.Recordset.Fields(2).Value) Then
MaskEdBox1.Text = Data2.Recordset.Fields(2).Value
Else
MaskEdBox1.Text = "__/__/____"
End If
If Not IsNull(Data2.Recordset.Fields(3).Value) Then
Text13.Text = Data2.Recordset.Fields(3).Value
Else
Text13 = ""
End If
Set db = OpenDatabase(Loctext + "hethong.mdb")
Set rs = db.OpenRecordset("select * from dmkh where makh='" & Text13.Text & "'")
Text2.Text = rs.Fields(1).Value
rs.Close
db.Close
If Not IsNull(Data2.Recordset.Fields(4).Value) Then
Text12.Text = Data2.Recordset.Fields(4).Value
Else
Text12 = ""
End If
If Not IsNull(Data2.Recordset.Fields(6).Value) Then
Text3.Text = Data2.Recordset.Fields(6).Value
Else
Text3 = ""
End If
If Not IsNull(Data2.Recordset.Fields(7).Value) Then
Text4.Text = Data2.Recordset.Fields(7).Value
Else
Text4 = ""
End If
If Not IsNull(Data2.Recordset.Fields(5).Value) Then
Text9.Text = Data2.Recordset.Fields(5).Value
Else
Text9 = ""
End If
chuyen
' DBGrid1.SetFocus
Exit Sub
loi:
If Err.Number = 3021 Then
Exit Sub
End If
End Sub
Private Sub Data2_Validate(Action As Integer, Save As Integer)
Select Case Action
Case vbDataActionMoveFirst
kt = True
Case vbDataActionMovePrevious
kt = True
Case vbDataActionMoveNext
kt = True
Case vbDataActionMoveLast
kt = True
Case vbDataActionAddNew
kt = False
Case vbDataActionUpdate
kt = False
Case vbDataActionDelete
kt = True
Case vbDataActionFind
kt = False
Case vbDataActionBookmark
Case vbDataActionClose
End Select
End Sub
Private Sub Form_Load()
Frame1.Enabled = False
Frame2.Enabled = False
Frame3.Enabled = False
Frame4.Enabled = False
Command3.Enabled = False
Command4.Enabled = False
If nut = 1 Then
Label1.Caption = "Phiếu Xuất Kho"
Data1.DatabaseName = Loctext + "Hethong.mdb"
Data1.RecordSource = "phu"
Data1.Refresh
Data2.DatabaseName = Loctext + "Hethong.mdb"
Data2.RecordSource = "phieux"
Data2.Refresh
'Data3.DatabaseName = Loctext + "hethong.mdb"
'Data3.RecordSource = "ctx"
'Data3.Refresh
xoa
If Data2.Recordset.BOF = False Then
Data2.Recordset.MoveLast
chuyen
Else
Command5.Enabled = False
End If
Else
Label1.Caption = "Phiếu Nhập Kho"
Data1.DatabaseName = Loctext + "Hethong.mdb"
Data1.RecordSource = "phu"
Data1.Refresh
Data2.DatabaseName = Loctext + "Hethong.mdb"
Data2.RecordSource = "phieunh"
Data2.Refresh
xoa
If Data2.Recordset.BOF = False Then
Data2.Recordset.MoveLast
chuyen
Else
Command5.Enabled = False
End If
End If
End Sub
Private Sub Form_Resize()
Me.Width = 8100
Me.Height = 5145
Me.Top = 0
Me.Left = (Screen.Width - Me.Width) / 2
End Sub
Private Sub MaskEdBox1_GotFocus()
MaskEdBox1.SelStart = 0
MaskEdBox1.SelLength = Len(MaskEdBox1.Text)
End Sub
Private Sub MaskEdBox1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text1.SetFocus
End If
End Sub
Private Sub Text1_GotFocus()
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text12.SetFocus
End If
End Sub
Private Sub Text12_GotFocus()
Text1.SelStart = 0
Text1.SelLength = Len(Text12.Text)
End Sub
Private Sub Text12_KeyPress(KeyAscii As Integer)
KeyAscii = 0
tck.Show 1
Text12.Text = ma
Text13.SetFocus
End Sub
Private Sub Text13_GotFocus()
Text1.SelStart = 0
Text1.SelLength = Len(Text13.Text)
End Sub
Private Sub Text13_KeyPress(KeyAscii As Integer)
KeyAscii = 0
Text2.SetFocus
End Sub
Private Sub Text2_GotFocus()
Dim dk As String
If Len(Text2.Text) = 0 Then
ttt.Show 1
Text13.Text = ma
Text2.Text = ten
Text9.SetFocus
End If
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Command1.SetFocus
End If
End Sub
Private Sub Text3_GotFocus()
Text3.SelStart = 0
Text3.SelLength = Len(Text3.Text)
End Sub
Private Sub Text3_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text4.SetFocus
End If
End Sub
Private Sub Text4_GotFocus()
Text4.SelStart = 0
Text4.SelLength = Len(Text4.Text)
End Sub
Private Sub Text4_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text5.SetFocus
End If
End Sub
Private Sub Text5_GotFocus()
Text5.SelStart = 0
Text5.SelLength = Len(Text5.Text)
End Sub
Private Sub Text5_KeyPress(KeyAscii As Integer)
KeyAscii = 0
Text6.SetFocus
End Sub
Private Sub Text6_GotFocus()
If Len(Text5.Text) = 0 Then
tt.Show 1
Text5.Text = ma
Text6.Text = ten
Text7.SetFocus
End If
End Sub
Private Sub Text6_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text17.SetFocus
End If
End Sub
Private Sub Text7_GotFocus()
Text7.SelStart = 0
Text7.SelLength = Len(Text7.Text)
End Sub
Private Sub Text7_KeyDown(KeyCode As Integer, Shift As Integer)
If (KeyCode 57) And KeyCode 13 And KeyCode 37 And KeyCode 39 And KeyCode 46 And KeyCode 8 Then
KeyCode = 0
End If
End Sub
Private Sub Text7_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text8.SetFocus
Else
If (KeyAscii 57) And KeyAscii 37 And KeyAscii 39 And KeyAscii 46 And KeyAscii 8 Then
KeyAscii = 0
End If
End If
End Sub
Private Sub Text8_GotFocus()
Text8.SelStart = 0
Text8.SelLength = Len(Text8.Text)
End Sub
Private Sub Text8_KeyDown(KeyCode As Integer, Shift As Integer)
If (KeyCode 57) And KeyCode 13 And KeyCode 37 And KeyCode 39 And KeyCode 46 And KeyCode 8 Then
KeyCode = 0
End If
End Sub
Private Sub Text8_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Command1.SetFocus
Else
If (KeyAscii 57) And KeyAscii 37 And KeyAscii 39 And KeyAscii 46 And KeyAscii 8 Then
KeyAscii = 0
End If
End If
End Sub
Private Sub Text9_GotFocus()
Text9.SelStart = 0
Text9.SelLength = Len(Text9.Text)
End Sub
Private Sub Text9_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text3.SetFocus
End If
End Sub
II. Form màn hình chính :
Dim kt As Boolean
Dim dk As String
Dim dk1 As String
Dim nut1 As Byte
Dim i As Byte
'Dim DK As String
Private Sub Command1_Click()
If Command1.Caption = "Nhập" Then
xoa
MaskEdBox1.Text = Date
Text1.Text = Mid(MaskEdBox1.Text, 4, 2) & "-"
Text2.Text = ""
Text12.Text = ""
Text13.Text = ""
Text5.Text = ""
Text6.Text = ""
Text7.Text = ""
Text11.Text = ""
Text10.Text = ""
Frame1.Enabled = True
Frame2.Enabled = True
Frame3.Enabled = True
MaskEdBox1.SetFocus
nut1 = 1
Command1.Caption = "Nhập tiếp"
Command2.Enabled = False
Command3.Enabled = True
Command4.Enabled = True
Command5.Enabled = False
Command6.Enabled = False
Command7.Enabled = False
Command8.Enabled = False
'Data1.Recordset.AddNew
i = 1
Else
If Len(Text5.Text) = 0 Then
MsgBox "Mã vật tư không thể trống", vbInformation, "Chú ý"
Text5.SetFocus
Exit Sub
End If
If Len(Text7.Text) = 0 Then
MsgBox "Số lượng không thể trống", vbInformation, "Chú ý"
Text7.SetFocus
Exit Sub
End If
If Len(Text8.Text) = 0 Then
MsgBox "Đơn giá không thể trống", vbInformation, "Chú ý"
Text8.SetFocus
Exit Sub
End If
Data1.Recordset.AddNew
Data1.Recordset.Fields(0).Value = Text1.Text
Data1.Recordset.Fields(1).Value = i
Data1.Recordset.Fields(2).Value = Text5.Text
Data1.Recordset.Fields(3).Value = Text6.Text
Data1.Recordset.Fields(4).Value = Text7.Text
Data1.Recordset.Fields(5).Value = Text8.Text
Data1.Recordset.Fields(6).Value = Val(Text7.Text) * Val(Text8.Text)
Data1.Recordset.Update
Data1.Refresh
Text5.SetFocus
i = i + 1
End If
End Sub
Private Sub Command2_Click()
Data5.DatabaseName = Loctext + "ht1.mdb"
Data5.RecordSource = "lpnk1"
Data5.Refresh
Command1.Enabled = False
Command2.Enabled = False
Command3.Enabled = True
Command4.Enabled = True
Command5.Enabled = False
Command6.Enabled = False
Command7.Enabled = False
Command8.Enabled = False
Text3.Enabled = True
Text4.Enabled = True
Frame1.Enabled = True
Frame2.Enabled = True
Text3.SetFocus
nut1 = 2
End Sub
Public Sub xoa()
Data1.Refresh
If Not Data1.Recordset.BOF Then
Data1.Recordset.MoveFirst
Do While Not Data1.Recordset.EOF
Data1.Recordset.Delete
Data1.Recordset.MoveNext
Loop
End If
End Sub
Public Sub chuyen()
xoa
Set db = OpenDatabase(Loctext + "hethong.mdb")
If nut = 1 Then
db.Execute "insert into phu select mact,stt0,mavt,tenvt,soluong,dongia,tien from query1 where mact='" & Text1.Text & "'"
Else
db.Execute "insert into phu select mact,stt0,mavt,tenvt,soluong,dongia,tien from query2 where mact='" & Text1.Text & "'"
End If
'db.Execute "insert into phu select mact,stt0,mavt,tenvt,soluong,dongia,tien form query1"
db.Close
Dim tt1
tt1 = 0
' db.Close
Set db = OpenDatabase(Loctext + "hethong.mdb")
Set rs = db.OpenRecordset("phu")
rs.MoveFirst
Do While rs.EOF = False
tt1 = tt1 + rs.Fields("tien").Value
rs.MoveNext
Loop
rs.Close
db.Close
Text10.Text = Str(tt1)
Text11.Text = Str(tt1 / 10)
Data1.Refresh
DBGrid1.Refresh
End Sub
Private Sub Command3_Click()
If Len(Text5.Text) = 0 Then
MsgBox "Mã vật tư không thể trống", vbInformation, "Chú ý"
Text5.SetFocus
Exit Sub
End If
If Len(Text7.Text) = 0 Then
MsgBox "Số lượng không thể trống", vbInformation, "Chú ý"
Text7.SetFocus
Exit Sub
End If
If Len(Text8.Text) = 0 Then
MsgBox "Đơn giá không thể trống", vbInformation, "Chú ý"
Text8.SetFocus
Exit Sub
End If
Data1.Recordset.AddNew
Data1.Recordset.Fields(0).Value = Text1.Text
Data1.Recordset.Fields(1).Value = i
Data1.Recordset.Fields(2).Value = Text5.Text
Data1.Recordset.Fields(3).Value = Text6.Text
Data1.Recordset.Fields(4).Value = Text7.Text
Data1.Recordset.Fields(5).Value = Text8.Text
Data1.Recordset.Fields(6).Value = Val(Text7.Text) * Val(Text8.Text)
Data1.Recordset.Update
Data1.Refresh
If Len(Text1.Text) = 0 Then
MsgBox "Mã chứng từ không thể trống", vbInformation, "Thông Báo"
Text1.SetFocus
Exit Sub
End If
If Len(MaskEdBox1.Text) = 0 Then
MsgBox "Ngày nhập phiếu không thể trống", vbInformation, "Thông Báo"
MaskEdBox1.SetFocus
Exit Sub
End If
If Len(Text12.Text) = 0 Then
MsgBox "Mã kho hàng không thể trống", vbInformation, "Thông Báo"
Text12.SetFocus
Exit Sub
End If
Data2.Recordset.AddNew
Data2.Recordset.Fields(1).Value = Text1.Text
Data2.Recordset.Fields(2).Value = MaskEdBox1.Text
Data2.Recordset.Fields(3).Value = Text13.Text
Data2.Recordset.Fields(4).Value = Text12.Text
Data2.Recordset.Fields(5).Value = Text9.Text
Data2.Recordset.Fields(6).Value = Text3.Text
Data2.Recordset.Fields(7).Value = Text4.Text
Data2.Recordset.Update
Data2.Refresh
If nut = 1 Then
Set db = OpenDatabase(Loctext + "hethong.mdb")
db.Execute "Insert into ctx select mact,stt0,mavt,soluong,dongia,tien from phu"
Dim rs1 As Recordset
Set rs = db.OpenRecordset("phu")
rs.MoveFirst
Do While rs.EOF = False
Set rs1 = db.OpenRecordset("select * from tonkho where makho='" & Text12.Text & "' and mavt='" & rs.Fields(2).Value & "'")
rs1.Edit
rs1.Fields(2).Value = rs1.Fields(2).Value - rs.Fields(4).Value
rs1.Update
rs1.Close
rs.MoveNext
Loop
rs.Close
db.Close
Else
Set db = OpenDatabase(Loctext + "hethong.mdb")
db.Execute "Insert into ctnh select mact,stt0,mavt,soluong,dongia,tien from phu"
Set rs = db.OpenRecordset("phu")
rs.MoveFirst
Do While rs.EOF = False
Set rs1 = db.OpenRecordset("select * from tonkho where makho='" & Text1.Text & "' and mavt='" & rs.Fields(2).Value & "'")
If rs1.BOF = rs1.EOF And rs1.EOF = True Then
rs1.AddNew
rs1.Fields(0).Value = Text12.Text
rs1.Fields(1).Value = rs.Fields(2).Value
rs1.Fields(2).Value = rs.Fields(4).Value
rs1.Update
Else
rs1.Edit
rs1.Fields(2).Value = rs1.Fields(2).Value + rs.Fields(4).Value
rs1.Update
End If
rs1.Close
rs.MoveNext
Loop
rs.Close
db.Close
End If
Frame1.Enabled = False
Frame2.Enabled = False
Frame3.Enabled = False
Command1.Enabled = True
Command2.Enabled = True
Command3.Enabled = False
Command4.Enabled = False
Command5.Enabled = True
Command6.Enabled = True
Command7.Enabled = True
Command8.Enabled = True
Command1.Caption = "Nhập"
Data2.Recordset.MoveLast
chuyen
Command1.SetFocus
End Sub
Private Sub Command4_Click()
xoa
Command1.Enabled = True
Command1.Caption = "Nhập"
Command2.Enabled = True
If Data2.Recordset.BOF = False Then
Data2.Recordset.MoveLast
chuyen
Command3.Enabled = False
Command4.Enabled = False
Command5.Enabled = True
Else
Command5.Enabled = False
End If
Frame1.Enabled = False
Frame2.Enabled = False
Frame3.Enabled = False
Command6.Enabled = True
Command7.Enabled = True
Command8.Enabled = True
End Sub
Private Sub Command5_Click()
dk = MsgBox("Bạn có chắc chắn xoá không ?", vbCritical + vbYesNo, "Chú ý")
If dk = vbYes Then
Data2.Recordset.Delete
Data2.Refresh
If Data2.Recordset.BOF Then
Command5.Enabled = False
End If
End If
End Sub
Private Sub Command6_Click()
Set db = OpenDatabase(Loctext + "hethong")
db.Execute "delete * from table1"
Set rs = db.OpenRecordset("table1")
rs.AddNew
rs.Fields(0).Value = Text1.Text
rs.Update
rs.Close
'rs.Close
db.Close
If Label1.Caption = "Phiếu Xuất Kho" Then
CrystalReport1.DataFiles(0) = Loctext & "hethong.mdb"
CrystalReport1.ReportFileName = Loctext$ + "px.rpt"
Else
CrystalReport1.DataFiles(0) = Loctext & "hethong.mdb"
CrystalReport1.ReportFileName = Loctext$ + "pnh.rpt"
End If
On Error GoTo ErrorHandler
CrystalReport1.Action = 1
Screen.MousePointer = 0
Exit Sub
ErrorHandler:
MsgBox CrystalReport1.LastErrorString
Screen.MousePointer = 0
Exit Sub
End Sub
Private Sub Command7_Click()
dktk.Show 1
dk = "mact='" & ma & "'"
Data2.Recordset.FindFirst dk
Data2.Recordset.MoveNext
Data2.Recordset.MovePrevious
chuyen
End Sub
Private Sub Command8_Click()
Unload Me
End Sub
Private Sub Data2_Reposition()
'On Error GoTo loi
If kt = False Then Exit Sub
If Not IsNull(Data2.Recordset.Fields(1).Value) Then
Text1.Text = Data2.Recordset.Fields(1).Value
Else
Text1 = ""
End If
If Not IsNull(Data2.Recordset.Fields(2).Value) Then
MaskEdBox1.Text = Data2.Recordset.Fields(2).Value
Else
MaskEdBox1.Text = "__/__/____"
End If
If Not IsNull(Data2.Recordset.Fields(3).Value) Then
Text13.Text = Data2.Recordset.Fields(3).Value
Else
Text13 = ""
End If
Set db = OpenDatabase(Loctext + "hethong.mdb")
Set rs = db.OpenRecordset("select * from dmkh where makh='" & Text13.Text & "'")
Text2.Text = rs.Fields(1).Value
rs.Close
db.Close
If Not IsNull(Data2.Recordset.Fields(4).Value) Then
Text12.Text = Data2.Recordset.Fields(4).Value
Else
Text12 = ""
End If
If Not IsNull(Data2.Recordset.Fields(6).Value) Then
Text3.Text = Data2.Recordset.Fields(6).Value
Else
Text3 = ""
End If
If Not IsNull(Data2.Recordset.Fields(7).Value) Then
Text4.Text = Data2.Recordset.Fields(7).Value
Else
Text4 = ""
End If
If Not IsNull(Data2.Recordset.Fields(5).Value) Then
Text9.Text = Data2.Recordset.Fields(5).Value
Else
Text9 = ""
End If
chuyen
' DBGrid1.SetFocus
Exit Sub
loi:
If Err.Number = 3021 Then
Exit Sub
End If
End Sub
Private Sub Data2_Validate(Action As Integer, Save As Integer)
Select Case Action
Case vbDataActionMoveFirst
kt = True
Case vbDataActionMovePrevious
kt = True
Case vbDataActionMoveNext
kt = True
Case vbDataActionMoveLast
kt = True
Case vbDataActionAddNew
kt = False
Case vbDataActionUpdate
kt = False
Case vbDataActionDelete
kt = True
Case vbDataActionFind
kt = False
Case vbDataActionBookmark
Case vbDataActionClose
End Select
End Sub
Private Sub Form_Load()
Frame1.Enabled = False
Frame2.Enabled = False
Frame3.Enabled = False
Frame4.Enabled = False
Command3.Enabled = False
Command4.Enabled = False
If nut = 1 Then
Label1.Caption = "Phiếu Xuất Kho"
Data1.DatabaseName = Loctext + "Hethong.mdb"
Data1.RecordSource = "phu"
Data1.Refresh
Data2.DatabaseName = Loctext + "Hethong.mdb"
Data2.RecordSource = "phieux"
Data2.Refresh
'Data3.DatabaseName = Loctext + "hethong.mdb"
'Data3.RecordSource = "ctx"
'Data3.Refresh
xoa
If Data2.Recordset.BOF = False Then
Data2.Recordset.MoveLast
chuyen
Else
Command5.Enabled = False
End If
Else
Label1.Caption = "Phiếu Nhập Kho"
Data1.DatabaseName = Loctext + "Hethong.mdb"
Data1.RecordSource = "phu"
Data1.Refresh
Data2.DatabaseName = Loctext + "Hethong.mdb"
Data2.RecordSource = "phieunh"
Data2.Refresh
xoa
If Data2.Recordset.BOF = False Then
Data2.Recordset.MoveLast
chuyen
Else
Command5.Enabled = False
End If
End If
End Sub
Private Sub Form_Resize()
Me.Width = 8100
Me.Height = 5145
Me.Top = 0
Me.Left = (Screen.Width - Me.Width) / 2
End Sub
Private Sub MaskEdBox1_GotFocus()
MaskEdBox1.SelStart = 0
MaskEdBox1.SelLength = Len(MaskEdBox1.Text)
End Sub
Private Sub MaskEdBox1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text1.SetFocus
End If
End Sub
Private Sub Text1_GotFocus()
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text12.SetFocus
End If
End Sub
Private Sub Text12_GotFocus()
Text1.SelStart = 0
Text1.SelLength = Len(Text12.Text)
End Sub
Private Sub Text12_KeyPress(KeyAscii As Integer)
KeyAscii = 0
tck.Show 1
Text12.Text = ma
Text13.SetFocus
End Sub
Private Sub Text13_GotFocus()
Text1.SelStart = 0
Text1.SelLength = Len(Text13.Text)
End Sub
Private Sub Text13_KeyPress(KeyAscii As Integer)
KeyAscii = 0
Text2.SetFocus
End Sub
Private Sub Text2_GotFocus()
Dim dk As String
If Len(Text2.Text) = 0 Then
ttt.Show 1
Text13.Text = ma
Text2.Text = ten
Text9.SetFocus
End If
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Command1.SetFocus
End If
End Sub
Private Sub Text3_GotFocus()
Text3.SelStart = 0
Text3.SelLength = Len(Text3.Text)
End Sub
Private Sub Text3_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text4.SetFocus
End If
End Sub
Private Sub Text4_GotFocus()
Text4.SelStart = 0
Text4.SelLength = Len(Text4.Text)
End Sub
Private Sub Text4_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text5.SetFocus
End If
End Sub
Private Sub Text5_GotFocus()
Text5.SelStart = 0
Text5.SelLength = Len(Text5.Text)
End Sub
Private Sub Text5_KeyPress(KeyAscii As Integer)
KeyAscii = 0
Text6.SetFocus
End Sub
Private Sub Text6_GotFocus()
If Len(Text5.Text) = 0 Then
tt.Show 1
Text5.Text = ma
Text6.Text = ten
Text7.SetFocus
End If
End Sub
Private Sub Text6_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text17.SetFocus
End If
End Sub
Private Sub Text7_GotFocus()
Text7.SelStart = 0
Text7.SelLength = Len(Text7.Text)
End Sub
Private Sub Text7_KeyDown(KeyCode As Integer, Shift As Integer)
If (KeyCode 57) And KeyCode 13 And KeyCode 37 And KeyCode 39 And KeyCode 46 And KeyCode 8 Then
KeyCode = 0
End If
End Sub
Private Sub Text7_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text8.SetFocus
Else
If (KeyAscii 57) And KeyAscii 37 And KeyAscii 39 And KeyAscii 46 And KeyAscii 8 Then
KeyAscii = 0
End If
End If
End Sub
Private Sub Text8_GotFocus()
Text8.SelStart = 0
Text8.SelLength = Len(Text8.Text)
End Sub
Private Sub Text8_KeyDown(KeyCode As Integer, Shift As Integer)
If (KeyCode 57) And KeyCode 13 And KeyCode 37 And KeyCode 39 And KeyCode 46 And KeyCode 8 Then
KeyCode = 0
End If
End Sub
Private Sub Text8_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Command1.SetFocus
Else
If (KeyAscii 57) And KeyAscii 37 And KeyAscii 39 And KeyAscii 46 And KeyAscii 8 Then
KeyAscii = 0
End If
End If
End Sub
Private Sub Text9_GotFocus()
Text9.SelStart = 0
Text9.SelLength = Len(Text9.Text)
End Sub
Private Sub Text9_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text3.SetFocus
End If
End Sub
Form DKTK (Tìm kiếm) :
Private Sub Combo1_Click()
Combo2.SetFocus
End Sub
Private Sub Combo1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Combo2.SetFocus
End If
End Sub
Private Sub Combo2_Click()
Text1.SetFocus
End Sub
Private Sub Combo2_GotFocus()
Combo2.AddItem ("=")
Combo2.AddItem (">")
Combo2.AddItem ("<")
End Sub
Private Sub Combo2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text1.SetFocus
End If
End Sub
Private Sub Command1_Click()
Dim da As Date
Select Case nut
Case 1:
If Combo1.Text = "Mã chứng từ" Then
Data1.DatabaseName = Loctext + "hethong.mdb"
Data1.RecordSource = "select ngay,mact from phieux where mact " & Combo2.Text & "'" & Text1.Text & "'"
Data1.Refresh
Else
da = Text1.Text
Data1.DatabaseName = Loctext + "hethong.mdb"
dk = "select ngay,mact from phieux where ngay " & Combo2.Text & " #" & da & "#"
Data1.RecordSource = dk
Data1.Refresh
End If
Case 2:
If Combo1.Text = "Mã chứng từ" Then
Data1.DatabaseName = Loctext + "hethong.mdb"
Data1.RecordSource = "select ngay,mact from phieunh where mact " & Combo2.Text & "'" & Text1.Text & "'"
Data1.Refresh
Else
da = Text1.Text
Data1.DatabaseName = Loctext + "hethong.mdb"
dk = "select ngay,mact from phieunh where ngay " & Combo2.Text & " #" & da & "#"
Data1.RecordSource = dk
Data1.Refresh
End If
Case 3:
If Combo1.Text = "Mã chứng từ" Then
Data1.DatabaseName = Loctext + "hethong.mdb"
Data1.RecordSource = "select ngay,mact from phieulc where mact " & Combo2.Text & "'" & Text1.Text & "'"
Data1.Refresh
Else
da = Text1.Text
Data1.DatabaseName = Loctext + "hethong.mdb"
dk = "select ngay,mact from phieulc where ngay " & Combo2.Text & " #" & da & "#"
Data1.RecordSource = dk
Data1.Refresh
End If
End Select
If Data1.Recordset.BOF = False Then
Command3.Enabled = True
Command1.Enabled = False
End If
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Command3_Click()
ma = Data1.Recordset.Fields(1).Value
ten = Data1.Recordset.Fields(0).Value
Unload Me
End Sub
Private Sub DBGrid1_DblClick()
Command3_Click
End Sub
Private Sub Form_Load()
Combo1.AddItem ("Mã chứng từ")
Combo1.AddItem ("Ngày Nhập Phiếu")
Command3.Enabled = False
'Combo1.Text = ""
End Sub
Private Sub Form_Resize()
Me.Height = 3510
Me.Width = 5370
End Sub
Private Sub Text1_GotFocus()
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Command1.SetFocus
End If
End Sub
MỤC LỤC
LỜI NÓI ĐẦU 1
CHƯƠNG I: CÔNG TY PHẦN MỀM TÀI CHÍNH KẾ TOÁN FAST VÀ BÀI TOÁN QUẢN LÝ KHO HÀNG TRONG HỆ THÔNG TIN KẾ TOÁN 3
Vài nét về lịch sử thành lập công ty 3
Bài toán xây dựng phân hệ thông tin quản lý kho hàng trong hệ thông tin kế toán 9
Môi trường và công cụ........................................................................... 12
CHƯƠNG II : KHẢO SÁT THỰC TẾ 16
I. Tóm tắt chức năng, nhiệm vụ, tổ chức và các quy trình nghiệp vụ của một công ty trong quản lý kho hàng 17
II.Mô tả hệ thống thông tin điều hành và quản lý 19
CHƯƠNG III: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 30
Phân tích hệ thống 30
Cấu trúc dữ liệu 36
Cấu trúc chương trình 44
Một số thuật toán trong chương trình 46
Xây dựng chương trình 50
KẾT LUẬN 60
PHỤ LỤC 62
TÀI LIỆU THAM KHẢO
Kỹ thuật lập trình Access trên Windows - Phạm Văn Ất - NXB Khoa học
Kỹ thuật
2. Microsoft Access 97 Visual Basic for application từ A đến Z - Trần Thanh
Phong - NXB Thống kê
3. Bài giảng Cơ sở dữ liệu - Trần Công Uẩn
4. Giáo trình Hệ thống thông tin quản lý- Trương Văn Tú
5. Phân tích và thiết kế tin học hệ thống quản lý, kinh doanh, nghiệp vụ -
NXB Giao thông Vận tải
6. Visual Basic 6.0
7. Tạp chí PC World Việt Nam
Các file đính kèm theo tài liệu này:
- bc_quan_ly_kho_theo_vb_4993.doc