Отказы интернет-магазина
Модуль меняет заказы только штатными средствами Битрикса — со всеми проверками и событиями модуля «Интернет-магазин». Поэтому магазин может не дать изменить заказ: что-то модуль видит заранее и пропускает сценарий, а что-то выясняется только при сохранении.
Всё, о чём рассказано на этой странице, видно в журнале прогонов: итог в колонке Итог, причина — под строкой и в подробностях прогона.
Сценарий пропущен
Что произошло. Условия выполнились, но заказ не изменился. В журнале прогонов итог Пропущен, у действия — статус Пропуск и причина: «Действие «…» нельзя применить к заказу: …».
Почему. Прежде чем менять заказ, модуль проверяет все действия сценария. Если хоть одно применить нельзя, сценарий пропускается целиком — чтобы не оставить заказ изменённым наполовину. Остальные сценарии в проходе работают как обычно.
| Действие | Причина в журнале | Что значит |
|---|---|---|
| Сменить платёжную систему | «У заказа нет неоплаченных оплат — оплаченные действие не трогает» | Все оплаты заказа уже оплачены |
| Сменить платёжную систему | «Платёжной системы [N] нет среди активных…» | Платёжную систему выключили или удалили — сценарий скоро выключится сам |
| Сменить службу доставки | «У заказа нет неотгруженных отгрузок…» | Все отгрузки уже отгружены |
| Сменить службу доставки | «Заказ уже оплачен (полностью или частично) — стоимость доставки не пересчитывается…» | Включён пересчёт стоимости, а у заказа есть оплата: пересчёт разошёлся бы с оплаченной суммой |
| Сменить службу доставки | «Заказ отменён — интернет-магазин не пересчитывает стоимость доставки у отменённого заказа» | Включён пересчёт стоимости, а заказ отменён |
| Сменить службу доставки | «Службы доставки [N] нет среди активных…» | Службу выключили или удалили |
| Установить свойство заказа | «У типа плательщика заказа нет свойства «…»» | Свойство есть только у другого типа плательщика — например, «ИНН» только у юрлиц |
| Установить свойство заказа | «Свойства заказа «…» нет среди активных…» | Свойство выключили или удалили |
| Установить поле отгрузки | «У заказа нет подходящих отгрузок: системная и уже отгруженные не меняются» | Трек-номер и «Доставка разрешена» пишутся только в неотгруженные отгрузки |
| Установить поле отгрузки | «Заказ отменён — интернет-магазин не меняет разрешение доставки у отменённого заказа» | Разрешить доставку у отменённого заказа магазин не даёт |
| Сменить статус заказа | «Статуса заказа «…» нет…» | Статус удалили в настройках магазина |
| Отменить заказ | «У заказа есть оплаченная оплата — интернет-магазин не отменяет оплаченный заказ…» | Сначала нужно снять оплату или вернуть деньги |
| Отменить заказ | «У заказа есть отгруженная отгрузка — интернет-магазин не отменяет отгруженный заказ…» | Сначала нужно снять отметку отгрузки |
Что делать. Добавьте в блок Если условие, которое отсечёт такие заказы заранее, — тогда сценарий не будет срабатывать на них и засорять журнал. Например:
- для «Сменить платёжную систему» — условие «Заказ оплачен — Нет»;
- для «Отменить заказ» — «Заказ оплачен — Нет» и «Заказ отгружен — Нет»;
- для «Сменить службу доставки» с пересчётом — «Заказ оплачен — Нет» и «Заказ отменён — Нет».
Если сценарий должен отменять и отгруженные заказы, поставьте перед «Отменить заказ» действие «Установить поле отгрузки» со значением «Отгружена — Нет». Модуль учитывает действия, стоящие выше в том же сценарии: снятая отгрузка разрешит отмену. Так же работает «Доставка разрешена» у отменённого заказа — поставьте перед ним «Отменить заказ» со значением «Нет». Оплату сценарии не снимают — оплаченный заказ отменяют вручную.
Ошибка при изменении или сохранении
Что произошло. В журнале прогонов итог Ошибка с текстом Битрикса. Заказ этим сценарием не изменён.
Почему. Проверка прошла, но в момент изменения или сохранения магазин отказал. Частые причины:
- обработчик события другого модуля или шаблона запретил изменение — например, обработчик
OnSaleBeforeOrderCanceledзапретил отмену; - заказ не прошёл штатные проверки Битрикса при сохранении.
Где видно. Журнал прогонов: «Действие «…» не выполнено: …» — Битрикс отказал при изменении; «Изменения не сохранены — заказ не удалось сохранить: …» — при сохранении. Ошибки дублируются на страницу Логи.
Что с соседними сценариями.
- Если Битрикс отказал в изменении одним из действий, модуль сразу перечитывает заказ и проходит сценарии ещё раз — уже без отказавшего. Остальные сценарии применяются и сохраняются как обычно, ошибка остаётся только у одного сценария.
- Если Битрикс отказал в сохранении заказа, не сохраняется ничего: итог Ошибка у всех сценариев прохода.
Такие отказы модуль не повторяет: причина в данных заказа или в чужом обработчике, и повтор дал бы тот же результат. Исправьте причину — условие сценария или обработчик — и, если нужно, примените сценарий к заказу ещё раз из редактора.
Отличайте эти отказы от сбоев среды — недоступной базы данных, блокировок, падения PHP. Те модуль повторяет сам — см. Сбои базы данных и сервера.
Заказ записан частично
Что произошло. Итог Ошибка с текстом «Заказ записан частично — часть изменений не сохранилась: …».
Почему. Битрикс сохранил сам заказ, но не смог сохранить связанные данные — отгрузку, оплату или скидки. Заказ при этом уже изменён, поэтому модуль задачу не повторяет: повтор применил бы действия второй раз.
Что делать. Откройте заказ в админке магазина и проверьте его вручную: что сохранилось, а что нет, — подскажет текст ошибки. Поправьте заказ вручную или примените к нему сценарий ещё раз. Если ошибка повторяется на многих заказах — пришлите её текст в поддержку.
Применён с предупреждением
Итог Применён, а под строкой журнала — текст предупреждения. Заказ сохранён, повторять ничего не нужно, но стоит прочитать, что сообщил магазин.
«Изменения сохранены, но магазин выдал предупреждение: …» — Битрикс сохранил заказ, но отметил проблему. Частый пример — не хватило остатка товара для резерва. Изменения сценария на месте; проверьте остатки и резерв по заказу.
«Изменения сохранены, но обработчик, сработавший после сохранения заказа, завершился с ошибкой: …» — заказ сохранён, а затем упал обработчик события сохранения заказа из другого модуля или шаблона. Изменения сценария на месте; не выполнилось то, что делает чужой обработчик, — например, отправка письма или выгрузка во внешнюю систему. Передайте текст ошибки разработчику этого обработчика.