Template Quản Lý Kho Hàng Google Sheets [Tự Động Cảnh Báo Tồn Kho 2026]
![Ảnh minh họa bài viết: Template Quản Lý Kho Hàng Google Sheets [Tự Động Cảnh Báo Tồn Kho 2026]](/og-image.jpg)
Bạn Đang Quản Lý Kho Theo Kiểu Này Không?
Sáng thứ Hai, khách gọi đặt 50 hộp sản phẩm A. Bạn vào Excel kiểm tra — tồn kho ghi 80 hộp. Nhận đơn xong, đến kho mới phát hiện thực tế chỉ còn 12 hộp vì tuần trước xuất mà chưa cập nhật. Khách hủy đơn, bạn mất đơn hàng, mất uy tín.
Hoặc chiều ngược lại: nhập về 200 thùng hàng C vì sợ hết, nhưng hóa ra hàng C đang tồn 3 tháng chưa bán hết. Vốn chết trong kho, không có tiền nhập hàng mới.
Đây là hai vấn đề phổ biến nhất của SMB khi quản lý kho bằng Excel thủ công: không có cảnh báo tự động và số liệu không đồng bộ thời gian thực. Bài viết này giới thiệu template Google Sheets 5 sheet miễn phí giải quyết cả hai vấn đề trên — kèm Apps Script gửi email cảnh báo mỗi sáng trước khi bạn bắt đầu ngày làm việc.
Tổng Quan Template 5 Sheet
Template được thiết kế theo nguyên tắc nhập liệu một nơi, tổng hợp tự động. Nhân viên chỉ cần cập nhật sheet Nhập Kho và Xuất Kho — tất cả số liệu tồn kho, báo cáo tháng đều tự động tính theo.
| Sheet | Chức năng | Ai dùng |
|---|---|---|
| 1. Danh Mục Hàng Hóa | Master data sản phẩm, ngưỡng tồn min/max | Quản lý (cập nhật 1 lần) |
| 2. Nhập Kho | Ghi nhận từng lần nhập hàng từ nhà cung cấp | Nhân viên kho |
| 3. Xuất Kho | Ghi nhận từng lần xuất hàng cho khách/bộ phận | Nhân viên kho |
| 4. Tồn Kho | Tồn cuối kỳ, trạng thái màu sắc, giá trị tồn | Tự động (chỉ đọc) |
| 5. Báo Cáo | Xuất nhập tồn theo tháng, top SP, biểu đồ | Quản lý (tự động) |
Sheet 1: Danh Mục Hàng Hóa — Nền Tảng Của Cả Hệ Thống
Sheet này là master data — nhập một lần, dùng mãi. Quan trọng nhất là hai cột Tồn Tối Thiểu và Tồn Tối Đa vì chúng quyết định khi nào hệ thống cảnh báo.
| Mã SP | Tên SP | Đơn vị | Nhóm hàng | Giá nhập | Giá bán | Tồn tối thiểu | Tồn tối đa | Vị trí kho | Nhà CC |
|---|---|---|---|---|---|---|---|---|---|
| SP001 | Dầu gội X-Men 400ml | Chai | Chăm sóc tóc | 45.000 | 65.000 | 50 | 500 | A1-01 | Unilever VN |
| SP002 | Kem đánh răng P/S 230g | Tuýp | Vệ sinh răng miệng | 22.000 | 32.000 | 100 | 800 | A1-02 | Unilever VN |
Mẹo thiết lập ngưỡng tồn kho hợp lý:
- Tồn tối thiểu = Mức tiêu thụ trung bình × Thời gian chờ nhập hàng (ngày). Ví dụ bán 10 cái/ngày, nhà cung cấp giao trong 5 ngày → tồn tối thiểu = 50.
- Tồn tối đa = Sức chứa kho × 80% (để dự phòng). Không nhập quá mức này tránh hàng tồn lâu.
Sheet 2: Nhập Kho — Ghi Nhận Từng Phiếu Nhập
Mỗi khi hàng về, nhân viên kho điền vào sheet này. Số phiếu nhập được tự động tạo bằng công thức để không trùng lặp.
| Ngày | Số phiếu | Mã SP | Tên SP | SL nhập | Đơn giá | Thành tiền | Nhà CC | Người nhập | Ghi chú |
|---|---|---|---|---|---|---|---|---|---|
| 02/06/2026 | NK001 | SP001 | Dầu gội X-Men 400ml | 200 | 45.000 | 9.000.000 | Unilever VN | Nguyễn Văn A | Lô mới tháng 6 |
| 05/06/2026 | NK002 | SP002 | Kem đánh răng P/S 230g | 300 | 22.000 | 6.600.000 | Unilever VN | Trần Thị B |
Công thức tự động tạo số phiếu nhập (cột B):
="NK"&TEXT(COUNTA($B$2:B2),"000")
Công thức này đếm số phiếu đã có và tạo mã tăng dần: NK001, NK002, NK003... Tương tự cho phiếu xuất dùng prefix "XK".
Tên SP tự động điền theo Mã SP (cột D):
=IFERROR(VLOOKUP(C2,'DanhMuc'!A:B,2,0),"")
Nhân viên chỉ cần nhập Mã SP, tên sản phẩm tự điền — giảm nhập liệu sai.
Sheet 3: Xuất Kho — Theo Dõi Từng Lần Xuất Hàng
Cấu trúc tương tự sheet Nhập Kho nhưng thêm cột Khách hàng/Bộ phận để biết hàng đi đâu — hữu ích khi cần truy vết hoặc xuất báo cáo theo đầu ra.
| Ngày | Số phiếu | Mã SP | Tên SP | SL xuất | Đơn giá | Thành tiền | Khách hàng/Bộ phận | Người xuất | Ghi chú |
|---|---|---|---|---|---|---|---|---|---|
| 03/06/2026 | XK001 | SP001 | Dầu gội X-Men 400ml | 80 | 65.000 | 5.200.000 | Đại lý Minh Phát | Lê Văn C | Đơn ĐH-0601 |
| 07/06/2026 | XK002 | SP002 | Kem đánh răng P/S 230g | 150 | 32.000 | 4.800.000 | Siêu thị ABC | Lê Văn C |
Sheet 4: Tồn Kho — Trái Tim Của Template
Sheet này chỉ đọc — không nhập liệu trực tiếp. Toàn bộ số liệu được tính tự động từ sheet Nhập và Xuất. Đây là nơi bạn nhìn vào mỗi sáng để biết tình trạng kho.
Các Công Thức Cốt Lõi
Tổng nhập theo mã SP (cột F):
=SUMIF('NhapKho'!C:C,A2,'NhapKho'!E:E)
Tổng xuất theo mã SP (cột G):
=SUMIF('XuatKho'!C:C,A2,'XuatKho'!E:E)
Tồn cuối kỳ (cột H):
=E2+F2-G2
(E2 = Tồn đầu kỳ nhập thủ công khi bắt đầu dùng template)
Công thức trạng thái tồn kho với màu sắc (cột J):
=IFS(H2<=0,"🔴 Hết hàng",H2<=I2,"🟡 Sắp hết",H2>I2*3,"🔵 Dư thừa",TRUE,"✅ Bình thường")
Giá trị tồn kho (cột K):
=H2*IFERROR(VLOOKUP(A2,'DanhMuc'!A:E,5,0),0)
Bảng Tồn Kho Mẫu (5 Sản Phẩm)
| Mã SP | Tên SP | Đơn vị | Tồn đầu kỳ | Tổng nhập | Tổng xuất | Tồn cuối | Tồn tối thiểu | Trạng thái | Giá trị tồn |
|---|---|---|---|---|---|---|---|---|---|
| SP001 | Dầu gội X-Men 400ml | Chai | 50 | 200 | 248 | 2 | 50 | 🔴 Hết hàng | 90.000 |
| SP002 | Kem đánh răng P/S 230g | Tuýp | 200 | 300 | 420 | 80 | 100 | 🟡 Sắp hết | 1.760.000 |
| SP003 | Nước rửa chén Sunlight 750ml | Chai | 300 | 500 | 350 | 450 | 80 | ✅ Bình thường | 18.000.000 |
| SP004 | Bột giặt OMO 6kg | Túi | 100 | 400 | 80 | 420 | 50 | 🔵 Dư thừa | 79.800.000 |
| SP005 | Nước lau sàn Vim 1L | Chai | 150 | 200 | 190 | 160 | 60 | ✅ Bình thường | 4.480.000 |
Thiết Lập Conditional Formatting
Để cột Trạng thái và cả hàng đổi màu tự động:
- Chọn toàn bộ vùng dữ liệu (ví dụ A2:K100).
- Vào Format > Conditional formatting > Custom formula.
- Thêm 4 rule theo thứ tự ưu tiên:
| Điều kiện (công thức) | Màu nền | Ý nghĩa |
|---|---|---|
=$H2<=0 |
#fee2e2 (đỏ nhạt) | Hết hàng |
=AND($H2>0,$H2<=$I2) |
#fef9c3 (vàng nhạt) | Sắp hết |
=$H2>$I2*3 |
#dbeafe (xanh nhạt) | Dư thừa |
=$H2>$I2 |
#dcfce7 (xanh lá nhạt) | Bình thường |
Apps Script: Cảnh Báo Tồn Kho Tự Động Mỗi Sáng
Đây là phần làm cho template này khác biệt so với file Excel thông thường. Script này chạy tự động mỗi sáng lúc 7h, quét toàn bộ sheet Tồn Kho và gửi email cảnh báo nếu có sản phẩm sắp hết hoặc đã hết.
Cách Cài Đặt Script
- Trong Google Sheets, vào Extensions > Apps Script.
- Xóa nội dung mặc định, dán code sau vào.
- Nhấn Save (Ctrl+S).
- Chạy thử bằng cách nhấn Run và cấp quyền truy cập Gmail.
- Vào Triggers (biểu tượng đồng hồ) để đặt lịch tự động.
function canhBaoTonKho() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('TonKho');
if (!sheet) {
console.log('Không tìm thấy sheet TonKho');
return;
}
const data = sheet.getDataRange().getValues();
const sanPhamHetHang = [];
const sanPhamSapHet = [];
// Bỏ qua hàng tiêu đề (index 0)
for (let i = 1; i < data.length; i++) {
const maSP = data[i][0];
const tenSP = data[i][1];
const donVi = data[i][2];
const tonCuoi = Number(data[i][7]); // Cột H: Tồn cuối
const tonToiThieu = Number(data[i][8]); // Cột I: Tồn tối thiểu
// Bỏ qua hàng trống
if (!maSP || !tenSP) continue;
if (tonCuoi <= 0) {
sanPhamHetHang.push(
`⛔ [${maSP}] ${tenSP}: HẾT HÀNG (tồn tối thiểu: ${tonToiThieu} ${donVi})`
);
} else if (tonCuoi <= tonToiThieu) {
sanPhamSapHet.push(
`⚠️ [${maSP}] ${tenSP}: còn ${tonCuoi} ${donVi} (tối thiểu: ${tonToiThieu})`
);
}
}
const tongCanhBao = sanPhamHetHang.length + sanPhamSapHet.length;
if (tongCanhBao === 0) {
console.log('Tồn kho ổn định, không có cảnh báo.');
return;
}
// Soạn nội dung email
const tenFile = ss.getName();
const ngayHomNay = Utilities.formatDate(new Date(), 'Asia/Ho_Chi_Minh', 'dd/MM/yyyy HH:mm');
let noiDungEmail = `Báo cáo tồn kho tự động — ${ngayHom Nay}\n`;
noiDungEmail += `File: ${tenFile}\n`;
noiDungEmail += `Link: ${ss.getUrl()}\n\n`;
noiDungEmail += '='.repeat(50) + '\n\n';
if (sanPhamHetHang.length > 0) {
noiDungEmail += `HẾT HÀNG (${sanPhamHetHang.length} sản phẩm):\n`;
noiDungEmail += sanPhamHetHang.join('\n') + '\n\n';
}
if (sanPhamSapHet.length > 0) {
noiDungEmail += `SẮP HẾT HÀNG (${sanPhamSapHet.length} sản phẩm):\n`;
noiDungEmail += sanPhamSapHet.join('\n') + '\n\n';
}
noiDungEmail += '\nVui lòng kiểm tra và lên kế hoạch nhập hàng sớm.';
// Gửi email đến người dùng hiện tại
const emailNguoiDung = Session.getActiveUser().getEmail();
GmailApp.sendEmail(
emailNguoiDung,
`[Kho hàng - ${tenFile}] ${tongCanhBao} sản phẩm cần chú ý`,
noiDungEmail
);
console.log(`Đã gửi cảnh báo: ${sanPhamHetHang.length} hết hàng, ${sanPhamSapHet.length} sắp hết`);
}
// Hàm cài đặt trigger tự động (chạy một lần để đặt lịch)
function capNhatTrigger() {
// Xóa trigger cũ nếu có
ScriptApp.getProjectTriggers().forEach(trigger => {
if (trigger.getHandlerFunction() === 'canhBaoTonKho') {
ScriptApp.deleteTrigger(trigger);
}
});
// Tạo trigger mới: chạy lúc 7h sáng mỗi ngày
ScriptApp.newTrigger('canhBaoTonKho')
.timeBased()
.everyDays(1)
.atHour(7)
.create();
console.log('Đã đặt trigger: canhBaoTonKho chạy lúc 7h mỗi ngày');
}
Đặt Lịch Chạy Tự Động
Thay vì vào Triggers thủ công, bạn chỉ cần chạy hàm capNhatTrigger() một lần — nó sẽ tự tạo lịch chạy 7h sáng hàng ngày. Muốn thay đổi giờ, sửa atHour(7) thành giờ bạn muốn.
Sheet 5: Báo Cáo Tháng — Phân Tích Xu Hướng
Sheet báo cáo giúp quản lý nhìn tổng quan theo tháng mà không cần lọc thủ công. Tất cả số liệu cập nhật realtime khi sheet Nhập/Xuất có dữ liệu mới.
Báo Cáo Xuất Nhập Tồn Theo Tháng
Công thức tổng nhập theo tháng/năm cụ thể (ví dụ tháng 6/2026, SP có mã ở cột A):
=SUMPRODUCT(
(MONTH('NhapKho'!A$2:A$1000)=6)*
(YEAR('NhapKho'!A$2:A$1000)=2026)*
('NhapKho'!C$2:C$1000=A2)*
'NhapKho'!E$2:E$1000
)
Thay số tháng và năm thành tham chiếu ô (ví dụ $B$1 cho tháng, $C$1 cho năm) để tạo bộ lọc động — người dùng đổi tháng là toàn bộ báo cáo cập nhật.
Top 10 Sản Phẩm Xuất Nhiều Nhất
Dùng hàm QUERY để lấy danh sách và sắp xếp giảm dần:
=QUERY('XuatKho'!C:E,
"SELECT C, SUM(E)
WHERE C IS NOT NULL
GROUP BY C
ORDER BY SUM(E) DESC
LIMIT 10
LABEL C 'Mã SP', SUM(E) 'Tổng xuất'",
1
)
Top 10 Sản Phẩm Tồn Lâu — Cảnh Báo Hàng Chậm Luân Chuyển
Tính tỷ lệ xuất/tồn để xác định hàng nào đang "đứng yên" trong kho:
=QUERY('TonKho'!A:K,
"SELECT A, B, H, G
WHERE H > 0
ORDER BY (G/H) ASC
LIMIT 10
LABEL A 'Mã SP', B 'Tên SP', H 'Tồn cuối', G 'Tổng xuất'",
1
)
Biểu Đồ Sparklines Xu Hướng 6 Tháng
Thêm sparkline mini vào từng ô để thấy xu hướng nhập/xuất mà không cần tạo biểu đồ riêng:
=SPARKLINE(
{SoLieuThang1, SoLieuThang2, SoLieuThang3, SoLieuThang4, SoLieuThang5, SoLieuThang6},
{"charttype","line";"color","#16a34a";"linewidth",2}
)
Tổng Giá Trị Kho Hiện Tại
=SUMPRODUCT('TonKho'!H2:H100, 'DanhMuc'!E2:E100)
Công thức nhân tồn cuối của từng SP với giá nhập, cho ra tổng vốn đang nằm trong kho.
Mẹo Vận Hành Hiệu Quả
1. Protect Sheet Tồn Kho Để Tránh Nhập Nhầm
Vào Data > Protect sheets and ranges, chọn sheet TonKho và set quyền "Only you" hoặc "Editors listed". Nhân viên kho chỉ được nhập liệu vào sheet Nhập Kho và Xuất Kho.
2. Dùng Data Validation Cho Cột Mã SP
Chọn cột Mã SP trong sheet Nhập/Xuất, vào Data > Data validation > Dropdown from range, chọn vùng mã SP trong sheet Danh Mục. Nhân viên chọn từ dropdown thay vì gõ tay — giảm lỗi chính tả.
3. Backup Tự Động Hàng Tuần
Thêm hàm này vào Apps Script để tự động tạo bản sao lưu hàng tuần:
function backupHangTuan() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const ngay = Utilities.formatDate(new Date(), 'Asia/Ho_Chi_Minh', 'yyyyMMdd');
const tenBackup = `Backup_KhoHang_${ngay}`;
ss.copy(tenBackup);
console.log(`Đã tạo backup: ${tenBackup}`);
}
Đặt trigger cho hàm này chạy mỗi Chủ Nhật lúc 22h — bạn sẽ có bản sao lưu hàng tuần trong Google Drive.
4. Barcode Scanner Để Nhập Liệu Nhanh
Nếu sản phẩm có mã vạch, dùng ứng dụng scanner trên điện thoại kết nối Bluetooth với máy tính. Khi quét barcode, mã sản phẩm tự điền vào ô đang chọn — nhanh hơn gõ tay 5-10 lần.
5. Quy Trình Kiểm Kê Định Kỳ
Hàng tháng (hoặc hàng quý), làm kiểm kê thực tế:
- Xuất danh sách tồn kho từ sheet TonKho.
- Đếm hàng thực tế trong kho.
- So sánh — nếu lệch, điều chỉnh cột "Tồn đầu kỳ" của tháng mới.
- Ghi chú lý do lệch (hàng vỡ, mất, nhập nhầm) để truy vết.
Kết Luận
Template 5 sheet này giải quyết bài toán quản lý kho cho SMB theo nguyên tắc đơn giản nhất: nhập liệu tập trung, tổng hợp tự động, cảnh báo chủ động. Bạn không cần phần mềm ERP đắt tiền, không cần lập trình viên — chỉ cần Google Sheets và 30 phút thiết lập ban đầu.
Điểm khác biệt lớn nhất so với Excel thông thường là Apps Script cảnh báo tồn kho. Thay vì phải nhớ kiểm tra mỗi ngày, hệ thống tự động gửi email vào 7h sáng với danh sách chi tiết những mặt hàng cần nhập thêm — bạn có thể lên kế hoạch đặt hàng ngay trước khi bắt đầu ngày làm việc.
Bước tiếp theo: Copy template về, điền danh mục hàng hóa của bạn vào sheet 1, thiết lập ngưỡng tồn min/max, cài Apps Script và đặt trigger. Từ ngày đó, bạn sẽ không bao giờ bị bất ngờ vì hết hàng nữa.
Cần hỗ trợ thiết lập template hoặc tùy chỉnh công thức theo đặc thù ngành của bạn? Để lại bình luận bên dưới.
Chia sẻ bài viết:
Tuân Hoang
Đội ngũ SheetStore
Google Workspace Certified, 5+ years experience
Bạn thấy bài viết hữu ích?
Đăng ký nhận thông báo khi có bài viết mới.
