Hướng dẫn

Template Quản Lý Dự Án Freelancer Google Sheets [Theo Dõi Giờ + Invoice 2026]

Tuân HoangTuân Hoang
9 tháng 6, 2026
9 phút đọc
Ảnh minh họa bài viết: Template Quản Lý Dự Án Freelancer Google Sheets [Theo Dõi Giờ + Invoice 2026]

Vấn Đề Mà Mọi Freelancer Đều Gặp

Bạn hoàn thành một dự án, nhưng không nhớ mình đã làm bao nhiêu giờ. Cuối tháng nhìn lại tài khoản ngân hàng và tự hỏi: dự án đó có thực sự lãi không? Invoice gửi muộn vì không biết tổng tiền là bao nhiêu. Khách hàng chưa thanh toán mà mình cũng quên mất.

Đây không phải vấn đề của riêng bạn — đây là pain-point phổ biến nhất trong cộng đồng freelancer. Và giải pháp không nhất thiết phải là phần mềm đắt tiền như FreshBooks hay HoneyBook. Một file Google Sheets được thiết kế đúng có thể làm được tất cả.

Template này gồm 6 sheet liên kết với nhau, từ quản lý khách hàng đến tạo invoice PDF và gửi email tự động — tất cả trong một file miễn phí.

Tổng Quan 6 Sheet Trong Template

Trước khi đi vào chi tiết, đây là bức tranh toàn cảnh của template:

Sheet Mục đích Nhập liệu
1. Khách Hàng Lưu thông tin và rate của từng khách Thủ công (1 lần)
2. Dự Án Theo dõi tiến độ và ngân sách Thủ công khi có dự án mới
3. Time Tracking Ghi nhận giờ làm hàng ngày Thủ công hàng ngày
4. Invoice Quản lý hóa đơn và thanh toán Auto từ Time Tracking
5. Dashboard Báo cáo doanh thu và hiệu suất Auto (công thức)
6. Cài Đặt Thông tin cá nhân và template email Thủ công (1 lần)

Sheet 1: Khách Hàng — Nền Tảng Của Toàn Bộ Hệ Thống

Sheet này là "master data" — mọi sheet khác đều VLOOKUP về đây để lấy thông tin. Thiết lập kỹ một lần, dùng mãi mãi.

Cấu trúc cột:

  • Mã KH: KH001, KH002, ... (dùng để VLOOKUP)
  • Tên / Công ty: Tên hiển thị trên invoice
  • Email: Dùng để gửi invoice tự động qua Apps Script
  • SĐT: Liên hệ khi cần follow-up
  • Địa chỉ: Hiện trên invoice nếu cần
  • Loại tiền: VND, USD, EUR
  • Rate mặc định ($/giờ): Tự động điền vào dự án mới
  • Điều khoản TT (ngày): 7, 14, hoặc 30 — dùng để tính ngày đến hạn
  • Ghi chú: Thông tin thêm, sở thích, lịch họp...

Mẹo: Đặt conditional formatting để highlight những khách hàng có điều khoản thanh toán ngắn (≤7 ngày) — đây là những client cần gửi invoice nhanh nhất sau khi hoàn thành việc.

Sheet 2: Dự Án — Theo Dõi Toàn Bộ Pipeline

Mỗi dự án là một dòng. Sheet này kết nối với Time Tracking để tự động cập nhật số giờ đã làm và doanh thu thực tế.

Cấu trúc cột:

  • Mã DA: DA001, DA002, ...
  • Tên dự án: Mô tả ngắn gọn
  • Mã KH: Nhập mã từ Sheet 1
  • Tên KH: =VLOOKUP(C2, KhachHang!A:B, 2, 0) — tự điền
  • Loại: Fixed (giá cố định) hoặc Hourly (tính theo giờ)
  • Ngân sách: Giá thỏa thuận ban đầu
  • Rate ($/giờ): =VLOOKUP(C2, KhachHang!A:G, 7, 0) — lấy từ khách hàng
  • Ngày bắt đầu / Deadline: Theo dõi tiến độ
  • Trạng thái: Đang làm / Hoàn thành / Tạm dừng / Hủy
  • Giờ đã làm: =SUMIF(TimeTracking!B:B, A2, TimeTracking!G:G)
  • Đã xuất hóa đơn: Tổng tiền đã invoice
  • Còn lại: Ngân sách - Đã xuất hóa đơn

Công thức tổng giờ theo dự án:

=SUMIF(TimeTracking!B:B, A2, TimeTracking!G:G)

Cột này tự động cộng tất cả giờ trong Time Tracking có cùng Mã DA. Bạn không cần nhập thủ công — chỉ cần track đúng mã dự án mỗi ngày.

Sheet 3: Time Tracking — Trung Tâm Nhập Liệu Hàng Ngày

Đây là sheet bạn sẽ dùng nhiều nhất. Mục tiêu: nhập nhanh, chính xác, đủ để xuất invoice.

