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.
136 trang |
Chia sẻ: lylyngoc | Lượt xem: 2455 | Lượt tải: 0
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 lu ®î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:
- tin_05_3784.pdf