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

Служба доставки не показывается на оформлении - разбор причин

На оформлении нет нужной службы доставки или платёжной системы, хотя они настроены. Разбираем причины по убыванию частоты, начиная с ограничений.

С чего начать

Смотрим ограничения службы:

use Bitrix\Sale\Delivery\Restrictions;
$list = Restrictions\Manager::getRestrictionsList($deliveryId);
print_r($list);
// ограничения по местоположению, весу, сумме и типу плательщика живут здесь
// служба не проходит хотя бы по одному - на оформлении её не будет

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

Проверяем свойство местоположения у типа плательщика:

$props = \Bitrix\Sale\Internals\OrderPropsTable::getList([
'select' => ['ID', 'CODE', 'TYPE', 'IS_LOCATION', 'PERSON_TYPE_ID'],
'filter' => ['=TYPE' => 'LOCATION'],
])->fetchAll();
print_r($props);
// без свойства с признаком местоположения расчёт доставки не заработает
// на каждый тип плательщика нужно ровно одно такое свойство

Ограничение по местоположению сравнивает город из свойств заказа. Если свойства с таким признаком у типа плательщика нет, сравнивать нечего, и служба с таким ограничением отсеивается всегда.

Смотрим вес и габариты позиций:

$rows = \Bitrix\Catalog\ProductTable::getList([
'select' => ['ID', 'WEIGHT', 'WIDTH', 'HEIGHT', 'LENGTH'],
'filter' => ['=ID' => $productId],
])->fetchAll();
print_r($rows);
// нулевой вес отсекает службы с ограничением по весу
// вес хранится в граммах, габариты - в миллиметрах

Ограничение по весу считает сумму позиций заказа. Товары без веса дают нулевую сумму, и служба с нижней границей веса пропадает из списка на пустом месте.

Причины

  1. Служба не проходит своё ограничение примерно 35% случаев

    ПризнакСлужба есть в настройках и активна, а на оформлении её нет ни при каких данных заказа.

    ПроверкаСмотрим список ограничений службы и сверяем каждое с составом тестового заказа.

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

  2. Нет свойства местоположения у типа плательщика примерно 25% случаев

    ПризнакДоставка пропадает у одного типа плательщика и работает у другого.

    ПроверкаСмотрим свойства заказа с типом местоположения и их привязку к типам плательщика.

    Что делатьЗаводим свойство местоположения нужному типу плательщика: по одному на каждый тип.

  3. У товаров не заданы вес и габариты примерно 20% случаев

    ПризнакСлужбы с расчётом по весу исчезли после наполнения каталога через обмен.

    ПроверкаСмотрим вес и габариты у товаров корзины и сумму веса заказа.

    Что делатьЗаполняем вес и габариты при обмене: без них расчёт по весу не имеет смысла.

  4. Служба или профиль неактивны примерно 12% случаев

    ПризнакСлужба видна в списке настроек, но покупателю недоступна ни в одном сценарии.

    ПроверкаСмотрим признак активности самой службы и её профилей, а также сайт, к которому она привязана.

    Что делатьВключаем службу и нужные профили: неактивный профиль исключает и родительскую службу.

  5. Отсеивает ограничение платёжной системы примерно 8% случаев

    ПризнакПропала не доставка, а способ оплаты, причём только для части заказов.

    ПроверкаСмотрим ограничения платёжной системы по валюте, сумме и типу плательщика.

    Что делатьОставляем автоматически созданные ограничения по валюте: их удаление ломает оплату.

Частые вопросы

Почему доставка пропала после переноса сайта?

Обычно из-за местоположений: их идентификаторы на новом сайте другие, и ограничения ссылаются в пустоту. Ограничения по местоположению после переноса перенастраивают.

Можно ли удалить ограничение по валюте у платёжной системы?

Нет, автоматически созданные ограничения по валюте нужны для работы обработчика. Их удаление приводит к ошибкам при оплате.

Почему доставка считает нулевую стоимость?

Тариф профиля не настроен или расчёт зависит от веса, а вес нулевой. Проверяют и настройки профиля, и вес позиций заказа.

Штатные обработчики служб отправляют заказы в службу?

Нет, они считают стоимость. Заказ в личный кабинет перевозчика попадает отдельной интеграцией, а трек-номер вносят в отгрузку руками.

Как отладить своё ограничение?

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

Смежное

Первоисточник