Cấu trúc cột:

  • Ngày: Ngày làm việc
  • Mã DA: Dropdown từ Sheet 2
  • Tên DA: =VLOOKUP(B2, DuAn!A:B, 2, 0) — tự điền
  • Mô tả công việc: "Thiết kế UI màn hình đăng nhập", "Fix bug API endpoint" ...
  • Giờ bắt đầu: 09:00 (tùy chọn)
  • Giờ kết thúc: 11:30 (tùy chọn)
  • Thời gian (giờ): =(F2-E2)*24 hoặc nhập thẳng số như 2.5
  • Rate: =VLOOKUP(B2, DuAn!A:G, 7, 0) — lấy từ dự án
  • Thành tiền: =G2*H2
  • Billable?: TRUE/FALSE — checkbox để loại bỏ giờ không tính phí
  • Mã invoice: Gán khi tạo invoice để nhóm các giờ vào cùng một hóa đơn

Mẹo nhập liệu nhanh: Tạo Data Validation cho cột Mã DA (dropdown từ Sheet 2) để tránh nhập sai. Dùng Ctrl + ; để tự động điền ngày hôm nay.

Sheet 4: Invoice — Quản Lý Hóa Đơn Chuyên Nghiệp

Mỗi invoice là một dòng. Số tiền tự động tính từ Time Tracking, trạng thái tự cập nhật theo ngày đến hạn.

Cấu trúc cột:

  • Số HĐ: INV-2026-001, INV-2026-002, ...
  • Mã KH / Tên KH: VLOOKUP từ Sheet 1
  • Ngày tạo: Ngày xuất invoice
  • Ngày đến hạn: =C2+VLOOKUP(B2, KhachHang!A:H, 8, 0) — tự tính dựa trên điều khoản KH
  • Tổng tiền: =SUMIF(TimeTracking!K:K, A2, TimeTracking!I:I) — cộng từ Time Tracking theo Mã invoice
  • Thuế (10%): =F2*0.1 (điều chỉnh theo thực tế)
  • Tổng cộng: =F2+G2
  • Đã thu: Nhập thủ công khi nhận tiền
  • Còn lại: =H2-I2
  • Trạng thái: Công thức tự động bên dưới

Công thức trạng thái tự động:

=IF(J2=0,"✅ Paid",IF(D2<TODAY(),"🔴 Overdue","🟡 Pending"))

Với công thức này, khi invoice được thanh toán đủ → hiện "✅ Paid". Quá hạn chưa trả → "🔴 Overdue". Còn trong hạn → "🟡 Pending". Bạn nhìn vào cột trạng thái là biết ngay cần follow-up invoice nào.

Đếm số invoice quá hạn chưa trả:

=COUNTIFS(Invoice!K:K,"🔴 Overdue",Invoice!J:J,">0")

Sheet 5: Dashboard — Báo Cáo Tài Chính Một Nhìn

Dashboard tổng hợp dữ liệu từ tất cả các sheet khác. Bạn chỉ cần vào đây cuối tháng để review.

Các chỉ số quan trọng:

Thu nhập tháng này:

=SUMPRODUCT(
  (MONTH(Invoice!C:C)=MONTH(TODAY()))*
  (YEAR(Invoice!C:C)=YEAR(TODAY()))*
  Invoice!F:F
)

Tỷ lệ giờ billable:

=SUMIF(TimeTracking!J:J,TRUE,TimeTracking!G:G)/SUM(TimeTracking!G:G)

Nếu tỷ lệ này dưới 70%, bạn đang dành quá nhiều thời gian cho việc không thu phí (admin, học tập, meeting không cần thiết).

Các metric khác trên Dashboard:

  • Thu nhập quý này và YTD (year-to-date)
  • Số dự án đang chạy / hoàn thành / overdue
  • Biểu đồ donut: khách hàng nào chiếm % doanh thu lớn nhất
  • Aging report: invoice chưa thanh toán theo nhóm tuổi (0-7 ngày, 8-30 ngày, 30+ ngày)
  • Top 5 dự án doanh thu cao nhất trong năm

Tạo biểu đồ doanh thu theo tháng: Chọn vùng dữ liệu tháng/doanh thu → Insert → Chart → Line chart. Thêm Moving Average để thấy xu hướng rõ hơn.

Sheet 6: Cài Đặt — Thiết Lập Một Lần Dùng Mãi

Sheet này lưu thông tin cá nhân để tự động điền vào invoice template:

  • Tên đầy đủ / Tên công ty
  • Email và SĐT
  • Số tài khoản ngân hàng và tên ngân hàng
  • Placeholder cho logo (link URL ảnh)
  • Rate mặc định cho khách mới
  • Đơn vị tiền tệ mặc định
  • Template nội dung email invoice

Apps Script: Tạo Invoice PDF và Gửi Email Tự Động

Phần này biến template từ "bảng tính đẹp" thành "hệ thống thực sự". Chỉ cần dán code vào Extensions → Apps Script, sau đó gọi hàm khi cần gửi invoice.

