Сотрудник открывает карточку сделки, переносит реквизиты в договор, меняет дату, заполняет спецификацию и сохраняет файл. Если взять за основу прежний документ, в новой версии могут остаться чужой счёт, сумма или название компании.
Автоматизировать заполнение документов можно, когда форма уже согласована, а исходные значения хранятся в таблице или CRM. Для этого нужны шаблон, карта полей, неизменяемый снимок данных, правила проверки и журнал выпусков. Автоматизация переносит известные значения, но не выбирает юридические условия и не заменяет согласование документа.
Когда подходит заполнение по шаблону
Заполнение по шаблону подходит для повторяемых договоров, актов, писем и справок. Их структура сохраняется, а номер, дата, стороны, позиции и сумма меняются. Процесс можно формализовать, если для каждого значения известны источник, тип, формат и правило проверки.
Отделите подстановку от составления документа. Система может взять customer_name из CRM и поместить его в поле «Заказчик». Она не должна самостоятельно выбирать условие договора, исправлять спорные реквизиты или придумывать отсутствующее значение.
Это также не извлечение сведений из входящих файлов. При заполнении система получает структурированные поля и переносит их в утверждённый шаблон. При извлечении сначала требуется распознать входящий документ и найти сведения. У этих процессов разные ошибки и критерии приёмки.
Как подготовить источник и карту полей
Сначала задайте контракт данных. В учебном contract-v1 запись описывает одну деловую редакцию документа и содержит ровно две фиксированные позиции. Уникальность пары (document_id, document_revision) не предполагается: её проверяют по всему неизменяемому снимку. Ноль, одна, три и более позиций останавливают миграцию. Для переменного количества строк нужен другой контракт с массивом позиций.
Ниже приведён синтетический пример, а не клиентский материал, готовый файл или результат внедрения Switch On AI.
Обязательные поля и источник данных
Во входной контракт входят исходные сведения. Миграция создаёт подготовленную запись contract-v2: преобразует дату, рассчитывает итоги строк и общий итог, находит расхождение с заявленной суммой и формирует условный блок. Значение source_declared_total поступает из CRM только для контрольного сравнения.
| Поля | Тип и правило | Синтетическое значение | Источник |
|---|---|---|---|
document_id, document_revision | Строка и целое; обязательны | DOC-0042, 1 | Карточка CRM |
contract_number | Строка; обязательна | 42-А | Карточка CRM |
contract_date | YYYY-MM-DD; обязательна | 2026-10-05 | Карточка CRM |
customer_name | Строка; обязательна | ООО «Учебный заказчик» | Реквизиты CRM |
customer_tax_id | Строка; обязательна | 0012345673 | Реквизиты CRM |
customer_bank_account | Строка; обязательна | 00000000000000000042 | Реквизиты CRM |
currency | Строка; обязательна | RUB | Карточка CRM |
item_1_name, item_1_unit | Строки; обязательны | Настройка шаблона, усл. | Позиция 1 CRM |
item_1_quantity, item_1_unit_price | Decimal; обязательны | 2.00, 12500.00 | Позиция 1 CRM |
item_2_name, item_2_unit | Строки; обязательны | Проверка выпуска, усл. | Позиция 2 CRM |
item_2_quantity, item_2_unit_price | Decimal; обязательны | 3.00, 4000.00 | Позиция 2 CRM |
source_declared_total | Decimal; обязателен | 37000.00 | Карточка CRM |
representative_required | Логическое; обязательно | false | Карточка CRM |
representative_name, representative_basis | Условно обязательны | Пустые строки | Карточка CRM |
source_schema_version | Строка; обязательна | contract-v1 | Настройка выгрузки |
item_1_line_total | Decimal; вычисляемое | 25000.00 | Миграция в contract-v2 |
item_2_line_total | Decimal; вычисляемое | 12000.00 | Миграция в contract-v2 |
calculated_total, delta | Decimal; вычисляемые | 37000.00, 0.00 | Миграция в contract-v2 |
schema_version | Строка; обязательна после миграции | contract-v2 | Миграция |
Если таблица не помещается, прокрутите её вправо. С клавиатуры используйте стрелки.
Для выгрузки задайте минимальные права как проектное требование: читать согласованные сущности и поля CRM, читать шаблон, создавать результат в выделенной папке и записывать внутренний журнал. Если процесс не меняет сделку, право на изменение CRM ему не требуется. Конкретные роли, лицензии, области авторизации и политики определяют для выбранных систем и организации.
Формат реквизитов
ИНН, банковский счёт и другие идентификаторы храните как строки: числовой формат может отбросить ведущие нули. Проверка длины и символов не доказывает, что реквизиты существуют или принадлежат указанной компании.
Для даты сначала проверьте формат YYYY-MM-DD, затем календарную допустимость. В примере 2026-10-05 преобразуется в 05.10.2026, а 05/10/26 отклоняется как неоднозначное значение.
Количество, цену и суммы обрабатывайте как точные десятичные значения. По правилу примера итог каждой строки округляется методом ROUND_HALF_UP до двух знаков, после чего строки складываются:
ROUND_HALF_UP(2.00 × 12500.00, 2) = 25000.00.ROUND_HALF_UP(3.00 × 4000.00, 2) = 12000.00.calculated_total = 25000.00 + 12000.00 = 37000.00.delta = 37000.00 − 37000.00 = 0.00.
Миграция сохраняет source_schema_version = contract-v1, добавляет schema_version = contract-v2 и создаёт contract_date_text, итоги строк, calculated_total, delta и representative_block. При representative_required = false блок равен пустой строке.
Результат миграции — отдельная подготовленная таблица слияния. Исходную выгрузку CRM не изменяют.
| Группа | Значения подготовленной строки |
|---|---|
| Версии | contract-v1; contract-v2 |
| Документ | DOC-0042; редакция 1; номер 42-А |
| Дата и заказчик | 05.10.2026; ООО «Учебный заказчик» |
| Реквизиты | ИНН 0012345673; счёт 00000000000000000042; RUB |
| Позиция 1 | 2.00 × 12500.00 = 25000.00 |
| Позиция 2 | 3.00 × 4000.00 = 12000.00 |
| Итог | Заявлено 37000.00; рассчитано 37000.00; разница 0.00 |
| Условие | Представитель не требуется; блок пуст |
Если таблица не помещается, прокрутите её вправо. С клавиатуры используйте стрелки.
Перед передачей снимку присваивают fingerprint. После проверки его содержимое не меняют. Синтетический шаблон может содержать поля {{contract_number}}, {{contract_date_text}}, {{customer_name}}, реквизиты, две фиксированные позиции, {{calculated_total}} и {{representative_block}}. Это обозначения контракта: фактический синтаксис зависит от выбранного инструмента.
Как выполнить слияние Excel и Word
Официальная документация Microsoft описывает Mail Merge для настольных Word for Microsoft 365, Word 2024, Word 2021, Word 2019 и Word 2016, включая указанные на странице редакции для macOS. Она требует подготовить Excel, подключить источник, выбрать получателей, вставить поля, просмотреть результат и завершить слияние. Описание ниже пересказывает эту документацию применительно к синтетическим данным; оно не является отчётом о запуске программы.
Перед работой внешний процесс формирует неизменяемый снимок подготовленной таблицы. Совпадения считают по всему снимку и точному составному ключу (document_id = "DOC-0042", document_revision = 1). Одно совпадение даёт matched_records = 1 и позволяет сформировать отдельный однострочный источник с selected_recipients = 1. Ноль совпадений даёт 0/0, два — 2/0. При результате, отличном от одного, создание документа не начинается.
Учебная последовательность по документации:
- Подключить подготовленную таблицу Excel как источник.
- Выбрать в списке получателей единственную строку
DOC-0042/1. - Вставить поля слияния в утверждённый шаблон.
- Открыть предварительный просмотр и пройти выбранные записи.
- Завершить слияние и сохранить один кандидат на выпуск.
Перед выпуском сотрудник сверяет номер, реквизиты, дату 05.10.2026, две позиции, итоги 25000.00 и 12000.00, общий итог 37000.00, delta = 0.00, валюту RUB, отсутствие блока представителя и незаменённых маркеров. Для учебного контракта ожидаемое состояние после успешной проверки кандидата — released_documents = 1.
Названия команд и расположение элементов нужно сверять в используемой редакции Word. Схемы этой статьи объясняют логику процесса и не изображают интерфейс программы.
Отдельный механизм Microsoft — Word Online (Business) connector для Power Automate, Logic Apps, Power Apps и Copilot Studio. Действие Populate a Microsoft Word template работает с файлами в библиотеках, поддерживаемых Microsoft Graph: OneDrive for Business, SharePoint Online Sites и Office 365 Groups. Документация перечисляет поддерживаемые элементы управления содержимым, включая Plain Text и Repeating Section, требует уникальных названий элементов и указывает предел входного файла 10 МБ для соответствующих действий. Эти свойства относятся к облачному connector и не описывают настольный Mail Merge.
Как связать Google Sheets и Google Docs
Сопоставимый сценарий можно спроектировать через Google Sheets API v4, Google Drive API v3 и Google Docs API v1. Это учебная последовательность по официальной документации, а не отчёт о живом запуске:
- Прочитать зафиксированный диапазон методом
spreadsheets.values.getс подходящими правами. - Найти
DOC-0042/1и продолжить только при одном совпадении. - Проверить типы, обязательные поля, дату и суммы; построить
contract-v2. - После успешной прикладной валидации создать
request_keyиgeneration_attempt_id. - Сохранить в журнале ключ, fingerprint, версии и планируемую операцию до внешнего вызова.
- Создать копию шаблона методом
files.copyи сохранить еёexternal_object_id. - Передать замены маркеров одним вызовом
documents.batchUpdate, проверить копию и только затем разрешить выпуск.
Метод spreadsheets.values.get возвращает значения выбранного диапазона, но не проверяет прикладной контракт. files.copy создаёт отдельный файл, а documents.batchUpdate изменяет уже созданный документ. Запросы одного batchUpdate сначала проверяются; недействительный запрос отклоняет весь пакет, а принятые обновления применяются вместе. Чтение Sheets, копирование Drive, изменение Docs и запись прикладного журнала остаются отдельными операциями, а не общей транзакцией.
Идемпотентность files.copy обеспечивает не Google Drive API, а проектируемый прикладной слой. generation_attempt_id обозначает попытку процесса, а отдельный operation_id — конкретный внешний вызов. Журнал по тому же request_key должен вернуть ранее сохранённое состояние и external_object_id, если копия уже появилась.
Если копирование прошло, а пакет замен отклонён, журнал сохраняет generated_documents = 1, external_object_id, output_check_status = rejected и released_documents = 0. Автоматически вызывать files.copy повторно нельзя.
Если исход files.copy неизвестен, журнал получает generated_documents = null, generation_outcome = unknown и release_status = manual_review. Новый ключ и новое копирование запрещены, пока сотрудник не установит судьбу первой операции.
Права на исходный шаблон, целевую папку и общие диски, а также области авторизации и политики администратора согласуют для конкретной организации. Для фиксированных маркеров подходит замена текста. Переменное количество строк требует отдельной логики изменения структуры документа.
Как добавить условия и сложные правила
Стандартного слияния достаточно при постоянной структуре и прямом соответствии колонок полям. Скрипт, Visual Basic for Applications (VBA) или отдельная интеграция нужны для переменного количества строк, составных условий, склонения, журнала и восстановления после сбоя.
Условные блоки
Контракт блока представителя задаёт три состояния:
- при
representative_required = falseблок пуст, итог остаётся37000.00, а проверка ищет лишний пустой абзац; - при
trueимя и основание обязательны, блок появляется один раз, суммы не меняются; - при
trueи пустом обязательном поле система отказывает после чтения входа, но до созданияrequest_keyи любой внешней операции с документом.
В положительном синтетическом варианте заданы representative_name = Анны Сергеевны Орловой и representative_basis = доверенности № 7-У от 01.10.2026. Система вставляет блок один раз. Имя хранится в согласованной грамматической форме: система не склоняет его по догадке. Автоматическое склонение требует отдельного правила и самостоятельного набора тестов.
Несколько табличных строк
Учебный contract-v1 принимает ровно две полностью заполненные позиции. Миграция отклоняет ноль, одну, три и более позиций до создания request_key. Это ограничение примера, а не свойство Word или Google Docs.
Для переменного количества строк нужен отдельный контракт с массивом позиций. Его нельзя смешивать с колонками item_1_* и item_2_*. Реализация зависит от инструмента: это может быть повторяющаяся секция, скрипт, VBA или интеграция, которая меняет структуру документа.
Как проверить документ перед выпуском
Проверяйте обычную запись, граничные значения и ошибочные входы. Для каждого сценария заранее запишите ожидаемое состояние журнала.
| Сценарий | Ожидаемый результат |
|---|---|
Одна запись DOC-0042/1 | matched_records = 1, selected_recipients = 1; итоги 25000.00, 12000.00, 37000.00; delta = 0.00 |
| Нет записи | matched_records = 0, selected_recipients = 0; создание не начинается |
| Две одинаковые записи | matched_records = 2, selected_recipients = 0; создание не начинается |
| Представитель выключен | Блок пуст; суммы не меняются; лишнего абзаца нет |
| Представитель включён, поля заполнены | Блок появляется один раз; суммы не меняются |
| Основание представителя пусто | Отказ после чтения входа, до request_key и операций с документом |
Дата 05/10/26 | Такой же ранний отказ из-за неоднозначной даты |
Пустой customer_tax_id | Такой же ранний отказ из-за обязательного поля |
| ИНН и счёт с ведущими нулями | Значения сохраняются посимвольно |
| Остался маркер | Кандидат отклонён; released_documents = 0 |
| Google: копия создана, пакет отклонён | generated_documents = 1; сохранён external_object_id; выпуск и повторное копирование запрещены |
Исход files.copy неизвестен | generated_documents = null; release_status = manual_review; новый ключ и вызов запрещены |
Если таблица не помещается, прокрутите её вправо. С клавиатуры используйте стрелки.
Предварительный просмотр
Сотрудник сверяет число документов, идентификатор и редакцию, сторону, ИНН, банковский счёт, номер, дату, валюту, две строки, единицы, количество, цены и итоги. Затем ищет незаменённые маркеры, NULL, пустые обязательные подписи, сведения из прежнего документа, неожиданные переносы и лишний абзац после условного блока.
После изменения карты полей, миграции или шаблона повторяют затронутые проверки. Успешная базовая запись не заменяет отрицательные сценарии.
Ошибки исходных данных
В ошибочной синтетической записи заданы 0.50 × 20.01, 1.00 × 20.00 и заявленный итог 30.00:
- Точное произведение
0.50 × 20.01 = 10.005. ROUND_HALF_UP(10.005, 2) = 10.01.ROUND_HALF_UP(1.00 × 20.00, 2) = 20.00.calculated_total = 10.01 + 20.00 = 30.01.delta = 30.01 − 30.00 = +0.01.
Запись получает validation_status = rejected. Для принятого входного события создаётся intake_id, но request_key = null; попытка выпуска не начинается; generated_documents = 0; released_documents = 0. Отказ происходит после чтения входа, но до любой внешней операции создания или изменения документа. Это правило учебного контракта, а не универсальное бухгалтерское требование.
Как управлять версиями и повторным созданием
Назначьте владельца шаблона. Вместе с файлом он обновляет карту полей, миграцию и тестовый набор. source_schema_version показывает версию входа, schema_version — подготовленных данных, template_version — шаблона, rules_version — преобразований, а document_revision — делового содержания.
intake_id создаётся для каждого принятого системой входного события, включая запись, которую затем отклонит проверка. request_key появляется только после успешной прикладной валидации и обозначает идемпотентный запрос проектируемого прикладного слоя. generation_attempt_id создаётся тогда же, до первого внешнего вызова, и обозначает одну попытку всего процесса выпуска.
Для каждой внешней операции журнал отдельно хранит operation_id, operation_type, external_object_id, время и результат. До первого внешнего вызова система должна успешно сохранить request_key, generation_attempt_id, ожидаемое имя, папку, fingerprint снимка и версии данных, шаблона и правил.
Повторный выпуск
При повторе журнал по прежнему request_key должен вернуть сохранённое состояние, включая external_object_id, если объект уже появился. Новый файл при этом не создают.
Новый ключ допустим после подтверждённого сбоя и подтверждённого отсутствия внешнего артефакта либо после завершённого ручного разбора неизвестного исхода. Если копия существует, сначала документируют её судьбу и подтверждают, что второй активный результат не возникнет.
При неизвестном исходе журнал сохраняет generation_outcome = unknown, generated_documents = null, released_documents = 0 и release_status = manual_review. Пока сотрудник не установит наличие или отсутствие результата, новый ключ и новый внешний вызов запрещены.
Если деловое содержание изменилось, создают новую document_revision. При техническом перевыпуске содержание может совпадать, но активной должна остаться одна версия. Ошибочный результат помечают как отклонённый или отменённый. Резервная копия включает шаблон, карту полей, миграцию, журнал и синтетические тесты.
Когда такой контроль нужно связать с рабочей CRM, Switch On AI может помочь описать процесс, проверить доступные подключения и подготовить автоматизацию. Для заранее заданной последовательности обычно подходит обычная интеграция. ИИ-агент нужен только тогда, когда система должна выбирать следующее разрешённое действие по контексту. Подход к проектированию таких решений описан на странице разработки AI-агентов и автоматизаций.

