Перейти к основному содержимому

Отказы интернет-магазина

Модуль меняет заказы только штатными средствами Битрикса — со всеми проверками и событиями модуля «Интернет-магазин». Поэтому магазин может не дать изменить заказ: что-то модуль видит заранее и пропускает сценарий, а что-то выясняется только при сохранении.

Всё, о чём рассказано на этой странице, видно в журнале прогонов: итог в колонке Итог, причина — под строкой и в подробностях прогона.

Сценарий пропущен​

Что произошло. Условия выполнились, но заказ не изменился. В журнале прогонов итог Пропущен, у действия — статус Пропуск и причина: «Действие «…» нельзя применить к заказу: …».

Почему. Прежде чем менять заказ, модуль проверяет все действия сценария. Если хоть одно применить нельзя, сценарий пропускается целиком — чтобы не оставить заказ изменённым наполовину. Остальные сценарии в проходе работают как обычно.

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

Что делать. Добавьте в блок Если условие, которое отсечёт такие заказы заранее, — тогда сценарий не будет срабатывать на них и засорять журнал. Например:

  • для «Сменить платёжную систему» — условие «Заказ оплачен — Нет»;
  • для «Отменить заказ» — «Заказ оплачен — Нет» и «Заказ отгружен — Нет»;
  • для «Сменить службу доставки» с пересчётом — «Заказ оплачен — Нет» и «Заказ отменён — Нет».
Отмена отгруженного заказа

Если сценарий должен отменять и отгруженные заказы, поставьте перед «Отменить заказ» действие «Установить поле отгрузки» со значением «Отгружена — Нет». Модуль учитывает действия, стоящие выше в том же сценарии: снятая отгрузка разрешит отмену. Так же работает «Доставка разрешена» у отменённого заказа — поставьте перед ним «Отменить заказ» со значением «Нет». Оплату сценарии не снимают — оплаченный заказ отменяют вручную.

Ошибка при изменении или сохранении​

Что произошло. В журнале прогонов итог Ошибка с текстом Битрикса. Заказ этим сценарием не изменён.

Почему. Проверка прошла, но в момент изменения или сохранения магазин отказал. Частые причины:

  • обработчик события другого модуля или шаблона запретил изменение — например, обработчик OnSaleBeforeOrderCanceled запретил отмену;
  • заказ не прошёл штатные проверки Битрикса при сохранении.

Где видно. Журнал прогонов: «Действие «…» не выполнено: …» — Битрикс отказал при изменении; «Изменения не сохранены — заказ не удалось сохранить: …» — при сохранении. Ошибки дублируются на страницу Логи.

Что с соседними сценариями.

  • Если Битрикс отказал в изменении одним из действий, модуль сразу перечитывает заказ и проходит сценарии ещё раз — уже без отказавшего. Остальные сценарии применяются и сохраняются как обычно, ошибка остаётся только у одного сценария.
  • Если Битрикс отказал в сохранении заказа, не сохраняется ничего: итог Ошибка у всех сценариев прохода.

Такие отказы модуль не повторяет: причина в данных заказа или в чужом обработчике, и повтор дал бы тот же результат. Исправьте причину — условие сценария или обработчик — и, если нужно, примените сценарий к заказу ещё раз из редактора.

Отличайте эти отказы от сбоев среды — недоступной базы данных, блокировок, падения PHP. Те модуль повторяет сам — см. Сбои базы данных и сервера.

Заказ записан частично​

Что произошло. Итог Ошибка с текстом «Заказ записан частично — часть изменений не сохранилась: …».

Почему. Битрикс сохранил сам заказ, но не смог сохранить связанные данные — отгрузку, оплату или скидки. Заказ при этом уже изменён, поэтому модуль задачу не повторяет: повтор применил бы действия второй раз.

Что делать. Откройте заказ в админке магазина и проверьте его вручную: что сохранилось, а что нет, — подскажет текст ошибки. Поправьте заказ вручную или примените к нему сценарий ещё раз. Если ошибка повторяется на многих заказах — пришлите её текст в поддержку.

Применён с предупреждением​

Итог Применён, а под строкой журнала — текст предупреждения. Заказ сохранён, повторять ничего не нужно, но стоит прочитать, что сообщил магазин.

«Изменения сохранены, но магазин выдал предупреждение: …» — Битрикс сохранил заказ, но отметил проблему. Частый пример — не хватило остатка товара для резерва. Изменения сценария на месте; проверьте остатки и резерв по заказу.

«Изменения сохранены, но обработчик, сработавший после сохранения заказа, завершился с ошибкой: …» — заказ сохранён, а затем упал обработчик события сохранения заказа из другого модуля или шаблона. Изменения сценария на месте; не выполнилось то, что делает чужой обработчик, — например, отправка письма или выгрузка во внешнюю систему. Передайте текст ошибки разработчику этого обработчика.