function guiInvoice(invoiceId) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const invSheet = ss.getSheetByName('Invoice');
  const khSheet = ss.getSheetByName('KhachHang');

  // Tìm dòng invoice theo Số HĐ
  const data = invSheet.getDataRange().getValues();
  const row = data.find(r => r[0] === invoiceId);
  if (!row) {
    Logger.log('Không tìm thấy invoice: ' + invoiceId);
    return;
  }

  const email = row[2];           // Cột C: Email KH
  const tongTien = row[7];        // Cột H: Tổng cộng
  const ngayHan = new Date(row[3]).toLocaleDateString('vi-VN');
  const formatted = tongTien.toLocaleString('vi-VN') + ' VND';

  // Export sheet Invoice thành PDF
  const exportUrl = `https://docs.google.com/spreadsheets/d/${ss.getId()}/export?format=pdf&gid=${invSheet.getSheetId()}&portrait=true&fitw=true`;
  const blob = UrlFetchApp.fetch(exportUrl, {
    headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() }
  }).getBlob().setName(`Invoice_${invoiceId}.pdf`);

  // Gửi email kèm PDF
  GmailApp.sendEmail(
    email,
    `Invoice ${invoiceId} — Hạn thanh toán ${ngayHan}`,
    `Kính gửi,\n\nVui lòng thanh toán ${formatted} trước ngày ${ngayHan}.\n\nMọi thắc mắc xin liên hệ reply email này.\n\nCảm ơn bạn đã hợp tác!`,
    { attachments: [blob] }
  );

  // Cập nhật trạng thái → Sent
  const rowIndex = data.indexOf(row) + 1;
  invSheet.getRange(rowIndex, 11).setValue('🟡 Pending'); // Đổi từ Draft → Pending
  Logger.log(`Đã gửi invoice ${invoiceId} đến ${email}`);
}

// Gọi để test: guiInvoice('INV-2026-001')

Cách dùng:

  1. Vào Extensions → Apps Script
  2. Dán code vào editor
  3. Lưu và chạy guiInvoice('INV-2026-001') với số HĐ thực tế
  4. Lần đầu chạy sẽ yêu cầu cấp quyền Gmail và Drive — nhấn Allow

Nâng cao: Tạo một nút button trong sheet Invoice, gắn macro gọi hàm này với tham số là ô Số HĐ đang chọn — gửi invoice chỉ cần 1 click.

Mẹo Thực Chiến Cho Freelancer

1. Track giờ ngay khi bắt đầu làm, không phải cuối ngày. Ký ức về thời gian không đáng tin cậy — "hình như mình làm 3 tiếng" thường là 2 tiếng hoặc 4 tiếng. Mở Time Tracking, điền giờ bắt đầu, rồi mới làm việc.

2. Gửi invoice trong 24h sau khi hoàn thành dự án. Khi bạn giao xong, khách hàng đang hài lòng nhất. Đây là thời điểm tốt nhất để gửi invoice. Chờ một tuần thì tâm lý đã thay đổi.

3. Follow-up chính xác vào ngày thứ 7. Tạo một cột "Ngày follow-up" trong Invoice = Ngày đến hạn - 7. Dùng conditional formatting highlight màu đỏ khi TODAY() >= cột này. Bạn sẽ không bao giờ quên follow-up nữa.

4. Review Dashboard mỗi cuối tháng bằng 3 câu hỏi:

  • Khách hàng nào đóng góp >40% doanh thu? (rủi ro phụ thuộc)
  • Tỷ lệ billable có dưới 70%? (cần cắt việc không cần thiết)
  • Có invoice nào overdue >30 ngày? (cần quyết định: nhắc tiếp hay dừng hợp tác)

5. Tạo "dự án phụ phí" cho công việc scope creep. Khi khách yêu cầu thêm ngoài hợp đồng, đừng làm chui — tạo dự án DA-XXX-EXTRA, track giờ riêng, rồi invoice riêng. Việc này giúp bạn chứng minh bằng số liệu khi cần thương lượng.

Kết Luận

Template này không thần kỳ — nó chỉ làm một việc: buộc bạn ghi lại dữ liệu đúng chỗ, đúng thời điểm. Khi dữ liệu đã ở đó, mọi quyết định về giá, về khách hàng, về thời gian đều dựa trên thực tế chứ không phải cảm giác.

Bắt đầu đơn giản: chỉ cần dùng Sheet 3 (Time Tracking) trong 2 tuần đầu. Sau khi quen, thêm Invoice. Sau đó mới cần Dashboard. Đừng setup tất cả rồi không dùng — đó là lỗi phổ biến nhất khi bắt đầu với bất kỳ hệ thống quản lý nào.

Freelancer thành công không nhất thiết là người làm giỏi nhất — mà là người biết mình đang kiếm tiền từ đâu, chi thời gian vào đâu, và ai là khách hàng đáng đầu tư quan hệ lâu dài.

Chia sẻ bài viết:

Tuân Hoang

Tuân Hoang

Đội ngũ SheetStore

Google SheetsGoogle Apps ScriptCRMAutomationPhần mềm quản lý doanh nghiệp

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.

Nhận thông báo khi có bài viết mới. Không spam, hứa luôn! 😊

Bình luận (0)

Vui lòng đăng nhập để tham gia thảo luận