Tình hình hoạt động tại Công ty ứng dụng tiến bộ khoa học và công nghệ Mitec

Ngày nay, trên thế giới cũng như ở nước ta, Tin học là một ngành mũi nhọn đã và đang thâm nhập vào mọi lĩnh vực của đời sống kinh tế xã hội và đặc biệt là trong công tác quản lý. Sự góp mặt của Tin học trong công tác quản lý đã làm nhẹ đi sự tham gia của con người, đảm bảo thông tin quản lý chính xác để đem lại hiệu quả kinh tế cũng như tiết kiệm được thời gian, công sức so với việc làm quản lý thủ công trên giấy tờ như trước đây. Điều dễ nhận thấy là nó giảm được không gian lưu trữ, tránh được sự thất lạc, mất mát dữ liệu mà nó còn có khả năng tự động hóa hệ thống, cụ thể hoá các lượng thông tin theo nhu cầu của con người. Khả năng của tin học và máy tính là vô hạn, sự kết hợp giữa máy tính và các phần mềm hệ thống giúp chúng ta xây dựng các chương trình ứng dụng theo những gì mà ta mong muốn. Thông qua tìm hiểu việc sử dụng ngân sách tại một số cơ quan nhà nước thì hiện tại đa số các cơ quan này còn sử dụng hình thức quản lý chi tiêu ngân sách thủ công trên giấy tờ hoặc sử dụng chương trình bảng tính Excel để thực hiện việc tính toán và quản lý công việc chi tiêu ngân sách tại đơn vị mình. Việc quản lý như vậy sẽ mất rất nhiều công sức, thời gian và nhiều khi còn bị nhầm lẫn. Nhận thấy vấn đề đó có thể giải quyết được bằng cách viết một chương trình nhằm tự động tự hoá khâu tính toán để làm giảm bớt những vất vả của người làm tài chính tại các cơ quan sử dụng ngân sách đã nói ở trên. Em quyết định lựa chọn đề tài: “Khảo sát, Phân tích thiết kế và Xây dựng chương trình quản lý chi ngân sách”. Kí hiệu viết tắt của chương trình: QLCNS v1.0

