Доставка - расчёт размеров и вес упаковки

Доставка - расчёт размеров и вес упаковки для Shop-Script

Общие габариты отправления по стороне и объёму

Отзывов пока нет

7 дней бесплатно

Чтобы попробовать бесплатно, откройте плагин в своем «Инсталлере». Бесплатный период доступен только в облаке Webasyst.

Ваш отзыв
Установок
< 10
Разработчик
Поддержка

Назначение плагина

Плагин razmerup («Доставка — расчёт размеров и веса упаковки») подключается к событию Shop-Script shipping_package и выступает выбранным в настройках магазина провайдером расчёта габаритов посылки. По составу заказа (корзина / заказ) он вычисляет одну усреднённую посылку: длину, ширину, высоту и вес в базовых единицах измерения магазина (длина и вес задаются в настройках Shop-Script, обычно метры и килограммы).

Сервисы доставки (СДЭК, Boxberry, Почта России, DPD, Яндекс Доставка и др.) в API, как правило, требуют габариты отправления и вес. Система не может «сложить» товары в реальную коробку; плагин даёт согласованные числа для тарификаторов, в том числе с учётом объёмного веса и лимитов по сторонам.

Плагин считает приблизительные габариты. Реальная укладка может отличаться. Прочтите описание режимов и порядка расчёта, чтобы корректно настроить запасы и лимиты.

Зачем он нужен

  • Не вводить габариты посылки вручную при каждом пересчёте доставки.
  • Подставлять размеры и вес, если в карточках не заполнены характеристики (дефолты и правила по категориям).
  • Согласовать расчёт с практикой перевозчиков: округление вверх, min/max по осям, объёмный вес (часто делитель 5000 см³/кг).
  • Выбрать стратегию укладки под ассортимент (плоские товары, длинномеры, смешанная корзина).

Подключение

В бэкенде Shop-Script в настройках доставки / габаритов отправления укажите провайдер расчёта посылки — этот плагин (razmerup). Пока провайдер не выбран, габариты могут считать плагины доставки или оставаться пустыми.

Вес и три измерения длины товаров подтягиваются из характеристик, заданных в настройках магазина для доставки, через shopShipping::extendItems до вызова расчёта.

Порядок расчёта (конвейер)

  1. Подстановка веса по умолчанию для строк без веса (если настроено).
  2. Отбор строк для габаритов (опционально без услуг).
  3. Дополнение Д×Ш×В: данные карточки → правило по категории → глобальный дефолт.
  4. Суммирование веса заказа по всем строкам (после шага 1).
  5. Расчёт габаритов выбранным режимом укладки или fallback, если нет ни одной позиции с размерами.
  6. Запас по осям (упаковка).
  7. Округление габаритов вверх по шагу.
  8. Min / max по каждой стороне.
  9. Опционально: длина ≥ ширина ≥ высота.
  10. Опционально: объёмный вес — вес = max(фактический вес товаров, объёмный).
  11. Вес тары (после сравнения с объёмным весом).
  12. Округление веса вверх (если задан шаг).
  13. Событие razmerup_package_result для других плагинов.
  14. Финальное округление до 3 знаков после запятой.
  15. Опционально: лог wa-log/shop/razmerup.log.

Режимы расчёта габаритов

Объём → эквивалентный куб (и длинная сторона)

Большинство сервисов требуют указать габариты общего отправления и по ним считают объём и объёмный вес, но не принимают «просто объём». В этом режиме объём заказа преобразуется в габариты.

Если в расчёте габаритов участвует ровно одна единица товара (суммарное количество по строкам = 1), результат совпадает с размерами этой позиции (после подстановки дефолтов).

Если ровно две единицы (два разных товара или один товар в количестве 2): у двух параллелепипедов сортируются три ребра, складываются два наименьших, из средних и больших берутся максимумы. Пример: товары 1×2×3 м и 1,2×1,3×7 м дадут упаковку порядка 2,2×2×7 м (как в классическом описании плагина).

Если три и более единиц: считается суммарный объём всех позиций (Д×Ш×В×количество). Из него получается куб с равными рёбрами (корень третьей степени из объёма). Например, три товара 1×1×1 м (3 м³) дают куб со стороной около 1,44 м — суммарный объём совпадает, но физически три куба в такой коробке не упаковать; это осознанный компромисс для API.

Далее плагин сравнивает сторону куба с самой длинной стороной среди всех товаров. Если длинное ребро товара больше стороны куба, строится параллелепипед: одна сторона равна этому максимальному ребру, две остальные подбираются так, чтобы объём снова совпадал с суммарным объёмом товаров.

Стопка по короткой стороне

Для каждой строки три размера сортируются по возрастанию. По всем строкам: сумма (минимальное ребро × количество); среднее и максимальное рёбра — это максимумы по соответствующим рёбрам среди строк. Удобно для плоских или вытянутых в одну ось товаров.

Попарная укладка (N коробок)

Каждая единица товара (число коробок = ceil от количества) — отдельный параллелепипед. Попарное объединение той же логикой, что для двух товаров; пары с меньшим объёмом обрабатываются раньше. Это эвристика, не оптимальный 3D bin packing.

Справочник настроек

НастройкаНазначение
Режим расчёта габаритовОдин из трёх алгоритмов выше для нескольких единиц.
Размеры одного товара по умолчаниюПодстановка Д×Ш×В, если в карточке неполный набор и нет правила по категории. Все нули — отключено.
Таблица по категорииСтроки: id_категории;длина;ширина;высота (разделители также |, запятая, таб). # — комментарий. Основная категория товара из shop_product.category_id.
Единица в таблице категорийЕдиница длины для чисел в таблице (см, м и т.д.).
Наследовать от родителяПодъём по дереву категорий, если для своей категории строки нет.
Габариты при отсутствии любых размеровЕсли после подстановок нет позиций с габаритами; иначе — полный глобальный дефолт, если задан.
Вес единицы по умолчанию (кг)Для строк без веса; перевод в базовую единицу веса магазина.
Учитывать объёмный весПосле габаритов с запасом: max(фактический вес товаров, объёмный). Тара — после.
Делитель объёмного весаСм³ на 1 кг (часто 5000). Формула: (Д×Ш×В в см³) / делитель → кг.
Добавить к результатуЗапас упаковки по каждой оси независимо; 0 по оси не меняет ось.
Минимум / максимум по сторонеПосле округления габаритов. 0 — нет лимита на оси. Если max < min, max поднимается до min.
Округление габаритов вверхШаг в базовых единицах длины (например 0,01 м ≈ до сантиметра).
Упорядочить стороныlength ≥ width ≥ height для единообразия с API доставок.
Не учитывать услуги в габаритахУслуги не входят в Д×Ш×В; их вес в сумме заказа сохраняется.
Вес упаковки (тары)Ввод в кг, перевод в базовую единицу; после объёмного веса.
Округление веса вверхШаг в кг, затем в базовую единицу; 0 — не округлять.
Писать расчёт в логwa-log/shop/razmerup.log — вход, список с подставленными размерами, итог (JSON).

Ограничения

  • Shop-Script передаёт в доставку одну посылку (total_*). Несколько мест одним вызовом не поддерживаются.
  • Нет полноценного 3D упаковщика; результат — оценка для тарифов.
  • В режиме попарной укладки дробное количество даёт целое число «коробок» через ceil.

webictus

Все продукты этого разработчика