calculateDelivery
\Bitrix\Sale\Shipment::calculateDelivery();
Метод рассчитывает стоимость доставки для отгрузки и возвращает результат расчета. Метод не записывает рассчитанную стоимость в поля отгрузки. Нестатический метод.
Без параметров.
Как работает
При вызове для системной отгрузки calculateDelivery() выбрасывает исключение \Bitrix\Main\NotSupportedException.
Если служба доставки не выбрана и getDeliveryId() возвращает 0, метод возвращает новый объект \Bitrix\Sale\Delivery\CalculationResult без вызова службы доставки.
Если служба доставки выбрана, метод передает текущую отгрузку в \Bitrix\Sale\Delivery\Services\Manager::calculateDeliveryPrice($this) и возвращает результат расчета.
Возвращаемое значение
Возвращает объект \Bitrix\Sale\Delivery\CalculationResult.
Стоимость доставки с учетом дополнительных услуг можно получить через $result->getPrice(). Метод getPrice() складывает стоимость доставки и стоимость дополнительных услуг.
Пример
/** @var \Bitrix\Sale\Shipment $shipment */
try
{
$result = $shipment->calculateDelivery();
}
catch (\Bitrix\Main\NotSupportedException $exception)
{
throw new \RuntimeException('Нельзя рассчитать доставку для системной отгрузки');
}
if (!$result->isSuccess())
{
throw new \RuntimeException(implode('; ', $result->getErrorMessages()));
}
if ($shipment->getDeliveryId() === 0)
{
throw new \RuntimeException('Служба доставки не выбрана');
}
$deliveryPrice = $result->getPrice();