doc104 trang | Chia sẻ: Dung Lona | Lượt xem: 1274 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Tình hình hoạt động tại Công ty ứng dụng tiến bộ khoa học và công nghệ Mitec, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ình mà đơn vị mình hoạt động. 3.4.2. Danh mục loại: Thực hiện thông qua Menu [Các danh mục] à [Danh mục Loại] có kiểu như sau: Hình 15: màn hình danh mục loại ngân sách. Đối với danh mục Loại bạn có thể định nghĩa thêm mới, chỉnh sửa, xoá hay xem. - Thêm mới danh mục loại: ấn nút [Thêm] à nhập các thông tin vào à ấn nút [Lưu lại] để ghi nhớ mã Loại và tên loại vừa được thêm mới. - Sửa danh mục loại: chọn danh mục cần sửa rồi ấn nút sửa à chỉnh sửa thông tin về danh mục loại đó rồi ấn nút [Lưu lại] để ghi đè. - Xoá danh mục loại: chọn danh mục cần xoá rồi ấn nút [Xoá] sẽ hiện thông báo trước khi xoá: Hình 16: thông báo khẳng định việc xoá một danh mục loại 3.4.3. Danh mục Khoản: Thực hiện tương tự như danh mục loại ở trên. 3.4.4. Danh mục Mục: Thực hiện thông qua Menu [Các danh mục] à [Mục lục ngân sách] à [Cấp1Mục] hoặc bạn có thể ấn tổ hợp phím Ctrl-M để gọi màn hình Mục lục Ngân sách cấp1. Hình 17: màn hình danh mục - Mục ngân sách Các chức năng thao tác được thực hiện tương tự như màn hình quản lý của danh mục Loại. Trong màn hình này bạn có thể quản lý danh mục Mục lục Ngân sách (cấp 1). Tại đây bạn có thể tìm kiếm Mục lục Ngân sách cấp 1 theo mã mục. 3.4.5 Danh mục Tiểu mục: Thực hiện thông qua Menu [Các danh mục] à [Mục lục ngân sách] à [Cấp2-Tiểu Mục] hoặc bạn có thể ấn tổ hợp phím Ctrl-T để gọi màn hình Tiểu Mục (cấp 2) của mục lục Ngân sách. Hình 18: màn hình danh mục - Tiểu mục ngân sách Các thao tác trên màn hình này tương tụ như việc thao tác với Mục lục Ngân sách cấp1. Thao tác tìm kiếm có thể theo 2 tiêu thức : + Tìm theo Mục Ngân sách cấp 1 : Bạn không cần nhập bất cứ gì vào mục Tìm kiếm theo tiểu mục mà bạn chỉ cần chọn Mục ngân sách trong hộp thả xuống và nhấn vào nút [Tìm Kiếm], chương trình sẽ tìm tất cả các tiểu mục thuộc mục này cho bạn. + Tìm theo Tiểu mục ngân sách cấp 2: Nếu bạn cần tìm tiểu mục, bạn gõ mã tiểu mục vào ô [Tìm theo tiểu mục] và chọn nút [Tìm Kiếm]. 3.5. Báo cáo: Chức năng này được thực hiện thông qua Menu [Báo cáo] gồm hai phần chính, đó là: Menu [bảng kê chứng từ thanh toán] và Menu [bảng kê hoạt động chi]. 3.5.1. Một số chú ý trước khi xem báo cáo: - Chương trình sẽ lấy năm lên báo cáo là năm mà bạn đã chọn trong phần Menu [Hệ thống] nên khi đưa thông tin vào cho việc lên báo cáo, bạn không cần phải chọn năm để lên báo cáo. - Cách đánh số trang được qui định như sau: Trang hiện thời / Tổng số trang của báo cáo. Ví dụ: 1/1 tức là báo cáo này có 1 trang; 1/2 tức là báo cáo này có 2 trang và trang đang xem là trang thứ nhất trong số 2 trang của báo cáo. - Nếu số liệu xuất ra trên các báo cáo bị âm (nhỏ hơn 0) hay số dư tạm ứng nhỏ hơn số đề nghị thanh toán trong [Giấy đề nghị thanh toán] thì các số đó sẽ có màu đỏ trên báo cáo. Chúng tôi đề nghị bạn hãy kiểm tra lại các số liệu, chứng từ đã nhập vào có liên quan đến loại, khoản, mục tương ứng đó bằng cách khoanh vùng tìm kiếm chứng từ chi theo 1 tiêu thức nào đó (ngày tháng hoặc số chứng từ...) để tìm ra chỗ sai rồi tiến hành sửa nó. - Việc xem các báo cáo trong phần [Bảng kê chứng từ thanh toán] sẽ rất vất vả vì như vậy phải chọn rất nhiều loại và khoản cho đầu vào của báo cáo nên để xác định loại và khoản chính xác cho phần này chúng tôi khuyên các bạn nên dựa vào các loại và khoản đã được liệt kê trong báo cáo hoạt động chi tổng hợp của tháng đó để xác định chính xác đầu vào loại v à khoản của báo cáo cần xem. Ví dụ: để in báo cáo Bảng kê chứng từ thanh toán của tháng 3 thì bạn tiến hành in [Báo cáo hoạt động chi tổng hợp] của tháng 3 trước rồi dựa vào các loại và khoản tương ứng được liệt kê trong [Báo cáo hoạt động chi tổng hợp] của tháng 3 đó để xác định thông tin đầu vào cho loại và khoản của các báo cáo trong phần [Bảng kê chứng từ thanh toán]. Như vậy sẽ tiết kiệm được thời gian của các bạn trong quá trình thực hiện xem báo cáo ở phần [Bảng kê chứng từ thanh toán]. Chúc các bạn thành công! 3.5.2. Bảng kê chứng từ thanh toán có dạng như hình sau: Hình 19: màn hình lên báo cáo bảng kê chứng từ Trong phần này chương trình còn hỗ trợ lựa chọn ngày để in báo cáo. Nếu bạn tích vào mục [Ngày in báo cáo] và lựa chọn ngày tháng đưa vào thì ở phần cuối của báo cáo sẽ tự động điền ngày tháng mà bạn đã đưa vào. Để chọn năm, tháng bạn nháy thẳng vào số năm, tháng sẽ hiện ra như hình sau: Bấm chuột vào đây để chọn tháng Bấm chuột vào để chọn năm Ngày sẽ in trong báo cáo Sau khi đưa vào các thông tin để lên báo cáo, bạn hãy chọn các nút tương ứng để xem báo cáo. 3.5.3. Menu [Bảng kê hoạt động chi] có 2 kiểu báo cáo về hoạt động chi trong 1 tháng và trong nhiều tháng (theo kì). 3.5.3.1. Báo cáo hoạt động chi trong 1 tháng: Được thực hiện thông qua Menu [Báo cáo] à [Bảng kê hoạt động chi] à [Trong một tháng]. Một hộp thoại xuất hiện yêu cầu bạn hãy lựa chọn tháng để xuất báo cáo: Hình 20: màn hình lên báo hoạt động chi ngân sách Sau đó lựa chọn các nút tương ứng trên hộp thoại để xem báo cáo hoạt động chi (chi tiết hoặc tổng hợp) của tháng đã lựa chọn. 3.5.3.2. Báo cáo hoạt động chi theo kì (năm): Thực hiện thông qua Menu [Báo cáo] à [Bảng kê hoạt động chi] à [Trong nhiều tháng]. Phần này chỉ cho chúng ta thực hiện xem báo cáo hoạt động chi tổng hợp trong nhiều tháng hoặc trong cả năm (từ tháng 1 à tháng 12). Tại hộp thoại này, bạn phải nhập Tháng bắt đầu lên báo cáo và tháng kết thúc báo cáo. Hình 21: màn hình lên báo cáo chi ngân sách theo kì ( năm) Chú ý: tháng bắt đầu lên báo cáo phải nhỏ hơn tháng kết thúc báo cáo. Nếu nhập sai chương trình sẽ cảnh báo. - Nếu muốn có hoạt động chi chi tiết của từng tháng thì xin hãy quay lại mục 3.5.3.1 ở trên. 3.5.4 Các thao tác khi báo cáo đã hiện ra: Khi báo cáo hiện ra sẽ có thanh công cụ ở phía trên báo cáo như hình sau: - In báo cáo: lựa chọn hình ảnh máy in   sẽ hiện ra hộp thoại in ấn yêu cầu bạn thực hiện in: Thực hiện in In báo cáo theo giới hạn từ trang nào đến trang nào In tất cả các trang trong báo cáo hiện ra Hủy không thực hiện in nữa Số bản cần in Ví dụ: Bạn muốn in từ trang 2 đến trang 4, bạn tích chọn ô Pages rồi sau đó trong ô From đánh 2 và trong ô To đánh 4. Sau đó ấn OK để thực hiện in báo cáo. - Làm tươi số liệu trên báo cáo: công việc này sẽ tái hiện lại những số liệu trên báo cáo, bạn hãy nháy vào biểu tượng . - Duyệt lướt xem báo cáo nếu báo cáo có số trang lớn hơn 1, bạn hãy nháy vào các biểu tượng : Trang kề trước Trang đầu Trang cuối Trang kế tiếp Vị trí trang hiện tại Tổng số trang - Chỉnh xem to nhỏ: bạn chỉnh sửa số % thích hợp trong ô có hình Ví dụ: như hình bên là đang xem ở chế độ 100% - hình ảnh thực của báo cáo. SAU ĐÂY LÀ MỘT SỐ MẪU BÁO CÁO CỦA CHƯƠNG TRÌNH Mẫu số 1: Báo cáo giấy đề nghị thanh toán (tạm ứng). Báo cáo này in ra những khoản mà đơn vị đã ứng vốn (kho bạc nhà nước phải khẩn trương thanh toán cho những khoản mà đơn vị đã chi, tất nhiên là những khoản này đều thuộc trong kế hoạch vốn). CỘNG HOÀ Xà HỘI CHỦ NGHĨA VIỆT NAM Độc lập - tự do – hạnh phúc GIẤY ĐỀ NGHỊ THANH TOÁN TẠM ỨNG Đơn vị: Tên gọi đơn vị Số: xxxxxx Tài khoản: xxxxxx Mã số: xxxxx Kính gửi: Kho bạc nhà nước huyện xxxxx Căn cứ số dư tạm ứng chi ngân sách nhà nước đến ngày 31 tháng 04 năm 2003. Đề nghị Kho bạc nhà nước thanh toán số tiền đã tạm ứng theo chi tiết sau: TT MỤC LỤC SỐ DƯ TẠM ỨNG SỐ ĐỀ NGHỊ THANH TOÁN SỐ KBNN DUYỆT TT C L K M TM 022B 14 01 100 27.908.412 27.908.412 102 29.053.290 29.053.290 134 32.600.000 2.283.000 TỔNG SỐ 89.561.702 59.244.702 Số tiền bằng chữ: (Năm mươi chín triệu, hai trăm bốn bốn ngàn, bảy trăm lẻ hai đồng ). Hà nội, ngày 02 Tháng 05 Năm 2003 Kế toán Thủ trưởng đơn vị PHẦN DÀNH CHO KHO BẠC NHÀ NƯỚC GHI Đồng ý thanh toán cho đơn vị số tiền: Bằng chữ: Năm mươi chín triệu, hai trăm bốn bốn ngàn, bảy trăm lẻ hai đồng Bằng số: 59.244.702 Nợ TK: Có TK: Hà nội, ngày . Tháng .. năm 2003. Kế toán Kế toán trưởng Giám đốc KBNN Mẫu số 2: Bảng kê chứng từ thanh toán (tạm ứng). Bảng này liệt kê chi tiết các thành phần đã được ứng vốn như số hiệu chứng từ, ngày tháng, mục, tiểu mục, số tiền. ĐƠN VỊ SỬ DỤNG NGÂN SÁCH TÊN ĐƠN VỊ BẢNG KÊ CHỨNG TỪ THANH TOÁN (TẠM ỨNG) Tháng 03 Năm 2003 KÍNH GỬI: Kho Bạc nhà nước huyện xxxxx Loại: 14 ; Khoản: 01 SỐ CHỨNG TỪ MỤC, T.MỤC NỘI DUNG SỐ TIỀN SỐ HIỆU NGÀY TỔNG CỘNG 8.545.790 15 29/03/2003 102 Phụ cấp lương 8.063.790 01 phụ cấp chức vụ 286.230 02 phụ cấp khu vực 7.777.560 17 30/03/2003 119 Nghiệp vụ chuyên môn 482.000 06 Chi phục vụ hoạt động chuyên đề 482.000 Số tiền TT bằng chữ: (Tám triệu năm trăm bốn mươi lăm ngàn bảy trăm chín mươi đồng) Hà nội, ngày 02 tháng 04 năm 2003 Xác nhận của KBNN Lập Biểu Kế toán Thủ Trưởng Đơn Vị Mẫu số 3: Bảng kê chứng từ thanh toán (chi thẳng). Báo cáo này liệt kê chi tiết các khoản chi trực tiếp bằng số vốn đã được lĩnh về từ kho bạc nhà nước. ĐƠN VỊ SỬ DỤNG NGÂN SÁCH TÊN ĐƠN VỊ BẢNG KÊ CHỨNG TỪ THANH TOÁN Tháng 03 Năm 2003 KÍNH GỬI: Kho Bạc nhà nước huyện xxxxx Loại: 13 ; Khoản: 01 SỐ CHỨNG TỪ MỤC, T.MỤC NỘI DUNG SỐ TIỀN SỐ HIỆU NGÀY TỔNG CỘNG 686.230 13 25/03/2003 100 Tiền lương 286.230 01 Tiền lương ngạch bậc 286.230 14 26/03/2003 110 Vật tư văn phòng 400.000 06 Văn phòng phẩm văn phòng 400.000 Số tiền TT bằng chữ: (Sáu trăm tám mươi sáu ngàn hai trăm ba mươi đồng). Hà nội, ngày 02 tháng 04 năm 2003. Xác nhận của KBNN Lập Biểu Kế toán Thủ Trưởng Đơn Vị Mẫu số 4: Báo cáo chi chi tiết các hoạt động trong một tháng. Báo cáo này cho biết tình hình hoạt động cụ thể về loại, khoản, mục trong tháng cần lên báo cáo như thế nào. BÁO CÁO CHI CHI TIẾT HOẠT ĐỘNG THÁNG 02 NĂM 2003 L K M TỒN ĐẦU KỲ NHẬP TRONG KỲ XUẤT TRONG KỲ TỒN CUỐI KỲ KỲ NÀY LUỸ KẾ KỲ NÀY LUỸ KẾ 13 02 100 150 100 300 50 100 200 101 100 60 250 80 170 80 CỘNG 250 160 550 130 270 280 14 01 118 50 10 70 100 110 -40 119 85 15 195 80 175 20 CỘNG 135 25 265 180 285 -20 Hà nội, ngày 02 Tháng 03 năm 2003. XÁC NHẬN CỦA KHO BẠC KẾ TOÁN CHỦ TÀI KHOẢN Mẫu số 5: Báo cáo chi tổng hợp trong một tháng. Báo cáo này đưa ra một cái nhìn tổng kết về hoạt động của các loại, khoản liên quan trong tháng báo cáo. BÁO CÁO CHI TỔNG HỢP HOẠT ĐỘNG THÁNG 02 NĂM 2003 L K M TỒN ĐẦU KỲ NHẬP TRONG KỲ XUẤT TRONG KỲ TỒN CUỐI KỲ KỲ NÀY LUỸ KẾ KỲ NÀY LUỸ KẾ 13 02 250 160 550 130 270 280 14 01 135 25 265 180 285 -20 Hà nội, ngày 02 tháng 03 năm 2003. XÁC NHẬN CỦA KHO BẠC KẾ TOÁN CHỦ TÀI KHOẢN Mẫu số 6: Báo cáo chi tổng hợp trong nhiều tháng. Với báo cáo này người dùng có thể xem tình hình hoạt động tổng kết của các loại, khoản theo quí hay kì hoặc năm báo cáo. BÁO CÁO CHI TỔNG HỢP TỪ THÁNG 01 ĐẾN THÁNG 03 L K M TỒN ĐẦU KỲ NHẬP TRONG KỲ XUẤT TRONG KỲ TỒN CUỐI KỲ KỲ NÀY LUỸ KẾ KỲ NÀY LUỸ KẾ 13 02 250 170 550 130 300 290 14 01 135 50 290 180 285 5 14 02 100 150 450 100 300 150 Hà nội, ngày 02 tháng 04 năm 2003. XÁC NHẬN CỦA KHO BẠC KẾ TOÁN CHỦ TÀI KHOẢN 3.6. Các công cụ của chương trình 3.6.1. Công cụ tìm kiếm và sửa đổi chứng từ Để truy nhập tới chức năng này tại màn hình chính bạn có thể ấn phím F5 để gọi hoặc vào Menu [Công cụ]à [Tìm kiếm]. Tìm kiếm: Bạn có thể tìm kiếm chứng từ theo 3 tiêu thức : - Tìm kiếm các chứng từ theo Ngày chứng từ trong một khoảng thời gian nào đó. - Tìm kiếm các chứng từ theo Ngày hạch toán trong một khoảng thời gian. - Tìm kiếm theo số chứng từ. Lựa chọn tiêu thức tìm kiếm Giá trị cần tìm kiếm Sau khi lựa chọn tiêu thức và điều kiện tìm kiếm. Bạn nhấn vào đây để tìm kiếm Hình 22: màn hình tìm kiếm chứng từ. Chú ý : Giá trị ngày ở đây bạn chọn tương tự như trong chức năng báo cáo và bạn cần lưu ý là cách hiển thị ngày theo thứ tự Tháng/Ngày/Năm Sửa chứng từ : Bạn có thể sửa chứng từ, xoá chứng từ sau khi đã tìm kiếm thấy chứng từ đó. Trước hết bạn chọn chứng từ cần sửa trong danh sách kết quả chứng từ tìm kiếm được bằng cách Double Click chuột vào dòng chứng từ đó hoặc click vào dòng chứng từ đó rồi ấn nút chọn. Màn hình để sửa chứng từ có dạng như sau : Hình 23: màn hình sửa chứng từ Sau khi bạn sửa xong chứng từ này, nhấn nút Lưu để lưu lại thông tin của chứng từ đó. Nếu bạn muốn xoá chứng từ, bạn chỉ cần nhấn vào nút Xoá CT để xoá chứng từ. 3.6.2. Sao lưu dữ liệu Để sao lưu dữ liệu phòng khi có sự cố xảy ra, dữ liệu của bạn không bị mất bạn vào Menu [Hệ thống] chọn mục [Sao lưu dữ liệu] hoặc bạn có thể thao tác nhanh bằng cách ấn tổ hợp phím Ctrl-B . Khi đó xuất hiện một thông báo như sau : Hình 24: thông báo có thực hiện sao lưu hay không. Nếu bạn chọn No thì sẽ quay trở về chương trình chính. Nếu bạn chọn Yes thì một hộp thoại xuất hiện yêu cầu chọn một tệp tin dữ liệu có dạng +.mdb. Trong trường hợp này bạn chọn tệp tin có tên là database.mdb rồi ấn nút Open, một hộp thoại khác có tên [Chọn tên file cần sao lưu dữ liệu] hiện ra. Hộp thoại này đề nghị bạn nhập vào một tên mới trong ô File Name và để chọn đường dẫn chứa tệp tin này hãy chọn ô [Look in] để chỉ đường dẫn chứa file sao lưu này. Rồi bạn chọn nút Save. Khi đó nếu thành công sẽ có một hộp thoại thông báo công việc sao lưu đã thành công. Để phục hồi lại dữ liệu đã sao lưu khi tệp database.mdb trong thư mục cài đặt bạn copy file bạn sao lưu vào thư mục cài đặt chương trình và đổi tên thành database.mdb Chú ý: Khi chọn tên tệp để lưu trữ bạn không được chọn tên tệp cần lưu trữ là database.mdb ở trong cùng đường dẫn với tệp hệ thống của chương trình (database.mdb). Nếu vi phạm điều này thì chương trình sẽ báo lỗi. 3.6.3. Dọn dẹp số liệu Trong quá trình sử dụng chương trình, các file tạm có thể sinh ra, các dữ liệu, index có thể chưa dược xoá hết làm cho chương trình chạy chậm. Bạn có thể sử dụng chức năng Dọn dẹp số liệu để bảo trì cơ sở dữ liệu của chương trình. Bạn chỉ cần click chuột vào nút Yes trong thông báo dưới đây để thực hiện dọn dẹp số liệu Sau khi dọn dẹp dữ liệu xong bạn cần phải khởi động lại chương trình để chương trình có được cơ sở dữ liệu mới nhất. 3.7. Trợ giúp: Trong quá trình sử dụng nếu gặp khó khăn về phần nào các bạn có thể sử dụng file trợ giúp của chương trình thông qua Menu [Trợ giúp] à [Trợ giúp chương trình] hoặc ấn F1 để được hướng dẫn. Màn hình trợ giúp có dạng như sau: KẾT LUẬN Víi ®Ò tµi: “ X©y dùng ch­¬ng tr×nh qu¶n lý chi ng©n s¸ch” ®­îc triÓn khai trong thêi gian thùc tËp võa qua t¹i trung t©m ph¸t triÓn phÇn mÒm vµ gi¶i ph¸p SDS, em ®· gi¶i quyÕt ®­îc c¸c chøc n¨ng, nhiÖm vô chÝnh ®Æt ra nh­: Chøc n¨ng t¹o míi vµ lùa chän n¨m lµm viÖc CËp nhËt / ®Þnh nghÜa c¸c lo¹i, kho¶n, môc, tiÓu môc ng©n s¸ch CËp nhËt sè d­ (lÇn ®Çu tiªn nÕu cã) Th«ng b¸o h¹n møc kinh phÝ (tõ c¬ quan tµi chÝnh) CËp nhËt / t×m kiÕm c¸c chøng tõ ph¸t sinh hµng ngµy NhËp ng©n s¸ch thùc tÕ lÜnh vÒ ®¬n vÞ (tõ kho b¹c) Lªn b¸o c¸o (chi tiÕt hoÆc tæng hîp ho¹t ®éng chi) theo th¸ng/ quÝ / n¨m TiÖn Ých: Sao l­u c¬ së d÷ liÖu, tèi ­u ho¸ c¬ së d÷ liÖu. H­íng dÉn sö dông ch­¬ng tr×nh. VÒ c¬ b¶n, c¸c chøc n¨ng chÝnh cña ch­¬ng tr×nh ®· ®­îc thùc hiÖn. Tuy nhiªn cßn mét sè ®iÓm cÇn ph¶i c¶i tiÕn h¬n n÷a trong t­¬ng lai nh­: tÝnh mü thuËt, xö lý lªn b¸o c¸o theo l«. Do thêi gian, kh¶ n¨ng vµ tr×nh ®é cßn cã nhiÒu h¹n chÕ nªn kh«ng thÓ tr¸nh khái nh÷ng thiÕu sãt, em rÊt mong nhËn ®­îc sù chØ b¶o, gãp ý cña c¸c ThÇy, C« gi¸o; c¸c Anh, ChÞ ®ång nghiÖp vµ B¹n bÌ ®Ó ®Ò tµi cña em ®­îc hoµn thiÖn h¬n n÷a. Mét lÇn n÷a, em xin ch©n thµnh c¶m ¬n sù d¹y b¶o tËn t×nh cña c¸c ThÇy C« gi¸o giµnh cho chóng em, c¶m ¬n sù gióp ®ì nhiÖt t×nh cña c¸c c¸n bé t¹i trung t©m phÇn mÒm - gi¶i ph¸p SDS vµ c¶m ¬n tíi toµn thÓ gia ®×nh, b¹n bÌ. PHỤ LỤC (Một số đoạn mã nguồn tiêu biểu của chương trình) Hàm đổi số ra chữ: Function NumToText(dblValue As Double) As String Static ones(0 To 9) As String Static teens(0 To 9) As String Static tens(0 To 9) As String Static thousands(0 To 4) As String Dim i As Integer, nPosition As Integer Dim nDigit As Integer, bAllZeros As Integer Dim strResult As String, strTemp As String Dim tmpBuff As String ones(0) = "không" ones(1) = "một" ones(2) = "hai" ones(3) = "ba" ones(4) = "bốn" ones(5) = "năm" ones(6) = "sáu" ones(7) = "bảy" ones(8) = "tám" ones(9) = "chín" teens(0) = "mười" teens(1) = "mười một" teens(2) = "mười hai" teens(3) = "mười ba" teens(4) = "mười bốn" teens(5) = "mười năm" teens(6) = "mười sáu" teens(7) = "mười bảy" teens(8) = "mười tám" teens(9) = "mười chín" tens(0) = "" tens(1) = "mười" tens(2) = "hai mươi" tens(3) = "ba mươi" tens(4) = "bốn mươi" tens(5) = "năm mươi" tens(6) = "sáu mươi" tens(7) = "bảy mươi" tens(8) = "tám mươi" tens(9) = "chín mươi" thousands(0) = "" thousands(1) = "nghìn" thousands(2) = "triệu" thousands(3) = "tỷ" thousands(4) = "nghìn" ' nghin ty (trillion) 'Trap errors On Error GoTo NumToTextError 'Get fractional part strResult = "Đồng " & IIf(dblValue - Int(dblValue) = 0, "chẵn.", Format((dblValue - Int(dblValue)) * 100, "00") & "/100") 'Convert rest to string and process each digit strTemp = CStr(Int(dblValue)) 'Iterate through string For i = Len(strTemp) To 1 Step -1 'Get value of this digit nDigit = Val(Mid$(strTemp, i, 1)) 'Get column position nPosition = (Len(strTemp) - i) + 1 'Action depends on 1's, 10's or 100's column Select Case (nPosition Mod 3) Case 1 '1's position bAllZeros = False If i = 1 Then tmpBuff = ones(nDigit) & " " ElseIf Mid$(strTemp, i - 1, 1) = "1" Then tmpBuff = teens(nDigit) & " " i = i - 1 'Skip tens position ElseIf nDigit > 0 Then tmpBuff = ones(nDigit) & " " Else 'If next 10s & 100s columns are also 'zero, then don't show 'thousands' bAllZeros = True If i > 1 Then If Mid$(strTemp, i - 1, 1) "0" Then bAllZeros = False End If End If If i > 2 Then If Mid$(strTemp, i - 2, 1) "0" Then bAllZeros = False End If End If tmpBuff = "" End If If bAllZeros = False And nPosition > 1 Then tmpBuff = tmpBuff & thousands(nPosition / 3) & " " End If strResult = tmpBuff & strResult Case 2 'Tens position If nDigit > 0 Then strResult = tens(nDigit) & " " & strResult End If Case 0 'Hundreds position If nDigit > 0 Then strResult = ones(nDigit) & " trăm " & strResult End If End Select Next i 'Convert first letter to upper case If Len(strResult) > 0 Then strResult = UCase$(Left$(strResult, 1)) & Mid$(strResult, 2) End If EndNumToText: 'Return result NumToText = strResult Exit Function NumToTextError: strResult = "#Error#" Resume EndNumToText End Function Thủ tục gọi help file: Public Declare Function HTMLHelp Lib "hhctrl.ocx" Alias "HtmlHelpA" (ByVal hwnd As Long, ByVal lpHelpFile As String, ByVal wCommand As Long, ByVal dwData As String) As Long Public Sub Call_Help() Dim hlp As Long hlp = HTMLHelp(0, App.Path + "\help.chm", 1, 0) End Sub Thủ tục dọn dẹp dữ liệu: Public Sub Compact() On Error Resume Next Dim Res Res = MsgBox("Bạn phải kết thúc tất cả các công việc trước khi thực hiện công việc này !" & vbCrLf & _ "Sau khi thực hiện dọn dẹp số liệu xong, bạn phải khởi động lại chương trình", vbYesNo + vbInformation) If Res = vbYes Then Conn.Close Set Conn = Nothing Call FileCopy(App.Path & "\database.mdb", App.Path & "\database_saoluu.mdb") Kill App.Path & "\database.mdb" DBEngine.CompactDatabase App.Path & "\database_saoluu.mdb", App.Path & "\database.mdb", dbLangGeneral, dbEncrypt Kill App.Path & "\database_saoluu.mdb" Kill App.Path & "\*.tmp" MsgBox "Đã thực hiện dọn dẹp số liệu xong, bây giờ ứng dụng sẽ bị đóng lại", vbInformation End End If End Sub Thủ tục nhận dữ liệu trả lên Form đặc trưng thông tin: Public Sub GetTypical() Dim rs As New ADODB.Recordset rs.Open "ThongSoHeThong", Conn, adOpenDynamic, adLockOptimistic With rs G_TenDV = !ten_don_vi G_TenKB = !ten_kb G_SoTaiKhoan = !taikhoan G_MasoTK = !masotk G_UserName = !UserName G_Password = !Password G_TT = !thutruong G_TenKTDV = !ketoandv G_KTTKB = !ketoantruong G_KTVKB = !ketoanvien G_GiamDocKB = !giamdoc G_ChuTaiKhoan = !chutk End With rs.Close Set rs = Nothing End Sub Thủ tục xử lý cắt số hiệu chứng từ: Function CatSoCT(str As String) Dim vt As String vt = Mid(str, 3, 1) If vt = "0" Then CatSoCT = Right(str, 2) Else CatSoCT = Right(str, 3) End If End Function Mã nguồn của FormLogIn: Option Explicit Private Timthay As Boolean Dim rsUser As New ADODB.Recordset Dim Conn As ADODB.Connection Private Sub cmdCancel_Click() Timthay = False ' Dim TL As Integer ' TL = MsgBox("Bạn không muốn làm việc với chương trình? ", vbYesNo + vbQuestion) ' If TL = 6 Then End ' Else ' Exit Sub ' Me.txtUser.SetFocus ' End If End Sub Private Sub cmdOK_Click() Timthay = False With rsUser .MoveFirst Do While Not .EOF And Not Timthay If Trim(txtPass) = Trim(!Password) And Trim(txtUser) = Trim(!UserName) Then Timthay = True Else Timthay = False End If .MoveNext Loop End With If Timthay Then Unload Me FrmMain.Show Else MsgBox " Nhập sai tên đăng nhập hoặc mật khẩu !", vbInformation, "Cảnh báo đăng nhập QLCTNS" Me.txtPass.Text = "" Me.txtUser.Text = "" Me.txtUser.SetFocus End If End Sub Private Sub Command1_Click() frmHelpLogin.Show End Sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub Private Sub Form_Load() Set Conn = New ADODB.Connection Conn.Open StrConn & App.Path & "\DataBase.mdb" rsUser.Open "thongsohethong", Conn, adOpenDynamic, adLockOptimistic End Sub Private Sub Form_Unload(Cancel As Integer) rsUser.Close Set rsUser = Nothing Conn.Close Set Conn = Nothing End Sub Mã nguồn của Frm_TieuMuc: Dim rs As ADODB.Recordset Dim F As Integer Dim o_TieuMuc, O_Muc, o_tenTM As String Private Sub CboMame_Click() txtTieuMuc.Text = CboMame.Text txtTieuMuc.SetFocus txtTieuMuc.SelStart = 3 End Sub Private Sub CboMame_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub Private Sub cmdAdd_Click() F = 1 Me.CboMame.Enabled = True Me.txtTieuMuc.Enabled = True Me.TxtTenTieumuc.Enabled = True CboMame.Text = "" txtTieuMuc.Text = "" TxtTenTieumuc.Text = "" CboMame.SetFocus cmdDel.Enabled = True cmdSave.Enabled = True End Sub Private Sub cmdAdd_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub Private Sub cmdDel_Click() On Error Resume Next Dim tb As Integer tb = MsgBox("Bạn thực sự muốn xoá thông tin về tiểu mục" & TxtTenTieumuc.Text & " ? ", vbQuestion + vbYesNo) If tb = 6 Then With rs .Delete .MovePrevious If .EOF Then .MoveLast If .BOF Then .MoveFirst End With End If If rs.BOF = True And rs.EOF = True Then Me.TxtTenTieumuc.Text = "" Me.txtTieuMuc.Text = "" End If Me.Refresh Display LoadListView End Sub Private Sub cmdfirst_Click() rs.MoveFirst Display LoadListView End Sub Private Sub DisplayRecord(rs As ADODB.Recordset) On Error Resume Next LvwTM.ListItems.Clear Dim Item As ListItem Dim i As Integer i = 1 rs.MoveFirst Do While Not rs.EOF With rs Set Item = LvwTM.ListItems.Add(i, , !TieuMuc) Item.SubItems(1) = !tentieumuc .MoveNext End With i = i + 1 Loop End Sub Private Sub cmdDel_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub Private Sub CmdFind_Click() Dim MaMe, TieuMuc, StrSQL As String Dim rs1 As New ADODB.Recordset MaMe = Trim(CboMame) TieuMuc = Trim(TxtFind) If MaMe = "" And TieuMuc = "" Then MsgBox "Bạn phải chọn tiêu thức tìm kiếm. Chọn mã mẹ nếu bạn muốn tìm kiếm theo mã mẹ, Gõ vào tiểu mục nếu bạn muốn tìm kiếm theo tiểu mục" Exit Sub CboMame.SetFocus End If If MaMe "" And TieuMuc = "" Then StrSQL = "Select tieumuc, TenTieuMuc from tieumuc where tieumuc.Muc='" & MaMe & "';" ElseIf MaMe = "" And TieuMuc "" Then StrSQL = "Select tieumuc, TenTieuMuc from tieumuc where tieumuc='" & TieuMuc & "';" ElseIf MaMe "" And TieuMuc "" Then StrSQL = "Select tieumuc, TenTieuMuc from tieumuc where tieuMuc='" & TieuMuc & "';" End If rs1.Open StrSQL, Conn, adOpenForwardOnly, adLockReadOnly DisplayRecord rs1 rs1.Close Set rs1 = Nothing End Sub Private Sub CmdFind_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub Private Sub cmdFist_Click() rs.MoveFirst Display LoadListView End Sub Private Sub cmdFist_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub Private Sub cmdLast_Click() rs.MoveLast Display LoadListView End Sub Private Sub CmdLast_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub Private Sub Cmdmody_Click() F = 2 Me.CboMame.Enabled = True Me.txtTieuMuc.Enabled = True Me.TxtTenTieumuc.Enabled = True txtTieuMuc.SetFocus cmdDel.Enabled = True cmdSave.Enabled = True o_TieuMuc = LvwTM.SelectedItem.Text O_Muc = Left(LvwTM.SelectedItem.Text, 3) o_tenTM = LvwTM.SelectedItem.SubItems(1) End Sub Private Sub Cmdmody_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub Private Sub cmdnext_Click() With rs .MoveNext If .EOF Then MsgBox "Bản ghi cuối cùng, không thể di chuyển tiếp được", vbCritical .MoveLast End If End With Display LoadListView End Sub Private Sub CmdNext_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub Private Sub cmdprev_Click() With rs .MovePrevious If .BOF Then MsgBox "Bản ghi đầu tiên, không thể di chuyển tiếp được", vbCritical .MoveFirst End If End With Display LoadListView End Sub Private Sub cmdPrev_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub Private Sub CmdSave_Click() On Error GoTo BL If CboMame.Text = "" Then MsgBox "Chưa cho biết mã mẹ của tiểu mục ", vbCritical CboMame.SetFocus Exit Sub End If If txtTieuMuc.Text = "" Then MsgBox "Chưa nhập mã tiểu mục của Mục lục Ngân sách", vbCritical txtTieuMuc.SetFocus Exit Sub End If If TxtTenTieumuc.Text = "" Then MsgBox "Chưa nhập tên của tiểu mục ", vbCritical TxtTenTieumuc.SetFocus Exit Sub End If On Error GoTo ErrHdl If F = 1 Then With rs .AddNew !TieuMuc = Trim(txtTieuMuc.Text) !muc = Trim(CboMame.Text) !tentieumuc = Trim(TxtTenTieumuc.Text) .Update End With ElseIf F = 2 Then Dim StrSQL As String Dim cmd As New ADODB.Command StrSQL = "UPDATE TieuMuc SET tieuMuc='" & txtTieuMuc & "',TentieuMuc='" & TxtTenTieumuc & "' WHERE tieumuc='" & o_TieuMuc & "' AND tentieumuc='" & o_tenTM & "';" cmd.ActiveConnection = Conn cmd.CommandText = StrSQL cmd.Execute Set cmd = Nothing End If cmdSave.Enabled = False Me.CboMame.Enabled = False Me.txtTieuMuc.Enabled = False Me.TxtTenTieumuc.Enabled = False Display LoadListView BL: ErrHdl: If Err.Number = -2147217887 Then MsgBox "Mục lục đã có, nhập lại !" Me.txtTieuMuc.SetFocus Exit Sub End If End Sub Private Sub cmdSave_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub Private Sub Form_Activate() F = 0 End Sub Private Sub Form_Load() Set rs = New ADODB.Recordset rs.Open "tieumuc", Conn, adOpenDynamic, adLockOptimistic, adCmdTable Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 6 Display LoadCboMame LoadListView cmdSave.Enabled = False Me.CboMame.Enabled = False Me.txtTieuMuc.Enabled = False Me.TxtTenTieumuc.Enabled = False End Sub Private Sub Display() On Error Resume Next With rs CboMame.Text = !muc txtTieuMuc.Text = !TieuMuc TxtTenTieumuc.Text = !tentieumuc End With Me.CboMame.Enabled = False Me.txtTieuMuc.Enabled = False Me.TxtTenTieumuc.Enabled = False End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) rs.Close Set rs = Nothing End Sub Private Sub Command1_Click() Unload Me End Sub Private Sub LoadListView() On Error Resume Next LvwTM.ListItems.Clear Dim rsLvw As New ADODB.Recordset Dim i As Integer Dim Item As Variant rsLvw.Open "tieumuc", Conn, adOpenForwardOnly, adLockReadOnly i = 1 rsLvw.MoveFirst Do While Not rsLvw.EOF Set Item = LvwTM.ListItems.Add(i, , rsLvw!TieuMuc) Item.SubItems(1) = rsLvw!tentieumuc rsLvw.MoveNext i = i + 1 Loop rsLvw.Close Set rsLvw = Nothing End Sub Private Sub Form_Unload(Cancel As Integer) FrmMain.MnuCap2.Enabled = True End Sub Private Sub LvwTM_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If If KeyCode = 38 Or KeyCode = 40 Then CboMame.Text = Left(LvwTM.SelectedItem.Text, 3) txtTieuMuc = LvwTM.SelectedItem.Text TxtTenTieumuc = LvwTM.SelectedItem.SubItems(1) End If Me.Refresh End Sub Private Sub LvwTM_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = 38 Or KeyCode = 40 Then CboMame.Text = Left(LvwTM.SelectedItem.Text, 3) txtTieuMuc = LvwTM.SelectedItem.Text TxtTenTieumuc = LvwTM.SelectedItem.SubItems(1) End If Me.Refresh End Sub Private Sub LvwTM_Click() F = 2 Dim Item As Variant Dim i As Integer For i = 1 To Me.LvwTM.ListItems.count If LvwTM.ListItems(i).Selected = True Then Item = LvwTM.ListItems(i).index With Me Me.CboMame = Left(LvwTM.ListItems(Item), 3) Me.txtTieuMuc = LvwTM.ListItems(Item) Me.TxtTenTieumuc = LvwTM.ListItems(Item).SubItems(1) o_TieuMuc = LvwTM.SelectedItem.Text O_Muc = Left(LvwTM.SelectedItem.Text, 3) o_tenTM = LvwTM.SelectedItem.SubItems(1) txtTieuMuc.Enabled = True TxtTenTieumuc.Enabled = True txtTieuMuc.SetFocus cmdDel.Enabled = True cmdSave.Enabled = True End With End If Next End Sub Private Sub LoadCboMame() Dim rsTemp As New ADODB.Recordset rsTemp.Open "select * from muc order by Muc", Conn, adOpenForwardOnly, adLockReadOnly With rsTemp .MoveFirst Do While Not .EOF Me.CboMame.AddItem !muc .MoveNext Loop .Close End With Set rsTemp = Nothing End Sub Private Sub TxtFind_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub Private Sub TxtFind_KeyPress(KeyAscii As Integer) If Chr(KeyAscii) = vbBack Then Exit Sub If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0 End If End Sub Private Sub TxtTenTieumuc_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub Private Sub txtTieuMuc_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub Private Sub txtTieuMuc_KeyPress(KeyAscii As Integer) If Chr(KeyAscii) = vbBack Then Exit Sub If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0 End If End Sub Mã nguồn của báo cáo tổng hợp chi: Option Explicit Dim VarReport4 As New CrRptBaoCaoChiTongHop Dim cmd As ADODB.Command Dim cmd1 As Command Dim cmd2 As Command Dim cmd3 As Command Dim cmd4 As Command Dim cmd5 As Command Dim cmdbangtonghop As Command Dim cmdADO As ADODB.Command 'Dim conn As New ADODB.Connection 'Dim VarThang11 As String Dim VarThang22 As String Dim VarYear As String Private Sub CRViewer1_CloseButtonClicked(UseDefault As Boolean) End Sub Private Sub Form_Load() Dim StrSQL As String 'SLieu cu: 'VarThang2 = G_ThangBC ' "3" 'VarThang1 = "( Cint(varthang2)-1 )" 'VarYear = G_CurrentYear ' "2003" ' Du lieu dung de kiem tra truy van: VarThang22 = G_ThangBC ' "3" 'VarThang11 = "( Cint(varthang22)-1 )" VarYear = G_CurrentYear ' "2003" Dim VarThang2 As Integer Dim VarThang1 As Integer VarThang2 = CInt(VarThang22) VarThang1 = VarThang2 - 1 ' CInt(VarThang11) ' Tao mot Instance for Command Object: ' SQL Statements defined following: '************************ SQL Bang Tam LKM (Bang nay se duoc lay lam goc) Set cmd = New ADODB.Command Set cmd.ActiveConnection = Conn Dim CreateLKM As String Dim InsertLKM As String CreateLKM = " CREATE TABLE LKM (Ma Text(7)) " InsertLKM = " INSERT INTO LKM ( Ma) " & _ " SELECT loai.loai & khoan.khoan & muc.muc " & _ " From loai, khoan, muc " & _ " ORDER BY loai.loai & khoan.khoan & muc.muc;" 'Dim DropLKM As String 'DropLKM = " DROP TABLE LKM" ' **** START: '**** SQL Ton Dau Ki: --> CO BIEN DINH KEM: chu y : (VarThang-1) ******* ‘********************************************************************* ' TonDauKi thang n = LuyKeNhap thang (n-1 ) - LuyKeXuat thang(n-1) ' Xu ly Luy Ke Xuat toi Thang N-1: Set cmd1 = New ADODB.Command Set cmd1.ActiveConnection = Conn Dim CreateLuyKeXuat2 As String Dim InsertLuyKeXuat2 As String CreateLuyKeXuat2 = " CREATE TABLE LuyKeXuat2 (Ma Text(7) , SoTien Double)" cmd1.CommandText = CreateLuyKeXuat2 cmd1.Execute cmd1.Cancel InsertLuyKeXuat2 = " INSERT INTO LuyKeXuat2 ( Ma, SoTien) " & _ " SELECT [chungtuchichitiet].[loai] & [chungtuchichitiet].[khoan] & [chungtuchichitiet].[muc], sum([chungtuchichitiet].[sotien]) " & _ " FROM Chungtuchi INNER JOIN ChungTuChiChiTiet ON [ChungTuChi].[SoCT]=[ChungTuChiChiTiet].[SoCT] " & _ " WHERE ( cint(Month([chungtuchi].[Ngayct]))<= " & VarThang1 & ") And (Year([chungtuchi].[NgayCT])='" & VarYear & "') " & _ " GROUP BY [chungtuchichitiet].[loai] & [chungtuchichitiet].[khoan] & [chungtuchichitiet].[muc]; " cmd1.CommandText = InsertLuyKeXuat2 cmd1.Execute cmd1.Cancel cmd1.CommandText = " select * From LuyKeXuat2 Order by ma" cmd1.Execute cmd1.Cancel 'Dim DropLuyKeXuat2 As String 'DropLuyKeXuat2 = " DROP TABLE LuyKeXuat2 " ' Xu ly Luy Ke Nhap Toi Thang N-1: Dim CreateLuyKeNhapChuaCoSoDu2 As String Dim InsertLuyKeNhapChuaCoSoDu2 As String CreateLuyKeNhapChuaCoSoDu2 = " CREATE TABLE LuyKeNhapChuaCoSoDu2 ( Ma Text(7), SoTien Double)" cmd1.CommandText = CreateLuyKeNhapChuaCoSoDu2 cmd1.Execute cmd1.Cancel InsertLuyKeNhapChuaCoSoDu2 = " INSERT INTO LuyKeNhapChuaCoSoDu2 ( Ma, SoTien)" & _ " SELECT A.loai & [khoan] & [muc] , sum(A.sotien) " & _ " FROM NhapNS AS A " & _ " Where ( cint ( Month(A.ngaythang)) <= " & VarThang1 & " ) And (Year(A.ngaythang) = '" & VarYear & "') " & _ " GROUP BY A.loai & [khoan] & [muc] " & _ " ORDER BY A.loai & [khoan] & [muc]; " cmd1.CommandText = InsertLuyKeNhapChuaCoSoDu2 cmd1.Execute cmd1.Cancel cmd1.CommandText = " select * from luykenhapchuacosodu2 " cmd1.Execute cmd1.Cancel 'Dim DropLuyKeNhapChuaCoSoDu2 As String 'DropLuyKeNhapChuaCoSoDu2 = " DROP TABLE LuyKeNhapChuaCoSoDu2 " '************ VUA SUA XONG LOI CHO NAY: ' Tao bang SoDu 2: Dim CreateSoDu2 As String CreateSoDu2 = " CREATE TABLE SoDu2 ( Nam Text(4), Loai Text(2), Khoan Text(2), Muc Text(3), TonDau Double)" cmd1.CommandText = CreateSoDu2 cmd1.Execute cmd1.CommandText = " INSERT INTO SoDu2 (Nam,Loai,Khoan,Muc,TonDau) " & _ " SELECT nam,loai,khoan,muc,tondau FROM SODU WHERE Nam= '" & VarYear & "'" cmd1.Execute cmd1.Cancel cmd1.CommandText = " SELECT * FROM SoDu2 Order By Loai,Khoan,muc" cmd1.Execute cmd1.Cancel '**************** KET THUC CHO VUA SUA ! 'Su dung Query QryLKM: 'Create LuyKeNhap . LuyKeNhap co cau truc: ' Ma (text), TonDau (Double), NhapTrongNam( Double) Dim CreateLuyKeNhap2 As String Dim InsertLuyKeNhap2 As String CreateLuyKeNhap2 = " CREATE TABLE LuyKeNhap2 ( Ma Text(7), TonDauNam Double , NhapTrongNam Double)" cmd1.CommandText = CreateLuyKeNhap2 cmd1.Execute cmd1.Cancel InsertLuyKeNhap2 = " INSERT INTO LuyKeNhap2 (Ma, TonDauNam,NhapTrongNam) " & _ " SELECT QRYLKM.MA, IIF( ISNULL(A.TONDAU),0,A.TONDAU), IIF(ISNULL(B.SOTIEN),0,B.SOTIEN) " & _ " FROM SODU2 AS A RIGHT JOIN ( QryLKM LEFT JOIN LUYKENHAPCHUACOSODU2 AS B ON QRYLKM.MA = B.MA) ON QRYLKM.MA=A.LOAI & KHOAN & MUC " & _ " ORDER BY QRYLKM.MA" 'DANG SUA: '" WHERE A.NAM='" & VarYear & "' " & cmd1.CommandText = InsertLuyKeNhap2 cmd1.Execute cmd1.Cancel cmd1.CommandText = " SELECT * FROM LuyKeNhap2 ORDER BY Ma " cmd1.Execute cmd1.Cancel 'Dim DropLuyKeNhap2 As String 'DropLuyKeNhap2 = " DROP TABLE LuyKeNhap2 " ' LuyKeNhapOK2: includes 2 fields : Ma & SoTien Dim CreateLuyKeNhapOK2 As String Dim InsertLuyKeNhapOK2 As String CreateLuyKeNhapOK2 = " CREATE TABLE LuyKeNhapOK2 (Ma Text(7), SoTien Double)" cmd1.CommandText = CreateLuyKeNhapOK2 cmd1.Execute cmd1.Cancel InsertLuyKeNhapOK2 = " INSERT INTO LuyKeNhapOK2 ( Ma, SoTien)" & _ " SELECT Ma, TonDauNam + NhapTrongNam FROM LuyKeNhap2 " cmd1.CommandText = InsertLuyKeNhapOK2 cmd1.Execute cmd1.Cancel cmd1.CommandText = " Select * FROM luykenhapok2" cmd1.Execute cmd1.Cancel 'Dim DropLuyKeNhapOK2 As String 'DropLuyKeNhapOK2 = "DROP TABLE LuyKeNhapOK2 " ' TonDauKi Dim CreateTonDauKi As String Dim InsertTonDauKi As String CreateTonDauKi = " CREATE TABLE TonDauKi ( Ma Text(7), SoTien Double)" cmd1.CommandText = CreateTonDauKi cmd1.Execute cmd1.Cancel InsertTonDauKi = " INSERT INTO TonDauKi (Ma, SoTien) " & _ " SELECT A.Ma , A.SoTien - IIF ( ISNULL ( B.SoTien),0,B.SoTien)" & _ " From LuyKeNhapOK2 as A Left Join LuyKeXuat2 as B ON A.Ma = B.Ma" cmd1.CommandText = InsertTonDauKi cmd1.Execute cmd1.Cancel cmd1.CommandText = " select * FROM TonDauKi" cmd1.Execute cmd1.Cancel ' Dim DropTonDauKi As String 'DropTonDauKi = " DROP TABLE TonDauKi" ' SELECT a.ma, a.expr1001 - IIf(IsNull(b.expr1001),0,b.expr1001) 'FROM baocao2_luykenhap_better AS a LEFT JOIN baocao2_luykexuat AS b ON a.ma=b.expr1000; '************************ SQL Nhap Trong Ki: -->CO BIEN DINH KEM ************************************************************************ Set cmd2 = New Command Set cmd2.ActiveConnection = Conn Dim CreateNhapTrongKy As String Dim InsertNhapTrongKy As String CreateNhapTrongKy = " CREATE TABLE NhapTrongKy ( Ma Text(7), SoTien Double) " cmd2.CommandText = CreateNhapTrongKy cmd2.Execute cmd2.Cancel InsertNhapTrongKy = " INSERT INTO NhapTrongKy ( Ma,SoTien) " & _ " SELECT [loai] & [khoan] & [muc], sum([sotien]) FROM NhapNS " & _ " WHERE ( cint(Month(ngaythang))=" & VarThang2 & " ) And (Year(ngaythang)='" & VarYear & "') " & _ " GROUP BY [loai] & [khoan] & [muc];" cmd2.CommandText = InsertNhapTrongKy cmd2.Execute cmd2.Cancel cmd2.CommandText = " select * FROM NhapTrongKy" cmd2.Execute cmd2.Cancel 'Dim InsertNhapTrongKy As String 'DropNhapTrongKy = " DROP TABLE NhapTrongKy " '************************ SQL Luy Ke Nhap: --> CO BIEN DINH KEM Set cmd4 = New ADODB.Command Set cmd4.ActiveConnection = Conn Dim CreateLuyKeNhapChuaCoSoDu As String Dim InsertLuyKeNhapChuaCoSoDu As String CreateLuyKeNhapChuaCoSoDu = " CREATE TABLE LuyKeNhapChuaCoSoDu ( Ma Text(7), SoTien Double)" cmd4.CommandText = CreateLuyKeNhapChuaCoSoDu cmd4.Execute cmd4.Cancel InsertLuyKeNhapChuaCoSoDu = " INSERT INTO LuyKeNhapChuaCoSoDu ( Ma, SoTien)" & _ " SELECT A.loai & [khoan] & [muc] , sum(A.sotien) " & _ " FROM NhapNS AS A " & _ " Where (cint(Month(A.ngaythang)) <= " & VarThang2 & " ) And (Year(A.ngaythang) = '" & VarYear & "') " & _ " GROUP BY A.loai & [khoan] & [muc] " & _ " ORDER BY A.loai & [khoan] & [muc]; " cmd4.CommandText = InsertLuyKeNhapChuaCoSoDu cmd4.Execute cmd4.Cancel cmd4.CommandText = " select * FROM LuyKeNhapChuaCoSoDu " cmd4.Execute cmd4.Cancel 'Dim DropLuyKeNhapChuaCoSoDu As String 'DropLuyKeNhapChuaCoSoDu = " DROP TABLE LuyKeNhapChuaCoSoDu " 'Dang sua cho Luy Ke Nhap ====> Tao bang so du 4: cmd4.CommandText = " CREATE TABLE SoDu4 (Nam Text(4), Loai Text(2), Khoan Text(2), Muc Text(3), TonDau Double)" cmd4.Execute cmd4.Cancel cmd4.CommandText = " Insert into SoDu4 (Nam, loai, khoan, muc, tondau) " & _ " SELECT Nam,loai,khoan,muc,tondau FROM SoDu WHERE Nam = '" & VarYear & "' " cmd4.Execute cmd4.Cancel cmd4.CommandText = " Select * FROM SoDu4 ORDER BY Loai, khoan,muc" cmd4.Execute cmd4.Cancel '' Ket thuc sua luy ke nhap 'Su dung Query QryLKM: 'Create LuyKeNhap . LuyKeNhap co cau truc: ' Ma (text), TonDau (Double), NhapTrongNam( Double) Dim CreateLuyKeNhap As String Dim InsertLuyKeNhap As String CreateLuyKeNhap = " CREATE TABLE LuyKeNhap ( Ma Text(7), TonDauNam Double , NhapTrongNam Double)" cmd4.CommandText = CreateLuyKeNhap cmd4.Execute cmd4.Cancel InsertLuyKeNhap = " INSERT INTO LuyKeNhap (Ma, TonDauNam,NhapTrongNam) " & _ " SELECT QRYLKM.MA, IIF( ISNULL(A.TONDAU),0,A.TONDAU), IIF(ISNULL(B.SOTIEN),0,B.SOTIEN) " & _ " FROM SODU4 AS A RIGHT JOIN ( QryLKM LEFT JOIN LUYKENHAPCHUACOSODU AS B ON QRYLKM.MA = B.MA) ON QRYLKM.MA=A.LOAI & KHOAN & MUC " & _ " ORDER BY QRYLKM.MA" 'DANG SUA: ==> " WHERE A.NAM='" & VarYear & "' " & cmd4.CommandText = InsertLuyKeNhap cmd4.Execute cmd4.Cancel cmd4.CommandText = "select * FROM LuyKeNhap" cmd4.Execute cmd4.Cancel 'Dim DropLuyKeNhap As String 'DropLuyKeNhap = " DROP TABLE LuyKeNhap " ' LuyKeNhapOK: includes 2 fields : Ma & SoTien Dim CreateLuyKeNhapOK As String Dim InsertLuyKeNhapOK As String CreateLuyKeNhapOK = " CREATE TABLE LuyKeNhapOK (Ma Text(7), SoTien Double)" cmd4.CommandText = CreateLuyKeNhapOK cmd4.Execute cmd4.Cancel InsertLuyKeNhapOK = " INSERT INTO LuyKeNhapOK ( Ma, SoTien)" & _ " SELECT Ma, TonDauNam + NhapTrongNam FROM LuyKeNhap " cmd4.CommandText = InsertLuyKeNhapOK cmd4.Execute cmd4.Cancel cmd4.CommandText = " select * FROM LuyKeNhapOK" cmd4.Execute cmd4.Cancel 'Dim DropLuyKeNhapOK As String 'DropLuyKeNhapOK = "DROP TABLE LuyKeNhapOK " '************************ SQL Xuat Trong Ky --> CO BIEN DINH KEM Set cmd3 = New Command Set cmd3.ActiveConnection = Conn Dim CreateXuatTrongKy As String Dim InsertXuatTrongKy As String CreateXuatTrongKy = " CREATE TABLE XuatTrongKy ( Ma Text(7), SoTien Double)" cmd3.CommandText = CreateXuatTrongKy cmd3.Execute cmd3.Cancel InsertXuatTrongKy = " INSERT INTO XuatTrongKy ( Ma, SoTien) " & _ " SELECT chungtuchichitiet.loai & chungtuchichitiet.khoan & chungtuchichitiet.muc , sum( chungtuchichitiet.sotien) " & _ " FROM Chungtuchi INNER JOIN ChungTuChiChiTiet ON ChungTuChi.SoCT = ChungTuChiChiTiet.SoCT " & _ " WHERE (cint(Month(chungtuchi.Ngayct))= " & VarThang2 & " ) AND (Year(chungtuchi.NgayCT)='" & VarYear & "') " & _ " GROUP BY chungtuchichitiet.loai & chungtuchichitiet.khoan & chungtuchichitiet.muc; " cmd3.CommandText = InsertXuatTrongKy cmd3.Execute cmd3.Cancel cmd3.CommandText = " SELECT * FROM XuatTrongKy " cmd3.Execute cmd3.Cancel 'Dim DropXuatTrongKy As String 'DropXuatTrongKy = " DROP TABLE XuatTrongKy " '************************ SQL Luy Ke Xuat : --> CO BIEN DINH KEM Set cmd5 = New ADODB.Command Set cmd5.ActiveConnection = Conn Dim CreateLuyKeXuat As String Dim InsertLuyKeXuat As String CreateLuyKeXuat = " CREATE TABLE LuyKeXuat (Ma Text(7) , SoTien Double)" cmd5.CommandText = CreateLuyKeXuat cmd5.Execute cmd5.Cancel InsertLuyKeXuat = " INSERT INTO LuyKeXuat ( Ma, SoTien) " & _ " SELECT [chungtuchichitiet].[loai] & [chungtuchichitiet].[khoan] & [chungtuchichitiet].[muc], sum([chungtuchichitiet].[sotien]) " & _ " FROM Chungtuchi INNER JOIN ChungTuChiChiTiet ON [ChungTuChi].[SoCT]=[ChungTuChiChiTiet].[SoCT] " & _ " WHERE (cint(Month([chungtuchi].[Ngayct]))<=" & VarThang2 & ") And (Year([chungtuchi].[NgayCT])='" & VarYear & "') " & _ " GROUP BY [chungtuchichitiet].[loai] & [chungtuchichitiet].[khoan] & [chungtuchichitiet].[muc]; " cmd5.CommandText = InsertLuyKeXuat cmd5.Execute cmd5.Cancel cmd5.CommandText = " select * FROM LuyKeXuat " cmd5.Execute '************************** Bang Tong Hop : ****************************** Set cmdbangtonghop = New ADODB.Command Set cmdbangtonghop.ActiveConnection = Conn Dim CreateBangTongHop As String CreateBangTongHop = " CREATE TABLE BangTongHop ( Ma Text(7),TonDauKi Double, NhapTrongKy Double,LuyKeNhap Double,XuatTrongKi Double,LuyKeXuat Double )" cmdbangtonghop.CommandText = CreateBangTongHop cmdbangtonghop.Execute cmdbangtonghop.Cancel Dim InsertBangTongHop As String 'InsertBangTongHop = " Insert INTO BangTongHop(Ma,TonDauKi,NhapTrongKy,LuyKeNhap,XuatTrongKi,LuyKeXuat ) " & _ ' " SELECT qryLKM.Ma as Ma, IIF ( ISNULL(TonDauKi.SoTien),0,TonDauKi.SoTien) as TonDauKi,IIF( ISNull (NhapTrongKy.SoTien), 0, NhapTrongKy.SoTien) as NhapTrongKy, LuyKeNhap.TonDauNam + LuyKeNhap.NhapTrongNam as LuyKeNhap,IIF ( ISNULL(XuatTrongKy.SoTien),0,XuatTrongKy.SoTien) as XuatTrongKi,IIF ( ISNULL (LuyKeXuat.SoTien),0,LuyKeXuat.SoTien) as LuyKeXuat " & _ ' " From LuyKeXuat Right Join (XuatTrongKy Right Join (LuyKeNhap Right Join (NhapTrongKy Right Join ( QryLKM Left Join TonDauKi ON QryLKM.Ma =TonDauKi.Ma ) " & _ '"ON NhapTrongKy.Ma = QryLKM.Ma) ON LuyKeNhap.Ma = QryLKM.Ma) ON XuatTrongKy.Ma = QryLKM.Ma) ON LuyKeXuat.Ma = QryLKM.Ma " & _ ' " ORDER BY QryLKM.Ma" InsertBangTongHop = " Insert INTO BangTongHop(Ma,TonDauKi,NhapTrongKy,LuyKeNhap,XuatTrongKi,LuyKeXuat ) " & _ " SELECT qryLKM.Ma as Ma, IIF ( ISNULL(TonDauKi.SoTien),0,TonDauKi.SoTien) as TonDauKi,IIF( ISNull (NhapTrongKy.SoTien), 0, NhapTrongKy.SoTien) as NhapTrongKy, IIF ( ISNULL (LuyKeNhapOK.SoTien) , 0 ,LuyKeNhapOK.SoTien ) as LuyKeNhap,IIF ( ISNULL(XuatTrongKy.SoTien),0,XuatTrongKy.SoTien) as XuatTrongKi,IIF ( ISNULL (LuyKeXuat.SoTien),0,LuyKeXuat.SoTien) as LuyKeXuat " & _ " From LuyKeXuat Right Join (XuatTrongKy Right Join (LuyKeNhapok Right Join (NhapTrongKy Right Join ( QryLKM Left Join TonDauKi ON QryLKM.Ma =TonDauKi.Ma ) " & _ " ON NhapTrongKy.Ma = QryLKM.Ma) ON LuyKeNhapok.Ma = QryLKM.Ma) ON XuatTrongKy.Ma = QryLKM.Ma) ON LuyKeXuat.Ma = QryLKM.Ma " & _ " ORDER BY QryLKM.Ma" cmdbangtonghop.CommandText = InsertBangTongHop cmdbangtonghop.Execute cmdbangtonghop.Cancel cmdbangtonghop.CommandText = " select * from bangtonghop order by Ma" cmdbangtonghop.Execute '****** Ket Noi Tao Nguon cho Report Bao Cao Chi Tong Hop Trong Thang: ******** ‘*********************************************************************** Set cmdADO = New ADODB.Command Set cmdADO.ActiveConnection = Conn StrSQL = " SELECT * " & _ " FROM (SELECT left(ma,4) as Ma1,sum(tondauki) as TonDauKi1 ,sum(nhaptrongky) as NhapTrongKy1, sum(luykenhap) as LuyKeNhap1, sum(xuattrongki) as XuatTrongKi1, sum(luykexuat) as LuyKeXuat1 " & _ " From BangTongHop " & _ " Group By left(ma,4) ) " & _ " WHERE not ( LuyKeXuat1 =0 AND TonDauKi1 =0 AND NhapTrongKy1=0 AND LuyKeNhap1=0 AND XuatTrongKi1=0 ); " '" WHERE not ( LuyKeXuat1 =0 AND TonDauKi1 =0 AND NhapTrongKy1=0 AND LuyKeNhap1=0 AND XuatTrongKi1=0 ) " cmdADO.CommandText = StrSQL cmdADO.CommandType = adCmdText On Error Resume Next VarReport4.Database.AddADOCommand Conn, cmdADO 'On Error Resume Next With VarReport4 .UnbForLoai.SetUnboundFieldSource "Left({ado.Ma1},2)" .UnbForKhoan.SetUnboundFieldSource "Right({ado.Ma1},2)" '.UnbForMuc.SetUnboundFieldSource "Right({ado.Ma1},3)" .UnbForTonDauKy.SetUnboundFieldSource "{ado.TonDauKi1}" .UnbForNhapTrongKyNay.SetUnboundFieldSource "{ado.NhapTrongKy1}" .UnbForLuyKeNhap.SetUnboundFieldSource "{ado.LuyKeNhap1}" .UnbForXuatTrongKy.SetUnboundFieldSource "{ado.XuatTrongKi1}" .UnbForLuyKeXuat.SetUnboundFieldSource "{ado.LuyKeXuat1}" .txtTieuDeThang.SetText VarThang2 .txtTieuDeNam.SetText G_CurrentYear If G_NgayInBC "" Then .txtNgay.SetText Day(CDate(G_NgayInBC)) .txtThang.SetText Month(CDate(G_NgayInBC)) .txtNam.SetText Year(CDate(G_NgayInBC)) Else .txtNgay.SetText " " .txtThang.SetText " " .txtNam.SetText " " End If .txtKeToan.SetText G_TenKTDV .txtChuTaiKhoan.SetText G_ChuTaiKhoan .PaperSize = crPaperA4 End With Screen.MousePointer = vbHourglass With CRViewer1 .ReportSource = VarReport4 .ViewReport .Zoom 100 .EnableGroupTree = False .EnableRefreshButton = True End With Screen.MousePointer = vbDefault End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Dim DropLuyKeXuat2 As String DropLuyKeXuat2 = " DROP TABLE LuyKeXuat2 " cmd.CommandText = DropLuyKeXuat2 cmd.Execute cmd.Cancel cmd.CommandText = "DROP TABLE SoDu2" cmd.Execute cmd.CommandText = " DROP TABLE SoDu4" cmd.Execute Dim DropLuyKeNhapChuaCoSoDu2 As String DropLuyKeNhapChuaCoSoDu2 = " DROP TABLE LuyKeNhapChuaCoSoDu2 " cmd1.CommandText = DropLuyKeNhapChuaCoSoDu2 cmd1.Execute Dim DropLuyKeNhap2 As String DropLuyKeNhap2 = " DROP TABLE LuyKeNhap2 " cmd1.CommandText = DropLuyKeNhap2 cmd1.Execute Dim DropLuyKeNhapOK2 As String DropLuyKeNhapOK2 = "DROP TABLE LuyKeNhapOK2 " cmd2.CommandText = DropLuyKeNhapOK2 cmd2.Execute Dim DropTonDauKi As String DropTonDauKi = " DROP TABLE TonDauKi" cmd2.CommandText = DropTonDauKi cmd2.Execute 'Dim DropNhapTrongKy As String 'DropNhapTrongKy = " DROP TABLE NhapTrongKy " 'cmd2.CommandText = DropNhapTrongKy Dim DropLuyKeNhapChuaCoSoDu As String DropLuyKeNhapChuaCoSoDu = " DROP TABLE LuyKeNhapChuaCoSoDu " cmd2.CommandText = DropLuyKeNhapChuaCoSoDu cmd2.Execute cmd2.Cancel Dim DropLuyKeNhap As String DropLuyKeNhap = " DROP TABLE LuyKeNhap " cmd3.CommandText = DropLuyKeNhap cmd3.Execute Dim DropLuyKeNhapOK As String DropLuyKeNhapOK = "DROP TABLE LuyKeNhapOK " cmd3.CommandText = DropLuyKeNhapOK cmd3.Execute Dim DropXuatTrongKy As String DropXuatTrongKy = " DROP TABLE XuatTrongKy " cmd3.CommandText = DropXuatTrongKy cmd3.Execute Dim DropLuyKeXuat As String DropLuyKeXuat = " DROP TABLE LuyKeXuat " cmd4.CommandText = DropLuyKeXuat cmd4.Execute cmd4.Cancel 'Dim DropLuyKeNhapChuaCoSoDu As String 'DropLuyKeNhapChuaCoSoDu = " DROP TABLE LuyKeNhapChuaCoSoDu" 'cmd5.CommandText = DropLuyKeNhapChuaCoSoDu 'cmd5.Execute Dim DropNhapTrongKy As String DropNhapTrongKy = " DROP TABLE NhapTrongKy " cmd5.CommandText = DropNhapTrongKy cmd5.Execute cmdbangtonghop.CommandText = "DROP TABLE BangTongHop " cmdbangtonghop.Execute Set cmd = Nothing Set cmd1 = Nothing Set cmd2 = Nothing Set cmd3 = Nothing Set cmd4 = Nothing Set cmd5 = Nothing Set cmdbangtonghop = Nothing Set cmdADO = Nothing Set VarReport4 = Nothing End Sub Private Sub Form_Resize() CRViewer1.Top = 0 CRViewer1.Left = 0 CRViewer1.Height = ScaleHeight CRViewer1.Width = ScaleWidth End Sub Hết

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

  • doc3492.doc
Tài liệu liên quan