Đăng vào: 3/16/2025, 1:40:50 PM | Admin
Dưới đây là hướng dẫn chi tiết từ A-Z về cách tạo một hệ thống tạo phiếu thu công nợ bằng Google Sheets, Google Docs & Apps Script.
Dưới đây là hướng dẫn chi tiết về cách tạo hệ thống quản lý công nợ và xuất phiếu thu tự động bằng Google Sheets, Google Docs và Google Apps Script.
Hệ thống này giúp bạn quản lý công nợ của khách hàng trên Google Sheets và tạo phiếu thu tự động trong Google Docs. Sau khi chọn các dòng công nợ cần tạo phiếu thu, hệ thống sẽ tự động xuất file Google Docs với đầy đủ thông tin.
Mã công nợ | Mã KH | Tên KH | Số tiền nợ | Ngày tạo | Ngày đến hạn | Đã trả | Còn lại | Trạng thái | Ghi chú |
---|---|---|---|---|---|---|---|---|---|
CN001 | KH001 | Nguyễn Văn A | 5,000,000 | 01/03/2024 | 31/03/2024 | 2,000,000 | 3,000,000 | Còn nợ | |
CN002 | KH002 | Trần Thị B | 7,500,000 | 05/03/2024 | 05/04/2024 | 0 | 7,500,000 | Chưa trả |
Mỗi dòng tương ứng với một khoản công nợ của khách hàng.
var APP_NAME = "Tạo Phiếu Thu Công Nợ";
/**
* Hiển thị hộp thoại nhập số dòng công nợ cần tạo phiếu thu.
*/
function createReceipt() {
var ui = SpreadsheetApp.getUi();
var response = ui.prompt("Nhập số dòng công nợ cần tạo phiếu thu (VD: 3 hoặc 3-5 hoặc 3,5)");
if (response.getSelectedButton() == ui.Button.OK) {
var input = response.getResponseText();
var rowNumbers = parseRowInput(input);
if (rowNumbers.length === 0) {
ui.alert("Lỗi: Vui lòng nhập số dòng hợp lệ!");
return;
}
var docUrl = createReceiptDoc(rowNumbers);
showResultPopup(docUrl);
}
}
/**
* Chuyển đổi chuỗi nhập thành mảng số dòng [3], [3,4,5], [3,5]
*/
function parseRowInput(input) {
var result = [];
var parts = input.split(',');
for (var i = 0; i < parts.length; i++) {
if (parts[i].includes('-')) {
var range = parts[i].split('-');
var start = parseInt(range[0].trim());
var end = parseInt(range[1].trim());
if (isNaN(start) || isNaN(end)) continue;
for (var j = start; j <= end; j++) {
result.push(j);
}
} else {
var num = parseInt(parts[i].trim());
if (!isNaN(num)) result.push(num);
}
}
return result;
}
/**
* Tạo phiếu thu trong Google Docs
*/
function createReceiptDoc(rows) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var doc = DocumentApp.create("Phiếu Thu Công Nợ - " + new Date().toLocaleDateString());
var body = doc.getBody();
body.appendParagraph(APP_NAME).setHeading(DocumentApp.ParagraphHeading.TITLE);
body.appendParagraph("Ngày tạo: " + new Date().toLocaleDateString());
var tableData = [["Mã công nợ", "Mã KH", "Tên KH", "Số tiền nợ", "Ngày tạo", "Ngày đến hạn", "Đã trả", "Còn lại", "Trạng thái", "Ghi chú"]];
rows.forEach(function(row) {
var rowData = sheet.getRange(row, 1, 1, 10).getValues()[0];
tableData.push(rowData);
});
body.appendTable(tableData);
var url = doc.getUrl();
return url;
}
/**
* Hiển thị hộp thoại kết quả với link Google Docs
*/
function showResultPopup(url) {
var html = '<p>Phiếu thu đã được tạo thành công.</p>';
html += '<input type="text" id="docUrl" value="' + url + '" style="width: 100%;" readonly />';
html += '<button onclick="copyUrl()">Copy Link</button>';
html += '<button onclick="window.open(\'' + url + '\')">Xem Ngay</button>';
html += '<script>function copyUrl(){ var copyText=document.getElementById("docUrl"); copyText.select(); document.execCommand("copy"); alert("Đã copy link!"); }</script>';
SpreadsheetApp.getUi().showModalDialog(HtmlService.createHtmlOutput(html).setWidth(400).setHeight(200), "Kết Quả");
}
Ứng dụng yêu cầu quyền:
3
, 3-5
, 3,5
).Mẫu phiếu thu được tạo:
TẠO PHIẾU THU - CÔNG NỢ
Ngày tạo: 16/03/2025
Bảng Công Nợ:
| Mã công nợ | Mã KH | Tên KH | Số tiền nợ | Ngày tạo | Ngày đến hạn | Đã trả | Còn lại | Trạng thái | Ghi chú |
|------------|--------|-------------|------------|-----------|--------------|--------|---------|------------|---------|
| CN001 | KH001 | Nguyễn Văn A | 5,000,000 | 01/03/2024 | 31/03/2024 | 2,000,000 | 3,000,000 | Còn nợ | |
Hệ thống Google Sheets + Apps Script này giúp:
Nếu gặp lỗi, hãy kiểm tra lại dữ liệu đầu vào hoặc cấp quyền cho ứng dụng.