Частые вопросы
Сработает ли сценарий на заказах, созданных до его включения?
Зависит от события сценария:
- Заказ сохранён — нет, сценарий проверяет заказ только при его следующем сохранении. Старые заказы, которые никто не трогает, он не увидит.
- По расписанию — да: агент перебирает существующие заказы в выбранных статусах, которые менялись за последние 30 дней (срок меняется в настройках расписания).
Чтобы разом обработать старые заказы, используйте запуск по заказам — по статусам, периоду создания или списку номеров. Сначала в режиме Проверка, затем Применить.
Срабатывают ли сценарии на заказах из обмена с 1С, API и других модулей?
Да. Событие «Заказ сохранён» срабатывает при любом сохранении заказа: покупателем на сайте, менеджером в админке, обменом с 1С, агентом или кодом другого модуля.
Если сценарий не должен трогать такие заказы, добавьте условие «Откуда пришло сохранение» или «Заказ из внешней системы». Удобнее всего — отдельным сценарием-исключением наверху списка со «Стоп после срабатывания».
Можно ли отменить изменения, которые сделал сценарий?
Автоматического отката нет: сценарий сохраняет заказ штатно, как менеджер. Но в журнале прогонов по каждому срабатыванию видно, что было в заказе и что стало, — по нему изменения легко вернуть вручную.
Чтобы не пришлось ничего откатывать, новый сценарий сначала обкатывают: проверка на заказе ничего не меняет, а флаг «Тестовый» у сценария и тестовый режим модуля только пишут в журнал, что было бы сделано.
Что будет, если сценарий упадёт с ошибкой или очередь остановится? Не потеряются ли заказы?
Модуль разделяет три вида проблем и ведёт себя по-разному:
- Магазин отказал в изменении — например, обработчик другого модуля запретил отмену. В журнале прогонов итог Ошибка с текстом Битрикса, заказ этим сценарием не изменён, остальные сценарии применяются без него. Повтора нет — с теми же данными результат был бы тем же. Исправьте причину и примените сценарий к заказу ещё раз. Подробно — в разделе Отказы интернет-магазина.
- Сбой среды — недоступна база данных, блокировка, ошибка PHP. Проход откатывается целиком, заказ не меняется, а задача повторяется сама — всего до трёх попыток.
- Массовые сбои. Если за час 100 и больше задач завершились ошибкой после всех повторов, срабатывает предохранитель: агент очереди останавливается, чтобы не плодить ошибки и не нагружать сайт. В окне агента очереди видно «остановлен предохранителем», а в Журнале действий — самые частые ошибки.
Пока агент стоит — остановлен предохранителем или вручную, — задачи не теряются: новые сохранения заказов копятся в очереди и будут выполнены, когда агент заработает. Предохранитель снимается сам, когда ошибок за час станет меньше порога, или кнопкой Перезапустить агента.
Заказы не попадают в очередь только в трёх случаях: модуль выключен кнопкой питания, в очереди уже 20 000 ждущих задач (агенты давно не работают), или сбой случился в сам момент постановки — об этом запись в Логах. Такие заказы обработайте запуском по заказам за нужный период. Подробно — в разделе Фоновая обработка и защиты модуля.
Почему изменения появились в заказе не сразу?
Сценарии выполняются в фоне через очередь — так сохранение заказа не замедляется, а сбой сценария не мешает покупателю. Обычно изменения появляются через мгновение после сохранения. Задержка бывает, если агенты Битрикса работают на хитах, а не на cron, выключен «Запуск очереди сразу после ответа» или в очереди много задач. Подробно — в разделе Заказ ждёт в очереди.
Сценарии по расписанию срабатывают при проходе агента — по умолчанию раз в час.
Могут ли сценарии зациклиться и бесконечно менять заказ?
Собственные сохранения модуля сценарии заново не запускают. Петля возможна, только если заказ пересохраняет кто-то ещё — обработчик другого модуля или обмен с учётной системой — или два сценария меняют одно и то же поле в разные стороны. На этот случай есть предел сохранений: не больше 5 сохранений одного заказа за 10 минут. При превышении сохранение останавливается, в журнале прогонов — итог Пропущен, а в Логах — цепочка сценариев, которые перекидывали заказ. См. Сработала защита от петель.
Что будет со сценарием, если удалить статус, службу доставки или свойство заказа?
Сценарий выключится сам при ближайшей проверке заказов — с задержкой до часа после изменения в магазине. В админке появится уведомление со списком того, чего не хватает, а в списке сценариев — плашка Ошибка в правиле. Включить сценарий обратно можно, только исправив правило или вернув удалённое в магазин. Подробно — в разделе Сценарий выключился сам.
Как сделать, чтобы на заказ срабатывал только один сценарий из нескольких?
Расставьте сценарии в нужном порядке — они проверяются сверху вниз — и включите «Стоп после срабатывания» у тех, после которых остальные проверять не нужно. См. Порядок проверки.
Зачем нужны профили?
Профиль — это отдельный набор сценариев со своими настройками. Профили переключаются кнопкой профиля в боковой панели модуля, там же создаются новые.
В одном профиле все сценарии — это одна цепочка: они проверяются сверху вниз, и сценарий со «Стоп после срабатывания» обрывает её для всех, кто ниже. Это удобно, пока правила связаны между собой, и мешает, когда в магазине несколько независимых веток правил. Тогда каждую ветку выносят в свой профиль — и «стоп» в одной ветке не останавливает другую.
У каждого профиля свои:
- сценарии и их порядок;
- настройки сценариев: тестовый режим, предел сохранений, срок хранения журнала;
- агент очереди;
- кнопка питания — профиль можно выключить, не трогая остальные.
Пример 1. Статусы и логистика. В профиле «Статусы» — цепочка жизненного цикла заказа: оплачен — в сборку, не оплачен за 3 дня — отменить. Наверху стоит исключение «заказы из 1С не трогаем» со «стопом». В профиле «Доставка» — правила выбора службы доставки по весу и товарам. Исключение для заказов из 1С не мешает подбирать им доставку, а логистику можно обкатать в тестовом режиме, пока статусы уже работают по-настоящему.
Пример 2. Новое правило рядом с работающими. Набор новых сценариев собирают в отдельном профиле с включённым тестовым режимом. Основной профиль продолжает работать, а по журналу видно, что сделали бы новые правила. Когда всё проверено, тестовый режим в новом профиле выключают.
Пример 3. Сезонные правила. Правила распродажи или праздничной доставки живут в своём профиле и включаются кнопкой питания на время акции — без поштучного включения и выключения сценариев.
Профили работают независимо и друг о друге не знают. Если один профиль ставит заказу статус «В сборке», а другой — «Ожидает проверки», они будут перетягивать заказ, пока не сработает защита от петель: её счётчик сохранений общий для заказа во всех профилях. Делите между профилями не только заказы, но и то, что сценарии в них меняют.
Сколько сценариев можно создать?
Жёсткого ограничения нет — в рамках разумного. Один сценарий почти не создаёт нагрузки: условия проверяются по уже загруженному заказу, а заказ сохраняется один раз на проход, сколько бы сценариев ни сработало.
Но при каждом сохранении заказа проверяются все активные сценарии с событием «Заказ сохранён» для сайта этого заказа. Десятки сценариев — обычная работа. Когда их сотни, нагрузка становится ощутимой: каждое сохранение заказа — а их бывает несколько на один заказ — тянет за собой сотни проверок. Сценарии по расписанию умножают это на число заказов в каждом проходе агента.
Если сценариев много:
- сужайте событие — «Только создание заказа» или «Если изменилось поле»: сценарий не будет проверяться на сохранениях, которые его не касаются;
- указывайте сайты сценария, если правило нужно не везде;
- в сценариях по расписанию выбирайте только нужные статусы;
- объединяйте похожие правила в один сценарий с группами условий «ИЛИ»;
- выключайте или удаляйте сценарии, которые больше не нужны.
Нагружает ли модуль сайт?
Минимально. Сценарии по сохранению заказа выполняются после ответа браузеру, по одному заказу и только если для сайта заказа есть активные сценарии. Сценарии по расписанию проверяют заказы порциями — по умолчанию не больше 200 за проход раз в час и только в выбранных статусах. На нагруженном сайте уменьшите размер порции в настройках расписания и сузьте список статусов в сценариях.