Настройка расчета стоимости доставки на 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка расчета стоимости доставки на 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка расчёта стоимости доставки на 1С-Битрикс

Расчёт стоимости доставки в Битрикс работает через модуль sale. Служба доставки — это PHP-класс, унаследованный от \Bitrix\Sale\Delivery\Services\Base, который реализует метод calculateConcrete(). Всё, что делает Битрикс при оформлении заказа — вызывает этот метод и ожидает объект CalculationResult с ценой и сроком.

Варианты расчёта

Фиксированная цена. Настраивается в административной части без кода: в свойствах службы доставки указывается фиксированная сумма. Подходит для «доставка 300 рублей по Москве».

По тарифным сеткам. Цена зависит от веса и/или суммы заказа. В административной панели: Магазин → Службы доставки → таблица тарифов. Таблица хранится в b_sale_delivery_zone_rate.

По местоположению (локациям). Битрикс поддерживает привязку тарифа к местоположению (модуль sale.location). В b_sale_location хранится дерево регионов. Тариф привязывается к узлу дерева — автоматически применяется ко всем дочерним населённым пунктам.

Расчёт через внешний API. Запрос к API службы доставки в реальном времени. СДЭК, Boxberry, DHL и другие — каждый имеет свой обработчик. Описание конкретных интеграций — в отдельных статьях.

Ключевые настройки в административной части

В разделе Интернет-магазин → Службы доставки для каждой службы доступны:

Параметр Где в базе Что делает
Режим расчёта (фиксированный/по весу/по цене) b_sale_delivery_service Переключает алгоритм calculateConcrete
Тарифные ставки b_sale_delivery_zone_rate Таблица «вес/сумма → стоимость»
Ограничения веса и суммы b_sale_delivery_service_params При превышении служба не отображается
Привязка к локациям b_sale_delivery_service_lang Для каких регионов доступна
Наценка и скидка b_sale_delivery_service_params Процент или сумма поверх расчёта

Расчёт по весу

Самый распространённый сценарий. В модуле настраивается таблица: вес до X кг → стоимость Y рублей. Битрикс суммирует вес всех товаров в корзине через $shipment->getParcelCollection() и применяет подходящую строку тарифа.

Нюанс: вес товара берётся из поля WEIGHT элемента инфоблока каталога. Если вес не заполнен — расчёт по весу даёт 0. Перед настройкой тарифов проверяем заполненность весов в каталоге.

Бесплатная доставка от суммы

Реализуется двумя способами:

  1. Создать отдельную службу «Бесплатная доставка» и ограничить её минимальной суммой заказа в параметре MIN_ORDER_PRICE.
  2. В calculateConcrete() кастомной службы проверять сумму заказа и возвращать 0 при превышении порога.

Первый вариант — через стандартный UI, второй — если нужна дополнительная логика (разные пороги для разных регионов, исключение определённых категорий товаров и т.д.).

Расчёт с учётом габаритов (объёмный вес)

Логистические компании часто считают по объёмному весу: (длина × ширина × высота) / 5000 (коэффициент зависит от перевозчика). Стандартный механизм Битрикс объёмный вес не учитывает — добавляем в calculateConcrete():

$dimensionWeight = ($length * $width * $height) / 5000;
$chargeableWeight = max($actualWeightKg, $dimensionWeight);

Размеры берём из свойств товара (b_iblock_element_prop) или из полей товарного предложения.

Отладка расчёта

При неверной стоимости доставки удобно включить вывод отладочной информации: в calculateConcrete() логируем входящие параметры (вес, сумма, регион) в файл или AddMessage2Log(). Смотрим, какие данные реально приходят в метод.

Частые причины неверного расчёта:

  • Вес товаров не заполнен в каталоге
  • Регион покупателя не определяется (свойство заказа LOCATION не заполнено)
  • Несколько служб доставки с перекрывающимися тарифными зонами