Стоимость доставки по весу и габаритам в 1С-Битрикс собирается из двух источников: данных о товаре (вес и размеры в карточке) и логики службы доставки (обработчик расчёта плюс ограничения). Если хотя бы одно звено настроено небрежно — веса нет в свойствах, единицы измерения перепутаны или ограничение не привязано к профилю — расчёт либо занижается, либо вовсе отдаёт нулевую стоимость. Разберём всю цепочку от свойств товара до отгрузки в корзине.
Как Битрикс считает доставку по весу и габаритам
В 1С-Битрикс расчёт доставки — это работа модуля Интернет-магазин (sale) поверх данных Торгового каталога (catalog). Схема всегда одна и та же.
- Из корзины собирается отгрузка (
Bitrix\Sale\Shipment) — набор товаров с их количеством, весом и габаритами; - Служба доставки проверяет свои ограничения (по весу, размерам, местоположению, сумме) — подходит ли она под эту отгрузку;
- Если подходит, обработчик расчёта считает стоимость по своим правилам и возвращает цену в корзину.
Вес и габариты участвуют в двух этапах сразу: сначала как условие применимости (ограничения отсекают неподходящие службы), затем как переменные тарифа (обработчик считает цену от массы или объёма). Поэтому настройка всегда идёт с двух сторон — со стороны товара и со стороны службы.
Вес товара: свойство и единицы измерения
Вес хранится в поле WEIGHT карточки товара (вкладка Торговый каталог). Важнейший нюанс, на котором спотыкаются чаще всего: внутри Битрикс вес хранится в граммах, независимо от того, какую единицу вы видите в форме.
Единица отображения задаётся в настройках модуля Торгового каталога (Настройки → Настройки продукта → Настройки модулей → Торговый каталог): можно выбрать граммы или килограммы. Но в базе и при расчёте доставки всё равно фигурируют граммы, а отгрузка отдаёт вес методом Shipment::getWeight() тоже в граммах.
- Если вес приходит из 1С по обмену
CommerceML— проверьте, что учётная система выгружает его в тех же единицах, иначе тариф уедет в 1000 раз; - Для торговых предложений (SKU) вес задаётся у каждого предложения, а не у родительского товара;
- Товары без веса участвуют в отгрузке с нулевой массой — и «проваливаются» мимо весовых ограничений.
Габариты товара и объёмный вес
Размеры задаются в карточке товара тремя полями — длина, ширина, высота (LENGTH, WIDTH, HEIGHT) — и хранятся в миллиметрах. Габариты нужны для двух вещей: ограничений по размеру (посылка не должна превышать лимиты службы) и расчёта объёмного веса.
Объёмный вес — это приведённая масса, которую транспортные компании берут за основу, когда груз лёгкий, но объёмный. Классическая формула:
| Параметр | Значение |
|---|---|
| Формула | (Д × Ш × В в см) / коэффициент |
| Коэффициент | обычно 5000 (реже 4000/6000) |
| Что берётся в тариф | больший из физического и объёмного веса |
Штатный «Настраиваемый» обработчик Битрикс сам по себе объёмный вес не вычисляет — эту логику приносят обработчики конкретных служб (СДЭК, Boxberry, DPD и т. д.), которые получают габариты отгрузки и считают тариф на своей стороне через API. Поэтому для курьерских и ПВЗ-служб корректные размеры в каталоге так же критичны, как и вес.
Обработчик «Настраиваемая доставка»
Базовый инструмент для весовых тарифов без внешних API — обработчик «Настраиваемая доставка» (Bitrix\Sale\Delivery\Services\Configurable). Он создаётся в разделе Магазин → Настройки → Службы доставки и позволяет собрать дерево профилей с собственными правилами расчёта.
Стоимость формируется из наценок (правил расчёта), которые можно поставить в зависимость от параметров отгрузки:
- Фиксированная цена — базовая ставка за отправление;
- Наценка по весу — цена за единицу массы или ступенчатые пороги (до 1 кг, до 5 кг, свыше);
- Наценка от суммы заказа — процент или фикс;
- Комбинации — базовая ставка плюс доплата за перевес.
Весовые «ступени» удобнее всего реализовывать несколькими профилями одной службы, где каждый профиль ограничен своим диапазоном веса, а внутри задана фиксированная цена. Битрикс сам выберет профиль, чьи ограничения совпали с отгрузкой.
Ограничения по весу и габаритам
Ограничения (restrictions) — это условия, при которых служба или профиль вообще показываются покупателю. Они настраиваются на вкладке Ограничения службы доставки и работают как фильтр до расчёта цены.
| Ограничение | Класс | Что задаёт |
|---|---|---|
| По весу | ByWeight | Мин./макс. масса отгрузки в граммах |
| По габаритам | ByDimensions | Предельные длина/ширина/высота |
| По макс. размеру | ByMaxSize | Ограничение по сумме сторон |
Именно через связку ограничений строятся весовые тарифные «вилки»: профиль «до 1 кг» получает ограничение ByWeight с максимумом 1000, профиль «1–5 кг» — от 1000 до 5000, и так далее. Если отгрузка выходит за все пороги, служба просто не предлагается — это нормальное поведение, но покупателю нужно оставить хотя бы один «запасной» профиль без верхней границы.
Отгрузки и суммирование в корзине
Когда покупатель на шаге оформления выбирает доставку, Битрикс формирует объект отгрузки и опрашивает все доступные службы. Вес отгрузки — это сумма WEIGHT × количество по всем товарам корзины, а габариты собираются из размеров позиций.
Порядок расчёта такой:
- Корзина фиксирует товары, их количество, вес и размеры;
- Создаётся отгрузка, вызывается
Shipment::getWeight(); - Каждая служба проверяет ограничения по весу и габаритам;
- Прошедшие фильтр службы считают стоимость и возвращают её в компонент оформления;
- Покупатель видит список доступных вариантов с ценами.
Один заказ можно делить на несколько отгрузок — например, часть самовывозом, часть курьером. Вес и габариты в этом случае считаются по каждой отгрузке отдельно, что важно для крупногабаритных сборных заказов.
Проверка и типичные ошибки
Перед запуском весовых и габаритных тарифов прогоните короткий чек-лист — он снимает 90% жалоб на «неправильную доставку».
- Заполнены ли вес и габариты у всех товаров и торговых предложений, а не только у части каталога;
- Совпадает ли единица измерения веса в настройках модуля с реальными данными (граммы против килограммов);
- Привязаны ли ограничения
ByWeightиByDimensionsк нужным профилям, а не к службе целиком; - Есть ли профиль без верхней границы для тяжёлых заказов, чтобы доставка не «исчезала»;
- Проверен ли расчёт на реальной корзине — тяжёлой, лёгкой объёмной и граничной по весу.
Отдельно проверяйте товары, приходящие из 1С: если в учётной системе вес пуст или в других единицах, витрина унаследует ошибку молча. Тестировать нужно не карточку товара, а шаг выбора доставки в оформлении заказа — там видно итоговый вес отгрузки и реально применённый тариф.
Итог
Расчёт доставки по весу и габаритам в 1С-Битрикс держится на трёх опорах: корректные свойства товара (вес в граммах, размеры в миллиметрах), обработчик «Настраиваемая доставка» с весовыми профилями и ограничения ByWeight/ByDimensions, которые фильтруют службы под конкретную отгрузку. Объёмный вес для курьерских служб и ПВЗ считают их собственные обработчики по габаритам из каталога, поэтому размеры нужны так же, как и масса.
Когда каталог большой, веса и габариты приходят из 1С, а тарифов несколько по разным службам, настройка расчёта превращается в отдельную инженерную задачу с проверкой каждого граничного случая. Мы в B2Bsite настраиваем эту цепочку целиком — от свойств товара и обмена с 1С до профилей доставки и интеграций с транспортными компаниями по API — так, чтобы покупатель видел точную стоимость, а не ноль или заниженный тариф.
Частые вопросы
В каких единицах Битрикс хранит вес товара?
Внутри системы вес всегда хранится в граммах, независимо от единицы, выбранной для отображения в настройках Торгового каталога. Метод Shipment::getWeight() тоже возвращает граммы, поэтому данные из 1С должны приходить в тех же единицах.
Где задаются габариты товара для расчёта доставки?
В карточке товара на вкладке Торговый каталог полями длина, ширина и высота, которые хранятся в миллиметрах. Для торговых предложений размеры указываются у каждого предложения отдельно.
Считает ли Битрикс объёмный вес сам?
Штатный обработчик «Настраиваемая доставка» объёмный вес не вычисляет. Его считают обработчики конкретных служб (СДЭК, Boxberry, DPD) на своей стороне по габаритам отгрузки, поэтому корректные размеры в каталоге обязательны.
Как сделать тариф со ступенями по весу?
Проще всего создать несколько профилей одной службы и на каждый повесить ограничение ByWeight со своим диапазоном массы, а внутри задать фиксированную цену. Битрикс выберет профиль, чьи ограничения совпали с отгрузкой.
Почему доставка показывает нулевую стоимость?
Чаще всего у товаров не заполнен вес или ограничение по весу привязано неверно, из-за чего тариф считает посылку почти невесомой. Диагностику начинают со свойств товара и настройки ограничений профиля.
На каком уровне работают ограничения по весу и габаритам?
Ограничения проверяются для всей отгрузки целиком, а не для отдельного товара. Заказ из нескольких лёгких позиций может суммарно превысить лимит, и это ожидаемое поведение.
Что делать, чтобы доставка не исчезала на тяжёлых заказах?
Нужно оставить хотя бы один профиль без верхней границы веса или с достаточно большим максимумом. Иначе при превышении всех порогов служба перестанет предлагаться покупателю.
Как правильно проверить весовой тариф?
Тестируйте не карточку товара, а шаг выбора доставки в оформлении заказа на реальных корзинах: тяжёлой, лёгкой объёмной и граничной по весу. Там виден итоговый вес отгрузки и фактически применённый тариф.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.