Ошибки шаблонов и следующий шаг
Переименованная колонка должна остановить импорт. Потерянное поле выявляют сравнением шаблона с картой. При неожиданной вставке текста проверяют источник, переносы и положение маркера. Недостаток разрешений нельзя исправлять автоматическим расширением прав. Неоднозначную дату или сумму возвращают владельцу источника без догадки.
Для фиксированной последовательности обычно достаточно стандартного слияния или обычной интеграции. Чат-бот может запустить процесс или запросить пропущенное поле, но не заменяет контракт формирования документа. ИИ-агент не нужен там, где следующий шаг заранее известен.
Для обсуждения подготовьте обезличенный шаблон и источник данных либо используйте структуру синтетического примера из статьи. Добавьте обычную запись, вариант с представителем и запись с ошибкой. Пароли, ключи и персональные данные не нужны. Опишите процесс и ожидаемый результат — по этим материалам можно определить состав проверки и подходящий способ реализации.
Вопросы по этой задаче
Когда достаточно стандартного слияния без скрипта?
Когда документ имеет постоянную структуру, каждое значение связано с известной колонкой, а инструмент поддерживает нужные поля. Скрипт, VBA или отдельная интеграция нужны для переменных строк, составных условий, журнала и восстановления после сбоя.
Что происходит, если найдены ноль или несколько записей документа?
При отсутствии совпадений устанавливаются matched_records = 0 и selected_recipients = 0. При двух совпадениях — matched_records = 2 и selected_recipients = 0. В обоих случаях создание документа не начинается.
Как проверяется сумма в учебном примере?
Каждый точный десятичный итог строки округляется по ROUND_HALF_UP до двух знаков, затем округлённые строки складываются. Получаются 25000.00 и 12000.00, calculated_total = 37000.00 и delta = 0.00.
Что делать, если Google Drive создал копию, а замены не применились?
Сохранить external_object_id копии, установить generated_documents = 1, output_check_status = rejected и released_documents = 0. Повторно копировать шаблон автоматически нельзя; журнал по тому же request_key должен вернуть состояние существующей копии.
Как повторить создание без случайного дубликата?
Сначала по прежнему request_key получают сохранённое состояние. Новый ключ допустим только после подтверждённого отсутствия результата либо после ручного разбора неизвестного исхода и решения о судьбе уже созданной копии.
