Если onEdit срабатывает несколько раз, автоматизация в Google Sheets может дублировать записи, повторно отправлять письма, несколько раз менять статус или зацикливаться на собственной правке.
Сначала проверьте, сколько триггеров установлено, не меняет ли скрипт ячейку внутри onEdit и есть ли защита от повторной обработки одного события.
Коротко: что делать
- Проверить простые и установленные триггеры в Apps Script
- Посмотреть, какие ячейки редактирует сам скрипт
- Добавить лог события: лист, строка, колонка, значение
- Проверить условия выхода из функции
- Проверить LockService и метку уже обработанной строки
Основные причины
У этой проблемы редко бывает одна универсальная причина. Обычно нужно проверить связку настроек, данных, кода и внешних сервисов, а потом уже выбирать способ исправления.
- Создано несколько installable triggers на одну функцию
- Скрипт внутри onEdit меняет ячейку и провоцирует новую обработку
- Нет проверки листа, колонки или диапазона
- Один и тот же сценарий запускается вручную и триггером
- Нет блокировки при параллельных изменениях
Пошаговая диагностика
Диагностику лучше вести от конкретного примера: один пользователь, один запрос, один документ, одно событие или один экран. Так проще увидеть точку, где система начинает вести себя неправильно.
- Открыть Triggers и удалить дубли
- Добавить временный лог с timestamp и event range
- Проверить, какие действия пользователя приводят к повтору
- Проверить Execution log на параллельные запуски
- Проверить, не стоит ли второй скрипт в этой же таблице
Как исправить проблему
Исправление должно закрывать корневую причину, а не только внешний симптом. Если проблема связана с доступами, платежами, данными или безопасностью, сначала стоит сделать резервную копию и проверить правку на тестовом сценарии.
- Оставить один нужный trigger
- Добавить ранние return по листу, колонке и типу изменения
- Не писать в исходную ячейку без необходимости
- Использовать LockService для защиты от параллельных запусков
- Добавить флаг обработки или журнал event id
Безопасный план решения
Сначала отключите лишние триггеры и проверьте логи на тестовой копии таблицы. Потом включайте автоматизацию на рабочем файле.
Чего не стоит делать
- Не отправлять письма из onEdit без проверки повторной обработки
- Не править рабочую таблицу без копии
- Не ставить новый trigger, не удалив старый
- Не использовать sleep как основную защиту от дублей
Что подготовить перед исправлением
- Код onEdit
- Список установленных триггеров
- Пример действия, которое дает повтор
- Что именно дублируется: строка, письмо, статус или запись
FAQ
Почему простой onEdit и installable trigger ведут себя по-разному?
У них разные права и условия запуска. Если используются оба, легко получить повторную обработку.
Поможет ли LockService?
Да, если проблема в параллельных запусках. Но дубли триггеров и плохие условия тоже нужно исправить.
Почему скрипт реагирует не на ту колонку?
Скорее всего, нет проверки event.range.getColumn() или выбран слишком широкий диапазон.
Когда стоит обратиться за помощью
Помощь нужна, если скрипт отправляет письма, создает документы, меняет статусы заказов или работает в общей таблице команды.
Итог
Начните с списка triggers и логирования event range. Если нужно исправить Apps Script без дублей и повторных отправок, можно написать в Telegram @rabotator_support.