В статье разбираю конкретный пример — как при помощи Google Apps Script на основании шаблона, созданного в Гугл Документах массово создавать договора дарения из строк Гугл Таблицы.
Массово создавать типовые договора можно когда есть документ-шаблон с готовым форматированием и в нём промаркированы ключевые поля, которые идут под замену для каждой новой строчки таблицы. После автозамены копия заполненного шаблона сохраняется с установленным именем в виде Гугл Документа и может сразу автоматически преобразована в PDF или файл Microsoft Word.
Автозаполнение договоров дарения
Во многих организациях бухгалтеры отвечают за составление договоров дарения от организации. Эта задача может быть однотипной, трудоемкой и подверженной ошибкам при выполнении вручную. Все данные скорее всего хранятся в 1С, но из неё можно сделать экспорт в Эксель и дальше скопировать в Гугл Таблицы:
Используя скрипт Google Apps, этот процесс можно полностью автоматизировать. Скрипт извлекает данные из таблицы Google, содержащей сведения о сотрудниках:
-
Дата заключения договора
-
ФИО
-
Должность
-
Сумма
-
Подарок
-
Паспорт
-
ИНН
Затем составляется однотипный шаблон документа Google для всех сотрудников:
После этого время работы гугл скрипта.
Скрипт автозаполнения договоров
Ниже приведён скрипт автозаполнения договоров дарения, написанный на Google Apps Script. Это скриптовый язык программирования, который используется для автоматизации работы с сервисами Google, такими как Gmail, Google Docs, Sheets, Slides, Forms и другими. Он позволяет создавать пользовательские функции, макросы и приложения, которые могут взаимодействовать с данными внутри этих сервисов. Это мощный инструмент для повышения производительности труда и улучшения взаимодействия между различными компонентами экосистемы Google:
function generateDocumentsFromSpreadsheet() { // Подробнее: https://habr.com/ru/articles/843488/ console.log(`Функция generateDocumentsFromSpreadsheet начала работу в ${(new Date()).toLocaleString("ru-RU")}`); // Доступ к таблице и получение данных const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName("Автозаполнение"); // Измените на название вашего листа const data = sheet.getDataRange().getValues(); // Получаем все данные с таблицы // Открытие шаблона Google Документа const templateDocId = "1y2XQhZBХХХХХХХХХХХХХzyfnXh8yUQ"; // Замените на настоящий идентификатор вашего шаблона const templateDoc = DriveApp.getFileById(templateDocId); const templateFolder = templateDoc.getParents().next(); // Получаем папку, в которой находится шаблон // Проходим по каждой строке (начиная со второй, чтобы пропустить заголовки) for (let i = 1; i < data.length; i++) { const [rawDate, fullName, position, rawAmount, gift, passport, tin] = data[i]; // Получаем данные из строки таблицы console.log(`Работаем с ${fullName}.`); let formattedAmount = ''; formattedAmount = rawAmount + " (" + FloatToSamplesInWordsRus(rawAmount) + ")" // Форматируем сумму как текст (включая пропись) // Форматируем дату let formattedDate = ''; if (rawDate instanceof Date) { formattedDate = Utilities.formatDate(rawDate, Session.getScriptTimeZone(), "dd.MM.yyyy"); // Преобразуем дату в формат "дд.мм.гггг" } // Создание нового документа на основе шаблона const copyDoc = templateDoc.makeCopy(`Заполненный - ${fullName}`); // Копируем шаблон и называем новый документ по ФИО const copyDocId = copyDoc.getId(); // Открываем новый документ const copyDocAsDoc = DocumentApp.openById(copyDocId); const copyDocBody = copyDocAsDoc.getBody(); // Замена шаблонных полей на данные из таблицы copyDocBody.replaceText('Дата', formattedDate); copyDocBody.replaceText('ФИО', fullName); copyDocBody.replaceText('Должность', position); copyDocBody.replaceText('Сумма', formattedAmount); copyDocBody.replaceText('Подарок', gift); copyDocBody.replaceText('Паспорт', passport); copyDocBody.replaceText('ИННномер', tin); // Замена текста полей на соответствующие данные // Сохранение и закрытие заполненного документа copyDocAsDoc.saveAndClose(); // Преобразование документа в PDF, если надо // const pdfBlob = DriveApp.getFileById(copyDocId).getAs("application/pdf"); // Сохранение копии PDF на Google Диске // const pdfFile = templateFolder.createFile(pdfBlob).setName(`Заполненный - ${fullName}.pdf`); // Дополнительно: удалите промежуточный Google Документ, если нужен только PDF // DriveApp.getFileById(copyDocId).setTrashed(true); } console.log(`Функция generateDocumentsFromSpreadsheet закончила работу в ${(new Date()).toLocaleString("ru-RU")}`); } // Карта для преобразования чисел в слова (рубли) отсюда https://habr.com/ru/articles/104057/ var mapNumbers = { 0: [2, 1, "ноль"], 1: [0, 2, "один", "одна"], 2: [1, 2, "два", "две"], 3: [1, 1, "три"], 4: [1, 1, "четыре"], 5: [2, 1, "пять"], 6: [2, 1, "шесть"], 7: [2, 1, "семь"], 8: [2, 1, "восемь"], 9: [2, 1, "девять"], 10: [2, 1, "десять"], 11: [2, 1, "одиннадцать"], 12: [2, 1, "двенадцать"], 13: [2, 1, "тринадцать"], 14: [2, 1, "четырнадцать"], 15: [2, 1, "пятнадцать"], 16: [2, 1, "шестнадцать"], 17: [2, 1, "семнадцать"], 18: [2, 1, "восемнадцать"], 19: [2, 1, "девятнадцать"], 20: [2, 1, "двадцать"], 30: [2, 1, "тридцать"], 40: [2, 1, "сорок"], 50: [2, 1, "пятьдесят"], 60: [2, 1, "шестьдесят"], 70: [2, 1, "семьдесят"], 80: [2, 1, "восемьдесят"], 90: [2, 1, "девяносто"], 100: [2, 1, "сто"], 200: [2, 1, "двести"], 300: [2, 1, "триста"], 400: [2, 1, "четыреста"], 500: [2, 1, "пятьсот"], 600: [2, 1, "шестьсот"], 700: [2, 1, "семьсот"], 800: [2, 1, "восемьсот"], 900: [2, 1, "девятьсот"] }; var mapOrders = [{ _Gender: true, _arrStates: ["рубль", "рубля", "рублей"] }, { _Gender: false, _arrStates: ["тысяча", "тысячи", "тысяч"] }, { _Gender: true, _arrStates: ["миллион", "миллиона", "миллионов"] }, { _Gender: true, _arrStates: ["миллиард", "миллиарда", "миллиардов"] }, { _Gender: true, _arrStates: ["триллион", "триллиона", "триллионов"] } ]; var objKop = { _Gender: false, _arrStates: ["копейка", "копейки", "копеек"] }; function Value(dVal, bGender) { var xVal = mapNumbers[dVal]; if (xVal[1] == 1) { return xVal[2]; } else { return xVal[2 + (bGender ? 0 : 1)]; } } function From0To999(fValue, oObjDesc, fnAddNum, fnAddDesc) { var nCurrState = 2; if (Math.floor(fValue / 100) > 0) { var fCurr = Math.floor(fValue / 100) * 100; fnAddNum(Value(fCurr, oObjDesc._Gender)); nCurrState = mapNumbers[fCurr][0]; fValue -= fCurr; } if (fValue < 20) { if (Math.floor(fValue) > 0) { fnAddNum(Value(fValue, oObjDesc._Gender)); nCurrState = mapNumbers[fValue][0]; } } else { var fCurr = Math.floor(fValue / 10) * 10; fnAddNum(Value(fCurr, oObjDesc._Gender)); nCurrState = mapNumbers[fCurr][0]; fValue -= fCurr; if (Math.floor(fValue) > 0) { fnAddNum(Value(fValue, oObjDesc._Gender)); nCurrState = mapNumbers[fValue][0]; } } fnAddDesc(oObjDesc._arrStates[nCurrState]); } function FloatToSamplesInWordsRus(fAmount) { var fInt = Math.floor(fAmount + 0.005); var fDec = Math.floor(((fAmount - fInt) * 100) + 0.5); var arrRet = []; var iOrder = 0; var arrThousands = []; for (; fInt > 0.9999; fInt /= 1000) { arrThousands.push(Math.floor(fInt % 1000)); } if (arrThousands.length == 0) { arrThousands.push(0); } function PushToRes(strVal) { arrRet.push(strVal); } for (var iSouth = arrThousands.length - 1; iSouth >= 0; --iSouth) { if (arrThousands[iSouth] == 0) { continue; } From0To999(arrThousands[iSouth], mapOrders[iSouth], PushToRes, PushToRes); } if (arrThousands[0] == 0) { // Handle zero amount if (arrThousands.length == 1) { PushToRes(Value(0, mapOrders[0]._Gender)); } var nCurrState = 2; PushToRes(mapOrders[0]._arrStates[nCurrState]); } if (arrRet.length > 0) { // Capitalize first letter arrRet[0] = arrRet[0].match(/^(.)/)[1].toLocaleUpperCase() + arrRet[0].match(/^.(.*)$/)[1]; } arrRet.push((fDec < 10) ? ("0" + fDec) : ("" + fDec)); From0To999(fDec, objKop, function () {}, PushToRes); return arrRet.join(" "); }
Процесс выполнения:
Скорость заполнения: 3-4 секунды на 1 договор.
Результат
После выполнения скрипта создаётся необходимое количество договоров дарения в папке расположения таблицы:
Как воспользоваться этим кодом?
Чтобы вставить и запустить скрипт Google Apps в таблицу Google, выполните следующие действия:
-
Откройте Google Таблицы: начните с открытия своей таблицы Google.
-
Откройте редактор скриптов: нажмите «Расширения» в меню, затем выберите «Скрипт приложений». Это откроет редактор скриптов приложений на новой вкладке.
-
Вставьте скрипт: в редакторе скриптов удалите код-заполнитель. Затем вставьте скрипт Google Apps выше в редактор.
-
Сохраните скрипт: нажмите значок дискеты или нажмите «Ctrl+S», чтобы сохранить скрипт. Дайте ему осмысленное имя, если будет предложено.
-
Авторизуйте скрипт: если ваш скрипт взаимодействует со службами Google (например, Таблицами, Календарем), вам необходимо предоставить ему разрешение. Нажмите кнопку «Запустить» (значок воспроизведения) и следуйте инструкциям по авторизации.
-
Запустите скрипт: После авторизации снова нажмите «Запустить». Скрипт будет запущен и выполнит действия по автозаполнению договоров дарения.
С этого момента вы можете легко запустить скрипт из редактора скриптов или создать пользовательское меню или кнопку в своей таблице для его запуска.
Где ещё можно использовать?
Подобные скрипты могут использоваться и для других целей:
-
Автоматизированные ведомости по заработной плате для отделов кадров
Бухгалтерия микроприятий (большие пользуются уже чем-то другим) могут создавать ведомости по заработной плате для каждого работника. Используя подобный скрипт, они смогут автоматически вносить такие сведения, как фамилия, должность, зарплата из главной таблицы, формируя документы по оплате труда. -
Создание юридических документов
Юридические отделы часто обрабатывают большой объем стандартизированных договоров и соглашений, в которых от клиента к клиенту меняется лишь несколько деталей. Извлекая данные из электронной таблицы (имя клиента, сумма контракта, даты), этот скрипт может автоматически генерировать соответствующие документы за считанные секунды. -
Табели успеваемости или сертификаты школьников
Школы и университеты могут использовать подобный скрипт для создания табелей успеваемости или сертификатов для учащихся. Сохраняя имена, оценки и достижения учащихся в электронной таблице, скрипт может генерировать персонализированный отчет или сертификат для каждого учащегося. -
Персонализированные приглашения и таблички для мероприятий
Организаторам мероприятий часто требуется отправлять персонализированные приглашения или создавать именные значки для участников. Используя подобный скрипт можно извлекать данные участников из электронной таблицы и генерировать пригласительные письма или таблички в формате PDF, готовые к печати.
Итоги
Бухгалтерам больше не нужно вручную создавать каждое соглашение, что экономит время и устраняет потенциальные ошибки при вводе данных. Вместо этого они могут положиться на скрипт для создания и хранения всех соглашений в организованной структуре папок на Google Диске, готовых к просмотру и распространению. Такая автоматизация не только оптимизирует административные рабочие процессы, но и обеспечивает согласованность и легкий доступ к записям.
Автор: Михаил Шардин
30 сентября 2024 г.
ссылка на оригинал статьи https://habr.com/ru/articles/843488/
Добавить комментарий