Служба доставки не показывается на оформлении - разбор причин
На оформлении нет нужной службы доставки или платёжной системы, хотя они настроены. Разбираем причины по убыванию частоты, начиная с ограничений.
С чего начать
Смотрим ограничения службы:
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);// нулевой вес отсекает службы с ограничением по весу// вес хранится в граммах, габариты - в миллиметрахОграничение по весу считает сумму позиций заказа. Товары без веса дают нулевую сумму, и служба с нижней границей веса пропадает из списка на пустом месте.
Причины
-
Служба не проходит своё ограничение примерно 35% случаев
ПризнакСлужба есть в настройках и активна, а на оформлении её нет ни при каких данных заказа.
ПроверкаСмотрим список ограничений службы и сверяем каждое с составом тестового заказа.
Что делатьПравим ограничение или данные заказа: служба показывается, только пройдя все ограничения сразу.
-
Нет свойства местоположения у типа плательщика примерно 25% случаев
ПризнакДоставка пропадает у одного типа плательщика и работает у другого.
ПроверкаСмотрим свойства заказа с типом местоположения и их привязку к типам плательщика.
Что делатьЗаводим свойство местоположения нужному типу плательщика: по одному на каждый тип.
-
У товаров не заданы вес и габариты примерно 20% случаев
ПризнакСлужбы с расчётом по весу исчезли после наполнения каталога через обмен.
ПроверкаСмотрим вес и габариты у товаров корзины и сумму веса заказа.
Что делатьЗаполняем вес и габариты при обмене: без них расчёт по весу не имеет смысла.
-
Служба или профиль неактивны примерно 12% случаев
ПризнакСлужба видна в списке настроек, но покупателю недоступна ни в одном сценарии.
ПроверкаСмотрим признак активности самой службы и её профилей, а также сайт, к которому она привязана.
Что делатьВключаем службу и нужные профили: неактивный профиль исключает и родительскую службу.
-
Отсеивает ограничение платёжной системы примерно 8% случаев
ПризнакПропала не доставка, а способ оплаты, причём только для части заказов.
ПроверкаСмотрим ограничения платёжной системы по валюте, сумме и типу плательщика.
Что делатьОставляем автоматически созданные ограничения по валюте: их удаление ломает оплату.
Частые вопросы
Почему доставка пропала после переноса сайта?
Обычно из-за местоположений: их идентификаторы на новом сайте другие, и ограничения ссылаются в пустоту. Ограничения по местоположению после переноса перенастраивают.
Можно ли удалить ограничение по валюте у платёжной системы?
Нет, автоматически созданные ограничения по валюте нужны для работы обработчика. Их удаление приводит к ошибкам при оплате.
Почему доставка считает нулевую стоимость?
Тариф профиля не настроен или расчёт зависит от веса, а вес нулевой. Проверяют и настройки профиля, и вес позиций заказа.
Штатные обработчики служб отправляют заказы в службу?
Нет, они считают стоимость. Заказ в личный кабинет перевозчика попадает отдельной интеграцией, а трек-номер вносят в отгрузку руками.
Как отладить своё ограничение?
Записывать в журнал входные значения и результат проверки. Ограничение вызывается на каждом расчёте, и по журналу видно, на каком именно заказе оно срабатывает.
Смежное
- Доставка и оплата - оглавление подтемы
- Служба доставки и платёжная система: настройка и свой обработчик - как настраивают службы
- Своё ограничение доставки и оплаты: класс, параметры, регистрация - как устроены ограничения
- Своя служба доставки с внешним API: регистрация, расчёт, статусы - свой расчёт стоимости
- Местоположения: импорт, свойство заказа, доставки и индекс - откуда берётся город заказа
- Единицы измерения, вес и габариты товара: где хранятся и на что влияют - вес позиций для расчёта
- Интернет-магазин на 1С-Битрикс - устройство магазина целиком
- Стоимость доставки считается неверно - служба видна, но сумма не та