Luận văn Quản lí hồ sơ cán bộ công nhân viên của cục doanh nghiệp nhỏ và vừa thuộc bộ kế hoạch và đầu tư

Cùng với sự phát triển như vũ bão của ngành Công nghệ thông tin nói chung cũng như sự phát triển của Công nghệ phần mềm nói riêng, các hệ quản trị không ngừng phát triển, bổ sung nhiều tính năng mới. Microsoft Visual Foxpro là một hệ quản trị cơ sở dữ liệu có nhiều công cụ giúp tổng hợp, truy xuất dữ liệu thông tin một cách nhanh chóng, thuận tiện và một bộ lệnh lập trình rất phong phú. Hệ quản trị cơ sở dữ liệu Visual Foxpro có nhiều tính năng hiện đại:  Tạo lập và quản lý các tệp cơ sở dữ liệu có dung lượng lớn (tới một tỷ dòng một tệp).  Hỗ trợ xây dựng cơ sở dữ liệu theo mô hình quan hệ.  Hỗ trợ một bộ lệnh và các hàm mạnh, đầy đủ, giúp cho người sử dụng dễ dàng hơn trong việc quản lý và khai thác dữ liệu.  Từ phiên bản 3.0 có hỗ trợ phương pháp lập trình hướng đối tượng.  Ứng dụng sau khi được xây dựng có khả năng triển khai nhanh, đơn giản.  Hỗ trợ cho việc tạo các ứng dụng nhiều người dùng.

