Công thức được cấu hình tại Loại bảng lương hoặc Bảng lương > cột có giá trị cột là Công thức. Xem thêm bài Công thức tính lương.
=. Nhập IF(A > 0, 1, 0), không nhập =IF(...).IF, if đều dùng được. Nên viết chữ hoa cho dễ đọc.,."...". Ví dụ "Hợp đồng thử việc". Không dùng dấu nháy đơn.0.8, không dùng 0,8.YYYY-MM-DD (ví dụ 2026-09-30). Một số hàm ngày nhận thêm d/m/Y.A-Z, 0-9, _. Hệ thống tự viết hoa. Không được trùng alias trong cùng loại bảng lương và không được tự tham chiếu chính cột đang soạn.| Nhóm | Toán tử | Ý nghĩa |
|---|---|---|
| Số học | + - * / |
Cộng, trừ, nhân, chia |
| Số học | ^ |
Luỹ thừa (số mũ nguyên) |
| Số học | % |
X % Y là số dư của phép chia. X% đứng sau một số là chia 100 |
| Nhóm | ( ) |
Nhóm phép tính để đổi thứ tự ưu tiên |
| So sánh | = != > >= < <= |
Bằng, khác, lớn hơn, lớn hơn hoặc bằng, nhỏ hơn, nhỏ hơn hoặc bằng |
| Logic | && |
VÀ: cả hai vế đúng |
| Logic | || |
HOẶC: ít nhất một vế đúng |
Thứ tự ưu tiên từ cao đến thấp: ^, rồi * / %, rồi + -, rồi các phép so sánh, rồi && ||. Khi trộn && và || trong cùng một điều kiện, hãy dùng dấu ngoặc để rõ ý: (A = 1 && B = 2) || C = 3.
Lưu ý quan trọng:
AND(), OR(), NOT() và không có hàm SUM(). Dùng &&, ||. Muốn cộng nhiều cột thì dùng +: LUONG_CB + PHU_CAP. Muốn tổng theo nhiều dòng thì dùng SUB_SUM hoặc SA_SUM (mục 6, 7).<> để so sánh khác. Dùng !=."Hợp đồng thử việc" khác "hợp đồng thử việc". So sánh phải khớp đúng từng ký tự, kể cả dấu cách."10" bằng 10).+ giữa hai số là cộng. Nếu một vế là chữ thì kết quả là nối chuỗi./ cho 0 báo lỗi ("Divide by zero error encountered"), không ra 0. Dùng SAFE_DIV (mục 4) để tránh.* 0.8) cho chắc chắn.&& và || dừng sớm: nếu vế trái đã đủ quyết định kết quả thì vế phải không được tính.true hoặc false.Chỉ cần viết từ khoá cột (alias) mà bạn đã đặt, không cần tiền tố. Ví dụ cột "Lương cơ bản" có alias LUONG_CB thì công thức LUONG_CB * 0.8 lấy giá trị cột này của đúng nhân sự đang tính.
Thứ tự hệ thống tìm một từ khoá:
0.Vì vậy một từ khoá gõ sai sẽ không báo lỗi mà ra 0. Hãy kiểm tra kỹ chính tả. Hệ thống tự phát hiện các cột tham chiếu vòng nhau.
ALIAS_BANG__ALIAS_COTViết alias của bảng lương, hai dấu gạch dưới, rồi alias của cột. Ví dụ BL_KDHN__T_LTT là cột T_LTT của bảng lương có alias BL_KDHN. Dạng này dùng trong các hàm SA_* (mục 6).
Các cột chuẩn hiển thị trong danh sách từ khoá của trình soạn công thức. Tên hiển thị có thể khác đôi chút theo ngôn ngữ và cấu hình của doanh nghiệp.
Kiểu dữ liệu quyết định cách so sánh: cột kiểu chữ (ví dụ CONTRACT_TITLE, JOB_TITLE) phải so sánh với chuỗi trong nháy kép (CONTRACT_TITLE = "Hợp đồng thử việc"). Cột kiểu số so sánh với số (CAL_WORKDAY >= 22). Mã nhân sự PERSONNEL_CODE luôn được xem là chữ, kể cả khi mã chỉ gồm chữ số.
Hợp đồng
| Từ khoá | Ý nghĩa | Kiểu |
|---|---|---|
CONTRACT_TITLE |
Tên loại hợp đồng của nhân sự (hiển thị là "Tên hợp đồng"), lấy từ danh mục Loại hợp đồng. Ví dụ "Hợp đồng thử việc", "Hợp đồng lao động 12 tháng". Đây là tên loại trong danh mục, không phải tiêu đề của từng bản hợp đồng | Chữ |
CONTRACT_TYPE |
Mã loại hợp đồng viết hoa: THOIVU, LAODONG, KHONGTHOIHAN, THUVIEC, DAOTAONGHE, DICHVU |
Chữ |
CONTRACT_TYPE_ID |
ID của loại hợp đồng | Số |
CONTRACT_CODE |
Mã hợp đồng | Chữ |
CONTRACT_DATE_START, CONTRACT_DATE_FINISH |
Ngày bắt đầu, ngày kết thúc hợp đồng (định dạng YYYY-MM-DD) |
Chữ |
CONTRACT_DURATION |
Thời hạn hợp đồng (hoặc "Vô thời hạn") | Chữ |
DATE_END_PROBATION |
Ngày kết thúc thử việc | Ngày |
Ghi chú về CONTRACT_TITLE và CONTRACT_TYPE:
CONTRACT_TITLE mà bạn gọi trực tiếp tên này trong công thức, hệ thống trả 0 thay vì chuỗi rỗng. Vì vậy nên thêm cột "Tên hợp đồng" (giá trị cột CONTRACT_TITLE) vào mẫu bảng lương nếu muốn so sánh với chuỗi.CONTRACT_TYPE với mã (ví dụ CONTRACT_TYPE = "THUVIEC") khi doanh nghiệp có thể đổi tên loại hợp đồng trong danh mục. Dùng CONTRACT_TITLE khi bạn cần theo đúng tên đang đặt trong danh mục.Nhân sự và tổ chức
| Từ khoá | Ý nghĩa |
|---|---|
PERSONNEL_CODE |
Mã nhân sự |
PERSONNEL_NAME |
Họ tên |
PRIVATE_CODE |
CMT / Căn cước / Hộ chiếu |
DEPARTMENT_CODE, DEPARTMENT_NAME, DEPARTMENT_FULLNAME |
Mã phòng ban, tên phòng ban, tên phòng ban đầy đủ |
DEPARTMENT_DEEP0 đến DEPARTMENT_DEEP6 |
Công ty và phòng ban cấp 1 đến cấp 6 |
JOB_TITLE |
Chức vụ |
POSITION_TITLE |
Vị trí |
GENDER, BIRTHDAY |
Giới tính, ngày sinh |
DATE_JOIN, DATE_REAL, YEAR_JOIN |
Ngày vào công ty, ngày vào chính thức, thâm niên |
NUMBER_DEPENDENT |
Số người phụ thuộc |
EMAIL, MOBILE, NATIONALITY, JOB_TAX |
Email, số điện thoại, quốc tịch, mã số thuế cá nhân |
BANK_ACCOUNT_NAME, BANK_ACCOUNT, BANK_NAME, BANK_BRANCH, BANK_CODE |
Thông tin ngân hàng |
Lương, thuế, bảo hiểm (các cột có công thức mặc định, có thể chỉnh)
| Từ khoá | Ý nghĩa |
|---|---|
SALARY_REAL |
Lương vị trí |
SALARY_PREMIUM |
Lương đóng bảo hiểm |
SALARY_ALLOW, SALARY_ALLOW_TAX, SALARY_ALLOW_NO_TAX |
Lương phụ cấp, phụ cấp tính thuế, phụ cấp không tính thuế |
SALARY_END |
Tổng tiền (lương thực nhận) |
SALARY_ENTERPRISE, SALARY_PRIVATE |
Lương chuyển qua tài khoản doanh nghiệp, tài khoản cá nhân |
SALARY_PAID, SALARY_REST |
Lương đã chi trả, lương chưa thanh toán |
GROSS_INCOME |
Tổng thu nhập |
TAXABLE_INCOME |
Thu nhập chịu thuế |
NON_TAXABLE_INCOME |
Thu nhập không chịu thuế |
DEDUCT_TOTAL, DEDUCT_PRIVATE, DEDUCT_INSURANCE |
Tổng giảm trừ, mức giảm trừ cá nhân, khấu trừ BHXH BHYT BHTN |
NUMBER_RELATION |
Số người phụ thuộc dùng tính thuế |
ASSESSABLE_INCOME |
Thu nhập tính thuế (sau các khoản giảm trừ) |
RATE_TAX |
Thuế suất |
PIT |
Thuế thu nhập cá nhân |
UNION, UNION_EMPLOYER |
Kinh phí công đoàn, kinh phí công đoàn của người sử dụng lao động |
KPI_MONTH |
Điểm KPI tháng |
Chấm công (lấy từ bảng chấm công tháng)
| Từ khoá | Ý nghĩa |
|---|---|
CAL_WORKDAY |
Công làm việc |
CAL_WORKHOUR |
Giờ làm việc thực tính |
NUMBER_WORKDAY, NUMBER_WORKDAY_AUTO |
Số công chuẩn, số công chuẩn tự động |
WORKDAY_OVERTIME, CAL_WORKDAY_OVERTIME, WORKHOUR_OVERTIME, CAL_WORKHOUR_OVERTIME |
Công và giờ làm thêm |
LATE, SOON, LATE_MINUTE, SOON_MINUTE |
Số lần và số phút đi muộn, về sớm |
LEAVE_P, LEAVE_NOREASON |
Số công nghỉ phép, số công nghỉ không lý do |
OFF_TIME |
Số giờ vắng mặt không lương |
FURLOUGH_OPEN, FURLOUGH_USED, FURLOUGH_CLOSED |
Phép năm đầu kỳ, đã dùng, cuối kỳ |
BONUS_MONEY, PENALTY_MONEY, WELFARE_MONEY |
Tiền thưởng, tiền phạt, tiền phúc lợi |
Ngoài ra, các biến tuỳ biến (loại hằng số, sheet tháng) mà doanh nghiệp khai báo trong mẫu bảng chấm công cũng xuất hiện trong danh sách từ khoá.
Từ khoá hệ thống
| Từ khoá | Ý nghĩa |
|---|---|
SALARY_MONTH, SALARY_YEAR |
Tháng, năm của bảng lương đang tính |
PAY_DATE |
Ngày chi lương |
IS_MAIN |
Loại dòng |
Từ khoá tìm kiếm: hàm IF, điều kiện nếu thì ngược lại, so sánh chuỗi, IF lồng nhau.
Cú pháp: IF(điều_kiện, giá_trị_nếu_đúng, giá_trị_nếu_sai)
| Tham số | Bắt buộc | Ý nghĩa |
|---|---|---|
điều_kiện |
Có | Biểu thức so sánh hoặc logic, ví dụ CONTRACT_TITLE = "Hợp đồng thử việc" |
giá_trị_nếu_đúng |
Có | Số, chuỗi, từ khoá, biểu thức, hoặc một hàm khác |
giá_trị_nếu_sai |
Có | Như trên |
Kết quả: giá trị của nhánh được chọn. Chỉ nhánh được chọn mới được tính.
Ví dụ:
IF(CONTRACT_TITLE = "Hợp đồng thử việc", LUONG_CB * 0.8, LUONG_CB)IF(JOB_TITLE = "Quản lý" || JOB_TITLE = "Tổ trưởng", 2000000, 700000)IF(CAL_WORKDAY >= 22 && LATE = 0, 500000, 0)IF(KPI_MONTH >= 90, 3000000, IF(KPI_MONTH >= 70, 2000000, 1000000))Lưu ý:
0 nếu không muốn cộng gì.0, chuỗi rỗng, "0", false; còn lại là đúng.Cú pháp: SAFE_DIV(tử_số, mẫu_số, [giá_trị_mặc_định])
| Tham số | Bắt buộc | Ý nghĩa |
|---|---|---|
tử_số |
Có | Số bị chia |
mẫu_số |
Có | Số chia |
giá_trị_mặc_định |
Không | Giá trị trả về khi mẫu số bằng 0. Bỏ trống thì trả 0 |
Kết quả: tử_số / mẫu_số. Khi mẫu số bằng 0 thì trả giá trị mặc định (hoặc 0), không báo lỗi.
Ví dụ: lương một ngày công: SAFE_DIV(LUONG_CB, NUMBER_WORKDAY). Có mặc định: SAFE_DIV(A, B, -1).
Cú pháp: ROUND(giá_trị, [số_chữ_số])
Làm tròn kiểu "5 trở lên thì làm tròn lên". số_chữ_số mặc định là 0. Số chữ số âm làm tròn về hàng chục, trăm, nghìn. Giá trị không phải số cho kết quả 0.
Ví dụ: ROUND(1234.567, 2) cho 1234.57. ROUND(1234567, -3) cho 1235000.
Cú pháp: CEIL(giá_trị). Làm tròn lên số nguyên gần nhất. CEIL(2.1) cho 3.
Cú pháp: FLOOR(giá_trị). Làm tròn xuống số nguyên gần nhất. FLOOR(2.9) cho 2.
Cú pháp: MAX(giá_trị_1, giá_trị_2, ...). Nhận nhiều tham số, trả về giá trị lớn nhất.
Ví dụ: không cho lương tính thuế âm: MAX(0, THU_NHAP - GIAM_TRU).
Cú pháp: MIN(giá_trị_1, giá_trị_2, ...). Nhận nhiều tham số, trả về giá trị nhỏ nhất.
Ví dụ: khống chế mức đóng bảo hiểm không vượt trần (thay TRAN_BH bằng cột hoặc hằng số trần của doanh nghiệp): MIN(LUONG_BH, TRAN_BH).
Cú pháp: AVG(giá_trị_1, giá_trị_2, ...). Trả về trung bình cộng của các tham số truyền vào, không phải của một cột qua nhiều dòng. Để tính trung bình một cột trên nhiều nhân sự hoặc nhiều dòng, dùng SA_AVG hoặc SUB_AVG.
Ví dụ: AVG(10, 20, 30) cho 20.
Các hàm DATE, MONTH, YEAR, WEEK lấy thời điểm tại lúc hệ thống tính lương, không phải tháng của bảng lương. Muốn dùng tháng và năm của bảng lương đang tính, hãy dùng từ khoá SALARY_MONTH, SALARY_YEAR.
Cú pháp: DATE([số_ngày_lệch], [định_dạng])
| Tham số | Ý nghĩa |
|---|---|
số_ngày_lệch |
Số ngày cộng thêm (dương) hoặc trừ đi (âm), phải là số gõ trực tiếp, không dùng biểu thức hay từ khoá. Mặc định 0 |
định_dạng |
Định dạng ngày, mặc định Y-m-d. Có thể dùng d/m/Y |
Kết quả: chuỗi ngày. Ví dụ: DATE(-1) là ngày hôm qua. DATE(0, "d/m/Y") là hôm nay theo dạng ngày/tháng/năm.
Từ khoá tìm kiếm: tính thâm niên, tính số tháng làm việc, số ngày giữa hai mốc thời gian.
Cú pháp: DATE_DIF(ngày_bắt_đầu, ngày_kết_thúc, "đơn_vị")
Cả ba tham số đều bắt buộc. Ngày ở dạng YYYY-MM-DD hoặc d/m/Y. đơn_vị viết chữ hoa trong nháy kép:
| Đơn vị | Kết quả |
|---|---|
"D" |
Số ngày giữa hai ngày |
"M" |
Chênh lệch số tháng lịch (chỉ tính theo tháng và năm, không xét ngày trong tháng) |
"Y" |
Số năm tròn (trừ 1 nếu chưa đến ngày kỷ niệm) |
"MD", "YM", "YD" |
Số ngày bỏ qua tháng; số tháng bỏ qua năm; số ngày bỏ qua năm |
Kết quả: số. Nếu một trong hai ngày rỗng thì trả 0. Nếu ngày bắt đầu sau ngày kết thúc thì kết quả là số âm. Đơn vị sai cũng trả 0.
Ví dụ: thâm niên theo năm: DATE_DIF(DATE_JOIN, DATE(0), "Y"). Số tháng làm việc: DATE_DIF("2024-01-15", "2026-10-06", "M") cho 33.
Cú pháp: DAY_WEEK([ngày], [định_dạng]). Không truyền ngày thì lấy hôm nay.
| Định dạng | Kết quả |
|---|---|
"dvi" |
Thứ bằng tiếng Việt |
"den" |
Thứ bằng tiếng Anh (Monday, Tuesday...) |
| Khác hoặc bỏ trống | Số từ 1 (Thứ Hai) đến 7 (Chủ nhật) |
Cú pháp: GET_MONTH(ngày). Trả số tháng từ 1 đến 12 của ngày (YYYY-MM-DD). Ví dụ: GET_MONTH(DATE_JOIN).
Cú pháp: GET_YEAR(ngày). Trả năm 4 chữ số của ngày. Ví dụ: GET_YEAR(BIRTHDAY).
Cú pháp: MONTH([bước]). Trả số tháng hiện tại cộng thêm bước (có thể âm). MONTH(-1) là tháng trước. Chỉ nhận số gõ trực tiếp. Hàm này tự quay vòng tháng nhưng không điều chỉnh năm.
Cú pháp: YEAR([bước]). Trả năm hiện tại cộng thêm bước.
Cú pháp: WEEK([bước]). Trả số tuần (theo chuẩn ISO) hiện tại cộng thêm bước tuần (có thể âm).
Nhóm hàm SA_* gom dữ liệu của một cột từ một bảng lương (có thể là bảng khác, tháng khác).
Cú pháp chung: SA_xxx(wage_alias, time, keyword, [condition])
| Tham số | Bắt buộc | Ý nghĩa |
|---|---|---|
wage_alias |
Có | Từ khoá (alias) của bảng lương cần lấy dữ liệu, trong nháy kép. Giá trị đặc biệt "CURRENT" là bảng lương hiện tại |
time |
Có | Tháng cần lấy so với tháng của bảng lương hiện tại: 1 là tháng hiện tại, -1 tháng trước, -2 hai tháng trước, -3 ba tháng trước. Có thể dùng số âm lớn hơn. Số không âm (0, 1, 2...) đều được hiểu là tháng hiện tại |
keyword |
Có | Cột cần tính, viết theo dạng ALIAS_BANG__ALIAS_COT (mục 3.2). Phải là từ khoá cột, không phải chuỗi chữ |
condition |
Không | Điều kiện lọc, được kiểm tra cho từng dòng; dòng nào thoả mới được tính |
Phạm vi tính (rất quan trọng): nhóm SA_SUM, SA_AVG, SA_COUNT, SA_MAX, SA_MIN gộp tất cả nhân sự (mọi dòng chính) của bảng lương đích trong tháng đó. Hàm không tự lọc theo nhân sự đang được tính. Muốn lấy riêng một nhân sự, hãy đưa vào condition điều kiện theo mã nhân sự, ví dụ BL_KDHN__PERSONNEL_CODE = "NV001". Riêng SA_VALUE lấy giá trị của chính nhân sự đang tính (xem bên dưới).
Điều kiện (condition): là biểu thức bình thường (so sánh, &&, ||), có thể so sánh số hoặc chuỗi. Cột của bảng được viết ALIAS_BANG__ALIAS_COT. Khi lấy dữ liệu từ chính bảng lương đang tính và cùng tháng, có thể viết alias cột không cần tiền tố.
Khi không có dòng nào: các hàm trả 0. Nếu thiếu wage_alias, báo lỗi "Wage code is required". Nếu không tìm thấy bảng lương hiện tại, báo lỗi "Wage is not found".
Khi lấy dữ liệu tháng trước (time âm): dùng alias bảng lương thật thay vì "CURRENT".
Cú pháp: SA_SUM(wage_alias, time, keyword, [condition]). Trả tổng giá trị cột trên các dòng thoả điều kiện.
Ví dụ: tổng quỹ lương tháng trước của bảng kinh doanh Hà Nội: SA_SUM("BL_KDHN", "-1", BL_KDHN__T_LTT).
Cú pháp: SA_AVG(wage_alias, time, keyword, [condition]). Trả trung bình cộng cột, làm tròn 2 chữ số. Số dòng dùng để chia là số dòng thoả điều kiện, kể cả dòng có giá trị 0 hoặc trống (tính là 0).
Ví dụ: trung bình cột "Tổng lương thực tế" (T_LTT) của bảng BL_KDHN tháng hiện tại, với điều kiện tổng lương thực tế lớn hơn 1.000.000: SA_AVG("BL_KDHN", "1", BL_KDHN__T_LTT, BL_KDHN__T_LTT > 1000000) Nếu có ba dòng 15.000.000, 15.000.000 và 10.000.000 thì kết quả là 13.333.333.
Cú pháp: SA_COUNT(wage_alias, time, keyword, [condition]). Đếm số dòng thoả điều kiện mà cột có giá trị khác 0 và khác rỗng. Dòng có giá trị 0 hoặc rỗng không được đếm.
Cú pháp: SA_MAX(wage_alias, time, keyword, [condition]). Trả giá trị lớn nhất của cột trên các dòng thoả điều kiện, làm tròn 2 chữ số. Trả 0 nếu không có dòng nào.
Cú pháp: SA_MIN(wage_alias, time, keyword, [condition]). Trả giá trị nhỏ nhất của cột trên các dòng thoả điều kiện, làm tròn 2 chữ số. Trả 0 nếu không có dòng nào.
Từ khoá tìm kiếm: lấy lương tháng trước, lấy giá trị cột của tháng trước của nhân sự.
Cú pháp: SA_VALUE(wage_alias, time, keyword). Ba tham số đều bắt buộc, không có condition.
Kết quả: giá trị keyword ở bảng lương có alias wage_alias, tháng tương ứng với time, của chính nhân sự đang được tính. Nếu nhân sự không có dòng ở bảng đó thì trả 0. keyword có thể là một cột (BL_THANG__LUONG_CB) hoặc một biểu thức trên các cột của bảng đó. Chỉ lấy bảng lương tự động tạo (không lấy bảng nhập tay).
Ví dụ: lương cơ bản của nhân sự ở bảng BL_THANG tháng trước: SA_VALUE("BL_THANG", "-1", BL_THANG__LUONG_CB).
Một nhân sự có thể có nhiều dòng trong cùng bảng lương (một dòng chính và các dòng con, khi nhân sự bị tách dòng, ví dụ làm ở nhiều phòng ban). Nhóm SUB_* gộp giá trị một cột trên các dòng con đó cho cùng một nhân sự, trong cùng bảng lương. Nhân sự không bị tách dòng thì kết quả là giá trị của chính dòng đó.
Cú pháp chung: SUB_xxx(ALIAS_COT). Chỉ có một tham số bắt buộc: từ khoá cột cần gộp. Thiếu tham số thì báo lỗi "Hàm gộp dòng con cần tên cột, ví dụ SUB_SUM(LUONG_CO_BAN)".
| Hàm | Kết quả |
|---|---|
SUB_SUM(ALIAS_COT) |
Tổng giá trị cột trên các dòng con |
SUB_AVG(ALIAS_COT) |
Trung bình cộng, làm tròn 2 chữ số |
SUB_MAX(ALIAS_COT) |
Giá trị lớn nhất |
SUB_MIN(ALIAS_COT) |
Giá trị nhỏ nhất |
Kết quả: số. Không có dữ liệu thì trả 0. Giá trị không phải số bị bỏ qua. Cột kiểu chữ không cộng được.
Ví dụ: tổng lương ngày công của nhân sự trên mọi dòng con: SUB_SUM(LUONG_NGAY_CONG).
Lưu ý: hệ thống kiểm tra khi lưu mẫu. Nếu các cột tham chiếu vòng nhau qua hàm gộp dòng con sẽ báo lỗi, và cột nguồn bị xoá hoặc đổi mã cũng báo lỗi.
Cả hai hàm có một tham số: thu nhập tính thuế. Hàm áp biểu thuế trực tiếp lên số bạn truyền vào và không tự trừ giảm trừ gia cảnh hay bảo hiểm. Hãy truyền vào thu nhập đã trừ các khoản giảm trừ, thường là cột ASSESSABLE_INCOME (Thu nhập tính thuế).
Biểu thuế được chọn theo ngày chi lương của bảng lương (nếu trống thì theo ngày tạo bảng):
Cú pháp: SA_PIT(thu_nhập_tính_thuế). Trả số tiền thuế phải nộp. Thu nhập bằng 0 hoặc âm thì trả 0.
Ví dụ: cột Thuế thu nhập cá nhân: SA_PIT(ASSESSABLE_INCOME). Với thu nhập tính thuế 15.000.000 đồng, biểu 5 bậc cho 1.000.000 đồng, biểu 7 bậc cho 1.500.000 đồng.
Cú pháp: SA_RATE_TAX(thu_nhập_tính_thuế). Trả thuế suất theo phần trăm dưới dạng số (5, 10, 15, 20, 25, 30, 35), không chia 100.
Ví dụ: cột Thuế suất: SA_RATE_TAX(ASSESSABLE_INCOME). Thuế suất mặc định của cột RATE_TAX còn xét thêm loại hợp đồng (thử việc, dịch vụ, đào tạo nghề tính 10%).
| Thu nhập tính thuế / tháng | Thuế suất | Số trừ |
|---|---|---|
| Đến 10 triệu | 5% | 0 |
| Trên 10 đến 30 triệu | 10% | 500.000 |
| Trên 30 đến 60 triệu | 20% | 3.500.000 |
| Trên 60 đến 100 triệu | 30% | 9.500.000 |
| Trên 100 triệu | 35% | 14.500.000 |
| Thu nhập tính thuế / tháng | Thuế suất | Số trừ |
|---|---|---|
| Đến 5 triệu | 5% | 0 |
| Trên 5 đến 10 triệu | 10% | 250.000 |
| Trên 10 đến 18 triệu | 15% | 750.000 |
| Trên 18 đến 32 triệu | 20% | 1.650.000 |
| Trên 32 đến 52 triệu | 25% | 3.250.000 |
| Trên 52 đến 80 triệu | 30% | 5.850.000 |
| Trên 80 triệu | 35% | 9.850.000 |
Cách tính: thuế = thu nhập tính thuế × thuế suất − số trừ. Hướng dẫn đổi mức giảm trừ gia cảnh và biểu thuế theo quy định mới xem bài Hướng dẫn chỉnh sửa công thức thay đổi cách tính thuế TNCN.
Các hàm này đọc dữ liệu từ Import dữ liệu được khai báo trong mẫu bảng lương (ví dụ file Excel chứa số liệu doanh số, tiền ăn, sản lượng).
Cú pháp chung: XXX_DATA_VALUE(tên_dữ_liệu, tên_cột, [điều_kiện])
| Tham số | Bắt buộc | Ý nghĩa |
|---|---|---|
tên_dữ_liệu |
Có | Từ khoá (alias) của dữ liệu Import trong mẫu bảng lương |
tên_cột |
Có | Tên cột trong dữ liệu Import, đúng như tiêu đề cột |
điều_kiện |
Không | Biểu thức lọc, kiểm tra cho từng dòng của dữ liệu Import |
Quan trọng: các hàm này không tự lọc theo nhân sự. Nếu không có điều kiện, kết quả tính trên toàn bộ dòng của dữ liệu Import. Muốn lấy dữ liệu riêng của từng nhân sự, hãy đặt điều kiện so khớp mã nhân sự. Trong điều kiện, dùng DATA_FIELD("tên cột") để lấy giá trị của một ô trong dòng đang xét.
| Hàm | Kết quả |
|---|---|
GET_DATA_VALUE(...) |
Giá trị cột của dòng đầu tiên thoả điều kiện (số hoặc chữ) |
SUM_DATA_VALUE(...) |
Tổng giá trị cột |
AVG_DATA_VALUE(...) |
Trung bình cộng giá trị cột (làm tròn 5 chữ số) |
MAX_DATA_VALUE(...) |
Giá trị lớn nhất (tính từ 0, nên tập toàn số âm cho kết quả 0) |
MIN_DATA_VALUE(...) |
Giá trị nhỏ nhất |
Cú pháp: DATA_FIELD("tên_cột"). Chỉ dùng bên trong điều kiện của các hàm *_DATA_VALUE; nó đại diện cho giá trị ô thuộc cột đó của dòng Import đang xét.
Ví dụ minh hoạ cú pháp (thay tên dữ liệu và tên cột theo dữ liệu Import của bạn): tổng số ngày công của nhân sự đang tính, lấy từ Import có alias CHAM_CONG, cột SO_NGAY, khớp theo cột MA_NV: SUM_DATA_VALUE("CHAM_CONG", "SO_NGAY", DATA_FIELD("MA_NV") = PERSONNEL_CODE)
Lưu ý: thiếu tên_dữ_liệu thì báo lỗi "Data name is required". Không tìm thấy dữ liệu Import thì kết quả rỗng hoặc 0.
Cú pháp: KPI_VALUE("tên_mẫu_KPI", time)
| Tham số | Bắt buộc | Ý nghĩa |
|---|---|---|
tên_mẫu_KPI |
Có | Tên mẫu KPI trong phân hệ KPI, viết đúng tên, trong nháy kép |
time |
Có | Tháng lấy KPI so với tháng bảng lương: 1 tháng hiện tại, -1 tháng trước, -2, -3 |
Kết quả: số. Là kết quả (result) KPI của chính nhân sự đang tính, trong tháng tương ứng, thuộc mẫu KPI đã chọn, chỉ lấy các phiếu KPI ở trạng thái đã chốt. Nếu có nhiều bản ghi thì lấy kết quả lớn nhất. Không có KPI thì trả 0.
Lưu ý: nếu gõ sai tên mẫu KPI, hàm không báo lỗi mà trả 0.
Ví dụ: thưởng theo KPI tháng trước: KPI_VALUE("KPI Kinh doanh", "-1") * 100000.
Nhóm hàm này đọc dữ liệu từ các đối tượng khác trong hệ thống (ví dụ phiếu thu, đơn từ). Đối tượng, trường và điều kiện được chọn bằng giao diện của trình soạn công thức, nên nên chọn từ danh sách gợi ý thay vì gõ tay.
| Hàm | Cú pháp | Kết quả |
|---|---|---|
FIELD_VALUE |
FIELD_VALUE(đối_tượng, trường, [điều_kiện], [kiểu_hiển_thị]) |
Giá trị của trường ở bản ghi đầu tiên thoả điều kiện. kiểu_hiển_thị là "display" (như trên giao diện), "export" (như khi xuất file) hoặc "raw" (giá trị thô, ví dụ ID) |
SUM_OBJECT |
SUM_OBJECT(đối_tượng, trường, [điều_kiện]) |
Tổng giá trị trường. Không có bản ghi thì trả 0 |
MAX_OBJECT |
MAX_OBJECT(đối_tượng, trường, [điều_kiện]) |
Giá trị lớn nhất |
MIN_OBJECT |
MIN_OBJECT(đối_tượng, trường, [điều_kiện]) |
Giá trị nhỏ nhất |
AVG_OBJECT |
AVG_OBJECT(đối_tượng, trường, [điều_kiện]) |
Giá trị trung bình |
COUNT_OBJECT |
COUNT_OBJECT(đối_tượng, [điều_kiện]) |
Số bản ghi thoả điều kiện |
Hàm lọc dùng làm điều_kiện (chỉ dùng làm tham số điều kiện của các hàm trên, không dùng trực tiếp trong biểu thức số hay IF):
| Hàm | Lọc theo |
|---|---|
IN_THIS_MONTH(trường) |
Trường ngày thuộc tháng hiện tại |
IN_PREV_MONTH(trường) |
Trường ngày thuộc tháng trước |
IN_NEXT_MONTH(trường) |
Trường ngày thuộc tháng sau |
IN_THIS_YEAR(trường) |
Trường ngày thuộc năm hiện tại |
IN_PREV_YEAR(trường) |
Trường ngày thuộc năm trước |
IN_DATE(trường, từ_ngày, đến_ngày) |
Trường ngày nằm trong khoảng, gồm cả hai ngày đầu và cuối |
FIELD_EMPTY(trường) |
Trường rỗng |
FIELD_NOT_EMPTY(trường) |
Trường có giá trị |
Lưu ý: các hàm IN_* tính theo tháng và năm của máy chủ tại thời điểm tính, không theo kỳ lương của bảng. Có thể kết hợp nhiều điều kiện bằng &&.
Cú pháp: GET_SUB_DEPARTMENTS(phòng_ban). Trả chuỗi ID các phòng ban con của phòng ban. Trả chuỗi rỗng nếu không có.
Cú pháp: USER_RELATIONS(người_dùng_hoặc_phòng_ban, [quan_hệ], [loại])
| Loại | Kết quả |
|---|---|
"user" (mặc định) |
Danh sách ID người dùng liên quan |
"count_user" |
Số người dùng liên quan |
"department" |
Theo phòng ban |
"count_user_department" |
Số người dùng liên quan theo phòng ban |
Không có người dùng hoặc phòng ban thì báo lỗi "User/deparment is not found"; không tìm thấy quan hệ thì báo lỗi "Relation not found".
Dùng hàm IF so sánh CONTRACT_TITLE (tên loại hợp đồng) hoặc CONTRACT_TYPE (mã loại hợp đồng):
IF(CONTRACT_TITLE = "Hợp đồng thử việc", LUONG_CB * 0.8, LUONG_CB)IF(CONTRACT_TYPE = "THUVIEC", LUONG_CB * 0.8, LUONG_CB)Trong đó LUONG_CB là từ khoá của cột lương cơ bản trong bảng lương của bạn. Hãy thay bằng alias thực tế.
Cần lưu ý:
CONTRACT_TITLE) hoặc "Loại hợp đồng" (CONTRACT_TYPE) vào mẫu bảng lương để giá trị rỗng được hiểu là chuỗi rỗng thay vì 0.Dùng toán tử ||: IF(CONTRACT_TYPE = "THUVIEC" || CONTRACT_TYPE = "DICHVU", LUONG_CB * 0.8, LUONG_CB).
Dùng IF lồng: IF(CONTRACT_TYPE = "THUVIEC", 0.8, IF(CONTRACT_TYPE = "DICHVU", 0.9, 1)). Nhân kết quả này với lương: LUONG_CB * IF(CONTRACT_TYPE = "THUVIEC", 0.8, IF(CONTRACT_TYPE = "DICHVU", 0.9, 1)).
Đặt giá trị trong dấu nháy kép và dùng =: JOB_TITLE = "Quản lý". So sánh phân biệt chữ hoa, chữ thường. Không dùng dấu nháy đơn và không dùng <> (dùng !=).
LUONG_CB / NUMBER_WORKDAY * CAL_WORKDAY. Để tránh lỗi khi số công chuẩn bằng 0: SAFE_DIV(LUONG_CB, NUMBER_WORKDAY) * CAL_WORKDAY.
Dùng SA_VALUE: SA_VALUE("BL_THANG", "-1", BL_THANG__LUONG_CB) (mục 6).
Cột Thuế TNCN dùng SA_PIT(ASSESSABLE_INCOME); cột Thuế suất dùng SA_RATE_TAX(ASSESSABLE_INCOME) (mục 8).
Không. Các hàm SA_SUM, SA_AVG, SA_COUNT, SA_MAX, SA_MIN gộp toàn bộ nhân sự của bảng lương đích. Chỉ SA_VALUE lấy theo chính nhân sự. Muốn lấy riêng một nhân sự bằng các hàm SA_*, dùng condition theo mã nhân sự (mục 6).
Không. Dùng toán tử + để cộng, và && || cho logic (mục 2). Với tổng theo nhiều dòng hoặc nhiều nhân sự, dùng SUB_SUM hoặc SA_SUM.
Một từ khoá không tồn tại hoặc gõ sai sẽ trả 0 mà không báo lỗi (mục 3.1). Kiểm tra lại chính tả từ khoá cột. Với CONTRACT_TITLE và CONTRACT_TYPE, nếu bảng không có cột tương ứng thì giá trị khi nhân sự chưa có hợp đồng là 0 thay vì chuỗi rỗng.
| Thông báo | Nguyên nhân | Cách xử lý |
|---|---|---|
Divide by zero error encountered |
Phép chia cho 0 | Dùng SAFE_DIV |
Keyword X notfound |
Từ khoá không tồn tại trong hệ thống | Chọn lại từ khoá từ danh sách gợi ý |
X (Funcs\funcX) is not supported |
Dùng hàm không có trong hệ thống, ví dụ SUM(...) |
Dùng toán tử + hoặc hàm đúng của hệ thống |
! is not supported |
Dùng toán tử phủ định ! |
Dùng != hoặc = false |
Wage code is required |
Thiếu alias bảng lương ở hàm SA_* |
Điền tham số wage_alias |
Wage is not found |
Không tìm thấy bảng lương hiện tại | Kiểm tra lại bảng lương và alias |
Hàm gộp dòng con cần tên cột |
Gọi SUB_* mà không có tên cột |
Truyền alias cột, ví dụ SUB_SUM(LUONG_CO_BAN) |
Data name is required |
Thiếu tên dữ liệu ở hàm *_DATA_VALUE |
Điền alias của dữ liệu Import |
Args in function DATE_DIF not enough |
DATE_DIF thiếu tham số |
Truyền đủ ngày bắt đầu, ngày kết thúc và đơn vị |
Args in function SA_PIT not enough |
SA_PIT hoặc SA_RATE_TAX thiếu tham số |
Truyền thu nhập tính thuế |
Không tính được cột X: cột nguồn ... chưa tính xong |
Các cột tham chiếu vòng nhau | Kiểm tra các công thức có tham chiếu lẫn nhau không |
| Báo lỗi vòng tham chiếu khi lưu mẫu | Các cột tham chiếu vòng nhau qua hàm gộp dòng con | Sửa công thức để bỏ vòng tham chiếu |