Налаштування розрахунку вартості доставки на 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування розрахунку вартості доставки на 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Настройка розрахунку вартості доставки на 1С-Bitrix

Розрахунок вартості доставки в Bitrix працює через модуль sale. Служба доставки — це PHP-клас, успадкований від \Bitrix\Sale\Delivery\Services\Base, що реалізує метод calculateConcrete(). Все, що робить Bitrix при оформленні замовлення — викликає цей метод та очікує об'єкт CalculationResult з ціною та строком.

Варіанти розрахунку

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

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

За місцезнаходженням (локаціями). Bitrix підтримує привязку тарифу до місцезнаходження (модуль 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 рублів. Bitrix підсумовує вагу всіх товарів у кошику через $shipment->getParcelCollection() і застосовує відповідну строку тарифу.

Нюанс: вага товару береться з поля WEIGHT елемента інфоблока каталога. Якщо вага не заповнена — розрахунок за вагою дає 0. Перед настройкою тарифів перевіряємо заповненість ваг у каталозі.

Безплатна доставка від суми

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

  1. Створити окрему службу «Безплатна доставка» і обмежити її мінімальною сумою замовлення в параметрі MIN_ORDER_PRICE.
  2. У calculateConcrete() користувацької служби перевіряти суму замовлення та повертати 0 при перевищенні порогу.

Перший варіант — через стандартний UI, другий — якщо потрібна додаткова логіка (різні пороги для різних регіонів, виключення певних категорій товарів і т.д.).

Розрахунок з урахуванням габаритів (об'ємна вага)

Логістичні компанії часто рахують за об'ємною вагою: (довжина × ширина × висота) / 5000 (коефіцієнт залежить від перевозника). Стандартний механізм Bitrix об'ємну вагу не враховує — додаємо в calculateConcrete():

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

Розміри беремо з властивостей товара (b_iblock_element_prop) або з полів товарного пропозиції.

Відладка розрахунку

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

Частісті причини неправильного розрахунку:

  • Вага товарів не заповнена в каталозі
  • Регіон покупця не визначається (властивість замовлення LOCATION не заповнена)
  • Кілька служб доставки з перекриваючимися тарифними зонами