[QUOTE]
Василий Дудник написал:
Помимо ограничений служб доставки по платежным системам могут быть ограничения по весу отгрузки, по размерам и т.п. вплоть до кастомных.
Лучше воспользоваться методом
\Bitrix\Sale\Delivery\Services\Manager::getRestrictedList(Shipment $shipment)
вернёт массив полей активных служб доставок подходящих по ограничениям
либо
\Bitrix\Sale\Delivery\Services\Manager::getRestrictedObjectsList(Shipment $shipment),
который вернёт сразу массив готовых объектов служб доставок с учётом всех ограничений.[/QUOTE]
Методы возвращают доставки только с ограничением по LOCATION. Системное ограничение по весу и кастомное по объему - не срабатывают.
Что делать?
код такой:
[CODE] $order = \Bitrix\Sale\Order::create(SITE_ID); // можно также указать $userId, $currency
$order->setPersonTypeId($arPOSTUP['PERSON_TYPE']); //тип лица
CSaleBasket::DeleteAll(CSaleBasket::GetBasketUserID());
// товары:
$basket = \Bitrix\Sale\Basket::create(SITE_ID);
foreach($_REQUEST['product_size_info'] as $arItem) {
$arItem = explode(',',$arItem);
$item = $basket->createItem('catalog', $arItem[0]);
$item->setFields(array(
'QUANTITY' => $arItem[1],
'CURRENCY' => 'RUB',
'LID' => SITE_ID,
'PRODUCT_PROVIDER_CLASS' => '\CCatalogProductProvider',
));
}
$order->setBasket($basket);
mDump($order->getBasket()->getWeight());
$propertyCollection = $order->getPropertyCollection();
foreach ($propertyCollection as $property)
{
if ($property->isUtil())
continue;
if($property->getField("CODE") == 'LOCATION') {
$property->setField("VALUE", $arCity2Location[$arPOSTUP['REGION']]); // меняем LOCATION для пользователя для получения списка доставок с ограничениями по региону
}
}
$shipmentCollection = $order->getShipmentCollection();
$shipment = $shipmentCollection->createItem();
$deliveryServicesAll = \Bitrix\Sale\Delivery\Services\Manager::getRestrictedObjectsList($shipment);
$deliveryServicesArr = \Bitrix\Sale\Delivery\Services\Manager::getRestrictedList($shipment,\Bitrix\Sale\Services\Base\RestrictionManager::MODE_CLIENT);
//getRestrictedList
foreach($deliveryServicesArr as $deliveryService) {
mDump($deliveryService['NAME']);
}
foreach($deliveryServicesAll as $deliveryService) {
//$values[] = \Bitrix\Sale\Delivery\Services\Manager::getById($deliveryService->getID());
$values[] = \Bitrix\Sale\Delivery\Services\Manager::getById($deliveryService->getID())['NAME'];
}
mDump($values); //getRestrictedObjectsList
[/CODE]