Đồ án Viết chương trình Quản Lý Kế Toán Doanh Nghiệp

Để chương trình mang một phần tính chuyên nghiệp, cần đóng gói chương trình thành bộ Setup ( Package & Deloyment Wizard ) và có thể cung cấp cho người sử dụng bộ Setup này như có thể sao chép, cài đặt và có thể sử dụng trên bất kỳ máy tính nào. Một chương trình hoàn hảo để đảm bảo cho công việc kế toán thực thụ thì đòi hỏi tính chuyên nghiệp rất cao, nên trên cơ sở nghiên cứu và phát triển, đề tài chỉ đáp ứng được phần nào cho người sử dụng hiểu khái quát về kế toán, cũng như cách nghiên cứu về cơ sở dữ liệu cho kế toán doanh nghiệp. Ngoài ra, nắm bắt cách sử dụng ngôn ngữ lập trình để tạo và phát triển các chương trình ứng dụng. Đồng thời góp phần làm hoàn hảo một chương trình kế toán có thể đáp ứng rộng rãi cho nhiều doanh nghiệp sử dụng. Đề tài cần được bổ sung những thiếu sót, hạn chế như chưa tính toán được tồn quỹ tiền mặt, tồn kho hàng hóa và giá vốn hàng bán .Và phát triển theo hướng mở rộng như tìm kiếm các loại hàng tồn kho, khách hàng có công nợ, tình hình thu chi tồn quỹ tiền mặt, tiền lương để trả cho công nhân viên chức của doanh nghiệp trong tháng, quý hay trong từng thời kỳ sản xuất kinh doanh.

