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

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

webictus
10 установок
от 99 ₽599 ₽ год / 699 ₽ навсегда

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

Плагин razmerup («Доставка — расчёт размеров и веса упаковки») подключается к событию Shop-Script

shipping_package и выступает выбранным в настройках магазина провайдером расчёта габаритов посылки .

По составу заказа (корзина / заказ) он вычисляет одну усреднённую посылку:

длину, ширину, высоту и вес в базовых единицах измерения магазина (длина и вес задаются в настройках Shop-Script, обычно метры и килограммы).

Сервисы доставки (СДЭК, Boxberry, Почта России, DPD, Яндекс Доставка и др.) в API, как правило, требуют габариты отправления и вес.

Система не может «сложить» товары в реальную коробку; плагин даёт согласованные числа для тарификаторов,

в том числе с учётом объёмного веса и лимитов по сторонам.

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

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

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

Не вводить габариты посылки вручную при каждом пересчёте доставки.

Подставлять размеры и вес, если в карточках не заполнены характеристики (дефолты и правила по категориям).

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

Выбрать стратегию укладки под ассортимент (плоские товары, длинномеры, смешанная корзина).

Подключение

В бэкенде Shop-Script в настройках доставки / габаритов отправления укажите провайдер расчёта посылки —

этот плагин ( razmerup ). Пока провайдер не выбран, габариты могут считать плагины доставки или оставаться пустыми.

Вес и три измерения длины товаров подтягиваются из характеристик, заданных в настройках магазина для доставки,

через shopShipping::extendItems до вызова расчёта.

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

Подстановка веса по умолчанию для строк без веса (если настроено).

Отбор строк для габаритов (опционально без услуг ).

Дополнение Д×Ш×В: данные карточки → правило по категории → глобальный дефолт .

Суммирование веса заказа по всем строкам (после шага 1).

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

Запас по осям (упаковка).

Округление габаритов вверх по шагу.

Min / max по каждой стороне.

Опционально: длина ≥ ширина ≥ высота .

Опционально: объёмный вес — вес = max(фактический вес товаров, объёмный).

Вес тары (после сравнения с объёмным весом).

Округление веса вверх (если задан шаг).

Событие razmerup_package_result для других плагинов.

Финальное округление до 3 знаков после запятой.

Опционально: лог 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 .