pdf136 trang | Chia sẻ: lylyngoc | Lượt xem: 2447 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Luận văn Quản lí hồ sơ cán bộ công nhân viên của cục doanh nghiệp nhỏ và vừa thuộc bộ kế hoạch và đầu tư, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ố lương cơ bản cũ 9 Lcb_Hsm N 5,2 Hệ số lương cơ bản mới 10 Lcb_Tt N 16,2 Lương cơ bản – thành tiền 11 Ltg_Clv N 4,2 Lương thời gian – công làm việc 12 Ltg_Ccd N 4,2 Lương thời gian – công chế độ 13 Ltg_Cnlv N 4,2 Lương thời gian – công ngày làm việc 14 Ltg_Ckx N 4,2 Lương thời gian – công khác 15 Ltg_Cl N 4,2 Lương thời gian – công L 16 Ltg_Cdf N 4,2 Lương thời gian – công DF 17 Ltg_Tt N 16,2 Lương thời gian – thành tiền 18 Lcp_Lktl N 4,2 Lương chất lượng phục vụ - lượt không tính lương 70 19 Lcp_Tt N 16,2 Lương chất lượng phục vụ - thành tiền 20 Lsp_C N 4,2 Lương sản phẩm – công 21 Lsp_Tt N 16,2 Lương sản phẩm – thành tiền 22 Tg0_Cnl N 4,2 Công thêm giờ - ngày lễ 23 Tg0_Ccn N 4,2 Công thêm giờ - chủ nhật 24 Tg0_Cnt N 4,2 Công thêm giờ - ngày thường 25 Tg_Tt N 16,2 Thêm giờ - thành tiền 26 Ptn_Tt N 16,2 Phụ cấp thất nghiệp – thành tiền 27 Pc3_Tt N 16,2 Phụ cấp thất nghiệp – thành tiền 28 Tong_luong N 16,2 Tổng lương 29 Kpt_Kpcd N 16,2 Kinh phí công đoàn 30 Kpt_Bhxh N 16,2 Bảo hiểm xã hội 31 Kpt_Bhyt N 16,2 Bảo hiểm y tế 32 Kpt_Tdtu N 16,2 Tiền tạm ứng 33 Tru_khac1 N 16,2 Trừ khác 1 34 Tru_khac2 N 16,2 Trừ khác 2 35 Tru_khac3 N 16,2 Trừ khác 3 36 Cong_khac1 N 16,2 Cộng khác 1 37 Cong_khac2 N 16,2 Cộng khác 2 38 Cong_khac3 N 16,2 Cộng khác 3 39 Ghichu1 M 4 Ghi chú 1 40 Ghichu2 M 4 Ghi chú 2 71 41 Ghichu3 M 4 Ghi chú 3 42 Nop_Bhxh N 1,0 Nộp bảo hiểm xã hội 43 Trachnhiem N 16,2 Trách nhiệm 44 Lsp_At N 16,2 Lương sản phẩm – Ăn trưa 45 Ltg_At N 16,2 Lương thời gian – Ăn trưa 46 Lcp_At N 16,2 Lương chất lượng phục vụ - Ăn trưa 47 Ltg_Nlv N 16,2 Lương thời gian – Ngày làm việc 48 Tru_Congsp N 16,2 Trừ công sản phẩm 49 Tru_Khac N 16,2 Trừ khác 50 Tru_Tu N 16,2 Trừ tạm ứng 51 Tien_Tn N 16,2 Tiền trách nhiệm 52 Tien_Linh N 16,2 Tiền lĩnh 53 At_Tt N 12,2 Ăn trưa – thành tiền 54 Kpt_Kx N 5,2 Khoản phải thu – khác 55 Tg_Cnl N 5,2 Thêm giờ - công ngày lễ 56 Tg_Ccn N 5,2 Thêm giờ - công chủ nhật 57 Tg_Cnt N 5,2 Thêm giờ -công ngày thường 58 Ltg_Llvtt N 12,2 Lương thời gian – công làm việc thành tiền (bộ phận văn phòng) 59 Ltg_Lcdtt N 12,2 Lương thời gian – công chế độ thành tiền 60 Lcp_Lktltt N 12,2 Lương chất lượng phục vụ - lượt không tính lương thành tiền 61 Kpt_Bttn N 12,2 Khoản phải thu – bồi thường trách 72 nhiệm 62 Kpt_Nolai N 12,2 Khoản phải thu – nợ lại (trường hợp tiền lĩnh âm) 63 Kpt_Truno N 12,2 Khoản phải thu trừ nợ (trừ nợ lại tháng trước) 64 Tinhluong N 1,0 Tính lương 65 Gia_Laixe N 7,2 Giá – lái xe 66 Gia_Tknl N 7,2 Giá – tiết kiệm nhiên liệu 67 Gia_Nvbv N 7.2 Giá – nhân viên bảo vệ 68 Gia_Khac N 7,2 Giá – khác 69 Chotso C 1 Trạng thái chốt sổ 70 Status C 1 Trạng thái xóa = “ * ” – bị xóa bởi chương trình TỆP CHỐT SỔ: CHOTSO Bí danh: Chotso Khóa chính: STT ( = STR(nam,4)+STR(thang,2)) STT Tên trường Kiểu Độ rộng Diễn giải 1 Nam N 4,0 Năm 2 Thang N 2,0 Tháng 3 Ngay_Chot D 8 Ngày chốt sổ 4 Gio_Chot C 8 Giờ chốt sổ 73 3. Thiết kế các thuật toán a. Thuật toán đăng nhập vào chương trình 74 b. Thuật toán thêm mới nhóm nhân viên trong danh mục nhóm nhân viên 75 c. Thuật toán lấy thông tin trong các danh mục 76 d. Thuật toán tìm kiếm nhân viên trong danh mục nhân viên e. Thuật toán xóa nhóm nhân viên trong danh mục nhóm nhân viên 77 78 4. Lựa chọn hệ quản trị cơ sở dữ liệu Cùng với sự phát triển như vũ bão của ngành Công nghệ thông tin nói chung cũng như sự phát triển của Công nghệ phần mềm nói riêng, các hệ quản trị không ngừng phát triển, bổ sung nhiều tính năng mới. Microsoft Visual Foxpro là một hệ quản trị cơ sở dữ liệu có nhiều công cụ giúp tổng hợp, truy xuất dữ liệu thông tin một cách nhanh chóng, thuận tiện và một bộ lệnh lập trình rất phong phú. Hệ quản trị cơ sở dữ liệu Visual Foxpro có nhiều tính năng hiện đại:  Tạo lập và quản lý các tệp cơ sở dữ liệu có dung lượng lớn (tới một tỷ dòng một tệp).  Hỗ trợ xây dựng cơ sở dữ liệu theo mô hình quan hệ.  Hỗ trợ một bộ lệnh và các hàm mạnh, đầy đủ, giúp cho người sử dụng dễ dàng hơn trong việc quản lý và khai thác dữ liệu.  Từ phiên bản 3.0 có hỗ trợ phương pháp lập trình hướng đối tượng.  Ứng dụng sau khi được xây dựng có khả năng triển khai nhanh, đơn giản.  Hỗ trợ cho việc tạo các ứng dụng nhiều người dùng. Chính vì những lý do trên, chương trình Kế toán lương cho Xí nghiệp Xe buýt Hà Nội lựa chọn hệ quản trị cơ sở dữ liệu Visual Foxpro, cụ thể là Visual Foxpro 7.0 để làm cơ sở phân tích, thiết kế và lập trình. Một số giao diện màn hình của chương trình 1. Màn hình đăng nhập vào hệ thống Để bảo đảm an toàn cho hệ thống, chỉ những người sử dụng có quyền mới được phép đăng nhập vào hệ thống và sử dụng các chức năng chương trình tùy thuộc quyền hạn được phân. 2. Màn hình danh mục nhân viên 81 Màn hình Danh mục nhân viên hiện thị các thông tin về nhân viên như mã nhân viên, hệ số lương cũ, hệ số lương mới, địa chỉ, tài khoản ngân hàng. Kế toán viên sẽ thực hiện các thao tác thêm mới, xóa, sửa nhân viên… thông qua việc sử dụng các phím chức năng F3, F4, F8… 3. Màn hình sửa danh mục nhân viên Từ màn hình Danh mục nhân viên, khi kế toán viên nhấn phím chức năng F3, màn hình Sửa danh mục nhân viên (thực chất là sửa thông tin của một nhân viên nào đó trong danh mục) sẽ được hiển thị. Nút Nhận sẽ xác nhận và lưu những thông tin mới sửa chữa vào cơ sở dữ liệu nếu hợp lệ. Ngược lại, nút Hủy sẽ thoát khỏi màn hình Sửa danh mục nhân viên, đồng thời mọi thông tin được bảo toàn. 4. Màn hình lọc Danh mục nhân viên Việc nhấn phím F9 từ Danh mục nhân viên sẽ kích hoạt form Lọc danh mục nhân viên. 82 Người sử dụng có nhiều lựa chọn để lọc nhân viên từ Danh mục nhân viên. Có thể lọc theo mã nhân viên, tên nhân viên, bộ phận (nhóm NV2), chức vụ (nhóm NV3), tuyến xe, hoặc kết hợp những điều kiện lọc trên. 5. Màn hình tìm kiếm nhân viên Để tìm kiếm nhân viên trong Danh mục nhân viên theo tên, chương trình đưa ra hai lựa chọn cho người sử dụng, đó là tìm tên nhân viên được bắt đầu hoặc bao gồm (chứa) cụm từ cần tìm. Giả sử tìm những nhân viên có tên chứa tử “Anh”, kết quả nhận được sẽ là Nguyễn Anh Đức, Nguyễn Thị Lan Anh, Phan Thanh Huyền, Trần Nguyên Hanh… Còn nếu tìm những nhân viên có tên bắt đầu bằng từ “Anh” thì chương trình sẽ đưa ra kết quả là Nguyễn Anh Đức, Nguyễn Thị Lan Anh… Màn hình Tìm kiếm nhân viên hiển thị khi kế toán viên nhấn F5 từ Danh mục nhân viên. 83 6. Màn hình thêm mới nhóm nhân viên Khi Danh mục nhóm nhân viên đang hiển thị, để thêm mới một nhóm nhân viên người dùng sẽ nhấn phím F4. 7. Màn hình lọc công thức tính lương theo tháng Công thức tính lương của mỗi tháng khác nhau, để tiện cho việc tra cứu, kế toán viên có thể lọc các công thức này theo tháng, năm nhất định. 8. Màn hình sửa công thức tính Việc kích hoạt Form Sửa công thức tính được thực hiện bằng cách nhấn phím F3 khi chương trình đang hiển thị Danh mục công thức tính lương. Việc Thêm mới công thức tính cũng tương tự nhưng thay bằng nhấn phím F3, kế toán viên phải nhấn phím F4. 9. Màn hình cập nhật số liệu Mỗi tháng, trước khi tính lương, kế toán viên phải cập nhật các số liệu phát sinh trong tháng từ các bảng chấm công, phiếu chi, phiếu thu…, gồm các 85 thông tin như tiền đã tạm ứng, công làm việc ngày thường, công làm việc ngày nghỉ, các khoản cộng khác, trừ khác… 10. Màn hình nhập số liệu Nhấn F3 từ Form trên sẽ hiện ra Form Cập nhật số liệu như dưới đây, việc cập nhật số liệu được thực hiện chi tiết cho từng nhân viên. 87 KẾTLUẬN Ngày nay, trong thời đại lĩnh vực Công Nghệ Thông Tin bùng nổ trên toàn cầu thì các quốc gia trên thế giới, dù phát triển hay đang phát triển đều áp dụng tin học vào để hiện đại hóa quy trình quản lý sản xuất của mình nhằm đạt hiệu quả cao nhất. Qua quá trình khảo sát thực tế, phân tích và đánh giá hệ thống thông tin kế toán lương đang được triển khai tại Xí nghiệp Xe buýt Hà Nội, có thể kết luận một số ưu nhược điểm sau: Ưu điểm:  Xí nghiệp Xe buýt Hà Nội có đội ngũ nhân viên, chuyên viên nắm vững kiến thức tin học căn bản, có hiểu biết nhất định về máy tính và các thiết bị tin học. Đây là điều kiện thuận lợi cho việc triển khai tin học hóa công tác quản lý lương.  Máy móc, thiết bị được trang bị tương đối đầy đủ và hiện đại, có thể áp dụng ngay quy trình quản lý tự động.  Ban lãnh đạo của Xí nghiệp am hiểu, tiếp cận tốt lĩnh vực Công nghệ thông tin.  Các báo biểu đã được thống nhất từ Tổng Công ty đến các bộ phận.  Các phân hệ kế toán khác hoạt động rất hiệu quả với phần mềm kế toán Cyber Accounting 2005 được viết bằng Visual Foxpro. Việc đồng bộ hóa quy trình quản lý của toàn Xí nghiệp ở tất cả các bộ phận sẽ tương đối thuận lợi, có khả năng liên kết và chia sẻ dữ liệu với nhau. Hạn chế:  Hệ quản trị cơ sở dữ liệu Visual Foxpro tuy phổ biến, nhưng với các cán bộ quản lý tại Xí nghiệp Xe buýt Hà Nội thì hoàn toàn mới mẻ. Vì thế, công 88 việc đào tạo không phải chỉ trong ngày một ngày hai là hoàn tất, người sử dụng còn rất lạ lẫm khi xử lý tình huống.  Đây là chương trình áp dụng lần đầu tại Xí nghiệp Xe buýt Hà Nội, chưa được triển khai ở các bộ phận khác, vì thế việc đồng bộ hóa dữ liệu chưa được giải quyết triệt để. Hiện tại, chương trình đã cơ bản hoàn thành, chỉ còn một số báo cáo và chức năng phụ đang được hoàn thiện. Nhìn chung, trong giai đoạn đầu, hệ thống hoạt động tốt và chứng tỏ được ưu thế hơn hẳn so với hệ thống kế toán lương cũ. Tuy nhiên, vì hệ thống lương tại Xí nghiệp Xe buýt tương đối phức tạp, người viết lại chưa có kinh nghiệm thực tế và kỹ năng lập trình chuyên nghiệp nên chắc chắn sẽ không tránh khỏi thiếu sót. Một lần nữa, em xin chân thành cảm ơn thầy Bùi Thế Ngũ, đội ngũ cán bộ nhân viên Công ty Cổ phần phần mềm Cybersoft, đội ngũ cán bộ Phòng Lao động – Tiền lương – Hành chính Xí nghiệp Xe buýt Hà Nội đã giúp đỡ em hoàn thành đề tài này. 89 PHỤLỤC 1 Mã của một số thủ tục chính I. Thủ tục cập nhật danh mục nhân viên *************************************************************** Dmnv_F3 Sua or them moi mot nhan vien * Dmnv_Nhan Luu nhan vien * Dmnv_F8 Xoa mot nhan vien * Dmnv_F10 Sap xep danh muc nhan vien ************************************************************** *!* ======== Thu tuc cap nhat danh muc nhan vien ============* CLOSE TABLES ALL USE (P_Cod + [Dmtx]) ORDER Matx ALIAS Dmtx IN 0 USE (P_Cod + [Dmnhnv]) ORDER Stt ALIAS Dmnhnv IN 0 SELECT 0 USE (P_Cod + [Dmnv]) ORDER Manv ALIAS Dmnv SHARED GO TOP _rec=0 SCAN _rec = _rec+1 REPLACE ftag WITH _rec ENDSCAN GO TOP ON KEY LABEL F3 DO Dmnv_F3 with [S] ON KEY LABEL F4 DO Dmnv_F3 with [M] ON KEY LABEL F8 DO Dmnv_F8 ON KEY LABEL F9 DO Dmnv_F9 ON KEY LABEL F5 DO Dmnv_F5 SELECT Dmnv BROWSE FIELDS Manv :H = [M· nh©n viªn] :16,; Tennv :H = [Tªn nh©n viªn] :25,; Lcb_hsc :H = [HSL cò],; 90 Lcb_hsm :H = [HSL míi],; Nh_nv1 :H = [Bé phËn],; Nh_nv2 :H = [Chøc vô],; Nh_nv3 :H = [Nhãm NV3],; Matx :H = [Matx] :8,; Tknh :H = [Tknh] :16,; Diachi :H = [§Þa chØ] :10,; Dt :H = [§iÖn tho¹i] :10,; Email :H = [Email] :10,; Tinh_thanh :H = [TØnh thµnh] :10,; Ghichu :H = [Ghi chó],; Date,; Time,; User_id,; Date0,; Time0,; User_id0,; Status; FONT [Vn-sans-serif],8; TITLE "F3-Sua, F4-Them moi, F5-Tim, F8-Xoa, F9-Loc, ESC-Thoat" NOAPPEND NOMODIFY NODELETE NOMENU WINDOW WinBrw ON KEY LABEL F3 ON KEY LABEL F4 ON KEY LABEL F5 ON KEY LABEL F8 ON KEY LABEL F9 USE IN Dmnv USE IN Dmnhnv USE IN Dmtx IF USED([Temp7]) USE IN Temp7 ENDIF 91 ********************* PROCEDURE Dmnv_F3 ********************** PROCEDURE Dmnv_F3 LPARAMETERS _M_S _InSELECT = SELECT() _Recno = RECNO() STORE _M_S TO _Moi_Sua PUSH KEY CLEAR IF _Moi_Sua = [S] AND RECNO() > RECCOUNT([Dmnv]) POP KEY SELECT (_InSELECT) RETURN ENDIF SELECT Dmnv IF _Moi_Sua = [M] SCATTER MEMVAR MEMO BLANK ELSE GO _Recno SCATTER MEMVAR MEMO ENDIF M.Manv_old = M.Manv M.Date0 = IIF(_Moi_Sua = [M],Date[],M.Date0) M.Time0 = IIF(_Moi_Sua = [M],Time[],M.Time0) M.User_Id0 = IIF(_Moi_Sua = [M],M.Name,M.User_Id0) _Caption = IIF(_Moi_Sua = [M],"Them moi nhan vien","Sua chua danh muc nhan vien") =SEEK([1] + M.Nh_nv1, [DmNhnv]) M.Ten_Nh_nv1 = IIF(FOUND([DmNhnv]), DmNhnv.Tennh, []) =SEEK([2] + M.Nh_nv2, [DmNhnv]) M.Ten_Nh_nv2 = IIF(FOUND([DmNhnv]), DmNhnv.TenNh, []) =SEEK([3] + M.Nh_nv3, [DmNhnv]) M.Ten_Nh_nv3 = IIF(FOUND([DmNhnv]), DmNhnv.TenNh, []) 92 =SEEK(M.Matx, [Dmtx]) M.Tentx = IIF(FOUND([Dmtx]), Dmtx.Tentx, []) ON KEY LABEL F9 KEYBOARD CHR(23) DO FORM (P_Screen + [Dmnv_F3]) NAME _SCX LINKED ON KEY LABEL F9 POP KEY SELECT (_InSelect) RETURN ********************* PROCEDURE _Nhan ********************** FUNCTION _Nhan PARAMETERS M_Nhan SELECT Dmnv IF LASTKEY()= 27 OR M_Nhan 1 IF _Recno<=RECCOUNT([Dmnv]) GO _Recno _SCX = "" ENDIF _SCX = "" RETURN .T. ELSE IF M_Nhan = 1 IF EMPTY(ALLTRIM(M.Manv)) OR; EMPTY(ALLTRIM(M.Tennv)) MESSAGEBOX('M· hoÆc tªn nh©n viªn kh«ng ®­îc ®Ó trèng !',0+48,'Chu y') _SCX.txtManv.SetFocus RETURN .F. ELSE IF _Moi_Sua = [M] M.Time0 = Time() M.Date0 = DATE() M.User_Id0 = M.Name 93 M.Time = TIME() M.Date = DATE() M.User_Id = M.Name APPEND BLANK GATHER MEMVAR memo FLUSH UNLOCK IN Dmnv ELSE SELECT Dmnv GO _Recno M.Time = TIME() M.Date = DATE() M.User_Id = M.Name GATHER MEMVAR MEMO FLUSH UNLOCK IN Dmnv ENDIF ENDIF _SCX = "" ENDIF ENDIF SELECT Dmnv RETURN .T. *!* ******************* PROCEDURE Dmnv_F8 ****************** PROCEDURE Dmnv_F8 CLEAR GO RECNO() _RecNo = RECNO() SELECT Dmnv fmin = RECCOUNT() SCAN fmin = MIN(fmin, ftag) ENDSCAN 94 GO _Recno IF RECNO() > RECCOUNT([Dmnv]) RETURN .T. ENDIF SCATTER MEMVAR MEMO IF (MESSAGEBOX('Cã ch¾c ch¾n xãa kh«ng?',4+32+256,'Chu y') 6) GO _Recno RETURN ENDIF M.Time = Time() M.Date = DATE() M.User_Id = M.Name M.Status="*" IF ftag = fmin SELE Dmnv GO _Recno REPLACE ftag WITH (RECCOUNT() + 1) INDEX ON ftag TO ftag SET ORDER TO ftag fmin = RECCOUNT() SCAN fmin = MIN(fmin, ftag) ENDSCAN GO _Recno GATHER MEMVAR MEMO FLUSH DELETE = SEEK(fmin,[Dmnv]) GO RECNO() ELSE SET OPTIMIZE ON SET EXCLUSIVE ON SET MULTILOCKS ON && Must be on for table buffering = CURSORSETPROP('Buffering', 5, 'Dmnv' ) GATHER MEMVAR MEMO 95 FLUSH DELETE TABLEUPDATE(.T.) ENDIF = CURSORSETPROP('Buffering',1, 'Dmnv' ) SET EXCLUSIVE OFF SET MULTILOCKS OFF RETURN .T. *!* ***************** PROCEDURE Dmnv_F9 ******************** PROCEDURE Dmnv_F9 PRIVATE _Form PUSH KEY DO FORM (P_Screen + [Dmnv_F9]) NAME _Form LINKED POP KEY ENDPROC *************** PROCEDURE Dmnv_F9_Nhan PARAMETERS _NhanHuy PRIVATE _key _key=".T." IF _NhanHuy 1 _Form = "" RETURN ENDIF _Form = "" SELECT Dmnv IF !EMPTY(ALLTRIM(M.Manv)) _key = 'Manv = M.Manv' ENDIF IF !EMPTY(ALLTRIM(M.Tennv)) _key = _key + ' AND Tennv = M.Tennv' ENDIF 96 IF !EMPTY(ALLTRIM(M.Nh_nv1)) _key = _key + ' AND M.Nh_nv1 = Nh_nv1' ENDIF IF !EMPTY(ALLTRIM(M.Nh_nv2)) _key = _key + ' AND M.Nh_nv2 = Nh_nv2' ENDIF IF !EMPTY(ALLTRIM(M.Nh_nv3)) _key = _key + ' AND M.Nh_nv3 = Nh_nv3' ENDIF SET FILTER TO &_key GO TOP RETURN ENDPROC *!* *************** PROCEDURE Dmnv_F5 ******************** PROCEDURE Dmnv_F5 PRIVATE _Form PUBLIC _C,M.Ten _C = 1 M.Ten="" PUSH KEY DO FORM (P_Screen + [Dmnv_F5]) NAME _Form LINKED IF _C = 1 SELECT Dmnv SELECT * FROM Dmnv WHERE UPPER(ALLTRIM(M.Ten)) $ UPPER(ALLTRIM(Tennv)) INTO TABLE P_TEMP+[Temp7] ELSE SELECT Dmnv _at = AT(" ",ALLTRIM(Tennv),1) SELECT * FROM Dmnv WHERE UPPER(ALLTRIM(M.Ten)) = UPPER(LEFT(Tennv,_at-1)) INTO TABLE P_TEMP+[Temp7] ENDIF ON KEY LABEL ENTER do _Chon SELECT Temp7 97 BROWSE FIELDS Manv :H = [M· nh©n viªn] :16,; Tennv :H = [Tªn nh©n viªn] :25,; Lcb_hsc :H = [HSL cò],; Lcb_hsm :H = [HSL míi],; Nh_nv1 :H = [Bé phËn],; Nh_nv2 :H = [Chøc vô],; Nh_nv3 :H = [Nhãm NV3],; Matx :H = [Matx] :8,; Tknh :H = [Tknh] :16,; Diachi :H = [§Þa chØ] :10,; Dt :H = [§iÖn tho¹i] :10,; Email :H = [Email] :10,; Tinh_thanh :H = [TØnh thµnh] :10,; Ghichu :H = [Ghi chó],; Date,; Time,; User_id,; Date0,; Time0,; User_id0,; Status; FONT [Vn-sans-serif],8; TITLE "Enter-Chon, ESC-Thoat" NOAPPEND NOMODIFY NODELETE NOMENU WINDOW WinBrw ON KEY LABEL ENTER POP KEY ENDPROC *!* *** Thu tuc tham chieu nhom nhan vien tu danh muc nhom nhan vien **** PROCEDURE _CHK_NV PARAM _ObjectNV,_sort M.Ma = UPPER(EVAL(_ObjectNV.Controlsource)) IF USED([Dmnhnv]) SELECT Dmnhnv 98 ELSE USE (P_Cod + [Dmnhnv]) ORDER Stt ALIAS Dmnhnv IN 0 ENDIF IF USED([Dmtx]) SELECT Dmtx ELSE USE (P_Cod + [Dmtx]) ORDER Matx ALIAS Dmtx IN 0 ENDIF DO CASE CASE _sort = 1 SET FILTER TO Loainh = 1 IN Dmnhnv CASE _sort = 2 SET FILTER TO Loainh = 2 AND Manh "ALL" IN Dmnhnv CASE _sort = 3 SET FILTER TO Loainh = 3 IN Dmnhnv ENDCASE ON KEY LABEL ENTER do _Nhan_huy with [N] ON KEY LABEL ESC do _Nhan_huy with [H] IF _sort 4 SELECT Dmnhnv BROWSE FIELDS Manh :H = [M· nhãm],; Tennh :H = [Tªn nhãm]; TITLE "ENTER-Nhan, ESC-Thoat" FONT [Vn-sans-serif], 8 NOAPPEND NOMODIFY NODELETE ELSE SELECT Dmtx BROWSE FIELDS Matx :H = [M· tuyÕn xe],; Tentx :H = [Tªn tuyÕn xe]; TITLE "ENTER-Nhan, ESC-Thoat" FONT [Vn-sans-serif], 8 NOAPPEND NOMODIFY NODELETE NAME OBrow2 ENDIF ON KEY LABEL ENTER ON KEY LABEL ESC _ObjectNV.VALUE= M.Ma _ObjectNV.Refresh 99 IF !USED([Dmnhnv]) USE (P_Cod + [Dmnhnv]) ORDER Stt ALIAS Dmnhnv IN 0 ENDIF IF !USED([Dmtx]) USE (P_Cod + [Dmtx]) ORDER Matx ALIAS Dmtx IN 0 ENDIF RETURN ************* PROCEDURE _Nhan_huy PARAMETERS _N_H IF _N_H = [H] IF _sort 4 IF _chkvalid = 1 _Left = LEFT(M.Ma,1) SELECT Dmnhnv GO TOP _yes = 0 SCAN IF _Left = LEFT(Manh,1) _yes = 1 EXIT ENDIF ENDSCAN IF _yes = 0 GO TOP ENDIF M.Ma = Dmnhnv.Manh _ObjectNV.REFRESH ENDIF USE IN Dmnhnv RETURN ELSE USE IN Dmtx 100 RETURN ENDIF ELSE IF _sort 4 M.Ma = Dmnhnv.Manh _ObjectNV.REFRESH USE IN Dmnhnv ELSE M.Ma = Dmtx.Matx _ObjectNV.REFRESH USE IN Dmtx ENDIF ENDIF FLUSH RETURN ENDPROC *!*-------------------------_Chon ---------------------------- PROCEDURE _Chon PRIVATE _Ma _Ma=Temp7.Manv SELECT Dmnv = SEEK (_Ma,[Dmnv]) USE IN Temp7 RETURN II. Thủ tục cập nhật danh mục nhóm nhân viên ************************************************************** * Dmnhnv_F3 Sua or them moi mot nhom nhan vien * Dmnhnv_Nhan Luu nhom nhan vien * Dmnhnv_F8 Xoa mot nhom nhan vien ************************************************************** *!* ============ Thu tuc sua danh muc nhom nhan vien ========= CLOSE TABLES ALL 101 USE (P_Cod + [Dmnv]) ORDER Manv ALIAS Dmnv IN 0 SELECT 0 USE (P_Cod + [Dmnhnv]) ORDER STT ALIAS Dmnhnv SHARED ON KEY LABEL F3 DO Dmnhnv_F3 with [S] ON KEY LABEL F4 DO Dmnhnv_F3 with [M] ON KEY LABEL F8 DO Dmnhnv_F8 ON KEY LABEL F10 DO Dmnhnv_F10 SELECT Dmnhnv BROWSE FIELDS Loainh :H=[KiÓu ph©n lo¹i] :18,; Manh :H=[M· nhãm] :20,; Tennh :H=[Tªn nhãm] ; FONT [vn-sans-serif],8; TITLE "F3-Sua, F4-Them moi, F8-Xoa, F10-Sap xep, ESC-Thoat" ; NOAPPEND NOMODIFY NODELETE NOMENU WINDOW WinBrw ON KEY LABEL F3 ON KEY LABEL F4 ON KEY LABEL F8 USE IN Dmnv USE IN Dmnhnv ******************* PROCEDURE Dmnhnv_F3 ******************** PROCEDURE Dmnhnv_F3 LPARAMETERS _M_S _InSELECT = SELECT() _Recno = RECNO() STORE _M_S TO _Moi_Sua PUSH KEY CLEAR IF _Moi_Sua = [S] AND RECNO() > RECCOUNT([Dmnhnv]) POP KEY SELECT (_InSELECT) RETURN ENDIF SELECT Dmnhnv IF _Moi_Sua = [M] SCATTER MEMVAR MEMO BLANK ELSE 102 GO _Recno SCATTER MEMVAR MEMO ENDIF M.Manh_old = M.Manh M.Date0 = IIF(_Moi_Sua = [M],Date[],M.Date0) M.Time0 = IIF(_Moi_Sua = [M],Time[],M.Time0) M.User_Id0 = IIF(_Moi_Sua = [M],M.Name,M.User_Id0) _Caption = IIF(_Moi_Sua = [M],"Them moi nhom nhan vien","Sua chua nhom nhan vien") ON KEY LABEL F10 KEYBOARD CHR(23) DO FORM (P_Screen + [Dmnhnv_F3]) NAME _SCX LINKED POP KEY SELECT (_InSelect) RETURN ********************** PROCEDURE _Nhan ********************** FUNCTION _Nhan PARAMETERS M_Nhan SELECT Dmnhnv COUNT TO Dem FOR ALLTRIM(STR(Loainh,1) + Manh) == ALLTRIM(STR(M.Loainh,1) + m.Manh) IF LASTKEY()= 27 OR M_Nhan 1 IF _Recno<=RECCOUNT([Dmnhnv]) GO _Recno _SCX = "" ENDIF _SCX = "" RETURN .T. ELSE IF M_Nhan = 1 DO CASE CASE EMPTY(ALLTRIM(M.Manh)) OR EMPTY(ALLTRIM(M.Tennh)) MESSAGEBOX('M· hoÆc tªn nhãm kh«ng ®­îc ®Ó trèng !',0+48,'Chu y') _SCX.txtManh.SetFocus CASE _Moi_Sua = [M] AND Dem>0 103 =MESSAGEBOX([M· ®· cã!],64,[Chu y]) _SCX.TxtManh.SetFocus CASE _Moi_Sua = [S] AND Dem>0 AND ALLTRIM(_SCX.TxtManh.Value)_CurrValue =MESSAGEBOX([M· ®· cã!],64,[Chu y]) _SCX.TxtManh.SetFocus OTHERWISE IF _Moi_Sua = [M] M.Time0 = Time() M.Date0 = DATE() M.User_Id0 = M.Name M.Time = TIME() M.Date = DATE() M.User_Id = M.Name APPEND BLANK GATHER MEMVAR memo FLUSH UNLOCK IN Dmnhnv ELSE SELECT Dmnhnv GO _Recno M.Time = TIME() M.Date = DATE() M.User_Id = M.Name GATHER MEMVAR memo FLUSH UNLOCK IN Dmnhnv ENDIF _SCX = "" ENDCASE ENDIF ENDIF SELECT Dmnhnv RETURN .T. *!* **************** PROCEDURE Dmnhnv_F8 ***************** 104 PROCEDURE Dmnhnv_F8 GO RECNO() _RecNo = RECNO() _Kiemtra = Manh IF RECNO() > RECCOUNT([Dmnhnv]) RETURN .T. ENDIF SCATTER MEMVAR MEMO SELECT Dmnhnv DO CASE CASE Loainh = 1 SELECT Dmnv INDEX ON Nh_nv1 TO Nh_nv1 IF SEEK(Dmnhnv.Manh) MESSAGEBOX('Cã ph¸t sinh, kh«ng ®­îc xãa!',0+48,'Chu y') ELSE DO Del ENDIF CASE Loainh = 2 SELECT Dmnv INDEX ON Nh_nv2 TO Nh_nv2 IF SEEK(Dmnhnv.Manh) MESSAGEBOX('Cã ph¸t sinh, kh«ng ®­îc xãa!',0+48,'Chu y') ELSE DO Del ENDIF CASE Loainh = 3 SELECT Dmnv INDEX ON Nh_nv3 TO Nh_nv3 IF SEEK(Dmnhnv.Manh) MESSAGEBOX('Cã ph¸t sinh, kh«ng ®­îc xãa!',0+48,'Chu y') ELSE DO Del ENDIF 105 OTHERWISE DO Del ENDCASE RETURN .T. *!*……………………………………………… PROCEDURE Del …………………………………… PROCEDURE Del IF (MESSAGEBOX('Cã ch¾c ch¾n xãa kh«ng?',4+32+256,'Chu y') 6) SELECT Dmnhnv GO _Recno RETURN ENDIF SELECT Dmnhnv M.Time = Time() M.Date = DATE() M.User_Id = M.Name M.Status="*" GATHER MEMVAR MEMO FLUSH DELETE SKIP ENDPROC III. Thủ tục cập nhật danh mục tuyến xe *!* ========= Thu tuc cap nhat danh muc tuyen xe ========== * CLOSE TABLES ALL SELECT 0 USE (P_Cod + [Dmtx]) ORDER Matx ALIAS Dmtx SHARED M.thang = MONTH(DATE()) M.Nam = YEAR(DATE()) SET FILTER TO Thang = M.Thang AND Nam = M.Nam ON KEY LABEL F3 DO Dmtx_F3 with [S] ON KEY LABEL F4 DO Dmtx_F3 with [M] ON KEY LABEL F8 DO Dmtx_F8 ON KEY LABEL F9 DO Dmtx_F9 SELECT Dmtx 106 BROWSE FIELDS Thang :H = [Th¸ng],; Nam :H = [N¨m],; Matx :H = [M· tuyÕn xe] :16,; Tentx :H = [Tªn tuyÕn xe]:37,; Giatx :H = [Gi¸ tuyÕn xe] :15,; Gia_nvbv :H = [Gi¸ NVBV],; Gia_laixe :H = [Gi¸ LX],; Gia_khac :H = [Gi¸ Kh¸c],; Gia_tknl :H = [Gi¸ TKNL],; User_id0,; Time0,; Date0,; User_id,; Time,; Date,; Status; FONT [vn-sans-serif],8; TITLE "F3-Sua, F4-Them moi, F8-Xoa, F9-Loc theo thang, ESC-Thoat" NOAPPEND NOMODIFY NODELETE NOMENU WINDOW WinBrw ON KEY LABEL F3 ON KEY LABEL F4 ON KEY LABEL F8 ON KEY LABEL F9 USE IN Dmtx ******************* PROCEDURE Dmtx_F3 ********************** PROCEDURE Dmtx_F3 LPARAMETERS _M_S _InSELECT = SELECT() _Recno = RECNO() STORE _M_S TO _Moi_Sua PUSH KEY CLEAR IF _Moi_Sua = [S] AND RECNO() > RECCOUNT([Dmtx]) POP KEY SELECT (_InSELECT) RETURN 107 ENDIF SELECT Dmtx IF _Moi_Sua = [M] SCATTER MEMVAR MEMO BLANK ELSE GO _Recno SCATTER MEMVAR MEMO ENDIF M.Matx_old = M.Matx M.Date0 = IIF(_Moi_Sua = [M],Date[],M.Date0) M.Time0 = IIF(_Moi_Sua = [M],Time[],M.Time0) M.User_Id0 = IIF(_Moi_Sua = [M],M.Name,M.User_Id0) _Caption = IIF(_Moi_Sua = [M],"Them moi tuyen xe","Sua chua danh muc tuyen xe") ON KEY LABEL F9 KEYBOARD CHR(23) DO FORM (P_Screen + [Dmtx_F3]) NAME _SCX LINKED ON KEY LABEL F9 POP KEY SELECT (_InSelect) RETURN *!* *************** PROCEDURE _Nhan ********************** FUNCTION _Nhan PARAMETERS M_Nhan SELECT Dmtx COUNT TO Dem FOR ALLTRIM(Matx) == ALLTRIM(M.Matx) IF LASTKEY()= 27 OR M_Nhan 1 IF _Recno<=RECCOUNT([Dmtx]) GO _Recno _SCX = "" ENDIF _SCX = "" RETURN .T. ELSE IF M_Nhan = 1 DO CASE 108 CASE EMPTY(ALLTRIM(M.Matx)) OR EMPTY(ALLTRIM(M.Tentx)) MESSAGEBOX('M· hoÆc tªn tuyÕn xe kh«ng ®­îc ®Ó trèng !',0+48,'Chu y') _SCX.txtMatx.SetFocus CASE _Moi_Sua = [M] AND Dem>0 =MESSAGEBOX([M· ®· cã!],64,[Chu y]) _SCX.TxtMatx.SetFocus CASE _Moi_Sua = [S] AND Dem>0 AND ALLTRIM(_SCX.TxtMatx.Value)_CurrValue =MESSAGEBOX([M· ®· cã!],64,[Chu y]) _SCX.TxtMatx.SetFocus OTHERWISE IF _Moi_Sua = [M] M.Time0 = Time() M.Date0 = DATE() M.User_Id0 = M.Name M.Time = TIME() M.Date = DATE() M.User_Id = M.Name APPEND BLANK GATHER MEMVAR memo FLUSH UNLOCK IN Dmtx ELSE SELECT Dmtx GO _Recno M.Time = TIME() M.Date = DATE() M.User_Id = M.Name GATHER MEMVAR memo FLUSH UNLOCK IN Dmtx ENDIF _SCX = "" 109 ENDCASE ENDIF ENDIF SELECT Dmtx RETURN .T. *!* ***************** PROCEDURE Dmtx_F8 ****************** PROCEDURE Dmtx_F8 GO RECNO() _RecNo = RECNO() SELECT Dmtx IF RECNO() > RECCOUNT([Dmtx]) RETURN .T. ENDIF SCATTER MEMVAR MEMO IF (MESSAGEBOX('Cã ch¾c ch¾n xãa kh«ng?',4+32+256,'Chu y') 6) GO _Recno RETURN ENDIF M.Time = Time() M.Date = DATE() M.User_Id = M.Name M.Status="*" SET OPTIMIZE ON SET EXCLUSIVE ON SET MULTILOCKS ON && Must be on for table buffering = CURSORSETPROP('Buffering', 5, 'Dmtx' ) GATHER MEMVAR MEMO FLUSH DELETE SKIP TABLEUPDATE(.T.) RETURN .T. *!* ++++++++++++++++++++++ Procedure Dmtx_F9 PROCEDURE Dmtx_F9 110 PRIVATE _Form PUSH KEY DO FORM (P_Screen + [Dmtx_F9]) NAME _Form LINKED POP KEY ENDPROC *************** PROCEDURE Dmtx_F9_Nhan PARAMETERS _NhanHuy IF _NhanHuy 1 _Form = "" RETURN ENDIF _Form = "" M.Ngay1 = CTOD("01/"+STR(M.thang,2)+"/"+STR(M.Nam,4)) SET FILTER TO Thang = Month(M.Ngay1) and NAM = Year(M.Ngay1) GO TOP RETURN ENDPROC IV. Thủ tục cập nhật danh mục công thức ************************************************************** * dmct_F3 Sua/them moi mot vu viec * dmct_F8 Xoa mot vu viec * V_Nhan Luu vu viec *!* ================= Procedure: dmct ===================* CLOSE TABLES ALL USE (P_Cod + [Dmnhnv]) ORDER STT ALIAS Dmnhnv IN 0 SELECT 0 USE (P_Cod + [Dmct]) ORDER STT ALIAS Dmct M.Thang = MONTH(DATE())&&(M.Ngay1) M.Nam = YEAR(DATE())&&(M.Ngay1) SET FILTER TO Thang = M.Thang and Nam = M.Nam ON KEY LABEL F3 DO dmct_F3 WITH [S] ON KEY LABEL F4 DO dmct_F3 WITH [M] ON KEY LABEL F8 DO dmct_F8 ON KEY LABEL F9 DO Dmct_F9 111 BROWSE FIELDS Thang :H = [Th¸ng] :8,; Nam :H = [N¨m] :5,; Nh_nv2 :H = [Chøc vô] :12,; Mact :H = [Tªn kÕt qu¶] :15,; Tenct :H = [Tªn c«ng thøc] :40,; Ct :H = [C«ng thøc tÝnh]; TITLE "F3-Sua, F4-Them moi, F8-Xoa, F9-Loc theo thang, ESC-Thoat" ; FONT [vn-sans-serif],8; NOAPPEND NOMODIFY NODELETE NOMENU WINDOW WinBrw ON KEY LABEL F3 ON KEY LABEL F4 ON KEY LABEL F8 ON KEY LABEL F9 USE IN Dmnhnv USE IN dmct RETURN *!* **************** PROCEDURE Dmct_F3 ******************** PROCEDURE dmct_F3 LPARAMETERS _M_S _InSELECT = SELECT() _Recno = RECNO() ThangOld=M.Thang NamOld=M.Nam STORE _M_S TO _Moi_Sua PUSH KEY CLEAR IF _Moi_Sua = [S] AND RECNO() > RECCOUNT([dmct]) POP KEY SELECT (_InSELECT) RETURN ENDIF SELECT dmct IF _Moi_Sua = [M] SCATTER MEMVAR MEMO BLANK ELSE 112 GO _Recno SCATTER MEMVAR MEMO ENDIF M.mact_old = M.mact M.Date0 = IIF(_Moi_Sua = [M],Date[],M.Date0) M.Time0 = IIF(_Moi_Sua = [M],Time[],M.Time0) M.User_Id0 = IIF(_Moi_Sua = [M],M.Name,M.User_Id0) _Caption = IIF(_Moi_Sua = [M],"Them","Sua") ON KEY LABEL F9 KEYBOARD CHR(23) DO FORM (P_Screen + [dmct_F3]) NAME _SCX LINKED ON KEY LABEL F9 POP KEY SELECT (_InSelect) RETURN *!* ***************** PROCEDURE _Nhan ********************** FUNCTION _Nhan PARAMETERS M_Nhan SELECT dmct COUNT TO Dem FOR ALLTRIM(Nh_nv2 + Mact) == ALLTRIM(M.Nh_nv2 + M.Mact) IF LASTKEY()= 27 OR M_Nhan 1 IF _Recno<=RECCOUNT([dmct]) GO _Recno _SCX = "" ENDIF _SCX = "" RETURN .T. ELSE IF M_Nhan = 1 DO CASE CASE EMPTY(ALLTRIM(M.Nh_nv2)) OR EMPTY(ALLTRIM(M.Tenct)) OR EMPTY(ALLTRIM(M.Mact)) =MESSAGEBOX('Chøc vô, tªn kÕt qu¶, tªn c«ng thøc kh«ng ®­îc ®Ó trèng !',0+48,'Chu y') 113 CASE _Moi_Sua = [M] AND Dem>0 =MESSAGEBOX([C«ng thøc ®· cã!],64,[Chu y]) CASE _Moi_Sua = [S] AND Dem>0 AND ALLTRIM(_SCX.TxtNh_nv2.Value + _SCX.TxtMact.Value)_CurrValue =MESSAGEBOX([C«ng thøc ®· cã!],64,[Chu y]) OTHERWISE IF _Moi_Sua = [M] M.Time0 = Time() M.Date0 = DATE() M.User_Id0 = M.Name M.Time = TIME() M.Date = DATE() M.User_Id = M.Name APPEND BLANK GATHER MEMVAR memo FLUSH UNLOCK IN dmct ELSE SELECT dmct GO _Recno M.Time = TIME() M.Date = DATE() M.User_Id = M.Name GATHER MEMVAR memo FLUSH UNLOCK IN dmct ENDIF _SCX = "" ENDCASE ENDIF ENDIF SELECT dmct RETURN .T. *!* *************** PROCEDURE Dmct_F8 ********************* 114 PROCEDURE dmct_F8 GO RECNO() _RecNo = RECNO() IF RECNO() > RECCOUNT([dmct]) RETURN .T. ENDIF SCATTER MEMVAR MEMO IF (MESSAGEBOX('Cã ch¾c ch¾n xãa kh«ng?',4+32+256,'Chu y') 6) GO _Recno RETURN ENDIF M.Time = Time() M.Date = DATE() M.User_Id = M.Name M.Status="*" SET OPTIMIZE ON SET EXCLUSIVE ON SET MULTILOCKS ON && Must be on for table buffering = CURSORSETPROP('Buffering', 5, 'dmct' ) GATHER MEMVAR MEMO FLUSH DELETE SKIP TABLEUPDATE(.T.) = CURSORSETPROP('Buffering',1, 'dmct' ) SET EXCLUSIVE OFF SET MULTILOCKS OFF RETURN .T. *!* **************** PROCEDURE Dmct_F9 ****************** PROCEDURE Dmct_F9 PRIVATE _Form PUSH KEY DO FORM (P_Screen + [Dmct_F9]) NAME _Form LINKED POP KEY ENDPROC 115 *********** PROCEDURE Dmct_F9_Nhan PARAMETERS _NhanHuy IF _NhanHuy 1 _Form = "" RETURN ENDIF _Form = "" M.Ngay1 = CTOD("01/"+STR(M.thang,2)+"/"+STR(M.Nam,4)) SET FILTER TO Thang = Month(M.Ngay1) and NAM = Year(M.Ngay1) GO TOP RETURN ENDPROC *+++++++++++++++++++ PROCEDURE _CHK_CT PARAM _ObjectCT M.Nh_nv2 = UPPER(EVAL(_ObjectCT.Controlsource)) IF !USED([Dmnhnv]) USE (P_Cod + [Dmnhnv]) ORDER STT ALIAS Dmnhnv IN 0 ELSE SELECT Dmnhnv ENDIF SET FILTER TO Loainh = 2 ON KEY LABEL ENTER do _Nhan_huy with [N] ON KEY LABEL ESC do _Nhan_huy with [H] BROWSE TITLE "ENTER-Nhan, ESC-Thoat" NOAPPEND NOMODIFY NODELETE NAME OBrow ON KEY LABEL ENTER ON KEY LABEL ESC _ObjectCT.VALUE= M.Nh_nv2 _ObjectCT.Refresh RETURN *********** PROCEDURE _Nhan_huy PARAMETERS _N_H 116 SELECT Dmnhnv IF _N_H = [H] USE IN Dmnhnv USE (P_Cod + [Dmnhnv]) ORDER STT ALIAS Dmnhnv IN 0 RETURN ENDIF M.Nh_nv2 = Dmnhnv.Manh _SCX.TXTTennh.Value = Dmnhnv.Tennh _ObjectCT.REFRESH USE IN Dmnhnv USE (P_Cod + [Dmnhnv]) ORDER STT ALIAS Dmnhnv IN 0 RETURN ENDPROC V. Thủ tục tính lương hàng tháng *!* =============== Procedure: Tinhluong ===================* CLOSE TABLES ALL PUBLIC M.Nhan M.Nam = YEAR(DATE()) M.Thang = MONTH(DATE()) M.Hsl = 290000 m.Luong_cb = 290000 &&M_hsl M.hsbh = 5 M.hsyt = 1 DO FORM (P_SCREEN + [Tinhluong]) IF M.Nhan = 0 RETURN ENDIF USE (P_COD + [Dmnv] ) ORDER Manv ALIAS Dmnv IN 0 USE (P_COD + [Dmnhnv]) ORDER Stt ALIAS Dmnhnv IN 0 USE (P_COD + [Dmtd]) ORDER Matd ALIAS Dmtd IN 0 USE (P_COD + [Dmct]) ORDER STTVALID ALIAS Dmct IN 0 USE (P_COD + [Dmtx]) ORDER Matx ALIAS Dmtx IN 0 USE (P_DATA + [CTLUONGT]) ORDER STT3 ALIAS CTLUONGT IN 0 WAIT WINDOW NOWAIT [§ang tÝnh...] SELECT Dmtx 117 SET FILTER TO Thang = M.Thang AND Nam = M.Nam SELE CTLUONGT SET FILTER TO Thang = M.Thang AND Nam = M.Nam SET RELATION TO Matx INTO Dmtx REPLACE ALL Gia_Nvbv WITH Dmtx.Gia_Nvbv ,; Gia_Laixe WITH Dmtx.Gia_Laixe,; Gia_Tknl WITH Dmtx.Gia_Tknl,; Gia_Khac WITH Dmtx.Gia_Khac SET RELATION TO SET ORDER TO STT3 EEVALUATE() SET FILTER TO USE IN CTLUONGT =MESSAGEBOX("Ch­¬ng tr×nh ®· thùc hiÖn xong!") RETURN ************** FUNCTION EEVALUATE LOCAL _STR SELECT * FROM Dmct ; WHERE Thang=M.Thang and Nam = M.Nam AND Nh_nv2 LIKE [ALL%]; ORDER BY Nam,Thang,STT ; INTO TABLE (P_TEMP + [Temp3]) INDEX ON STR(Nam,4)+STR(Thang,2)+Nh_nv2 TAG STT SET ORDER TO STT GO TOP SCAN REST WHILE STT < 4 _FIELDTT = ALLTR(Mact) _CT = ALLTR(CT) SELE CTLUONGT REPL &_FIELDTT WITH TINHLUONG*ROUND(EVAL(_CT),-2) ALL SELECT Temp3 ENDSCAN SELECT DISTINCT Nam, Thang, Nh_nv2 ; 118 FROM CTLUONGT ; WHERE Thang=M.Thang and Nam = M.Nam ; ORDER BY Nam,Thang,Nh_nv2 ; INTO TABLE (P_TEMP + [Temp4]) GO TOP SCAN _STR = STR(Temp4.Nam,4)+STR(Temp4.Thang,2)+Temp4.Nh_nv2 SELECT Dmct IF SEEK(_STR) COPY TO (P_TEMP + [Temp5]) REST WHILE STR(Nam,4)+STR(Thang,2)+Nh_nv2 = _STR SELECT 0 USE (P_TEMP + [Temp5]) ALIAS Temp5 EXCL INDE ON STR(Nam,4)+STR(Thang,2)+Nh_nv2 + STR(STT,3) TAG STT SET ORDER TO STT GO TOP SCAN _FIELDTT = ALLTR(Mact) _CT = ALLTR(CT) SELECT CTLUONGT GO TOP IF(SEEK(_STR)) REPL &_FIELDTT WITH TINHLUONG*ROUND(EVAL(_CT),-2) ; REST WHILE STR(Nam,4)+STR(Thang,2)+Nh_nv2 = _STR ENDIF SELECT Temp5 ENDSCAN USE IN Temp5 ELSE ENDIF SELECT Temp4 ENDSCAN USE IN Temp4 SELECT Temp3 GO TOP 119 SCAN FOR STT > 3 _FIELDTT = ALLTR(Mact) _CT = ALLTR(CT) SELE CTLUONGT REPL &_FIELDTT WITH TINHLUONG*ROUND(EVAL(_CT),-2) ALL SELE Temp3 ENDSCA USE IN Temp3 SELECT CTLUONGT RETURN VI. Thủ tục cập nhât công thức tính lương hàng tháng CLOSE TABLES ALL PUBLIC M.Nhan M.Nam = YEAR(DATE()) M.Thang = MONTH(DATE()) M.Nh_nv1 = "" M.Matx_Old = "" USE (P_COD + [Dmnhnv]) ORDER STT ALIAS Dmnhnv IN 0 USE (P_SYSTEM + [CHotso]) ORDER STT ALIAS Chotso IN 0 USE (P_COD + [Dmnv]) ORDER Manv ALIAS Dmnv IN 0 USE (P_COD + [Dmtx]) ORDER Matx ALIAS Dmtx IN 0 USE (P_DATA + [CTLUONGT]) ORDER STT2 ALIAS CTLUONGT IN 0 DO FORM (P_SCREEN + [Luong]) IF M.Nhan = 0 CLOSE TABLES ALL RETURN ENDIF M.Mabp = M.Nh_nv1 M.Ngay = CTOD("01/"+STR(M.Thang,2)+"/"+STR(M.Nam,4)) M.ngay1 = M.ngay IF SEEK(STR(M.Nam,4)+STR(M.Thang,2),[Chotso]) IF Chotso.VALUE = [1] MESSAGEBOX([§· chèt sæ th¸ng ] + STR(M.THANG,2)+[/]+STR(M.NAM,4)) 120 RETURN .F. ENDIF ENDIF SELECT Dmnv SELECT M.Nam AS Nam, ; M.Thang AS Thang, ; Manv,; Nh_nv1,; Nh_nv2,; Nh_nv3,; Matx, ; Lcb_Hsc,; Lcb_Hsm,; 1 as Nop_BHXH,; 1 as TinhLuong,; 1 as Moi; FROM Dmnv ; WHERE Manv NOT IN (SELECT Manv FROM CTLUONGT WHERE Nam = M.Nam AND Thang = M.Thang); AND !EMPTY(Nh_nv1) ; INTO TABLE (P_TEMP + [Temp1]) INDEX ON Nh_nv2 TAG Nh_nv2 SET RELATION TO ([2] + Nh_nv2) INTO Dmnhnv SET RELATION TO Matx INTO Dmtx ADDITIVE SET ORDER TO Nh_nv2 USE IN Temp1 SELECT CTLUONGT APPEND FROM (P_TEMP + [Temp1]) WAIT CLEAR SELECT *, SPACE(5) AS STT, SPACE(28) AS Tennv; FROM CTLUONGT; WHERE Nam = M.Nam AND Thang = M.Thang AND Nh_nv1=M.Nh_nv1 AND Nh_nv2=M.Nh_nv2 AND Matx =M.Matx; ORDER BY CTLUONGT.Nh_nv1,CTLUONGT.Manv; INTO TABLE(P_TEMP + [Temp2]) 121 INDEX ON Manv TAG Manv SET RELA TO Manv INTO Dmnv REPLACE ALL Tennv WITH Dmnv.Tennv SELECT Temp2 GO top _Rec=0 SCAN _Rec=_Rec+1 GO RECNO() REPLACE STT WITH STR(_Rec,4) ENDSCAN GO TOP ON KEY LABEL F3 DO Luong_F3 with [S] ON KEY LABEL F4 DO Luong_F3 with [M] ON KEY LABEL F8 DO Luong_F8 BROWSE FIELDS STT : 5, ; Thang :H = [Th¸ng] : 5, ; Manv :H = [M· NV] : 14, ; Tennv :H = [Tªn NV] : 22, ; Matx :H = [M· tuyÕn xe], ; Nh_nv1 :H = [Bé phËn], ; Nh_nv2 :H = [Chøc vô], ; Lcb_Hsc :H = [HSL cò], ; Lcb_Hsm :H = [HSL míi], ; Ltg_Clv :H = [C«ng LV], ; Ltg_Ccd :H = [C«ng C§], ; Ltg_Cnlv :H = [C«ng NLV], ; Ltg_Ckx :H = [C«ng Khac], ; Ltg_Cl :H = [C«ng L], ; Ltg_Cdf :H = [C«ng DF],; Ltg_Tt :H = [L­¬ng TG],; Lcp_L :H = [CL P.Vu - Luot] ,; Lcp_Lktl :H = [CL P.Vu - LKTL],; Lcp_Tt :H = [L­¬ng CLPV],; Tg0_Cnl :H = [Thªm giê NL],; 122 Tg0_Ccn :H = [Thªm giê CN],; Tg0_Cnt :H = [Thªm giê NT],; Tg_Tt :H = [TiÒn LTG],; Ptn_Pt :H = [% P.C TN],; Ptn_Tt :H = [TiÒn P.C TN],; Pc3_C :H = [P.C C3-Cg],; Pc3_Tt :H = [TiÒn P.C C3],; Kpt_Kpcd :H = [Kinh phÝ C§],; Kpt_BHXH :H = [BHXH] ,; Kpt_BHYT :H = [BHYT] ,; Kpt_Tdtu :H = [§· t¹m øng],; Kpt_Bttn :H = [Båi th­êng TN],; Kpt_Nolai :H = [Nî l¹i TT],; Kpt_Tt :H = [Tæng tiÒn trõ],; Ttk1_Tt :H = [Th­ëng TK-NL],; Ttk2_Sl :H = [L­îng TK-NL],; Ttk2_Tt :H = [TiÒn TK-NL],; Cong_khac1:H = [Céng kh¸c 1], ; Cong_khac2:H = [Céng kh¸c 2], ; Cong_khac3:H = [Céng kh¸c 3], ; Tru_khac1 :H = [Trõ kh¸c 1],; Tru_khac2 :H = [Trõ kh¸c 2],; Tru_khac3 :H = [Trõ kh¸c 3]; FONT [vn-sans-serif],8; LOCK 4 ; NAME oBrowse ; TITLE "F3-Sua, F8-Xoa NV trong bang luong, Esc-Thoat"; NOMODIFY NOAPPEND NODELETE WINDOW WinBrw ON KEY LABEL F3 ON KEY LABEL F4 ON KEY LABEL F5 ON KEY LABEL F8 USE IN CTLUONGT USE IN Temp2 USE IN Dmnv 123 USE IN Dmnhnv USE IN Dmtx USE IN Chotso POP KEY RETURN *~~~~~~~~~~~~~~ PROCEDURE LUONG_F3 ~~~~~~~~~~~~~~~~ PROCEDURE Luong_F3 PARAMETER _M_S _InSELECT = SELECT() _Recno = RECNO() STORE _M_S TO _Moi_Sua PUSH KEY CLEAR IF RECNO() > RECCOUNT([Temp2]) POP KEY SELECT (_InSelect) RETURN ENDIF SELECT Temp2 IF _Moi_Sua = [M] SCATTER MEMVAR MEMO M.Nop_BHXH = 0 M.Matx_Old = M.Matx ELSE GO _Recno SCATTER MEMVAR MEMO M.tennv = IIF(SEEK(M.Manv,[Dmnv]), ALLTRIM(Dmnv.Tennv), []) M.Tentx = IIF(SEEK(ALLTRIM(M.Matx),[Dmtx]), ALLTRIM(Dmtx.Tentx), []) M.Ten_Nh_nv1=IIF(SEEK([1]+M.Nh_nv1,[Dmnhnv]), ALLTRIM(Dmnhnv.Tennh),[]) M.Ten_Nh_nv2=IIF(SEEK([2]+M.Nh_nv2,[Dmnhnv]), ALLTRIM(Dmnhnv.Tennh),[]) M.Ten_Nh_nv3=IIF(SEEK([3]+M.Nh_nv3,[Dmnhnv]), ALLTRIM(Dmnhnv.Tennh),[]) ENDIF 124 ON KEY LABEL F10 KEYBOARD CHR(23) DO FORM (P_Screen + [Luong_F3]) NAME _SCX LINKED ON KEY LABEL F10 POP KEY IF _Moi_Sua = [S] THEN IF MESSAGEBOX("Cã nhËp tiÕp kh«ng?",4+32+256,"Chu y") 6 RETURN .T. ELSE IF !EOF() SKIP DO Luong_F3 with _M_S ELSE MESSAGEBOX("§· ®Õn dßn cuèi cïng!",0+64,"Chu y") ENDIF ENDIF ENDIF SELECT (_InSelect) RETURN *~~~~~~~~~~~~~~~~ PROCEDURE _Nhan ~~~~~~~~~~~~~~~~~~~ * FUNCTION _Nhan PARAMETERS M_Nhan SELECT Temp2 IF LASTKEY()=27 OR M_Nhan 1 IF _RecNo <= RECCOUNT([Temp2]) GO _RecNo _SCX = "" ENDIF _SCX = "" RETURN .T. ELSE IF M_Nhan = 1 IF EMPTY(ALLTRIM(M.Nh_nv1)) =MESSAGEBOX("Nhãm NV1 kh«ng ®­îc ®Ó trèng",0+48),"Chu y") 125 SELECT Temp2 GO _RecNo RETURN ENDIF M.User_id = M.Name M.Date = DATE() M.Time = TIME() DO CASE CASE _Moi_Sua = [S] SELECT Temp2 GO _RecNo GATHER MEMVAR FLUSH SELECT CTLUONGT SET ORDER TO STT2 IF SEEK(STR(M.Thang,2) +STR(M.Nam,4)+M.Manv+M.Matx) GATHER MEMVAR FLUSH ENDIF CASE _Moi_Sua = [M] SELECT Temp2 IF M.Matx= M.Matx_Old then MESSAGEBOX([M· tuyÔn xe míi trïng m· tuyÕn xe cò] + chr(10)+chr(13) + [Kh«ng l­u ®­îc !],48) RETURN .F. ENDIF GO _RecNo INSERT BLANK GATHER MEMVAR MEMO FLUSH SELECT CTLUONGT SET ORDER TO STT2 IF SEEK(STR(M.Thang,2) +STR(M.Nam,4)+M.Manv+M.Matx_Old) APPEND BLANK 126 GATHER MEMVAR MEMO REPL Nop_BHXH WITH 0 FLUSH ENDIF ENDCASE _SCX = "" REPL MOI WITH 5 UNLOCK IN CTLUONGT ENDIF ENDIF SELECT Temp2 RETURN .T. *~~~~~~~~~~~~~~~~~ PROCEDURE Luong_F8 ~~~~~~~~~~~~~~~~~~ PROCEDURE Luong_F8 SELECT Temp2 IF RECNO() > RECCOUNT([CTLUONGT]) RETURN .T. ENDIF SCATTER MEMVAR MEMO _RecNo = RECNO() IF (MESSAGEBOX('Cã ch¾c ch¾n xãa kh«ng?',4+32+256,'Chu y') 6) GO _Recno RETURN ENDIF M.Time = Time() M.Date = DATE() M.User_Id = M.Name M.Status="*" SET OPTIMIZE ON SET EXCLUSIVE ON SET MULTILOCKS ON && Must be on for table buffering = CURSORSETPROP('Buffering', 5, 'Temp2' ) GATHER MEMVAR FLUSH 127 DELETE SKIP TABLEUPDATE(.T.) SELECT CTLUONGT SET ORDER TO STT2 IF SEEK(ALLTRIM(STR(M.Thang,2)) +ALLTRIM(STR(M.Nam,4)) +ALLTRIM(M.Manv)+ALLTRIM(M.Matx)) GATHER MEMVAR FLUSH DELETE SKIP ENDIF = CURSORSETPROP('Buffering',1, 'Temp2' ) SET EXCLUSIVE OFF SET MULTILOCKS OFF SELECT Temp2 RETURN .T. *!* PROCEDURE _CHK_LG PARAM _ObjectLG,_sort M.Ma = UPPER(EVAL(_ObjectLG.Controlsource)) IF USED([Dmnhnv]) SELECT Dmnhnv ELSE USE (P_Cod + [Dmnhnv]) ORDER Stt ALIAS Dmnhnv IN 0 ENDIF IF USED([Dmtx]) SELECT Dmtx ELSE USE (P_Cod + [Dmtx]) ORDER Matx ALIAS Dmtx IN 0 ENDIF DO CASE CASE _sort = 1 SET FILTER TO Loainh = 1 IN Dmnhnv CASE _sort = 2 128 SET FILTER TO Loainh=2 AND Manh"ALL" IN Dmnhnv CASE _sort = 3 SET FILTER TO Loainh = 3 IN Dmnhnv ENDCASE ON KEY LABEL ENTER do _Nhan_huy with [N] ON KEY LABEL ESC do _Nhan_huy with [H] IF _sort 4 SELECT Dmnhnv BROWSE FIELDS Manh :H = [M· nhãm],; Tennh :H = [Tªn nhãm]; TITLE "ENTER-Nhan, ESC-Thoat" FONT [Vn-sans-serif], 8 NOAPPEND NOMODIFY NODELETE NAME OBrow1 ELSE SELECT Dmtx BROWSE FIELDS Matx :H = [M· tuyÕn xe],; Tentx :H = [Tªn tuyÕn xe]; TITLE "ENTER-Nhan, ESC-Thoat" FONT [Vn-sans-serif], 8 NOAPPEND NOMODIFY NODELETE NAME OBrow2 ENDIF ON KEY LABEL ENTER ON KEY LABEL ESC _ObjectLG.VALUE= M.Ma _ObjectLG.Refresh IF !USED([Dmnhnv]) USE (P_Cod + [Dmnhnv]) ORDER Stt ALIAS Dmnhnv IN 0 ENDIF IF !USED([Dmtx]) USE (P_Cod + [Dmtx]) ORDER Matx ALIAS Dmtx IN 0 ENDIF RETURN ************* PROCEDURE _Nhan_huy PARAMETERS _N_H IF _N_H = [H] 129 IF _sort 4 USE IN Dmnhnv RETURN ELSE USE IN Dmtx RETURN ENDIF ENDIF IF _sort 4 M.Ma = Dmnhnv.Manh _ObjectLG.REFRESH USE IN Dmnhnv ELSE M.Ma = Dmtx.Matx _ObjectLG.REFRESH USE IN Dmtx ENDIF FLUSH RETURN ENDPROC VII. Thủ tục lên báo cáo thanh toán lương hàng tháng *!* ********************************************************** *!* Bao cao thanh toan luong hang thang *!* ********************************************************** CLOSE TABLES ALL USE (P_COD + [Dmnhnv]) ORDER STT ALIAS Dmnhnv IN 0 USE (P_COD + [Dmnv]) ORDER Manv ALIAS Dmnv IN 0 USE (P_COD + [Dmtx]) ALIAS Dmtx IN 0 USE (P_DATA + [CTLUONGT]) ORDER STT ALIAS Ctluongt EXCLUSIVE IN 0 M.Nh_nv2 =UPPER(ALLTR(M.Nh_nv2)) _F=[] _File_Name = [BTTLuong] M.Nhan = 1 M.Nam = YEAR(DATE()) M.Nam1 = YEAR(DATE()) 130 M.Thang = MONTH(DATE()) M.Thang1= MONTH(DATE()) DO FORM (P_SCREEN + "BTTLuong") NAME _SCX LINKED IF M.Nhan = 0 RETURN ENDIF M_Ngay1 = CTOD("01/"+STR(M.thang,2)+"/"+STR(M.Nam,4)) M_Ngay2 = CTOD("01/"+STR(M.thang1,2)+"/"+STR(M.nam1,4)) MyQuery = [,Tong_Luong,Kpt_Tdtu AS Tam_Ung,Kpt_Bttn AS Bttn,Kpt_Kpcd AS Kpcd,Kpt_Bhyt AS Bhyt,Tru_Khac + Tru_Khac1+ Tru_Khac2 AS Thu_Khac,Cong_Khac + Cong_Khac1 + Cong_Khac2 AS Cong_Khac,Kpt_TruNo AS Thu_No_Lai,Kpt_Nolai AS No_Lai,Tien_Linh AS Con_Linh] _MyQuery = [,Tong_Luong, Tam_Ung, Bttn, Kpcd, Bhyt, Thu_No_Lai, Thu_Khac, Cong_Khac, No_Lai, Con_Linh] __TCUOI = STRTRAN(_MyQuery,[,],[,M.]) qr_Lcb = [,Lcb_Hsc,Lcb_Hsm,Lcb_Tt] && Luong co ban _FLcb = [,Lcb_Hsc,Lcb_Hsm,Lcb_Tt] __TLcb = [,M.Lcb_Tt] qr_Ltg_Vp = [,Ltg_Clv,Ltg_Ccd,Ltg_Tt,Ltg_Lcdtt,Ltg_Llvtt] && Luong thoi gian _qr_Ltg_Vp =[,Ltg_Clv,Ltg_Ccd,Ltg_Tt,Ltg_Lcdtt,Ltg_Llvtt] __TLtg_Vp = STRTRAN(_qr_Ltg_Vp,[,],[,M.]) qr_Ltg_Lx = [,Ltg_Cnlv,Ltg_Ckx,Ltg_Cl,Ltg_Cdf,Ltg_Tt] _qr_Ltg_Lx =[,Ltg_Cnlv,Ltg_Ckx,Ltg_Cl,Ltg_Cdf,Ltg_Tt] __TLtg_Lx = STRTRAN(_qr_Ltg_Lx ,[,],[,M.]) qr_Ltg_Sc = [,Ltg_Clv,Ltg_Ccd,Ltg_Tt] _qr_Ltg_Sc=[,Ltg_Clv,Ltg_Ccd,Ltg_Tt] __TLtg_Sc = STRTRAN(_qr_Ltg_Sc,[,],[,M.]) qr_Lcp=[,Lcp_L,Lcp_Lktl,Lcp_Lktltt,Lcp_Tt,Tien_Tn,Ttk1_Tt] && Luong chat luong phuc vu _qr_Lcp=[,Lcp_L,Lcp_Lktl,Lcp_Lktltt,Lcp_Tt,Tien_Tn,Ttk1_Tt] __TLcp = STRTRAN(+_qr_Lcp,[,],[,M.]) qr_Lsp=[,Lsp_C,Lsp_Tt] && Luong chat luong phuc vu _qr_Lsp=[,Lsp_C,Lsp_Tt] __TLsp = STRTRAN(+_qr_Lsp,[,],[,M.]) qr_Tg = [,Tg_Cnl,Tg_Ccn,Tg_Cnt,Tg_Tt] && Luong them gio 131 _qr_Tg =[,Tg_Cnl,Tg_Ccn,Tg_Cnt,Tg_Tt] __TTg = STRTRAN(_qr_TG,[,],[,M.]) qr_Pc3=[,Pc3_C,Pc3_Tt] && Phu cap Ca 3 _qr_Pc3=[,Pc3_C,Pc3_Tt] __TPc3 = STRTRAN(_qr_Pc3,[,],[,M.]) qr_Ptn=[,Ptn_Pt,Ptn_Tt] && Phu cap that nghiep _qr_Ptn =[,Ptn_Pt,Ptn_Tt] __TPtn = STRTRAN(_qr_Ptn,[,],[,M.]) qr_At=[,At_Tt] && Tien an trua _qr_At=[,At_Tt] __TAt= STRTRAN(_qr_At,[,],[,M.]) qr = qr_Lcb _F=_FLcb __T=__TLcb DO CASE CASE M.Nh_nv2 = [LAIXE] OR M.Nh_nv2 = [BANVE] qr = qr + qr_Ltg_Lx + qr_Lcp _F=_F+_qr_Ltg_Lx+_qr_Lcp __T=__T+__TLtg_Lx+__TLcp _file_Name = _file_Name + [Lx] CASE M.Nh_nv2 = [VANPHONG] qr = qr + qr_Ltg_Vp + qr_Pc3 + qr_Ptn + qr_Tg _F=_F+_qr_Ltg_Vp+_qr_Pc3+_qr_Ptn+_qr_Tg __T=__T+__TLtg_Vp+__TPc3+__TPtn+__Ttg _file_Name = _file_Name + [Vp] CASE M.Nh_nv2 = [BAOVE] qr = qr + qr_Ltg_Vp + qr_Pc3 + qr_Ptn + qr_Tg _F=_F+_qr_Ltg_Vp+_qr_Pc3+_qr_Ptn+_qr_Tg __T=__T+__TLtg_Vp+__TPc3+__TPtn+__Ttg _file_Name = _file_Name + [BV] CASE M.Nh_nv2 = [SUACHUA] qr = qr + qr_Ltg_Sc + qr_Lsp+ qr_Ptn + qr_Tg _F=_F+_qr_Ltg_Sc+_qr_Lsp+_qr_Ptn+_qr_tg __T=__T+__TLtg_Sc+__TLsp+__TPtn+__Ttg _file_Name = _file_Name + [SC] 132 CASE M.Nh_nv2 = [VSPT] qr = qr + qr_Ltg_Sc + qr_Ptn + qr_Tg _F=_F+_qr_Ltg_Sc+_qr_ptn+_qr_tg __T=__T+__TLtg_Sc+__TPtn+__Ttg _file_Name = _file_Name + [VSPT] OTHERWISE ENDCASE qr = qr + qr_AT + MyQuery _F=_F+_qr_AT+_MyQuery __T=SUBSTR(__T,2,LEN(__T))+__TAT+__TCuoi __T2=STRTRAN(__T,[,M.],[,M_]) _T=SUBSTR(STRTRAN(__T,[,M.],[,]),3,LEN(__T)) SELECT ; Manv,Nh_nv1,Nh_nv2,Nh_nv3,Matx; &qr; FROM Ctluongt ; WHERE Nh_nv1=M.Nh_nv1 AND; Nh_nv2=M.Nh_nv2 AND; Nh_nv3=M.Nh_nv3 AND ; Matx=M.Matx AND ; IIF(M.Nam==M.Nam1,; (Nam=M.Nam AND BETWEEN(Thang,M.Thang,M.Thang1)),; ((Nam=M.Nam AND BETWEEN(Thang,M.Thang,12)) OR (Nam=M.Nam1 AND BETWEEN(Thang,1,M.Thang1)))); GROUP BY Manv, Nh_nv1,Nh_nv2,Nh_nv3; ORDER BY Manv, Nh_nv1,Nh_nv2,Nh_nv3; INTO TABLE (P_TEMP + "Temp6") PUBLIC &__T2 SUM &_T TO &__T SUM &_T TO &__T2 SELECT ; SPACE(5) AS STT,SPACE(50) AS Tennv, *; FROM Temp6 ; GROUP BY Manv ; 133 ORDER BY Manv ; INTO TABLE (P_TEMP + _File_name) INDEX ON Manv TAG Manv SET RELATION TO Manv INTO Dmnv REPLACE ALL Tennv WITH Dmnv.Tennv GO TOP _Rec=0 SCAN _Rec=_Rec+1 GO RECNO() REPLACE STT WITH STR(_Rec,3) ENDSCAN SET RELATION TO _ERR = ON([ERROR]) ON ERROR * APPEN BLANK GATHER MEMVAR ON ERROR &_ERR REPLACE Tennv WITH [Tæng céng],STT WITH STR(0,3) APPEN BLANK INDEX ON STT + Manv TAG STT USE IN Temp6 USE IN &_File_name USE IN Dmnhnv USE IN Dmnv USE IN CTLUONGT IF M.Thang==M.Thang1 AND M.Nam==M.Nam1 _TITLE = [Bang thanh toan luong thang ] + ALLTRIM(STR(M.Thang)) +[/]+ALLTRIM(STR(M.Nam)) ELSE _TITLE = [Bang thanh toan luong tu thang ]+ ALLTRIM(STR(M.Thang))+[/]+ALLTRIM(STR(M.Nam))+ [ den thang ] + ALLTRIM(STR(M.Thang1))+[/]+ALLTRIM(STR(M.Nam1)) ENDIF SELECT 0 134 USE (P_TEMP + _file_Name) ORDER STT ON KEY LABEL F7 DO Print BROWSE FIELDS STT:5,Tennv :H=[Tªn nh©n viªn] :25 &_F; FONT [vn- sans-serif],8; NAME ObjBrowse ; NOMODIFY NOAPPEND NODELETE NOMENU WINDOW WinBrw; LOCK 2; TITLE _TITLE + [. F7-In,ESC-Thoat] ON KEY LABEL F7&& DO Pr_report RETURN ************* PROCEDURE Print _CLIPTEXt = A_Report(l_report, 3) A_Report(l_report, 3) = _FILE_REPO Set filter to VAL(STT) > 0 DO PR_REPORT WITH .F. Set filter to ENDPROC 135 PHỤLỤC 2 Tài liệu tham khảo 1. ThS. Trần Công Uẩn Giáo trình Cơ sở dữ liệu SQL, Access, NXB Thống kê, Hà Nội, 2000. 2. TS. Trương Văn Tú – TS. Trần Thị Song Minh Giáo trình Hệ thống thông tin quản lý, NXB Thống kê, Hà Nội, 2000. 3. KS. Đinh Xuân Lâm, Vn-Guide Kế toán doanh nghiệp với Visual Foxpro, phân hệ kế toán lương, NXB Thống kê, Hà Nội, 2004. 4. TS. Trần Thị Song Minh Giáo trình Kế toán máy, NXB Lao động – Xã hội, Hà Nội, 2005. 5. TS. Nguyễn Văn Ba Phân tích và thiết kế hệ thống thông tin - các phương pháp có cấu trúc, NXB Đại học quốc gia Hà Nội, Hà Nội, 2005. 6. KS. Đinh Xuân Lâm, Vn-Guide Những bài thực hành Visual Foxpro, NXB Thống kê, Hà Nội, 2004. 7. Văn bản của Phòng Lao động – tiền lương – hành chính, Xí nghiệp Xe buýt Hà Nội. 136 8. Bộ Tài chính Thông tư số 103/2005/TT-BTC – Hướng dẫn tiêu chuẩn và điều kiện của phần mềm kế toán.

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

  • pdftin_05_3784.pdf
Luận văn liên quan