doc94 trang | Chia sẻ: aloso | Lượt xem: 1608 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Đồ án Viết chương trình Quản Lý Kế Toán Doanh Nghiệp, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Double(Standard) Đổi ra tiền VND DIENGIAI Text 255 Diễn giải MA_NT Text 15 Mã ngoại tệ MA_NH Text 10 Mã ngân hàng MA_THUE Text 10 Mã thuế KT_THUE Yes/No Yes/No Kiểm tra thuế Tbl_PHIEUTHUCN : Phiếu thu công nợ Field name Data type Size Description SO_CT(K) Text 12 Số chứng từ MA_CT Text 10 Mã chứng từ MA_KH Text 10 Mã khách hàng NGAYLAP_CT Date/Time Short Date Ngày lập chứng từ TK_NO Text 10 Tài khoản nợ TK_CO Text 10 Tài khoản có MA_NH Text 10 Mã ngân hàng TIEN_VND Number Double(Standard) Tiền VND TYGIA Number Double(Standard) Tỷ giá TIEN_USD Number Double(Standard) Tiền USD MA_NT Text 15 Mã ngoại tệ DIENGIAI Text 255 Diễn giải Tbl_PHIEUCHICN : Phiếu chi công nợ Field name Data type Size Description SO_CT(K) Text 12 Số chứng từ MA_CT Text 10 Mã chứng từ MA_NCC Text 10 Mã nhà cung cấp NGAYLAP_CT Date/Time Short Date Ngày lập chứng từ TK_NO Text 10 Tài khoản nợ TK_CO Text 10 Tài khoản có MA_NH Text 10 Mã ngân hàng TIEN_VND Number Double(Standard) Tiền VND TYGIA Number Double(Standard) Tỷ giá TIEN_USD Number Double(Standard) Tiền USD MA_NT Text 15 Mã ngoại tệ DIENGIAI Text 255 Diễn giải Tbl_SDCONGNO : Công nợ đầu kỳ, cuối kỳ và phát sinh công nợ trong kỳ Field name Data type Size Description KEY_CONGNO (K) Text 30 Khóa xác định tháng năm và khách hàng, nhà cung cấp có công nợ MA_KH Text 10 Mã khách hàng MA_NCC Text 10 Mã nhà cung cấp MA_TK Text 14 Mã tài khoản NOVND_DK Number Double(Standard) Nợ VND đầu kỳ COVND_DK Number Double(Standard) Có VND đầu kỳ NOFSVND_TK Number Double(Standard) Nợ phát sinh VND trong kỳ COFSVND_TK Number Double(Standard) Có phát sinh VND trong kỳ NOVND_CK Number Double(Standard) Nợ VND cuối kỳ COVND_CK Number Double(Standard) Có VND cuối kỳ PHANLOAI Text 1 Phân loại công nợ NOUSD_DK Number Double(Standard) Nợ USD đầu kỳ COUSD_DK Number Double(Standard) Có USD đầu kỳ NOFSUSD_TK Number Double(Standard) Nợ phát sinh USD trong kỳ COFSUSD_TK Number Double(Standard) Có phát sinh USD trong kỳ NOUSD_CK Number Double(Standard) Nợ USD cuối kỳ COUSD_CK Number Double(Standard) Có USD cuối kỳ Tbl_TONKHOHH : Tồn kho hàng hóa Field name Data type Size Description KEY_TKHH(K) Text 30 Khóa xác định tháng năm và mặt hàng tồn MA_HH Text 10 Mã hàng hóa MA_NHOM Text 10 Mã nhóm MA_KHO Text 10 Mã kho QUYCACH Text 255 Quy cách SL_DK Number Long Integer Số lượng đầu kỳ GTUSD_DK Number Double(Standard) Giá trị USD đầu kỳ GTVND_DK Number Double(Standard) Giá trị VND đầu kỳ SL_NHAP Number Long Integer Số lượng nhập GTUSD_NHAP Number Double(Standard) Giá trị USD nhập GTVND_NHAP Number Double(Standard) Giá trị VND nhập SL_XUAT Number Long Integer Số lượng xuất GTUSD_XUAT Number Double(Standard) Giá trị USD xuất GTVND_XUAT Number Double(Standard) Giá trị VND xuất SL_CK Number Long Integer Số lượng cuối kỳ GTUSD_CK Number Double(Standard) Giá trị USD cuối kỳ GTVND_CK Number Double(Standard) Giá trị VND cuối kỳ DGBQ_USD Number Double(Standard) Đơn giá bình quân USD DGBQ_VND Number Double(Standard) Đơn giá bình quân VND b. Dùng Microsoft Access để tạo bộ cơ sở dữ liệu Cơ sở dữ liệu cho Chương Trình Quản Lý Kế Toán Doanh Nghiệp c. Mối quan hệ cho các bảng dữ liệu trong chương trình Relationship phân hệ kế toán tiền mặt Relationship phân hệ kế toán hàng hóa Relationship phân hệ kế toán công nợ PHẦN IV SỬ DỤNG NGÔN NGỮ LẬP TRÌNH VISUAL BASIC ĐỂ THIẾT KẾ CHƯƠNG TRÌNH Ngôn ngữ lập trình Visual Basic Visual Basic có rất nhiều tính năng mới. Các điều khiển mới cho phép viết các chương trình ứng dụng kết hợp giao diện, cách xử lý và tính năng của Microsoft Office 97 và trình duyệt Web Internet Explorer, không nhất thiết phải có một bản sao của điều khiển trên biểu mẫu. Visual Basic cho phép : Lập trình để thêm điều khiển vào đề án tự động và có thể tạo ra các điều khiển Activex hiệu chỉnh. Viết các chương trình ứng dụng phía máy chủ (Server side) dùng HTML động nhúng kết nối với các thư viện liên kết động của Internet Information Server. Một vài cải tiến cho phép làm việc với các ứng dụng truy cập dữ liệu ở tầm cỡ vĩ mô liên quan đến hàng trăm, hàng nghìn người sử dụng qua mạng hay qua Internet. Visual Basic cung cấp các đối tượng dữ liệu Activex cho phép kết nối với các tập tin cơ sở dữ liệu. Ngoài các điều khiển Activex Visual Basic còn có một bộ công cụ và kỹ thuật mới giúp truy cập dữ liệu dễ dàng hơn. Trình thiết kế môi trường dữ liệu cho phép xem xét và thao tác dữ liệu trong CSDL khác nhau. Bởi vì bản thân môi trường dữ liệu là những đối tượng, có thể sử dụng chúng như một điều khiển dữ liệu. Thậm chí có thể gắn nó với các điều khiển khác. Visual Basic cung cấp một vài điều khiển dữ liệu mới cho phép tận dụng các thế mạnh của điều khiển dữ liệu ADO. Điều khiển DataGrid cho phép xem dữ liệu dưới dạng bảng gồm các dòng và cột. DataList và DataCombo tương tự như DBList và DBCombo, có thể dùng chúng để lấy một danh sách dữ liệu từ điều khiển ADO trong cấu hình hộp danh sách (ListBox) hoặc hộp kết hợp (ComboBox). Visual Basic mở rộng khả năng báo cáo với trình báo cáo dữ liệu cho phép tạo, xem trước, và in các báo cáo trong Visual Basic tương tự như Access và có thể lấy các điều khiển báo cáo từ hộp công cụ báo cáo dữ liệu mới và đưa vào biểu mẫu báo cáo dữ liệu. 2. Các đối tượng truy cập dữ liệu Dynamic Data Exchange (DDE) : Trao đổi dữ liệu động Cho phép các các ứng dụng chia sẽ thông tin với nhau trong lúc thi hành. Cớ chế giao tiếp là một ứng dụng sẽ gửi dữ liệu vào một vùng được quy định sẵn bởi một ứng dụng khác. Tuy nhiên, người lập trình phải thiết lập mọi thứ cho giao tiếp trao đổi dữ liệu nên cách thực hiện theo DDE rất phức tạp. Object Linking and Embedding (OLE) : Nhúng và kết nối đối tượng OLE tuân thủ triết lý của Windows (Click chuột, kéo và thả). OLE có thể kéo dữ liệu từ ứng dụng này và thả vào ứng dụng khác. OLE có hai kỹ thuật : Khởi động tại chổ (In-place activation) : Một dữ liệu được tạo ra bởi ứng dụng 1 và được thả vào ứng dụng 2. Nhấn Double click chuột lên dữ liệu ở ứng dụng 2 nó sẽ hoạt động giống như ở ứng dụng 1. Tự động hóa (Automation) : áp dụng khả năng tái sử dụng đối tượng và tận dụng triệt để các thế mạnh của các đối tượng. Activex Activex là thế hệ sau của OLE. Nên Activex chứa đựng tất cả tính năng của OLE và được bổ sung thêm nhiều chức năng khác như cho phép việc sử dụng các đoạn chương trình có sẵn mà không cần quan tâm chúng có nguồn gốc từ đâu hay hoạt động như thế nào. 3. sử dụng các đối tượng truy cập dữ liệu trong chương trình Điều khiển DAO (Data Access Objects) Cho phép thi hành các câu truy vấn, cập nhật giá trị trong các bảng cơ sở dữ liệu và tạo cấu trúc cơ sở dữ liệu bao gồm các bảng, các câu truy vấn chứa sẵn và mối quan hệ giữa các bảng. Ưu điểm : Giao diện lập trình của DAO vô cùng mạnh mẽ và dễ sử dụng. Với các cơ sở dữ liệu Jet của Microsoft, DAO cho phép truy cập các tính năng không có sẵn trong SQL hay ADO (Đối tượng dữ liệu Activex – Activex Data Object). DAO có thể sử dụng để truy cập các cơ sở dữ liệu trên máy cá nhân hay Client/Server. Khuyết điểm : Mô hình đối tượng DAO khá phức tạp DBEngine Workspace Database TableDef QueryDef RecordSet Container Container Relation Field Index Field Field Parameter Field Document Field User Group Group User Error Object only Object and collection Mô hình cây phân cấp DAO, trình bày mối quan hệ giữa các đối tượng cơ sở dữ liệu Thông qua các tập hợp sở hữu đối tượng Database có thể thao tác trên dữ liệu và cấu trúc của một cơ sở dữ liệu, tạo các đối tượng cơ sở dữ liệu mới, kiểm tra cấu trúc và dữ liệu chứa trong một cơ sở dữ liệu. Trong lập trình DAO, có một tập hợp cốt lõi gồm các kỹ thuật thông dụng được sử dụng gần như cho mọi chương trình, bao gồm : Thi hành câu truy vấn SELECT để lấy về các dữ liệu từ cơ sở dữ liệu. Duyệt qua từng mẫu tin trong một RecordSet Thi hành câu truy vấn hành động (bao gồm các câu truy vấn Update, Delete, Append) Sữa đổi cấu trúc cơ sở dữ liệu Xử lý lỗi phát sinh bởi truy cập cơ sở dữ liệu. Điều khiển ADODC (Microsoft ADO Data Control 6.0 (OLEDB) ) Visual Basic cung cấp các đối tượng dữ liệu ActiveX (ActiveX Data Object - ADO). ADO tổng hợp và thay thế việc truy cập dữ liệu của DAO (Đối tượng truy cập dữ liệu – Data Access Object) và RDO (Đối tượng dữ liệu từ xa – Remote Data Object). ADO là công nghệ truy cập cơ sở dữ liệu hướng đối tượng tương tự như DAO và RDO, giao diện dựa trên đối tượng cho công nghệ dữ liệu OLEDB. Ngoài ra, ADO dễ sử dụng và có tầm hoạt động rộng hơn dùng để kết nối với các tập tin cơ sở dữ liệu và có thể truy cập dữ liệu từ xa. ADO được xem là kỹ thuật để truy cập cơ sở dữ liệu từ Web Server. Bởi vì ADO được cung cấp dưới dạng thư viện Activex Server (tương tự DAO và RDO), nên rất thuận lợi dùng trong ứng dụng Visual Basic. Trong thực tế, bằng nhiều cách đã chứng minh rằng sử dụng ADO để làm việc với cơ sở dữ liệu Client/Server thì dễ hơn các kỹ thuật khác. Phần lớn các nhà lập trình Visual Basic không tương tác trực tiếp với OLEDB. Thay vào đó, họ lập trình với ADO, mô hình đối tượng cung cấp giao diện với OLEDB. Khi dùng ADO thì chỉ cần lập trình với phần giao diện người sử dụng ở phía Client. Bởi vì việc truy cập dữ liệu trên cả trình duyệt Wed và ứng dụng Visual Basic được chuyển hết về phía Activex Server nên logic chương trình luôn nhất quán, bất kể loại ứng dụng nào đang được sử dụng. Client Application Remote Data Objects ODBC Driver ODBC Driver Manager Activex Data Objects OLEDB Data Provider OLEDB Relational Database Document Server Email Server Client Workstation Cách sử dụng ADO và OLEDB để tăng cường truy cập thông tin trong một cơ sở dữ liệu Client Application Activex Data Objects OLEDB ODBC Provider ODBC Driver Relational Database Client Workstation ODBC Driver Manager OLEDB Cấu trúc truy cập cơ sở dữ liệu ODBC dùng trình cung cấp OLEDB Cấu trúc này cho phép dùng thành phần lập trình Activex thông dụng trên cả trình duyệt Wed và ứng dụng Client Visual Basic. Kết nối với chứa Kết nối với Biểu mẫu VB Các thuộc tính DataSource, DataField của điều khiển ràng buộc dữ liệu Các thuộc tính ConnectionString, RecordSource của điều khiển ADO Data Cơ sở dữ liệu Cách thức của điều khiển ADO Data kết nối với cơ sở dữ liệu trong ứng dụng 4. Các điều khiển giao diện người sử dụng Điều khiển nội tại (Hoạt động với mọi ấn bản của Visual Basic) Các điều khiển này đều có thể trực tiếp nối kết với một trường trong một cơ sở dữ liệu thông qua một điều khiển dữ liệu hoặc nguồn dữ liệu khác như trình thiết kế DataEnvironment. Nhập dữ liệu với điều khiển TEXTBOX : Dùng sữa đổi dữ liệu kiểu chuỗi và kiểu số từ một cơ sở dữ liệu. Ràng buộc vào trình thiết kế DataEnvironment : Là khả năng tạo một giao diện người sử dụng ràng buộc dữ liệu. Bởi vì có thể chia sẽ trình thiết kế DataEnvironment qua nhiều biểu mẫu và nhiều ứng dụng, điều này sẽ cho tất cả các tính năng và sự dễ dàng lập trình trong một ứng dụng ràng buộc dữ liệu bởi vì không cần ràng buộc từng điều khiển riêng rẽ với nguồn dữ liệu. Truy cập giá trị Boolean với điều khiển CHECKBOX : dùng CheckBox để hiển thị một giá trị True hay False từ một trường trong một cơ sở dữ liệu. Sử dụng điều khiển LISTBOX để hiển thị dữ liệu : dùng ListBox để hiển thị các phần tử trong một danh sách chọn lựa dành cho người sử dụng. Nhưng khi sử dụng ListBox để hiển thị dữ liệu từ một cơ sở dữ liệu vẫn có một số hạn chế về lượng dữ liệu dùng để chứa và hiển thị. TabControl : Làm cho các chức năng của chương trình nằm gọn trên một form. Điều khiển Activex (Là những thành phần bổ sung cho bản Professional và Enterprise của Visual Basic) Khác với các điều khiển giao diện người sử dụng, các điều khiển này không được cung cấp bởi hệ điều hành. Thay vào đó, ta phải phân phát điều khiển bổ sung vào các máy tính của người sử dụng để ứng dụng có thể sử dụng chúng. Sử dụng điều khiển DataGrid : DataGrid có khả năng hiển thị dữ liệu dưới dạng dòng, cột khi ràng buộc với điều khiển ADO Data hay trình thiết kế DataEnvironment. Sử dụng điều khiển DataList và DataCombo : Điều khiển DataList và DataCombo là những điều khiển sao chép lại các chức năng của điều khiển DBList. DataList cung cấp danh sách các chọn lựa, DataCombo dùng nối kết dữ liệu nhập vào điều khiển với một trường trong cơ sở dữ liệu, cả hai đều tương thích với DAO Data và ADO Data mới. 5. Sử dụng các câu truy vấn (SQL) Một câu truy vấn là một lệnh cơ sở dữ liệu để lấy về các mẩu tin. Sử dụng câu truy vấn, có thể lấy dữ liệu từ một hoặc nhiều trường trong một hay nhiều bảng. Ngoài ra, còn có thể ép các dữ liệu lấy về theo một hoặc nhiều ràng buộc, gọi là các tiêu chí để hạn chế số lượng dữ liệu lấy về. SQL là giải pháp chuẩn để thao tác với cơ sở dữ liệu. Nó được thực hiện theo nhiều dạng khác nhau trong các hệ thống cơ sở dữ liệu quan hệ, bao gồm Access và SQL Server Các câu truy vấn SQL cho khả năng lấy về các mẩu tin từ một bảng cơ sở dữ liệu, đối chiếu các dữ liệu quan hệ với nhau trong nhiều bảng và thao tác với cấu trúc của cơ sở dữ liệu. Các kiểu truy vấn SQL nhất định có thể điền dữ liệu vào một điều khiển dữ liệu. Trong chương trình, các câu truy vấn SQL được dùng khi thao tác với các cơ sở dữ liệu thông qua sử dụng mô hình đối tượng DAO, RDO và ADO. Lợi ích khi dùng SQL Theo kinh nghiệm trong Visual Basic, bất cứ chổ nào dùng một tham chiếu đến một bảng, đều có thể thay thế bằng cách sử dụng một câu lệnh SQL hoặc một tham chiếu đến một truy vấn đã lưu trữ nhưng bản thân nó vẫn dựa vào một câu lệnh SQL. Nơi thích hợp nhất để đặt một câu lệnh SQL, dựa trên các kỹ thuật truy cập dữ liệu, là thuộc tính RecordSource của một điều khiển dữ liệu. Vì vậy, thay vì chỉ ra thuộc tính RecordSource là tên của một bảng, có thể đổi thuộc tính này thành tên của một câu truy vấn chứa sẵn hay một câu lệnh SQL như : SELECT * FROM TEN_BANG ORDER BY KEY. Điều này cho ta sự linh hoạt đáng kể khi chọn lựa một nguồn mẩu tin. Sử dụng câu lệnh SQL trong các ngữ cảnh khác nhau của chương trình Tham số Source của phương thức OpenRecordSet của đối tượng DataBase của DAO được sử dụng phổ biến nhất khi truy vấn các mẩu tin từ một cơ sở dữ liệu Access. Sử dụng thuộc tính Source của một đối tượng RecordSet của ADO. Sử dụng câu lệnh SELECT để lấy về các mẩu tin Câu lệnh SELECT là cốt lõi của mọi truy vấn lấy về dữ liệu. Nó thông báo cho bộ máy cơ sở dữ liệu những trường nào sẽ được lấy về. Dạng thông dụng nhất của câu lệnh SELECT là : SELECT * Mệnh đề có ý nghĩa là “trả về tất cả các trường tìm thấy trong nguồn mẩu tin chỉ định”. Dạng lệnh này rất tiện dụng vì không cần biết tên của trường để lấy chúng về từ một bảng. Tuy nhiên, lấy về tất cả các cột trong một bảng có thể không hiệu quả, nhất là trong trường hợp mà ta chỉ cần 2 cột mà truy vấn của ta trả về quá nhiều. Vì vậy, ngoài việc thông báo cho bộ máy cơ sở dữ liệu để trả về tất cả các trường trong nguồn mẩu tin, ta còn có khả năng chỉ ra chính xác trường nào cần lấy về. Hiệu ứng lọc bớt này cải tiến hiệu quả của một truy vấn, nhất là trên bảng lớn có nhiều trường trong chương trình, bởi vì trong chương trình ta chỉ cần lấy về trường nào cần thiết. Sử dụng mệnh đề FROM để chỉ nguồn mẩu tin Mệnh đề FROM làm việc với câu lệnh SELECT để trả về các mẩu tin trong bảng, ví dụ : SELECT * FROM TEN_BANG . Vì một câu truy vấn SELECT FROM không xếp theo thứ tự nên thứ tự trả về là không xác định. Để câu truy vấn có hiệu quả, cần phải giới hạn số trường lấy về bằng cách sử dụng mệnh đề WHERE. Sử dụng mệnh đề WHERE để chỉ ra tiêu chí lọc Mệnh đề WHERE thông báo với bộ máy cơ sở dữ liệu để giới hạn số mẩu tin trả về theo một hay nhiều tiêu chí lọc do người lập trình cung cấp. Kết quả trả về của tiêu chí lọc là TRUE/FALSE. Ví dụ : Lấy về một danh sách của những khách hàng ở thành phố Hồ Chí Minh SELECT HOLOT,TEN,THANHPHO FROM TBL_KHACHHANG WHERE MATP=’HCM’ Tóm lại, chìa khóa của sự thành công trong việc phát triển Client/Server là phát triển các chiến thuật để đảm bảo rằng các ứng dụng Client không lấy về quá nhiều mẩu tin cùng lúc. Điều này đảm bảo rằng ứng dụng sẽ chạy nhanh hơn và không gây ra những phiền phức cho máy tính như là hết bộ nhớ. Một trong những vũ khí cơ bản để tránh những hậu quả trên là dùng mệnh đề WHERE. Sử dụng ORDER BY trong câu lệnh SQL để sắp xếp kết quả Mệnh đề ORDER BY thông báo cho bộ máy cơ sở dữ liệu cần sắp xếp các mẩu tin mà nó lấy về. Mặc định của ORDER BY là sắp xếp tăng dần, ví dụ : Sắp xếp tăng dần SELECT [ĐỊA CHỈ],[HỌTÊN] FROM TBL_KHACHHANG WHERE MATP=’HCM’ ORDER BY MA_KH Sắp xếp giảm dần SELECT [ĐỊA CHỈ],[HỌTÊN] FROM TBL_KHACHHANG WHERE MATP=’HCM’ ORDER BY MA_KH DESC 6. Thiết lập báo cáo và xuất thông tin Trong chương trình dùng công cụ Crystal Report 8.5 để lập báo cáo, nó gồm có hai phần : Trình thiết kế báo cáo xác định dữ liệu sẽ đưa vào báo cáo và cách thể hiện của báo cáo. Một điều khiển Activex cho phép thi hành, hiển thị, in ấn điều khiển lúc thi hành ứng dụng. Cửa sổ xác định cơ sở dữ liệu sẽ được báo cáo Bởi vì các mối quan hệ định nghĩa sẵn cho cơ sở dữ liệu đã được xác định ở mức bộ máy cơ sở dữ liệu nên Crystal Report tự động tạo mối quan hệ giữa các bảng như khi tạo trong Microsoft Access. Cửa sổ biểu diễn mối quan hệ của các bảng trong Crystal Report Cửa sổ thiết kế báo cáo trong Crystal Report 7. Tạo bộ giúp đỡ Để chương trình mang tính chuyên nghiệp cần tạo bộ giúp đỡ để người sử dụng có thể giải đáp một số thắc mắc về chương trình khi có vấn đề. Một số phần mềm hiện nay trên thị trường hổ trợ việc tạo bộ giúp đỡ như : WinHelp, ForeHelp, HTML Help, WorkShop, RoboHelp… 8. Đóng gói chương trình Chương trình được đóng gói và có thể triển khai. PHẦN V CHƯƠNG TRÌNH QUẢN LÝ KẾ TOÁN DOANH NGHIỆP GIAO DIỆN VÀ MÃ NGUỒN CỦA MỘT SỐ FORM CẬP NHẬT – BÁO CÁO 1. Hệ thống Folder để lưu trữ chương trình C:\ 2. Giao diện chính của chương trình 3. Một số thủ tục dùng để mở kết nối dữ liệu giữa Access và Visual Basic a. Thủ tục mở kết nối dữ liệu bằng ADODB Public cn As New ADODB.Connection Sub MoKetNoi() Dim Ten_CSDL As String Dim str As String Đường dẫn đến tập tin chứa cơ sở dữ liệu Ten_CSDL = App.Path & " \Ktdn.mdb" Khai báo nhà cung cấp kết nối và nguồn dữ liệu str = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & Ten_CSDL & "" Khai báo chuỗi kết nối của DataEnvironment và DEconnection DE1.CN1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & Ten_CSDL & "" Phương thức mở kết nối DE1.CN1.Open cn.Open str End Sub b. Thủ tục mở kết nối bằng DAO (Data Access Object) Private Sub Sub_Name() Khai báo các biến đối tượng cơ sở dữ liệu Dim db As DAO.Database Dim rs As DAO.Recordset Dim chuoi As String Biến db truy cập đến tên cơ sở dữ liệu cần mở Set db = OpenDatabase("c:\QL_ktdn\ktdn.mdb") Dùng câu lệnh SELECT SQL để truy cập đến bảng chuoi = "select * from Tbl_DMCT where MA_CT='" & DCDMCT.Text & "'" Set rs = db.OpenRecordset(chuoi) rs.Close db.Close End Sub c. Các bước kết nối dữ liệu bằng ADO (Activex Data Object) Biểu tượng ADODC trong bộ công cụ của Visual Basic Trang General trong cửa sổ Property Pages của điều khiển ADODC Trang Provider trong cửa sổ Data Link Properties của ADODC Trang Connection trong cửa sổ Data Link Properties của ADODC Trang RecordSource trong cửa sổ Property Pages của điều khiển ADODC 4. Giao diện và mã nguồn của một số Form cập nhật và xuất dữ liệu Giao diện Form cập nhật danh mục chứng từ Mã nguồn của Form cập nhật danh mục chứng từ Option Compare Text Option Explicit Dim them As Boolean Private Sub form_load() Dim n Dim n1 n = 0 n1 = 0 n = Ado_DMCT.Recordset.RecordCount If (Ado_DMCT.Recordset.EOF = False) And (Ado_DMCT.Recordset.BOF = False) Then n1 = Ado_DMCT.Recordset.Bookmark End If txtBGHH.Text = n1 txtSBG.Text = n Khoa End Sub Private Sub Khoa() DataDMCT.AllowDelete = False DataDMCT.AllowUpdate = False cmdthem.Enabled = True cmdsua.Enabled = True cmdxoa.Enabled = True cmdghi.Enabled = False cmdkhong.Enabled = False cmdthoat.Enabled = True DataDMCT.Refresh End Sub Private Sub Mo_Khoa() DataDMCT.AllowDelete = True DataDMCT.AllowUpdate = True cmdthem.Enabled = False cmdsua.Enabled = False cmdxoa.Enabled = False cmdghi.Enabled = True cmdkhong.Enabled = True cmdthoat.Enabled = False DataDMCT.Refresh End Sub Private Sub cmdthem_click() On Error GoTo Loi_Them Mo_Khoa Ado_DMCT.Refresh Ado_DMCT.Recordset.AddNew DataDMCT.SetFocus them = True Thoat_Them: Exit Sub Loi_Them: MsgBox Err.Description Resume Thoat_Them End Sub Private Sub cmdsua_click() Dim recnum On Error GoTo Loi_Sua recnum = Ado_DMCT.Recordset.Bookmark Mo_Khoa them = False Thoat_Sua: Exit Sub Loi_Sua: MsgBox Err.Description Resume Thoat_Sua End Sub Private Sub cmdxoa_click() On Error GoTo Loi_Xoa Dim traloi traloi = MsgBox("Ban muon xoa chung tu " + Ado_DMCT.Recordset.Fields("MA_CT") + " ?", 48 + 4, "Thong bao") If traloi = 6 Then Ado_DMCT.Recordset.Delete Ado_DMCT.Recordset.Clone Ado_DMCT.Recordset.Requery Ado_DMCT.Recordset.MoveNext If Ado_DMCT.Recordset.EOF Then Ado_DMCT.Recordset.MoveLast End If End If Ado_DMCT.Refresh Thoat_Xoa: Exit Sub Loi_Xoa: MsgBox "Khong the xoa mau tin nay !" Resume Thoat_Xoa End Sub Private Sub cmdghi_click() On Error GoTo Loi_Ghi Ado_DMCT.Recordset.UpdateBatch adAffectAll Khoa cmdthem.SetFocus them = False Thoat_Ghi: DataDMCT.SetFocus Exit Sub Loi_Ghi: MsgBox "Du lieu khong hop le !" Resume Thoat_Ghi End Sub Private Sub cmdkhong_click() If them Then Ado_DMCT.Refresh Ado_DMCT.Recordset.CancelUpdate End If Khoa cmdthem.SetFocus them = False Ado_DMCT.Refresh End Sub Private Sub cmdthoat_click() Ado_DMCT.Refresh Unload Me End Sub Private Sub DataDMCT_click() Dim n Dim n1 n = 0 n1 = 0 n = Ado_DMCT.Recordset.RecordCount If (Ado_DMCT.Recordset.EOF = False) And (Ado_DMCT.Recordset.BOF = False) Then n1 = Ado_DMCT.Recordset.Bookmark End If txtBGHH.Text = n1 txtSBG.Text = n End Sub Giao diện Form báo cáo danh mục chứng từ Mã nguồn của Form báo cáo danh mục chứng từ Dim Report As New CrystalRepDMCT Private Sub Form_Load() Screen.MousePointer = vbHourglass CRViewer1.ReportSource = Report CRViewer1.ViewReport Screen.MousePointer = vbDefault End Sub Giao diện Form cập nhật danh mục tài khoản Mã nguồn của Form cập nhật danh mục tài khoản Option Compare Text Option Explicit Dim them As Boolean Private Sub form_load() Dim n Dim n1 n = 0 n1 = 0 n = Ado_DMTK.Recordset.RecordCount If (Ado_DMTK.Recordset.EOF = False) And (Ado_DMTK.Recordset.BOF = False) Then n1 = Ado_DMTK.Recordset.Bookmark End If txtBGHH.Text = n1 txtSBG.Text = n Khoa End Sub Private Sub Mo_Khoa() DataDMTK.AllowDelete = True DataDMTK.AllowUpdate = True cmdthem.Enabled = False cmdsua.Enabled = False cmdxoa.Enabled = False cmdghi.Enabled = True cmdkhong.Enabled = True cmdthoat.Enabled = False DataDMTK.Refresh End Sub Private Sub Khoa() DataDMTK.AllowDelete = False DataDMTK.AllowUpdate = False cmdthem.Enabled = True cmdsua.Enabled = True cmdxoa.Enabled = True cmdghi.Enabled = False cmdkhong.Enabled = False cmdthoat.Enabled = True DataDMTK.Refresh End Sub Private Sub cmdthem_click() On Error GoTo Loi_Them Ado_DMTK.Refresh Ado_DMTK.Recordset.AddNew Mo_Khoa DataDMTK.SetFocus them = True Thoat_Them: Exit Sub Loi_Them: MsgBox Err.Description Resume Thoat_Them End Sub Private Sub cmdsua_click() Dim recnum On Error GoTo Loi_Sua recnum = Ado_DMTK.Recordset.Bookmark Mo_Khoa them = False Thoat_Sua: Exit Sub Loi_Sua: MsgBox Err.Description Resume Thoat_Sua End Sub Private Sub cmdxoa_click() On Error GoTo Loi_Xoa Dim traloi traloi = MsgBox("Ban muon xoa tai khoan " + Ado_DMTK.Recordset.Fields("MA_TK") + " ?", 48 + 4, "Thong bao") If traloi = 6 Then Ado_DMTK.Recordset.Delete Ado_DMTK.Recordset.Clone Ado_DMTK.Recordset.Requery Ado_DMTK.Recordset.MoveNext If Ado_DMTK.Recordset.EOF Then Ado_DMTK.Recordset.MoveLast End If End If Ado_DMTK.Refresh Thoat_Xoa: Exit Sub Loi_Xoa: MsgBox "Khong the xoa mau tin nay !" Resume Thoat_Xoa End Sub Private Sub cmdghi_click() On Error GoTo Loi_Ghi Ado_DMTK.Recordset.UpdateBatch adAffectAll Khoa cmdthem.SetFocus them = False Thoat_Ghi: DataDMTK.SetFocus Exit Sub Loi_Ghi: MsgBox "Du lieu khong hop le !" Resume Thoat_Ghi End Sub Private Sub cmdkhong_click() If them Then Ado_DMTK.Refresh Ado_DMTK.Recordset.CancelUpdate End If Khoa cmdthem.SetFocus them = False Ado_DMTK.Refresh End Sub Private Sub cmdthoat_click() Ado_DMTK.Refresh Unload Me End Sub Private Sub DataDMTK_click() Dim n Dim n1 n = 0 n1 = 0 n = Ado_DMTK.Recordset.RecordCount If (Ado_DMTK.Recordset.EOF = False) And (Ado_DMTK.Recordset.BOF = False) Then n1 = Ado_DMTK.Recordset.Bookmark End If txtBGHH.Text = n1 txtSBG.Text = n End Sub 'Thu tuc khi muon quay lai ban ghi truoc do Private Sub cmdtruoc_click() If Ado_DMTK.Recordset.BOF Then MsgBox "Ban dang o ban ghi dau tien !", vbOKOnly, "Thong bao" Else Ado_DMTK.Recordset.MovePrevious End If End Sub 'Thu tuc khi muon di toi ban ghi ke tiep Private Sub cmdsau_click() If Ado_DMTK.Recordset.EOF Then MsgBox "Ban dang o ban ghi cuoi cung !", vbOKOnly, "Thong bao" Else Ado_DMTK.Recordset.MoveNext End If End Sub 'Thu tuc khi muon quay lai ban ghi dau tien Private Sub cmddau_click() On Error GoTo Loi_Dau If Ado_DMTK.Recordset.BOF Then MsgBox "Ban dang o ban ghi dau tien !", vbOKOnly, "Thong bao" Else Ado_DMTK.Recordset.MoveFirst End If Thoat_Dau: Exit Sub Loi_Dau: MsgBox Err.Description Resume Thoat_Dau End Sub 'Thu tuc khi di den ban ghi cuoi cung Private Sub cmdcuoi_click() On Error GoTo Loi_Cuoi If Ado_DMTK.Recordset.EOF Then MsgBox "Ban dang o ban ghi cuoi cung !", vbOKOnly, "Thong bao" Else Ado_DMTK.Recordset.MoveLast End If Thoat_Cuoi: Exit Sub Loi_Cuoi: MsgBox Err.Description Resume Thoat_Cuoi End Sub Giao diện Form dùng để báo cáo danh mục tài khoản Mã nguồn của Form dùng để báo cáo danh mục tài khoản Dim Report As New CrystalRepDMTK Private Sub Form_Load() Screen.MousePointer = vbHourglass CRViewer1.ReportSource = Report CRViewer1.ViewReport Screen.MousePointer = vbDefault End Sub Giao diện Form của chứng từ nhập xuất hàng hóa Mã nguồn của Form cập nhật chứng từ nhập hàng Option Explicit Dim them As Boolean Dim sua As Boolean Dim chuoi1 As String Dim danhdau 'Dung danh dau ban ghi khi can sua doi Dim gtthang Dim gtnam Private Sub form_load() Dim so As Integer Dim thang As Byte Dim nam As Integer gtthang = Me.VScrollTHANG.Value gtnam = Me.VScrollNAM.Value thang = Month(Now()) nam = Year(Now()) Me.txtTHANG.Text = thang Me.txtNAM.Text = nam chuoi1 = "Select * from Tbl_HDNHAP where month(NGAYLAP_CT)='" & Val(thang) & "'" & " and year(NGAYLAP_CT)='" & Val(nam) & "'" Ado_HDNHAP.ConnectionString = "provider=Microsoft.Jet.OLEDB.3.51;Persist security info=false;data source='c:\QL_ktdn\ktdn.mdb'" Ado_HDNHAP.RecordSource = chuoi1 Ado_HDNHAP.Refresh Khoa End Sub Private Sub Khoa() txtSCT.Locked = True txtSCTG.Locked = True txtDIENGIAI.Locked = True txtNGAYCT.Locked = True DCDMNV.Locked = True txtHONV.Locked = True txtTENNV.Locked = True DCDMNCC.Locked = True txtTENNCC.Locked = True DCDMKHO.Locked = True txtTENKHO.Locked = True txtTYGIA.Locked = True DCDMCT.Locked = True txtTENCT.Locked = True DCDMTK.Locked = True txtDGTKN.Locked = True DCDMTKDU.Locked = True txtDGTKC.Locked = True DCDMNT.Locked = True txtTENNT.Locked = True DCDMHTTT.Locked = True txtTENHTTT.Locked = True DataHDNHAP.AllowUpdate = False DataHDNHAP.AllowDelete = False DataHDNHAP.AllowAddNew = False cmdthem.Enabled = True cmdsua.Enabled = True cmdxoa.Enabled = True cmdghi.Enabled = False cmdkhong.Enabled = False cmdthoat.Enabled = True cmdtruoc.Enabled = True cmdsau.Enabled = True cmddau.Enabled = True cmdcuoi.Enabled = True cmdchitiet.Enabled = True End Sub Private Sub Mo_Khoa() DCDMCT.SetFocus txtSCT.Locked = False txtSCTG.Locked = False txtDIENGIAI.Locked = False txtNGAYCT.Locked = False DCDMNV.Locked = False txtHONV.Locked = False txtTENNV.Locked = False DCDMNCC.Locked = False txtTENNCC.Locked = False DCDMKHO.Locked = False txtTENKHO.Locked = False txtTYGIA.Locked = False DCDMCT.Locked = False txtTENCT.Locked = False DCDMTK.Locked = False txtDGTKN.Locked = False DCDMTKDU.Locked = False txtDGTKC.Locked = False DCDMNT.Locked = False txtTENNT.Locked = False DCDMHTTT.Locked = False txtTENHTTT.Locked = False DataHDNHAP.AllowUpdate = True DataHDNHAP.AllowDelete = True DataHDNHAP.AllowAddNew = True cmdthem.Enabled = False cmdsua.Enabled = False cmdxoa.Enabled = False cmdghi.Enabled = True cmdkhong.Enabled = True cmdthoat.Enabled = True cmdtruoc.Enabled = False cmdsau.Enabled = False cmddau.Enabled = False cmdcuoi.Enabled = False cmdchitiet.Enabled = False End Sub '------------------------------------------------------------------------------------ 'Doan cac su kien danh cho cmddau, cmdcuoi, cmdtruoc, cmdsau 'Chuyen den ban ghi cuoi cung Private Sub cmdcuoi_click() On Error GoTo Loi_Cuoi 'Neu khong co loi thi If Ado_HDNHAP.Recordset.EOF() = True Then MsgBox "Đang ở bản ghi cuối cùng !", vbOKOnly, "Thông báo" Else Ado_HDNHAP.Recordset.MoveLast End If Thoat_Cuoi: Exit Sub Loi_Cuoi: MsgBox Err.Description Resume Thoat_Cuoi End Sub Private Sub cmdcuoi_mousemove(button As Integer, shift As Integer, x As Single, y As Single) txtTT.Text = "Nhảy đến bản ghi cuối cùng" End Sub 'Chuyen ve ban ghi dau tien Private Sub cmddau_click() On Error GoTo Loi_Dau 'Neu khong loi thi If Ado_HDNHAP.Recordset.BOF() = True Then MsgBox "Đang ở bản ghi đầu tiên !", vbOKOnly, "Thông báo" Else Ado_HDNHAP.Recordset.MoveFirst End If Thoat_Dau: Exit Sub Loi_Dau: MsgBox Err.Description Resume Thoat_Dau End Sub Private Sub cmddau_mousemove(button As Integer, shift As Integer, x As Single, y As Single) txtTT.Text = "Về bản ghi đầu tiên" End Sub 'Chuyen ve ban ghi ke tiep Private Sub cmdsau_click() If Ado_HDNHAP.Recordset.EOF Then MsgBox "Đang ở bản ghi cuối cùng !", vbOKOnly, "Thông báo" Else Ado_HDNHAP.Recordset.MoveNext End If End Sub Private Sub cmdsau_mousemove(button As Integer, shift As Integer, x As Single, y As Single) txtTT.Text = "Đến bản ghi tiếp theo" End Sub 'Chuyen ve ban ghi truoc do Private Sub cmdtruoc_click() If Ado_HDNHAP.Recordset.BOF Then MsgBox "Đang ở bản ghi đầu tiên !", vbOKOnly, "Thông báo" Else Ado_HDNHAP.Recordset.MovePrevious End If End Sub Private Sub cmdtruoc_mousemove(button As Integer, shift As Integer, x As Single, y As Single) txtTT.Text = "Về bản ghi trước đó" End Sub '----------------------------------------------------------------------------------------- ' Doan danh cho cac su kien cmdthem, cmdsua, cmdxoa, cmdghi, cmdkhong, ‘cmdthoat Private Sub cmdthem_click() On Error GoTo Loi_Them Ado_HDNHAP.Recordset.AddNew Mo_Khoa them = True sua = False Thoat_Them: Exit Sub Loi_Them: MsgBox Err.Description Resume Thoat_Them End Sub Private Sub cmdthem_mousemove(button As Integer, shift As Integer, x As Single, y As Single) txtTT.Text = "Thêm bản ghi mới" End Sub Private Sub cmdsua_click() On Error GoTo Loi_Sua danhdau = Ado_HDNHAP.Recordset.Bookmark Mo_Khoa them = False sua = True Thoat_Sua: Exit Sub Loi_Sua: MsgBox Err.Description Resume Thoat_Sua End Sub Private Sub cmdsua_mousemove(button As Integer, shift As Integer, x As Single, y As Single) txtTT.Text = "Cập nhật lại bản ghi" End Sub Private Sub cmdxoa_click() On Error GoTo Loi_Xoa Dim traloi traloi = MsgBox("Xóa bản ghi " + Ado_HDNHAP.Recordset.Fields("SO_CT") + "?", 48 + 4, "Thông báo") If traloi = 6 Then Ado_HDNHAP.Recordset.Delete Ado_HDNHAP.Recordset.Clone Ado_HDNHAP.Recordset.Requery Ado_HDNHAP.Recordset.MoveNext If Ado_HDNHAP.Recordset.EOF Then Ado_HDNHAP.Recordset.MoveLast End If End If Ado_HDNHAP.Refresh Thoat_Xoa: Exit Sub Loi_Xoa: MsgBox "Không thể xóa bản ghi này !", vbOKOnly, "Thông báo" Resume Thoat_Xoa End Sub Private Sub cmdxoa_mousemove(button As Integer, shift As Integer, x As Single, y As Single) txtTT.Text = "Xóa bản ghi" End Sub Private Sub cmdghi_click() On Error GoTo Loi_Ghi Ado_HDNHAP.Recordset.UpdateBatch adAffectAll Khoa them = False sua = False Thoat_Ghi: DCDMCT.SetFocus Exit Sub Loi_Ghi: MsgBox "Dữ liệu không hợp lệ", vbOKOnly, "Thông báo" Resume Thoat_Ghi End Sub Private Sub cmdghi_mousemove(button As Integer, shift As Integer, x As Single, y As Single) txtTT.Text = "Lưu bản ghi" End Sub Private Sub cmdkhong_click() Ado_HDNHAP.Refresh Ado_HDNHAP.Recordset.CancelUpdate Khoa cmdthem.SetFocus them = False sua = False End Sub Private Sub cmdkhong_mousemove(button As Integer, shift As Integer, x As Single, y As Single) If them = True Then txtTT.Text = "Bỏ qua không thêm bản ghi" Else txtTT.Text = "Không cập nhật lại bản ghi" End If End Sub Private Sub cmdthoat_click() Unload Me End Sub 'Khi thay doi gia tri txtTHANG xu ly Private Sub txtTHANG_change() Dim thang Dim nam 'Lay thang va nam cap nhat chung tu thang = txtTHANG.Text nam = txtNAM.Text chuoi1 = "Select * from Tbl_HDNHAP where month(NGAYLAP_CT)='" & Val(thang) & "'" & " and year(NGAYLAP_CT)='" & Val(nam) & "'" Ado_HDNHAP.ConnectionString = "provider=Microsoft.Jet.OLEDB.3.51;Persist security info=false;data source='c:\QL_ktdn\ktdn.mdb'" Ado_HDNHAP.RecordSource = chuoi1 Ado_HDNHAP.Refresh 'Dem so ban ghi va cho biet ban ghi hien tai Dim bght Dim sobg sobg = 0 bght = 0 sobg = Ado_HDNHAP.Recordset.RecordCount If (Ado_HDNHAP.Recordset.EOF = False) And (Ado_HDNHAP.Recordset.BOF = False) Then bght = Ado_HDNHAP.Recordset.Bookmark End If txtBGHH.Text = bght txtSBG.Text = sobg End Sub Private Sub VScrollTHANG_change() Dim thang As Byte Dim so thang = Val(txtTHANG) so = VScrollTHANG.Value If so > gtthang Then txtTHANG = str(thang + 1) gtthang = so Else txtTHANG = str(thang - 1) gtthang = so End If End Sub Private Sub txtNAM_change() Dim thang Dim nam 'Lay thang va nam cap nhat chung tu thang = txtTHANG.Text nam = txtNAM.Text chuoi1 = "Select * from Tbl_HDNHAP where month(NGAYLAP_CT)='" & Val(thang) & "'" & " and year(NGAYLAP_CT)='" & Val(nam) & "'" Ado_HDNHAP.ConnectionString = "provider=Microsoft.Jet.OLEDB.3.51;Persist security info=false;data source='c:\QL_ktdn\ktdn.mdb'" Ado_HDNHAP.RecordSource = chuoi1 Ado_HDNHAP.Refresh 'Dem so ban ghi va cho biet ban ghi hien tai Dim bght Dim sobg sobg = 0 bght = 0 sobg = Ado_HDNHAP.Recordset.RecordCount If (Ado_HDNHAP.Recordset.EOF = False) And (Ado_HDNHAP.Recordset.BOF = False) Then bght = Ado_HDNHAP.Recordset.Bookmark End If txtBGHH.Text = bght txtSBG.Text = sobg End Sub Private Sub VScrollNAM_change() Dim nam, so nam = Val(txtNAM) so = VScrollNAM.Value If so > gtnam Then txtNAM = str(nam + 1) gtnam = so Else txtNAM = str(nam - 1) gtnam = so End If End Sub 'Cac su kien khi chon ma chung tu Private Sub DCDMCT_gotfocus() Me.DCDMCT.BackColor = &HC0E0FF End Sub Private Sub DCDMCT_change() Dim db As DAO.Database Dim rs As DAO.Recordset Dim chuoi As String If DCDMCT.Text "" Then Set db = OpenDatabase("c:\QL_ktdn\ktdn.mdb") chuoi = "select * from Tbl_DMCT where MA_CT='" & DCDMCT.Text & "'" Set rs = db.OpenRecordset(chuoi) If rs.RecordCount > 0 Then txtTENCT.Text = rs.Fields("TEN_CT") End If rs.Close db.Close End If End Sub Private Sub DCDMCT_keypress(keyascii As Integer) Dim str As String Dim rs As New ADODB.Recordset Select Case keyascii Case 13: str = "select MA_CT from Tbl_DMCT where MA_CT= '" & DCDMCT & "'" rs.Open str, cn If rs.EOF = False Then DCDMCT = rs!MA_CT txtNGAYCT.SetFocus Else Frm_CHONDMCTofHDNHAP.Show 1 End If End Select End Sub Private Sub DCDMCT_lostfocus() Me.DCDMCT.BackColor = &HFFFFFF End Sub 'Khi ngay chung tu nhan focus Private Sub txtNGAYCT_gotfocus() txtNGAYCT.BackColor = &HC0E0FF End Sub Private Sub txtNGAYCT_keypress(keyascii As Integer) Select Case keyascii Case 13 txtSCTG.SetFocus End Select End Sub Private Sub txtNGAYCT_lostfocus() txtNGAYCT.BackColor = &HFFFFFF End Sub 'Khi so chung tu goc nhan focus Private Sub txtSCTG_gotfocus() txtSCTG.BackColor = &HC0E0FF End Sub Private Sub txtSCTG_keypress(keyascii As Integer) Select Case keyascii Case 13 txtSCT.SetFocus End Select End Sub Private Sub txtSCTG_lostfocus() txtSCTG.BackColor = &HFFFFFF End Sub Private Sub txtSCT_gotfocus() Dim db As DAO.Database Dim rs As DAO.Recordset Dim rd As DAO.QueryDef Dim max Dim thang, nam Dim so, so1 Dim chuoi1 As String Dim chuoi2 As String txtSCT.BackColor = &HC0E0FF thang = txtTHANG.Text nam = txtNAM.Text chuoi1 = Trim(nam) & Right("0" & Trim(thang), 2) chuoi2 = "Select * from Tbl_HDNHAP where month(NGAYLAP_CT)='" & Val(thang) & "'" & "and year(NGAYLAP_CT)='" & Val(nam) & "'" Set db = OpenDatabase("c:\QL_ktdn\ktdn.mdb") Set rs = db.OpenRecordset(chuoi2) max = 0 If rs.RecordCount > 0 Then rs.MoveFirst Do Until rs.EOF 'Tang gia tri so chung tu len 1 phu thuoc vao thang va nam xu ly If (Trim(Month(rs!NGAYLAP_CT)) = txtTHANG) And (Trim(Year(rs!NGAYLAP_CT)) = txtNAM) Then so = Mid(Trim(rs!SO_CT), 7) 'Lay SO_CT tu vi tri thu 7 If (Len(so) 0) Then so1 = Val(so) If (max < so1) Then max = so1 End If End If End If rs.MoveNext Loop End If 'Tru truong hop SO_CT0 thi record hien hanh la record cu If Me.txtSCT.Text = "" Then Me.txtSCT.Text = Trim(chuoi1) & Right("0" & Trim(CStr(max + 1)), 2) End If End Sub 'Su kien khi thay doi so chung tu Private Sub txtSCT_change() Dim n Dim n1 n = 0 n1 = 0 n = Ado_HDNHAP.Recordset.RecordCount If (Ado_HDNHAP.Recordset.EOF = False) And (Ado_HDNHAP.Recordset.BOF = False) Then n1 = Ado_HDNHAP.Recordset.Bookmark End If txtBGHH.Text = n1 txtSBG.Text = n End Sub 'Su kien khi So chung tu nhan enter Private Sub txtSCT_keypress(keyascii As Integer) Select Case keyascii Case 13 txtDIENGIAI.SetFocus End Select End Sub Private Sub txtSCT_lostfocus() txtSCT.BackColor = &HFFFFFF End Sub Private Sub txtDIENGIAI_gotfocus() txtDIENGIAI.BackColor = &HC0E0FF End Sub Private Sub txtDIENGIAI_keypress(keyascii As Integer) Select Case keyascii Case 13 DCDMNCC.SetFocus End Select End Sub Private Sub txtDIENGIAI_lostfocus() txtDIENGIAI.BackColor = &HFFFFFF End Sub Private Sub DCDMNCC_gotfocus() DCDMNCC.BackColor = &HC0E0FF End Sub Private Sub DCDMNCC_change() Dim db As DAO.Database Dim rs As DAO.Recordset Dim chuoi As String If DCDMNCC.Text "" Then Set db = OpenDatabase("c:\QL_ktdn\ktdn.mdb") chuoi = "select * from Tbl_DMNCC where MA_NCC='" & DCDMNCC.Text & "'" Set rs = db.OpenRecordset(chuoi) If rs.RecordCount > 0 Then txtTENNCC.Text = rs.Fields("TEN_NCC") End If rs.Close db.Close End If End Sub Private Sub DCDMNCC_keypress(keyascii As Integer) Dim str As String Dim rs As New ADODB.Recordset Select Case keyascii Case 13: str = "select MA_NCC from Tbl_DMNCC where MA_NCC= '" & DCDMNCC & "'" rs.Open str, cn If rs.EOF = False Then DCDMNCC = rs!MA_NCC DCDMKHO.SetFocus Else Frm_CHONDMNCCofHDNHAP.Show 1 End If End Select End Sub Private Sub DCDMNCC_lostfocus() Me.DCDMNCC.BackColor = &HFFFFFF End Sub Private Sub DCDMKHO_gotfocus() Me.DCDMKHO.BackColor = &HC0E0FF End Sub Private Sub DCDMKHO_change() Dim db As DAO.Database Dim rs As DAO.Recordset Dim chuoi As String If DCDMKHO.Text "" Then Set db = OpenDatabase("c:\QL_ktdn\ktdn.mdb") chuoi = "select * from Tbl_DMKHO where MA_KHO='" & DCDMKHO.Text & "'" Set rs = db.OpenRecordset(chuoi) If rs.RecordCount > 0 Then txtTENKHO.Text = rs.Fields("TEN_KHO") End If rs.Close db.Close End If End Sub Private Sub DCDMKHO_keypress(keyascii As Integer) Dim str As String Dim rs As New ADODB.Recordset Select Case keyascii Case 13: str = "select MA_KHO from Tbl_DMKHO where MA_KHO= '" & DCDMKHO & "'" rs.Open str, cn If rs.EOF = False Then DCDMKHO = rs!MA_KHO DCDMTK.SetFocus Else Frm_CHONDMKHOofHDNHAP.Show 1 End If End Select End Sub Private Sub DCDMKHO_lostfocus() Me.DCDMKHO.BackColor = &HFFFFFF End Sub Private Sub DCDMTK_gotfocus() Me.DCDMTK.BackColor = &HC0E0FF End Sub Private Sub DCDMTK_change() Dim db As DAO.Database Dim rs As DAO.Recordset Dim chuoi As String If DCDMTK.Text "" Then Set db = OpenDatabase("c:\QL_ktdn\ktdn.mdb") chuoi = "select * from Tbl_DMTK where MA_TK='" & DCDMTK.Text & "'" Set rs = db.OpenRecordset(chuoi) If rs.RecordCount > 0 Then txtDGTKN.Text = rs.Fields("DIENGIAI") End If rs.Close db.Close End If End Sub Private Sub DCDMTK_keypress(keyascii As Integer) Dim str As String Dim rs As New ADODB.Recordset Select Case keyascii Case 13: str = "select MA_TK from Tbl_DMTK where MA_TK= '" & DCDMTK & "'" rs.Open str, cn If rs.EOF = False Then DCDMTK = rs!MA_TK DCDMTKDU.SetFocus Else Frm_CHONDMTKofHDNHAP.Show 1 End If End Select End Sub Private Sub DCDMTK_lostfocus() Me.DCDMTK.BackColor = &HFFFFFF End Sub Private Sub DCDMTKDU_gotfocus() Me.DCDMTKDU.BackColor = &HC0E0FF End Sub Private Sub DCDMTKDU_change() Dim db As DAO.Database Dim rs As DAO.Recordset Dim chuoi As String If DCDMTKDU.Text "" Then Set db = OpenDatabase("c:\QL_ktdn\ktdn.mdb") chuoi = "select * from Tbl_DMTK where MA_TK='" & DCDMTKDU.Text & "'" Set rs = db.OpenRecordset(chuoi) If rs.RecordCount > 0 Then txtDGTKC.Text = rs.Fields("DIENGIAI") End If rs.Close db.Close End If End Sub Private Sub DCDMTKDU_keypress(keyascii As Integer) Dim str As String Dim rs As New ADODB.Recordset Select Case keyascii Case 13: str = "select MA_TK from Tbl_DMTK where MA_TK= '" & DCDMTKDU & "'" rs.Open str, cn If rs.EOF = False Then DCDMTKDU = rs!MA_TK DCDMNT.SetFocus Else Frm_CHONDMTKDUofHDNHAP.Show 1 End If End Select End Sub Private Sub DCDMTKDU_lostfocus() Me.DCDMTKDU.BackColor = &HFFFFFF End Sub Private Sub DCDMNT_gotfocus() Me.DCDMNT.BackColor = &HC0E0FF End Sub Private Sub DCDMNT_change() Dim db As DAO.Database Dim rs As DAO.Recordset Dim chuoi As String If DCDMNT.Text "" Then Set db = OpenDatabase("c:\QL_ktdn\ktdn.mdb") chuoi = "select * from Tbl_DMNT where MA_NT='" & DCDMNT.Text & "'" Set rs = db.OpenRecordset(chuoi) If rs.RecordCount > 0 Then txtTENNT.Text = rs.Fields("DIENGIAI") End If rs.Close db.Close End If End Sub Private Sub DCDMNT_keypress(keyascii As Integer) Dim str As String Dim rs As New ADODB.Recordset Select Case keyascii Case 13: str = "select MA_NT from Tbl_DMNT where MA_NT= '" & DCDMNT & "'" rs.Open str, cn If rs.EOF = False Then DCDMNT = rs!MA_NT DCDMNV.SetFocus Else Frm_CHONDMNTofHDNHAP.Show 1 End If End Select End Sub Private Sub DCDMNT_lostfocus() Me.DCDMNT.BackColor = &HFFFFFF Dim db As DAO.Database Dim rs As DAO.Recordset Dim chuoi As String If DCDMNT.Text "" Then Set db = OpenDatabase("c:\QL_ktdn\ktdn.mdb") chuoi = "select * from Tbl_DMNT where MA_NT='" & DCDMNT.Text & "'" Set rs = db.OpenRecordset(chuoi) If rs.RecordCount > 0 Then Me.txtTYGIA = rs.Fields("TYGIA") End If rs.Close db.Close End If End Sub Private Sub DCDMNV_gotfocus() Me.DCDMNV.BackColor = &HC0E0FF End Sub Private Sub DCDMNV_change() Dim db As DAO.Database Dim rs As DAO.Recordset Dim chuoi As String If DCDMNV.Text "" Then Set db = OpenDatabase("c:\QL_ktdn\ktdn.mdb") chuoi = "select * from Tbl_DMNV where MA_NV='" & DCDMNV.Text & "'" Set rs = db.OpenRecordset(chuoi) If rs.RecordCount > 0 Then txtHONV.Text = rs.Fields("HO_NV") txtTENNV.Text = rs.Fields("TEN_NV") End If rs.Close db.Close End If End Sub Private Sub DCDMNV_keypress(keyascii As Integer) Dim str As String Dim rs As New ADODB.Recordset Select Case keyascii Case 13: str = "select MA_NV from Tbl_DMNV where MA_NV= '" & DCDMNV & "'" rs.Open str, cn If rs.EOF = False Then DCDMNV = rs!MA_NV txtTYGIA.SetFocus Else Frm_CHONDMNVofHDNHAP.Show 1 End If End Select End Sub Private Sub DCDMNV_lostfocus() Me.DCDMNV.BackColor = &HFFFFFF End Sub Private Sub txtTYGIA_gotfocus() txtTYGIA.BackColor = &HC0E0FF End Sub Private Sub txtTYGIA_keypress(keyascii As Integer) Select Case keyascii Case 13 chkTHUE.SetFocus End Select End Sub Private Sub txtTYGIA_lostfocus() txtTYGIA.BackColor = &HFFFFFF End Sub Private Sub chkTHUE_gotfocus() chkTHUE.BackColor = &HC0E0FF End Sub Private Sub chkTHUE_keypress(keyascii As Integer) Select Case keyascii Case 13 DCDMHTTT.SetFocus End Select End Sub Private Sub chkTHUE_lostfocus() chkTHUE.BackColor = &H8000000F End Sub Private Sub DCDMHTTT_gotfocus() Me.DCDMHTTT.BackColor = &HC0E0FF End Sub Private Sub DCDMHTTT_change() Dim db As DAO.Database Dim rs As DAO.Recordset Dim chuoi As String If DCDMHTTT.Text "" Then Set db = OpenDatabase("c:\QL_ktdn\ktdn.mdb") chuoi = "select * from Tbl_DMHTTT where MA_HTTT='" & DCDMHTTT.Text & "'" Set rs = db.OpenRecordset(chuoi) If rs.RecordCount > 0 Then txtTENHTTT.Text = rs.Fields("TEN_HTTT") End If rs.Close db.Close End If End Sub Private Sub DCDMHTTT_keypress(keyascii As Integer) Dim str As String Dim rs As New ADODB.Recordset Select Case keyascii Case 13: str = "select MA_HTTT from Tbl_DMHTTT where MA_HTTT= '" & DCDMHTTT & "'" rs.Open str, cn If rs.EOF = False Then DCDMHTTT = rs!MA_HTTT 'Goi Form Frm_HDNHAPCT cmdchitiet.SetFocus Else Frm_CHONDMHTTTofHDNHAP.Show 1 If (cmdchitiet.Enabled = True) Then Me.cmdchitiet.SetFocus Else Me.cmdghi.SetFocus End If End If End Select End Sub Private Sub DCDMHTTT_lostfocus() Me.DCDMHTTT.BackColor = &HFFFFFF End Sub 'Goi Form cap nhat chung tu nhap chi tiet Private Sub cmdchitiet_click() Frm_HDNHAPCT.Show 1 End Sub PHẦN VI ĐÓNG GÓI - ĐÁNH GIÁ VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI Để chương trình mang một phần tính chuyên nghiệp, cần đóng gói chương trình thành bộ Setup ( Package & Deloyment Wizard ) và có thể cung cấp cho người sử dụng bộ Setup này như có thể sao chép, cài đặt và có thể sử dụng trên bất kỳ máy tính nào. Một chương trình hoàn hảo để đảm bảo cho công việc kế toán thực thụ thì đòi hỏi tính chuyên nghiệp rất cao, nên trên cơ sở nghiên cứu và phát triển, đề tài chỉ đáp ứng được phần nào cho người sử dụng hiểu khái quát về kế toán, cũng như cách nghiên cứu về cơ sở dữ liệu cho kế toán doanh nghiệp. Ngoài ra, nắm bắt cách sử dụng ngôn ngữ lập trình để tạo và phát triển các chương trình ứng dụng. Đồng thời góp phần làm hoàn hảo một chương trình kế toán có thể đáp ứng rộng rãi cho nhiều doanh nghiệp sử dụng. Đề tài cần được bổ sung những thiếu sót, hạn chế như chưa tính toán được tồn quỹ tiền mặt, tồn kho hàng hóa và giá vốn hàng bán….Và phát triển theo hướng mở rộng như tìm kiếm các loại hàng tồn kho, khách hàng có công nợ, tình hình thu chi tồn quỹ tiền mặt, tiền lương để trả cho công nhân viên chức của doanh nghiệp trong tháng, quý hay trong từng thời kỳ sản xuất kinh doanh. Cuối cùng tôi xin chân thành cám ơn đến thầy Đỗ Văn Uy đã tạo điều kiện, giúp đỡ tôi trong quá trình nghiên cứu và phát triển đề tài. Mặc dù không được trực tiếp, hạn chế về khoảng cách và thời gian nhưng thầy đã đóng góp những ý kiến quý báo cho tôi hoàn thành đề tài. Xin chân thành cảm ơn ! NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN TÀI LIỆU THAM KHẢO Lý Thuyế Kế Toán Thái Ninh Kế Toán Doanh Nghiệp I – II Khoa Kinh Tế Trường Đại Học Thủy Sản Kế Toán Doanh Nghiệp Với Visual Basic KS. Đinh Xuân Lâm Học Visual Basic Qua Thực Hiện Chương Trình Viện kinh tế Tp. HCM Trung tâm ứng dụng kinh tế thành phố Microsoft Visual Basic & Lập Trình Cơ Sở Dữ Liệu 6.0 Nguyễn Thị Ngọc Mai Nguyễn Thị Kim Trang Hoàng Đức Hải GSTS. Nguyễn Hữu Anh MỤC LỤC LỜI MỞ ĐẦU PHẦN I TIN HỌC HÓA QUẢN LÝ THÔNG TIN TRONG CÁC DOANH NGHIỆP Kế toán Vai trò của kế toán Vai trò tin học trong quản lý Nhiệm vụ của đề tài PHẦN II PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG CHO CHƯƠNG TRÌNH QUẢN LÝ KẾ TOÁN DOANH NGHIỆP Các bước thực hiện cơ bản của kế toán doanh nghiệp Mô tả yêu cầu quản lý của chương trình Quá trình phân tích chương trình Dữ liệu đầu vào và đầu ra của chương trình Cấu trúc chương trình Sơ đồ chức năng Sơ đồ luồng dữ liệu Sơ đồ quan hệ giữa các thực thể PHẦN III CƠ SỞ DỮ LIỆU CỦA CHƯƠNG TRÌNH Cơ sở dữ liệu Sử dụng Microsoft Access để tạo cơ sở dữ liệu PHẦN IV SỬ DỤNG NGÔN NGỮ LẬP TRÌNH VISUAL BASIC ĐỂ THIẾT KẾ CHƯƠNG TRÌNH Ngôn ngữ lập trình visual basic Các đối tượng truy cập dữ liệu Sử dụng các đối tượng truy cập dữ liệu trong chương trình Các giao diện người sử dụng Sử dụng các câu truy vấn (SQL) Thiết lập báo cáo và xuất thông tin Tạo bộ giúp đỡ Đóng gói chương trình PHẦN V CHƯƠNG TRÌNH QUẢN LÝ KẾ TOÁN DOANH NGHIỆP GIAO DIỆN VÀ MÃ NGUỒN CỦA MỘT SỐ FORM CẬP NHẬT – BÁO CÁO Hệ thống Folder để lưu trữ chương trình Giao diện chính của chương trình Một số thủ tục dùng để mở kết nối dữ liệu giữa Access với Visual Basic Giao diện và mã nguồn của một số Form cập nhật và xuất thông tin PHẦN VI ĐÓNG GÓI – ĐÁNH GIÁ VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN TÀI LIỆU THAM KHẢO

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

  • doc32233.doc