Введение
Договоры, акты, счета, коммерческие предложения — всё это документы, с которыми сталкивается любой специалист: от руководителя отдела до технической поддержки. Их создание отнимает много времени. Каждая правка вручную, каждая подстановка реквизитов, каждое сохранение в PDF превращаются в рутинный процесс, который легко автоматизируется.
Google Docs вместе с Google Apps Script дают возможность превратить подготовку документов в полностью автоматизированный конвейер:
- готовый шаблон с переменными;
- боковая форма для ввода всех реквизитов;
- автоматическая подстановка данных;
- генерация PDF в один клик;
- отправка готового файла в Telegram;
- сохранение вводимых данных для повторного использования;
- пресеты-шаблоны для разных организаций.
Эта статья — полный разбор, как внедрить такую систему у себя, с рабочими примерами и готовыми кодами.
Основная идея автоматизации
В Google Docs используется механизм «плейсхолдеров» — специальных меток, которые заменяются значениями, введёнными пользователем в боковой форме.
Пример плейсхолдера:
{{Организация}}
{{Директор_ФИО}}
{{Дата}}
{{Сумма}}
{{Сайт_Домен}}
Они размещаются в любом месте документа. Скрипт автоматически заменит их введёнными значениями и сформирует финальный PDF.
Пример шаблона договора
Простой вариант выглядит так:
СУБЛИЦЕНЗИОННОЕ СОГЛАШЕНИЕ № {{Соглашение_Номер}}
от {{Дата_Цифрами}} г.
{{Сублицензиат_Организация_Имен}}, в лице {{Сублицензиат_Руководитель_Должность_Имен}}
{{Сублицензиат_Руководитель_ФИО_Имен}}, действующего на основании {{Основание}},
с одной стороны, и …
Сайт: {{Сайт_Домен}}
Сумма оплаты: {{Сумма_Руб}} руб.
Тариф: {{Тариф}}
Период: {{Месяцев_Текст}}
Скрипт подставит вместо них реальные данные, а документ станет готовым договором.
Добавляем боковую форму (Sidebar)
Сайдбар — это HTML-форма, в которой вы вводите реквизиты. Google Docs показывает её как персональную панель справа.
Пример формы:
<h3>Заполнение договора</h3> <div class="group"> <label>Номер соглашения</label> <input id="Соглашение_Номер" placeholder="например 99"> </div> <div class="group"> <label>Дата (дд.мм.гггг)</label> <input id="Дата_Цифрами" placeholder="05.11.2025"> </div> <div class="group"> <label>Организация</label> <input id="Сублицензиат_Организация_Имен" placeholder="ООО «Пример»"> </div> <div class="group"> <label>Директор ФИО</label> <input id="Сублицензиат_Руководитель_ФИО_Имен" placeholder="Иванов Иван Иванович"> </div> <div class="group"> <label>Должность руководителя</label> <input id="Сублицензиат_Руководитель_Должность_Имен" placeholder="директор"> </div> <div class="group"> <label>Сайт / домен</label> <input id="Сайт_Домен" placeholder="example.ru"> </div> <div class="group"> <label>Сумма</label> <input id="Сумма_Руб" inputmode="decimal" placeholder="15000.00"> </div> <div class="group"> <label>Тариф</label> <select id="Тариф"> <option>Базовый</option> <option>Стандарт</option> <option>Премиум</option> </select> </div> <div class="group"> <label>Период (число месяцев)</label> <input id="Месяцев_Число" placeholder="6"> </div> <div class="group"> <label>Период (текст)</label> <input id="Месяцев_Текст" placeholder="6 месяцев"> </div> <button onclick="saveCopyAndPdf()">Создать PDF</button>
Это и есть заполнение всех плейсхолдеров.
Скрипт, который всё автоматизирует
Google Apps Script выполняет три задачи:
- заменяет плейсхолдеры в документе;
- создаёт копию документа;
- генерирует PDF и отправляет его в Telegram.
Пример:
const telegramToken = "000000:TEST";
const chatIds = ['-1000000000'];
function onOpen() {
DocumentApp.getUi()
.createMenu("Договор")
.addItem("Открыть форму", "showSidebar")
.addToUi();
}
function showSidebar() {
const html = HtmlService.createTemplateFromFile("Sidebar")
.evaluate()
.setTitle("Заполнение договора");
DocumentApp.getUi().showSidebar(html);
}
function saveCopyAndPdf(data) {
const doc = DocumentApp.getActiveDocument();
const file = DriveApp.getFileById(doc.getId());
const copy = file.makeCopy("Договор_" + data.Соглашение_Номер);
const copyDoc = DocumentApp.openById(copy.getId());
replacePlaceholders(copyDoc, data);
copyDoc.saveAndClose();
const pdf = DriveApp.getFileById(copy.getId())
.getAs("application/pdf")
.setName("Договор.pdf");
sendToTelegram(pdf);
copy.setTrashed(true);
}
function replacePlaceholders(doc, data) {
const body = doc.getBody();
Object.keys(data).forEach(key => {
body.replaceText(`\\{\\{${key}\\}\\}`, data[key]);
});
}
function sendToTelegram(blob) {
const url = `https://api.telegram.org/bot${telegramToken}/sendDocument`;
chatIds.forEach(chatId => {
UrlFetchApp.fetch(url, {
method: "post",
payload: {
chat_id: chatId,
document: blob,
caption: "Готовый договор"
}
});
});
}
Как всё подключить и запустить
После того как HTML и скрипт вставлены в Google Apps Script:
- Нажать “Сохранить проект”
- Вернуться в Google Docs и обновить страницу
- В верхнем меню появится новый пункт «Договор»
- Нажать один раз пункт «Открыть форму»
- Google попросит разрешения на работу скрипта
- Подтвердить доступ от своего Google-аккаунта
- С этого момента боковая форма будет работать всегда
- Вводите данные → нажимаете кнопку → получаете готовый PDF в Telegram
Это занимает меньше минуты при использовании.
Ещё несколько примеров, что можно сделать
Пример 1. Договор аренды
Арендодатель: {{Организация}}
Представитель: {{Директор_ФИО}}
Объект аренды: {{Адрес_Объекта}}
Срок: {{Период}}
Стоимость: {{Сумма}} руб.
Пример 2. Акт выполненных работ
Исполнитель: {{Исполнитель}}
Заказчик: {{Заказчик}}
Дата оказания услуг: {{Дата}}
Сумма по акту: {{Сумма}}
Пример 3. Коммерческое предложение
Компания: {{Организация}}
Описание услуги: {{Описание}}
Стоимость: {{Сумма}} руб.
Дата подготовки: {{Дата}}
Пример 4. Автоматическая нумерация договоров
Использование формата:
{{Соглашение_Номер}}
Можно автоматически формировать:
- 2025-02-001
- 2025-02-002
- 2025-02-003
При каждом нажатии "Создать PDF".
Пример 5. Отправка сразу в несколько Telegram-каналов
Достаточно перечислить chatIds:
const chatIds = [ '-1001111111111', // отдел продаж '-1002222222222', // канал бухгалтерии '-1003333333333' // личный архив ];
Итог
Google Apps Script превращает Google Docs в мощную автоматизированную систему для подготовки документов.
Что в итоге получается:
- шаблон →
- форма для заполнения →
- автоматическая подстановка данных →
- PDF →
- отправка в Telegram →
- никакого ручного копирования текста
Это экономит время, снижает количество ошибок и делает процесс унифицированным.
Система подходит для:
- договоров
- актов
- счетов
- приложений
- коммерческих предложений
- любых шаблонных документов
Это одна из тех автоматизаций, которые внедряешь один раз — а экономия времени идёт каждый день.
Оцените полезность материала!
Лицензия: CC BY-SA 4.0
Автор: Юрий Герук
Комментарии